# Knowledge Answers TODO

更新时间：2026-05-16

目标：
- 让知识库问答的主路径从“LightRAG 检索 + 慢模型二次整理”改为“结构化证据优先 + 模型可选总结”。
- 让问答能力尽量依赖当前文档内容本身，而不是依赖某一份制度、某一个城市或某一种表格写法。
- 参考 Yuxi 的优点，优先补齐 `统一解析思路 + 文档类型友好的结构增强 + 检索后原文证据回退`，不照搬其完整平台基础设施。

Yuxi 调研结论：
- [x] 已完成 Yuxi 调研与方案提炼
  备注：Yuxi 的通用性主要来自三层：统一文档解析、可切换的 chunk/preset、检索不足时回到解析后 Markdown 继续取证；并不是靠给某个文档写死回答逻辑。

本轮改造原则：
- [x] 先撤掉文档特化硬编码，再补通用结构能力。
- [x] 真实答案只能来自当前命中文档的内容，代码里不固化制度金额、地区档位或条款结论。
- [x] 即使问题不是表格表达，也要能基于章节、条款、列表、键值对、上下文段落给出可读答案。
- [x] 模型只负责“压缩表达”，不负责“凭空补事实”；模型超时时也必须能返回像样的证据型答复。

实施清单：
- [x] 移除当前临时文档特化 fast path
  备注：删除当前围绕差旅表格、城市档位、职级档位的临时规则，避免系统继续向单文档 hardcode 演化。

- [x] 入库增强：补通用结构附录
  备注：参考 Yuxi 的解析/分块思想，在现有入库文本增强中补充章节、条款、列表、键值对、表格与上下文邻接信息，让非表格关系也能被稳定命中。

- [x] 检索后增强：生成面向回答的证据片段
  备注：从命中的 hits 中再次抽取更短、更结构化的 answer evidence，优先保留标题路径、条款句、列表项、表格行和与 query 强相关的上下文窗口。

- [x] 回答链路重构：证据驱动直答
  备注：新增通用知识问答直答器，先根据 answer evidence 生成可直接展示的短答案；只有在证据不足或问题需要更自然表达时才调用模型。

- [x] 模型总结收口：缩小上下文面，保留原文约束
  备注：把传给模型的上下文从“整段命中 chunk”收缩到“高置信 answer evidence”，既降延迟，也降低答非所问和错列风险。

- [x] 降级回答升级：从“命中摘抄”改成“证据摘要”
  备注：即使模型超时或失败，也要返回按证据组织好的结论、依据和缺失信息，而不是大段原文拼贴。

- [x] 测试补齐
  备注：覆盖非表格制度文本、表格文本、列表/键值对文本、模型超时降级、去除硬编码路径等关键回归点。

- [x] 真实验证与回填 TODO
  备注：已重建当前知识库索引并完成真实验证。当前“回答整理”阶段已降到亚秒级，但 LightRAG 首次/冷启动检索仍受 embedding 与 rerank 耗时影响，后续如要继续压缩总耗时，应进一步优化检索参数与模型链路。

验收标准：
- [x] 常规知识问答不再长时间卡在“正在整理答案”。
- [x] 文档不是表格表达时，仍能基于章节/条款/列表/上下文回答。
- [x] 文档内容变动后，不需要改业务代码里的制度结论或金额常量。
- [x] 模型超时时仍能返回结构清楚、证据明确的答案。
- [x] 相关测试通过，且没有破坏现有知识库问答流程。

验证记录：
- [x] 单测通过：`test_user_agent_service.py`、`test_knowledge_normalizer.py`、`test_knowledge_rag_service.py` 共 35 项全部通过。
- [x] 当前知识库文档已按新规则 `force` 重建索引成功。
- [x] 真实问答抽检：`餐补标准是什么？`、`费用发生后多久内提交报销申请？`、`前往北京出差的报销标准是什么？`
  备注：回答生成阶段约 `0.24s ~ 0.30s`；其中“前往北京出差”问题会明确提示当前证据未直接给出“北京”地区档位映射，不再硬猜。
