2.3 KiB
2.3 KiB
Functional Spec: 置信度评分与用户反馈机制
REQ-1:置信度 LLM 自评
- Agent 对话(executeChat / executeChatComplex)成功后,异步调用 EvaluationService。
- EvaluationService 构造 Prompt,调用 ChatModel,要求输出纯 JSON:
{"confidence": 0-100, "reasoning": "...", "source": "llm"}。 - 若 JSON 解析成功,写入
DiagnosisSession.selfEvaluation。 - 若调用失败或解析失败,转入规则兜底(REQ-2)。
- 验收:对话结束后数秒内,DB
diagnosis_session.self_evaluation非 null,且source字段存在。
REQ-2:置信度规则兜底
- 触发条件:LLM 自评失败(任何异常)。
- 规则:基础分 60 + toolCallCount×5(上限+20)+ (stepCount<=3 ? +10 : 0),status=FAILED 则直接 0。
- 结果写入
selfEvaluation,含"source": "rule"。 - 验收:LLM 自评失败时,self_evaluation 仍有值(非 null),且 source=rule。
REQ-3:反馈接收 API
- 接口:
POST /api/feedback - 入参:
{ "sessionId": "xxx", "feedback": "useful" | "not_useful" } - 出参:
{ "success": true/false, "message": "...", "caseId": "uuid 或 null" } - 校验:sessionId 不能为空;feedback 只能是 useful 或 not_useful,否则返回 400。
- 验收:接口返回 200,DB 对应行 feedback 字段有值。
REQ-4:useful → 案例沉淀
- 触发条件:feedback = "useful"。
- 操作:在 case_library 插入一条记录,caseId=UUID,sourceType=AUTO,faultCategory=GENERAL, title=query 前 100 字,rootCause/solution 来自最后一步 agent_step.thought。
- 响应中返回 caseId。
- 验收:提交 useful 后,case_library 表新增一行,diagnosis_id = sessionId。
REQ-5:not_useful → BAD_CASE 标记
- 触发条件:feedback = "not_useful"。
- 操作:feedback 字段本身即为标记,不修改 status 字段(status 保持执行状态语义)。
- 查询 BadCase 使用:
WHERE feedback = 'not_useful'。 - 验收:提交 not_useful 后,DB diagnosis_session.feedback = "not_useful",status 不变。
REQ-6:幂等性
- 同一 sessionId 重复提交 feedback,覆盖写入(不报错,不重复创建 CaseLibrary)。
- 已有 case_library 记录时(diagnosisId 已存在),跳过插入并返回已有 caseId。