name: kb-ingest tags: [knowledge-base, atomic-notes, content-extraction] creator: 传鹏 description: |- 单源精读与原子化方法。决定一个原材料应该拆成几个知识页、每页装什么、怎么命名,保证知识库颗粒度一致。kb-sync 调用它处理单个文件,也可单独用于"把这个文件整理进库"。
判据:读者会不会"只想看其中一部分"。
| 情形 | 拆几页 |
|---|---|
| 一份 60 页行业报告,含市场规模、竞争格局、技术趋势三大块 | 1 个 source 页 + 3 个 topic 页 |
| 一份客户需求表,只有时长/人数/要点 | 1 个 source 页(可能顺手并进已有客户 topic) |
| 一份 200 页 PPT 课件 | 1 个 source 页 + N 个 module 页(每个可上课的单元一页) |
| 一份纯广告宣传册 | 1 个 source 页,不派生 |
| 三段微信聊天记录截图 | 1 个 source 页(内容是碎片,别装进多个页) |
反例:把一份报告拆成 20 个"知识点"页,每页 80 字 —— 这叫碎片化,不叫原子化。查的时候要在 20 个页之间跳,还不如读原报告。
原子化的正确含义:一页 = 一个完整的、能独立回答一个问题的知识单元。不是"一句话一页"。
| 类型 | 规则 | 好例子 | 坏例子 |
|---|---|---|---|
| source | 沿用原材料文件名(去扩展名) | 2026-AI培训行业白皮书.md |
资料1.md、白皮书摘要.md |
| topic | 业务问题的名词短语,不带"研究""分析""总结" | 企业AI培训市场规模.md、客户决策链.md |
市场分析.md、关于客户的一些思考.md |
| entity | 专有名词本名 | 某国有大行.md、Coze.md、生成式AI服务管理暂行办法.md |
银行客户.md、某工具.md |
| module | D<序号>-<模块名>,与课表一致 |
D1-提示词工程.md、D2-Agent编排.md |
第一模块.md、提示词.md |
[[链接]] 用它。kb.py graph + lint 验证。聊天记录、会议纪要、需求表——这类料的价值不在结论,在细节和原话。
entity 页记录这个客户:行业、规模、决策人角色、历史合作、禁忌话题写完内容回头看一眼:这页里最强的那条信息,站得住吗? 站不住就按最弱的定。
| 问自己 | 是 → 定 |
|---|---|
| 数字有一手出处、口径明确、能当场调出原文核对吗? | A |
| 有报告/研究支撑,但样本小、口径不明、或者只有一家在做吗? | B |
| 只是从业者经验、行业共识,说不出具体来源吗? | C |
| 是我的推断、假设,还没人验证过吗? | D |
两个容易搞错的地方:
topic 和 module 页的等级不得高于它所用素材的最低级。合成不会提高证据强度,只会稀释。
evidence 按上面那三问定的,不是顺手写的sources: 填的是原材料相对路径,一字不差[^脚注] 或明确出处[[stem]] 链上了kb.py mark 已登记(否则等于没做)