问题描述
当前规则路由器使用静态优先级:
// 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)
}
反馈收集方式
- 隐式反馈: 用户不修正 → 正确;用户追问/重新表述 → 可能错误
- 显式反馈: 提供 "这不是我想要的" 按钮
文件变更
ai/router/rules.go - 添加动态权重逻辑
ai/router/rules_test.go - 单元测试
ai/router/service.go - 集成反馈机制
ai/router/storage.go - 权重持久化
验收标准
预估工时
2-3 天
相关 Issue
问题描述
当前规则路由器使用静态优先级:
问题:
建议方案
实现基于反馈的动态权重调整:
反馈收集方式
文件变更
ai/router/rules.go- 添加动态权重逻辑ai/router/rules_test.go- 单元测试ai/router/service.go- 集成反馈机制ai/router/storage.go- 权重持久化验收标准
预估工时
2-3 天
相关 Issue