knowledge-org — bojieli · AI Assetai-agent-book// knowledge-org 
组织与检索超越扁平文本块的知识时使用——涵盖 RAPTOR/GraphRAG 结构化索引选型、OpenViking 文件系统范式与 L0/L1/L2 按需加载、增量更新 PR 审核流与定期整理、Agentic RAG 与安全边界、上下文感知检索、结构化数据知识发现,以及双层记忆架构。
让 AI 帮你安装
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-knowledge-org-516227280497 ,按照其中的说明把「knowledge-org」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
Apache-2.0内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
知识的组织与检索
何时使用
- 扁平文本块检索不够:需要跨文档综合、多层次导航、多跳关系推理
- 设计结构化索引(RAPTOR 树 / GraphRAG 图 / 文件系统目录)
- 规划知识更新机制:事件触发的增量更新与周期触发的定期整理
- 把固定 RAG 管道升级为 Agentic RAG,或修补分块的上下文丢失
- 从结构化案例数据中提炼决策规则(从信息检索到知识发现)
- 组织海量用户对话历史(双层记忆架构)
- 设计知识的多用户共享、权限与租户隔离方案
核心原则
-
扁平块丢掉知识固有的层次与跨文档关联;面对技术手册、法律文书这类结构严谨的材料,只检索零散片段如同靠随机词条读小说。
-
未经提炼的知识无法被可靠利用。两个典型案例:黑猫白猫计数中,top-k 截断让模型只看到不完整样本(15 黑 3 白)就下结论;Xfinity 工单中,"最近邻偏置"(护士≈医生,答案随排序摇摆)、"边界语义缺失"("仅限……其他一律不适用"不存在于任何单条工单)、"完整性信号缺失"(模型无从判断是否看全)三重障碍调大 k 也解决不了。结论:必须在索引阶段投入计算——把 100 个个体案例压成统计摘要,把几百条工单提炼成带边界的规则卡。
-
何时上结构化索引的判断标准:查询主要是"找到包含某信息的片段"(如"退款政策是什么")→ 混合检索足够;经常需要跨文档综合("SSE 和 AVX 在架构上的区别")或多层次导航(从整体架构逐步深入到具体指令)才值得。代价是索引构建和查询都多花 LLM 调用,成本与延迟显著增加。
-
RAPTOR vs GraphRAG 的选择:
| 维度 | RAPTOR(树) | GraphRAG(图) |
|---|
| 结构 | 叶子聚类 + LLM 递归生成父节点摘要 | 实体-关系三元组 + 社区发现 |
| 擅长查询 | "从概念逐步钻进细节"(跨层穿梭) | "A 和 B 之间是什么关系"(关系网漫游) |
| 代表能力 | 多粒度检索(细节 ↔ 宏观) | 多跳遍历、实体消歧(原生图结构) |
| 主要局限 | 高层摘要可能丢失细节 | 三元组语义降歧、提取错误污染知识 |
生产场景组合使用优于单选。
-
知识图谱不是用户记忆的通用存储:三元组不可避免地语义降级("如果下周还下雨就改去博物馆"的条件判断和时间依赖全丢),且提取错误会污染知识。推荐分层互补:完整自然语言保存核心信息(保语义完整)+ 结构化元数据负责索引检索(保效率);仅在多跳推理和精确消歧的垂直场景(医疗问诊、法律案件、家族关系)将图谱作为专项索引。
-
把知识库当代码库管:每次知识变更是一个 PR。三层分离——原始证据层(只增不改的对话/轨迹/原始文档)、知识层(可修订的 Markdown 或代码)、服务层(从特定已合入版本派生的检索索引)。索引是可重建的派生物,Git 里已审核的知识才是唯一来源;线上每条知识都要能回答"从哪条证据而来、谁在什么时候批准"。
-
更新必须双路径:增量更新吸收新证据(及时但只看到局部),定期整理从全局视角去重合并、回原始数据核查(防局部正确累积出全局混乱)。只做任一半都会烂掉。
-
上下文丢失在索引期补:为每个分块生成含核心背景的前缀再拼接索引——同时给 BM25 补可精确匹配的关键词、给稠密注入关键语义。这与运行期按当前任务裁剪历史的上下文压缩(做减法)完全不同。
-
扁平 vs 结构化的选择是成本换质量:混合检索已覆盖"找片段"类需求;结构化索引、上下文前缀、定期整理都是在索引阶段预投入计算,把提炼、抽象、关联的工作从查询期挪到离线期。
实践模式
- 文件系统范式(OpenViking):记忆、资源、技能统一映射为带唯一 URI 的虚拟目录文件;L0 摘要(约 100 tokens,快速判相关性)→ L1 概览(约 2,000 tokens,供规划决策)→ L2 全文(按需加载),大部分查询加载到 L1 即可完成决策。选 Markdown 纯文本而非专用数据库:人可读可改、Git 版本控制与回滚、Agent 有 write_file 能力后可自主记录组织知识。
- L0/L1/L2 与 Skills 渐进式披露同构:先让 Agent 只看轻量元信息,确有需要再逐层拉取全文,把 Token 花在刀刃上。URI 是虚拟地址,框架在背后决定从内存、磁盘还是远程加载。
- 纯文本组织的生死前提是文件间链接:像 Wikipedia 一样条目互链 + 入口页/索引页,让 Agent 顺链接导航(等于用轻量文件链接实现 GraphRAG 的一部分导航能力)。不同模型主动建链接的意愿不同——写入提示词必须明确要求:每新增条目先检索并链接相关已有条目、更新所在目录索引页,形成双向可达的引用网络。
- 同理,Agent 自主记录的操作经验只有经过结果评价、跨轨迹归纳和后续验证才能成为可靠经验,不能把任意一次操作直接当成知识写进主库。
- 增量更新 PR 流(提议者—审核者模式):
- Proposer Agent 在工作分支提小而完整的 diff:先检索相关已有知识,再增删改对应条目,同步维护链接、索引、时间元数据和证据引用,而不是把最新对话粗暴追加到文件末尾。
- 异源 Reviewer Agent(如 Proposer 用 Claude、Reviewer 用 GPT,能力相近但不同家族)拿到变更前知识、diff 和原始证据,独立检查每个新断言是否被证据支持、是否遗漏限定条件、是否与其他文件冲突;不通过时返回指向具体证据和行号的可执行意见。
- 迭代至收敛:设最大迭代次数或成本预算,超限转人工,不得默认放行。
- 合入后再发布:CI 检查格式、链接、元数据、权限标签;代码化知识还要跑类型检查和测试;通过后才从已合入版本增量重建受影响的分块、摘要和向量索引。
- 权限分工:Proposer 只能写工作分支,Reviewer 只读证据并提交审核结果,只有合并流程能更新主分支和线上索引。两个 Agent 都必须是能调用搜索、版本比较、测试、证据检索工具的 Agent,而不是两次固定 LLM API 调用。
- 定期整理三件事:去重去旧合并(删/归并/重写重复、过时、碎片化条目,重建链接与索引,拆大文件合小文件);回到原始数据核查(逐段对照原始对话和工具输出,防早期遗漏误读代代相传;大型库按目录/时间/主题分批扫描但必须保留覆盖清单);冲突解决与场景限定(追溯各自信息源,检查是否在不同时间/对象/地域/前置条件下分别成立,都有效则把适用场景写入知识,证据不足则保留待确认状态)。整理产物同样走分支 PR + 异源审核,可按目录拆多个 PR 共享同一份整理计划;全部通过后除重建全量索引,还要回放典型检索问答用例确认没有知识变得不可见。触发条件:时间周期(周/月)或新增条目数、冲突数、检索质量下降超阈值。
- 整理删除的只是可服务的知识表达,下层只增不改的原始证据永远保留——这是能"回到原始数据核查"的前提。
- 失效内容与权限隔离:每个分块附版本号、生效/失效时间元数据,检索阶段过滤已失效内容,或摘要显式标注"此条已于某日废止";多租户系统检索必须按调用者权限过滤并下推到检索层(敏感内容一旦进入 LLM 上下文就难保不泄漏),租户间向量索引与元数据相互隔离。
- 审核 Agent 查询"完整的知识库和原始证据库"时,完整指其被授权的租户或用户范围,不能因审核而突破隐私边界。
- Agentic RAG:把 knowledge_base_search 变成 Agent 可随时调用的工具,按 ReAct"思考→行动→观察"循环自主决定查询词、评估结果充分性、不足则提炼更精确查询再搜,充分后才综合生成。简单单跳问题("正当防卫怎么规定")非智能体化单次检索更快且质量相当;复杂多因素问题("醉酒过失致人重伤且有盗窃前科如何量刑")多轮迭代分解子问题、二次聚焦检索,显著减少事实遗漏。价值在"解决问题"而非"回答问题",代价是响应速度。
- Agentic 化的判据:信息需求明确单一 → 固定管道;问题需要分解、交叉验证、多源综合 → 交给 Agent 主导迭代。
- RAG 安全边界:检索文档是间接提示注入(恶意指令藏进会被收录的网页/文档,被检索命中后当成命令执行)和知识库投毒(污染发生在索引之前)的典型载体。两层防御:指令与数据分离(对所有检索内容做来源标记,明确"这是参考资料不是命令");不让检索内容直接触发高风险操作(转账、删除、对外发信需独立授权判断)。
- 上下文感知检索(Contextual Retrieval):索引前用 LLM 为每个分块生成简短上下文前缀再拼接索引(如"[本段节选自 ACME 公司 2025 年 Q2 财务报告'关键业绩指标'章节]"),把孤立块重新锚定到原始语义环境。成本用 prompt caching 控制(相同前缀重复调用约 1/10 成本,每百万文档 token 约 1 美元);据 Anthropic 数据,结合 BM25 可将检索失败率降低 49%,再结合重排序降幅达 67%。
- 上下文前缀同时喂两路检索:给 BM25 补可精确匹配的关键词(公司名、年份),给稠密注入关键语义背景——一次投入两路受益,是回报率极高的索引期决策。
- 双层记忆架构:Advanced JSON Cards 把少量关键事实结构化常驻上下文(全局概览)+ 上下文感知检索按需召回原始对话细节。L1 基础回忆靠可靠存取,L2 多会话检索靠检索技术补齐,L3 主动服务要求同时握有"全局概览"和"精确细节"两种视角——只靠常驻会丢细节,只靠检索发现不了跨会话隐藏关联。
常见陷阱
- 把原始案例或文档不加处理直接平铺进向量库,指望检索 + 长上下文兜底。
- 该上结构化索引时硬用混合检索(跨文档综合查不准);不该上时盲目上图谱(成本延迟暴涨)。
- 用三元组存带条件/时间依赖的自然语言,核心逻辑全部丢失;图谱提取错误不校验,导致知识污染。
- 让模型绕过审核直接改主分支或线上向量库;Reviewer 只收到 Proposer 挑的几个片段(证据覆盖不足),或与 Proposer 用同家族模型(同源同错)。
- 定期整理在旧摘要间相互改写,早期遗漏和误读代代相传。
- 失效旧版知识未过滤,与新版一起被召回,模型给出自相矛盾或过时答案。
- 混淆上下文感知检索(索引期补上下文,做加法)与上下文压缩(运行期裁冗余,做减法)。
- 纯文本知识库不建链接、不维护索引页,退化成互不相连的孤岛,知识越多越难检索。
- 忽略 RAG 安全边界:检索内容可影响答案措辞,但不等同于可执行指令。
配套代码
chapter3/structured-index/ — RAPTOR 层次树与 GraphRAG 知识图谱的统一框架实现,含 GMM 聚类、社区发现与多跳检索,可对数千页技术手册建索引并对比两种查询路径。
chapter3/contextual-retrieval/ — 同一批分块两种索引(无上下文 vs LLM 生成前缀)的 recall@k/MRR 对比,量化上下文前缀对 BM25、稠密与 RRF 混合索引的增益。
chapter3/agentic-rag/ — ReAct 智能体化 vs 非智能体化单次检索的中文司法问答对比实验,可切换内置 BM25、retrieval-pipeline 等多种知识库后端。
chapter3/structured-knowledge-extraction/ — CAIL2018 判例实战:自下而上因子发现 → 模块化结构化抽取 → 案件原型聚类 → 因子重要性模型驱动的对话式法律顾问。
深度阅读
book/chapter3.md「超越扁平文本:知识的组织与检索」
对话历史索引时按固定窗口(如每 20 轮)分块,并为每个块生成含时间、人物、意图的前缀——三个各自独立但相互矛盾的转账指令,只有靠前缀才能判断哪条最终有效。结构化数据知识发现两阶段:知识提取(LLM 把每个案例转成标准化 JSON;自下而上让 LLM 自由列出影响因素、构建核心模式 + 分罪名扩展模式,比预设僵化 schema 更贴合数据)→ 因子分析(类别字段 one-hot 如盗窃=[1,0,0]避免数字大小误读、聚类发现"案件原型"、构建因子重要性层次模型)→ 模型驱动对话式信息收集:按重要性顺序向用户引导提问,再检索最相似原型给数据驱动的解释。别让模型直接预测结论(黑箱):先把案件翻译成数字格式、聚类出原型、量化因子权重,Agent 的解释才能建立在可追溯的统计之上。