Skip to content

[AI优化] 规则路由权重动态调整 - 基于反馈的自适应路由 #95

@hrygo

Description

@hrygo

问题描述

当前规则路由器使用静态优先级:

// ai/router/service.go
type RoutingRule struct {
    Pattern   *regexp.Regexp
    AgentType AgentType
    Intent    Intent
    Priority  int  // 静态优先级,无法根据效果调整
}

问题:

  • 规则效果无法量化
  • 无法根据实际使用情况调整优先级
  • 新增规则需要人工调整所有相关规则的优先级
  • 某些规则可能过于宽泛导致误匹配

建议方案

实现基于反馈的动态权重调整:

type AdaptiveRuleMatcher struct {
    rules       []RoutingRule
    weights     map[int]float64    // 规则动态权重
    hitCounters map[int]int64      // 规则命中计数
    successRate map[int]float64    // 规则成功率
    mu          sync.RWMutex
}

func (m *AdaptiveRuleMatcher) Match(input string) (*RoutingDecision, int) {
    m.mu.RLock()
    defer m.mu.RUnlock()
    
    // 按动态权重排序
    sortedRules := m.sortByWeight()
    
    for _, rule := range sortedRules {
        if rule.Pattern.MatchString(input) {
            return &RoutingDecision{
                AgentType:  rule.AgentType,
                Intent:     rule.Intent,
                Confidence: float32(m.weights[rule.ID]),
            }, rule.ID
        }
    }
    return nil, -1
}

func (m *AdaptiveRuleMatcher) RecordFeedback(ruleID int, wasCorrect bool) {
    m.mu.Lock()
    defer m.mu.Unlock()
    
    m.hitCounters[ruleID]++
    
    if wasCorrect {
        // 提高规则权重 (有上限)
        m.weights[ruleID] = min(1.0, m.weights[ruleID] + 0.01)
    } else {
        // 降低规则权重 (惩罚更大以快速收敛)
        m.weights[ruleID] = max(0.1, m.weights[ruleID] - 0.05)
    }
    
    // 更新成功率
    m.updateSuccessRate(ruleID, wasCorrect)
}

反馈收集方式

  1. 隐式反馈: 用户不修正 → 正确;用户追问/重新表述 → 可能错误
  2. 显式反馈: 提供 "这不是我想要的" 按钮

文件变更

  • ai/router/rules.go - 添加动态权重逻辑
  • ai/router/rules_test.go - 单元测试
  • ai/router/service.go - 集成反馈机制
  • ai/router/storage.go - 权重持久化

验收标准

  • 权重持久化存储 (数据库或文件)
  • 提供规则效果统计 API
  • 支持手动重置权重
  • 权重变化日志记录
  • 不影响路由性能 (<5ms)

预估工时

2-3 天

相关 Issue

  • 依赖: 无
  • 后续: #XX (ML 意图分类器)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions