feat(harness): 低分自动纠偏 —— poor 触发评语驱动重生成,取更优者(测温计→恒温器)
评测闭环延伸出自愈:当自动评测判定输出为 poor(综合<0.5),dispatcher 在热路径外 自动用「原问题+初版回答+评审短板(flags/评语)」(有来源则连来源一并喂回、要求严格基于来源) 让模型重写,重评后仅当新分严格更高才采纳(绝不退步);采纳的修订版落会话历史, 保证多轮上下文用的是好答案而非被判低分的初版。评测终值带 corrected 标记经 NATS→网关落库。 - maxRefineRounds=1:poor 稀少,1 轮重写+重评够用,防成本失控 - canRefine 门控:模型就绪且熔断未开才纠偏,避免后端抖时雪上加霜 - 单 goroutine 串 评测→纠偏→落历史,杜绝原两 goroutine 对答案版本的竞态 - 契约 EvalEvent / Eval 表 / upsert / GET /tasks/:id/eval 均加 corrected 字段 - refine_test.go:采纳更优 / 不退步 / 非低分不触发 三测;live 验证好答案不误触发 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -26,15 +26,16 @@ type Task struct {
|
||||
// Eval 是一次任务的自动化评测结果(dispatcher 评完经 NATS 回写,每任务一条,按 task_id upsert)。
|
||||
type Eval struct {
|
||||
BaseModel
|
||||
TaskID string `gorm:"uniqueIndex;size:64"`
|
||||
Overall float64 // 综合分 [0,1]
|
||||
Rule float64 // 规则分
|
||||
LLM float64 // LLM 质量分
|
||||
Faithful float64 // RAG 忠实度分(0=无来源未评)
|
||||
Level string `gorm:"size:16"` // ok / warn / poor
|
||||
Flags string `gorm:"type:text"` // 命中问题(JSON 数组字符串)
|
||||
Reason string `gorm:"type:text"` // 评语
|
||||
Sources int // 检索来源数
|
||||
TaskID string `gorm:"uniqueIndex;size:64"`
|
||||
Overall float64 // 综合分 [0,1]
|
||||
Rule float64 // 规则分
|
||||
LLM float64 // LLM 质量分
|
||||
Faithful float64 // RAG 忠实度分(0=无来源未评)
|
||||
Level string `gorm:"size:16"` // ok / warn / poor
|
||||
Flags string `gorm:"type:text"` // 命中问题(JSON 数组字符串)
|
||||
Reason string `gorm:"type:text"` // 评语
|
||||
Sources int // 检索来源数
|
||||
Corrected bool // 是否经低分自动纠偏重生成后采纳(恒温器闭环)
|
||||
}
|
||||
|
||||
func (Eval) TableName() string { return "sundynix_eval" }
|
||||
|
||||
@@ -153,7 +153,7 @@ func (p *Postgres) SaveEval(ctx context.Context, e *Eval) error {
|
||||
return p.db.WithContext(ctx).Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "task_id"}},
|
||||
DoUpdates: clause.AssignmentColumns([]string{
|
||||
"overall", "rule", "llm", "faithful", "level", "flags", "reason", "sources", "updated_at",
|
||||
"overall", "rule", "llm", "faithful", "level", "flags", "reason", "sources", "corrected", "updated_at",
|
||||
}),
|
||||
}).Create(e).Error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user