name: kb-query tags: [knowledge-base, retrieval, routing, rag] creator: 传鹏 description: |- 知识库检索路由。按"索引 → 摘要 → 全文 → 原文"四级递进定位,用最少的读取回答用户问题,并给出出处与缺口。
禁止一上来 grep 全库,更禁止把整个库读一遍。
库的规模会长到几百页,暴力检索既慢又容易把不相干的内容混进答案。
按成本从低到高,命中即停:
读 10-知识库/index.md 的「业务地图」段。
用户的问题如果能映射到某个业务分区(市场/客户/内容/交付),直接跳去看那个分区的页面。
命中就停在 Level 1。
读对应目录的 _index.md:
10-知识库/topics/_index.md 主题结论
10-知识库/sources/_index.md 原始资料摘要
10-知识库/entities/_index.md 实体
10-知识库/modules/_index.md 课程模块
表格里每行有「一句话」和「标签」,扫一遍就知道该读哪几页。
如果 Level 1 没命中,按关键词在 frontmatter 里找:
grep -rn "关键词" 10-知识库/*/ --include="*.md" | grep -E "title|summary|tags|aliases"
aliases 字段是同义词的藏身处 —— 用户说"内训",页面可能叫"企业培训"。
grep -rn "关键词" 10-知识库/ --include="*.md"
只读匹配行 + 前后 3 行,不要整篇读。
只读 Level 1–3 挑出来的 1–5 页。读的时候注意:
stale: true 的页 → 先看 stale_reason,答案里必须提示"这条依据可能已过期"status: draft 的页 → 标明"草稿,未经确认"sources → 这是引用出处知识库是原材料的加工品,可能丢细节。如果用户要的是原文措辞、完整数据表、合同条款:
sources: 拿到原材料路径00-原材料/ 读原文件用户问的东西如果库里没有,先别急着说"没有":
python 90-工具/kb.py status
如果 待处理新增 > 0,说明料在库里但还没整理 —— 这时候应该说:
"库里还没整理这块,但
00-原材料/02-客户与需求/里有 3 个未入库文件看着相关,我现在同步一下再答?"
而不是"没有相关资料"。
**结论**
(先给答案,2–3 句,不要绕)
**依据**
- 2026 年市场规模 380 亿,增速 42% —— `topics/AI培训市场.md`(源:《2026 AI 培训白皮书》)
- 客户普遍接受 3 天 2 晚 —— `sources/某银行内训需求.md`
**置信度**
高 / 中 / 低 + 一句话理由
**缺口**(有才写)
- 缺 2025 年的对比数据,建议补一份行业年报
没有出处的内容一律不写进「依据」。 模型自己的常识如果非要用,单独放一段叫「补充(非库内资料)」。
这一步不做,这个库永远只是原材料的复印件。
RAG 和 wiki 的根本区别在这里:RAG 每次问都从零拼一遍,答完就没了;wiki 把答过的东西留下来,下次直接引用。
| 值得 | 判断标准 |
|---|---|
| 综合了 ≥3 个来源的分析 | 下次再问还要再翻 3 个源,不写就是浪费 |
| 一次对比、选型、取舍 | 「A 方案还是 B 方案」这类结论最值得留 |
| 发现了原本没记的关联 | 「原来这个客户和那门课是一回事」 |
| 会被反复问的问题 | 销售、讲师、新人都会问的那种 |
不值得:一次性事实查询(「那个文件在哪」)、库外常识、还没结论的探索。
新建或并入 10-知识库/topics/<主题>.md,frontmatter 加一个字段:
derived_from: "query" # 标记这页源自一次检索,不是从原文件直接整理
evidence: "C" # 取所引来源的最低级 —— 检索不会提高证据强度
正文开头注明来路:
> 本页由 2026-11-04 的一次检索整理而成,依据 `sources/白皮书.md`、`sources/客户访谈.md`。
> 不是原始结论,是综合判断,引用时请回溯来源。
然后 kb.py mark 不用跑(没有新源),但必须 kb.py graph,否则索引不知道多了这页。
一个做了半年课的库,应该是:源文件 200 份,知识页 500+,其中至少三分之一是历次问答沉淀下来的。
只有源、没有沉淀的库,用一年也还是那 200 份文件的目录。
| 错误 | 后果 |
|---|---|
把 _index.md 的摘要当正文答 |
丢细节,且可能引用过期摘要 |
忽略 stale 标记 |
拿作废数据做决策 |
| 库里没有就编一个 | 做出来的课站不住 |
| 引用页面但不给出处 | 用户无法复核,失去信任 |