feat(feedback): 置信度评分与用户反馈机制 & 归档 confidence-feedback change

This commit is contained in:
zhuyongxin
2026-06-30 18:01:06 +08:00
parent 3ffa5cc366
commit 2a796da490
16 changed files with 771 additions and 18 deletions
@@ -0,0 +1,64 @@
# acceptance.md — confidence-feedback
## 实现清单
| 任务 | 文件 | 状态 |
|---|---|---|
| T0:Flyway V008 + answer 字段 | `V008__add_answer_to_diagnosis_session.sql`、`DiagnosisSession.java` | 完成 |
| T1:EvaluationService(规则引擎) | `EvaluationService.java` | 完成 |
| T2:ChatService 后置调用 | `ChatService.java` | 完成 |
| T3:FeedbackController + FeedbackService | `FeedbackController.java`、`FeedbackService.java`、`FeedbackRequest.java`、`FeedbackResponse.java` | 完成 |
| T4:CaseLibraryService | `CaseLibraryService.java` | 完成 |
| T5:AsyncConfig | `AsyncConfig.java` | 完成 |
## 验证记录
### 静态验证(已通过)
- `mvn compile` BUILD SUCCESS(2026-06-30)
- 无新增 ERROR,存量 WARNING 与本次改动无关
- import 完整性人工检查通过
### 脚本验证(已通过,2026-06-30)
验证工具:`scripts/query_mysql.py`(本次新建)
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1 | POST /api/chat 发送问题 | 200,answer 有值 |
| 2 | 等 5 秒查 diagnosis_session | self_evaluation 写入规则引擎结果,answer 写入完整回答 |
| 3 | POST /api/feedback useful | 200,返回 caseId;case_library 新增一行,feedback=useful,status=SUCCESS |
| 4 | POST /api/feedback not_useful | 200,feedback=not_useful,status 仍为 SUCCESS(未被改写) |
| 5(边界)| 重复提交 useful | 返回同一 caseId,case_library 无重复插入 |
| 6(边界)| 非法 feedback 值 | HTTP 400 |
### Flyway V008 迁移
- 服务启动后 diagnosis_session 表存在 answer 列,验证通过(步骤 2 能写入 answer)
### 浏览器/人工验证(已通过,2026-06-30)
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1 | 发送"今天天气怎么样" | AI 回复下方出现"有用/无用"按钮 |
| 2 | 点击"有用" | 按钮区域替换为"已标记为有用" |
| 3 | 网络请求确认 | POST /api/feedback 返回 HTTP 200,`success: true` |
### 前端反馈按钮(追加,2026-06-30)
**改动文件**:`app.js`、`styles.css`
关键设计:
- `ChatResult` record 新增(`ChatService`),`ChatResponse` 增加 `sessionId` 字段(`ChatController`)
- `sendQuickMessage` 读取 `chatResponse.sessionId` 存为 `this.lastSessionId`
- `createFeedbackBar(sessionId)` 闭包绑定 sessionId,避免多轮对话时 sessionId 错位
- `submitFeedback(feedback, barElement, sessionId)` 直接用传入参数,不依赖全局状态
- 流式模式(`/api/chat_stream`)反馈按钮会渲染,但 sessionId 为空,点击不生效(已知限制)
## 已知限制
- 非检索工具(DateTimeTools 等)不写 tool_invocation,evidence_score = 0(已接受,符合"证据充分度"定义)
- `@Async` 失败时 selfEvaluation 为 null,前端需处理 null(已接受)
- CaseLibrary 的 faultCategory 固定为 GENERAL,需人工补充(已接受,Phase 2 优化)
- LLM 观点层未实现,selfEvaluation JSON 预留 llm_opinion 扩展位(Phase 2)
- 流式模式反馈按钮 sessionId 缺失,暂不处理(已知,后续处理流式接口时一并解决)