# 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 缺失,暂不处理(已知,后续处理流式接口时一并解决)