芥末
发布于 2026-06-10 / 1 阅读
0
0

面向 Agent 的分层知识库设计:从 RAG 到 Knowledge Context Layer

很多团队搭建知识库时,第一反应是把文档切块、向量化、塞进向量数据库,再让大模型根据相似片段回答问题。这就是 RAG(Retrieval-Augmented Generation,检索增强生成)的基本形态。

RAG 适合解决“我问一句,系统帮我从文档里找几段相关内容”的问题,但工程知识库不只是问答系统。它还要回答这些更复杂的问题:

  • 新人应该按什么顺序理解一个系统?
  • 某个服务的设计原则、架构约束、代码实现和线上经验之间是什么关系?
  • 修改一条规范会影响哪些模板、SDK 和排障手册?
  • 架构师、开发者、SRE 需要看的知识层级是否一样?
  • Agent 在有限上下文窗口里,应该优先读取哪些内容?

这些问题靠“语义相似度 Top-K”很难稳定解决。原因不是 embedding 不够好,而是工程知识本身需要结构。它既像一棵树,有从原则到实现的抽象层级;又像一张图,有服务依赖、规范约束、故障反馈和跨模块引用。

分层知识库的目标,就是在 RAG 之上增加一层面向 Agent 的 Knowledge Context Layer。它不直接替代向量检索,而是先告诉 Agent:该去哪个层级找、沿着哪些关系扩展、按照什么角色筛选上下文。

RAG 在工程知识库里的三个瓶颈

经典 RAG 的流程很直接:

flowchart LR
    A[源文档] --> B[切分 Chunk]
    B --> C[Embedding 向量化]
    C --> D[(向量数据库)]
    E[用户问题] --> F[问题向量化]
    F --> D
    D --> G[Top-K 相似片段]
    G --> H[拼接 Prompt]
    H --> I[LLM 生成答案]

这个流程在 FAQ、产品手册、简单规章检索里很好用,因为问题通常能被少量片段直接回答。但工程知识库的内容更复杂,常见瓶颈主要有三个。

每次查询都从零开始

如果一个问题需要综合 5 份设计文档、2 份故障复盘和 1 份代码规范,普通 RAG 每次都要重新召回、拼接、推理。上一次已经整理过的中间结论不会沉淀下来,系统也不会因为被问过多次而自然变聪明。

这种模式的问题在于:检索结果只是临时上下文,不是长期知识资产。回答结束后,综合出来的结构、引用路径、概念关系都丢掉了。

很难把分散信息连成关系

向量检索擅长找到“语义相近”的片段,却不擅长表达“它们之间是什么关系”。

例如,一个系统里有这些信息:

  • A 服务调用 B 服务;
  • B 服务依赖一张订单表;
  • 某次故障是订单表索引失效导致;
  • 一条架构原则要求核心链路避免跨域同步调用。

这些内容可能散落在服务说明、数据库设计、故障复盘和架构原则里。普通 RAG 也许能召回其中几段,但它并不知道这些片段共同构成了一条影响链路。

知识粒度容易混在一起

同一个关键词可能出现在不同抽象层次里。比如“单一职责”既可能出现在架构原则里,也可能出现在某个函数重构说明里。向量空间会认为它们语义接近,但用户的问题可能完全不同:

用户真正想问 需要的知识层级 错误召回示例
为什么系统要拆成多个服务 架构原则、架构决策 返回某个函数的职责划分
某个接口怎么调用 实现文档、SDK 示例 返回领域建模原则
新人该先看什么 导航路径、核心概念 返回零散代码片段
一次故障影响哪些服务 服务关系、运维经验 返回接口字段说明

RAG 的默认假设是“相关片段越相似越好”,但工程知识库更需要先判断“问题属于哪个层级”。

主流知识库范式的能力边界

从“平铺文档”走向“结构化知识”,常见做法大致可以分成四类:Naive RAG、LLM Wiki、Graphify 和 GraphRAG。它们分别解决了不同问题,也留下了不同缺口。

Naive RAG:平铺向量检索

Naive RAG 把所有文档切成片段,然后按向量相似度召回。

flowchart LR
    A[文档集合] --> B[Chunk]
    B --> C[Embedding]
    C --> D[(Vector Store)]
    E[Query] --> F[Embedding]
    F --> D
    D --> G[Top-K Chunk]
    G --> H[LLM]

它的优点是工程落地简单:不需要设计复杂数据模型,也不需要提前梳理文档关系,只要能切块和向量化,就能跑起来。

它的限制也很明显:

能力 默认表现
知识积累 每次查询临时推理,结果不沉淀
关系表达 片段之间没有显式边
层级控制 原则、规范、代码、故障记录混在一起
角色适配 不区分架构师、开发者、SRE 的上下文需求
全局理解 很难回答跨文档、跨模块的总结性问题

现代 RAG 可以加入 metadata filter、rerank、hybrid search、访问控制、query routing 等机制补齐部分能力,但这意味着系统已经不再是“简单向量库问答”,而是在向结构化检索演进。

LLM Wiki:把知识编译成持续维护的页面

LLM Wiki 的核心思想是:不要让大模型每次问答都重新综合知识,而是让它把读过的资料整理成稳定的 wiki 页面,并持续维护这些页面。

它可以分成三层:

层级 内容 维护方式
Raw Sources 原始资料,例如论文、文章、需求、数据文件 人类选择和归档
Wiki LLM 生成的结构化页面,例如概念页、实体页、综述页 LLM 维护
Schema 页面结构、命名规范、索引方式、工作流约定 人类和 LLM 共同演进

核心操作通常有三类。

Ingest:摄入新资料

当一份新资料进入知识库时,LLM 不只是写一段摘要,而是要完成一组维护动作:

flowchart LR
    A[新资料进入] --> B[通读并提取主题]
    B --> C[创建摘要页]
    C --> D[更新索引页]
    D --> E[修订相关概念页]
    E --> F[补充交叉引用]

一次摄入可能会改动多个 wiki 页面,因为新资料可能影响已有概念、实体、结论和引用关系。

Query:基于页面回答

查询时,系统先通过索引定位相关页面,再让 LLM 读取页面并生成带引用的回答。高质量回答还可以反向沉淀成新的 wiki 页面,让探索过程变成知识积累过程。

Lint:检查知识库健康度

Wiki 会随着资料增长而出现问题,比如页面孤立、概念重复、引用断裂、旧结论没有更新。Lint 机制负责定期发现这些问题。

flowchart TD
    A[Wiki 健康检查] --> B[矛盾声明]
    A --> C[过期引用]
    A --> D[孤立页面]
    A --> E[缺失概念]
    A --> F[断裂链接]

LLM Wiki 的价值在于“持续编译”。它把临时推理变成稳定知识工件,适合中等规模、主题相对明确的知识库。它的短板是关系结构通常依赖 wikilink,缺少自动关系推断、社区发现和严格的层级模型。

Graphify:把代码和文档变成知识图谱

Graphify 的思路是把代码库、配置、数据库、文档、设计稿等资源统一映射成一张图。图里有节点,也有边;节点表示函数、类、服务、概念、数据库表等实体,边表示调用、依赖、解释、实现、关联等关系。

典型提取流程可以分成两条管道:

flowchart LR
    A[代码仓库] --> B[AST 解析管道]
    B --> C[函数/类/模块/导入关系]

    D[文档/PDF/图片/视频] --> E[LLM 语义管道]
    E --> F[概念节点/语义关系]

    C --> G[(知识图谱)]
    F --> G
    G --> H[graph.json]
    G --> I[graph.html]
    G --> J[GRAPH_REPORT.md]

AST(Abstract Syntax Tree,抽象语法树)管道适合解析代码结构,LLM 语义管道适合理解非结构化资料。最终产物通常包括:

产物 用途
graph.json 保存完整图谱数据,供程序查询
graph.html 在浏览器里查看节点、边、过滤和搜索
GRAPH_REPORT.md 输出高连接节点、意外关系、知识缺口等分析结果

知识图谱带来的能力和普通文档不同。它可以发现系统里的 God Nodes,也就是连接度很高的关键节点;也可以发现看似不相关模块之间的跨域联系;还可以识别某些服务、表、接口缺少解释文档的知识缺口。

为了降低误导,图谱里的关系最好带置信度:

置信度 含义 示例
EXTRACTED 从代码或文档中直接观察到 A 文件 import B 模块
INFERRED 根据上下文推导出来 A 服务可能依赖某个领域概念
AMBIGUOUS 信息不足,存在不确定性 文档里提到“订单模块”,但无法确定具体服务

Graphify 很适合回答“A 和 B 有什么关系”“系统里哪些节点最关键”“哪里缺文档”。但它不适合单独承担所有问答任务,因为图谱是骨架,具体参数、代码示例、操作步骤仍然要回到原始文档或代码。

GraphRAG:用图谱增强检索

GraphRAG 把知识图谱和 RAG 结合起来。它先从文档里提取实体和关系,构建知识图谱,再用社区发现算法把图划分成多个社区,并为每个社区生成摘要。查询时,系统可以根据问题类型选择全局搜索或局部搜索。

flowchart LR
    A[源文档] --> B[实体与关系提取]
    B --> C[(知识图谱)]
    C --> D[社区聚类]
    D --> E[分层社区摘要]

    F[用户问题] --> G{查询类型}
    G -->|全局问题| H[Global Search]
    G -->|实体问题| I[Local Search]
    H --> E
    I --> C
    E --> J[LLM 回答]
    C --> J

两种查询模式适合不同场景:

模式 适合问题 使用的信息
Global Search 整个系统有哪些设计模式、哪些主题最重要 社区摘要
Local Search 某个服务关联哪些组件、某个概念连接了哪些文档 实体邻域

GraphRAG 能缓解普通 RAG 的两个典型问题:通过图结构把分散信息连成关系,通过社区摘要支持全局理解。代价也比较高:实体抽取需要大量 LLM 调用,图谱和社区摘要的增量更新较复杂,而且源文档质量会直接影响图谱质量。

四种范式对比

维度 Naive RAG LLM Wiki Graphify GraphRAG
知识表示 向量空间里的 chunk 结构化 wiki 页面 节点和边组成的图 知识图谱 + 社区摘要
知识积累 中等,取决于更新机制
关系表达 默认没有 依赖 wikilink 自动提取和推断 自动提取和聚类
层级感知 按主题组织 可按社区组织 有社区层级
角色适配 默认没有 通常没有 通常没有 通常没有
适合场景 快速问答、文档搜索 中等规模知识沉淀 代码和系统关系分析 全局理解与局部关联检索
主要代价 粒度混乱、缺少结构 维护页面一致性 图谱质量和解释成本 构建和更新成本高

这些方案都在解决知识库结构问题,但它们普遍缺少一个明确设计:把知识按抽象度和稳定性分层,再根据角色选择上下文。

分层知识库:把知识组织成金字塔

工程知识不是同一种东西。有些知识非常稳定,比如设计原则;有些知识变化很快,比如故障排查命令。把它们放在同一个向量空间里统一召回,会导致高层原则和低层细节互相干扰。

更合理的方式是把知识分成 5 层:

flowchart TB
    L1["L1 原则<br/>稳定、抽象、长期有效"]
    L2["L2 架构<br/>系统结构、技术选型、ADR"]
    L3["L3 规范<br/>编码标准、接口约定、流程规则"]
    L4["L4 实现<br/>代码模板、SDK、配置、API 示例"]
    L5["L5 经验<br/>故障复盘、运维日志、排障 SOP"]

    L1 --> L2
    L2 --> L3
    L3 --> L4
    L4 --> L5

这 5 层对应软件工程里常见的抽象层次:

层级 软件工程内容 稳定性 类比
L1 原则 SOLID、KISS、YAGNI、团队工程原则 最高,按年变化 宪法
L2 架构 架构决策记录、系统拓扑、领域划分 较高,按季度变化 法律
L3 规范 编码规范、接口约定、Lint 规则 中等,按月变化 规章
L4 实现 SDK 文档、代码模板、配置示例 较低,按周变化 手册
L5 经验 故障复盘、排障记录、运维命令 最低,按天变化 判例

分层之后,检索不再是“从所有文档里找最像的片段”,而是先判断问题属于哪个层级,再在目标层级里查找内容。

例如:

问题 优先层级 原因
为什么核心链路不能同步调用外部服务 L1 + L2 涉及原则和架构约束
新接口字段命名应该遵循什么规则 L3 涉及团队规范
Java SDK 怎么初始化客户端 L4 需要实现示例
某个告警触发后怎么排查 L5 需要运维经验
新人如何理解订单域 L1 + L2 + L3 需要概念、架构和规范路径

层级的作用不是替代搜索,而是先缩小搜索空间。问题一旦被路由到正确层级,后续检索的噪声会小很多。

知识图谱:让五层之间产生关系

分层不能只做成 5 个文件夹。如果文档之间没有关系,系统仍然无法回答“影响面”“约束来源”“经验反馈到哪里”这类问题。

分层知识库需要把每篇文档看成节点,再用有向边表达关系:

flowchart TD
    P[L1 原则] -->|governs| A[L2 架构决策]
    P -->|defines| S[L3 规范]
    A -->|constrains| S
    A -->|implements| I[L4 实现]
    S -->|implements| I
    I -->|validates| E[L5 运行经验]
    E -->|feedback| S
    E -->|feedback| I
    X[任意文档] -.->|cross_ref| Y[相关文档]

常用边类型如下:

边类型 方向 含义
governs L1 → L2 原则约束架构决策
defines L1 → L2/L3 原则定义概念边界
constrains L2 → L3 架构对规范提出约束
implements L2/L3 → L4 实现承接架构或规范
validates L4 → L5 实现在线上运行中被验证
feedback L5 → L3/L4 经验反向推动规范或实现改进
cross_ref 任意 → 任意 横向引用或补充说明

有了这些边,知识库就能支持几类重要能力。

从实现上溯到原则

开发者看到一段代码模板时,可以追溯它为什么这么设计:它实现了哪条规范,规范来自哪个架构约束,架构约束又受哪条原则影响。

从原则下探到实现

架构师提出一条原则后,可以检查它是否已经落到架构决策、编码规范和代码模板里。如果原则只停留在 L1,没有下游文档承接,就说明它还没有变成可执行知识。

让经验形成反馈环

一次故障复盘不应该只归档在 L5。它可能需要修改 L3 的规范,也可能需要更新 L4 的模板或排障脚本。feedback 边能把经验和改进行动连接起来。

角色感知:不同人需要不同上下文

同一个知识库不应该给所有人返回同一种上下文。架构师关心原则和架构约束,开发者更关心规范和实现,SRE 需要实现细节和运行经验,新人则需要一条能逐步理解系统的阅读路径。

可以用角色-层级矩阵描述访问优先级:

角色 主要层级 次要层级 典型问题
架构师 L1、L2 L3、L5 架构是否符合原则,故障是否暴露设计问题
开发者 L2、L3、L4 L5 按什么规范实现,代码模板怎么用
SRE L4、L5 L2、L3 告警怎么排查,变更会影响哪些服务
新人 L1、L2、L3 L5 系统怎么理解,应该按什么顺序学习
Agent 按任务动态选择 通过图谱扩展 在有限上下文内组合最相关知识

角色感知还需要配合 context budget。大模型上下文窗口再大,也不能无节制塞文档。更稳妥的方式是为不同角色设置优先层级和预算。

roles:
  architect:
    context_budget: 12000
    priority_order: [L1, L2, L3, L5, L4]

  developer:
    context_budget: 10000
    priority_order: [L3, L4, L2, L5, L1]

  sre:
    context_budget: 10000
    priority_order: [L5, L4, L2, L3, L1]

  newcomer:
    context_budget: 8000
    priority_order: [L1, L2, L3, L5, L4]

系统检索时按照优先顺序逐层填充内容,直到预算用完。这样可以避免一个 SRE 排障问题被大量原则文档占满,也能避免架构讨论被底层代码片段干扰。

分层检索:先路由,再召回,再扩展

分层知识库的检索流程可以拆成 5 步:

flowchart LR
    A[用户问题] --> B[识别角色]
    B --> C[判断目标层级]
    C --> D[层内关键词/索引检索]
    D --> E[图谱邻域扩展]
    E --> F[按预算裁剪上下文]
    F --> G[LLM 生成答案]

它和普通向量检索的核心区别在于:普通向量检索先找相似片段,分层检索先判断“去哪里找”。

维度 向量检索 分层检索
定位方式 embedding 距离 层级路由 + 关键词/索引匹配
搜索空间 全量文档 角色可访问层级子集
粒度控制 默认弱 先按层过滤
关联能力 默认只返回相似片段 通过图谱边补上下游
网络调用 通常需要 embedding 调用 可纯本地完成
Token 消耗 容易返回 raw chunk 可优先返回摘要和导航
冷启动成本 较低 需要先构建层级和图谱
代码细节能力 强,适合函数级召回 中等,需要结合向量检索补深度

最实用的组合不是二选一,而是混合:

sequenceDiagram
    participant U as 用户
    participant P as 分层知识库
    participant V as 向量检索
    participant L as LLM

    U->>P: 提问
    P->>P: 识别角色和层级
    P->>P: 找到相关文档与图谱邻域
    P->>V: 对需要细节的节点做向量检索
    V-->>P: 返回代码级片段
    P->>L: 组装结构化上下文
    L-->>U: 返回答案

分层知识库负责导航和结构,向量检索负责补充函数、配置、行号、参数等细节。这样既保留了 RAG 的精确召回能力,又减少了“所有问题都从全量 chunk 里盲搜”的不稳定性。

分层知识库和其他范式的关系

分层知识库更像一个上层编排层,而不是底层存储方案。它可以建立在 Wiki、Graph、Vector Store 之上。

flowchart TB
    A[Agent / LLM 应用] --> B[Knowledge Context Layer]
    B --> C[层级路由]
    B --> D[角色过滤]
    B --> E[图谱扩展]
    B --> F[Context Budget 管理]

    C --> G[LLM Wiki]
    D --> H[知识图谱]
    E --> I[GraphRAG]
    F --> J[Vector Store]
    G --> K[源文档]
    H --> K
    I --> K
    J --> K

它承担的是“让 Agent 知道该读什么”的职责:

  • LLM Wiki 负责沉淀可读页面;
  • Graphify 负责发现实体和关系;
  • GraphRAG 负责全局摘要和局部图谱搜索;
  • 向量数据库负责精确片段召回;
  • 分层知识库负责层级、角色、路径和预算编排。

知识库会腐烂,必须设计同步机制

知识库最危险的问题不是没内容,而是内容过期。没有文档时,用户至少知道要去问人;过期文档会让用户带着错误信心执行错误操作。

常见腐烂形式有三类:

类型 表现 危害
静默过期 接口签名、配置路径、命令参数已经变了,文档没更新 很高,容易直接误导操作
层级漂移 当初的架构决策已经变成历史背景,却仍放在 L2 中等,会干扰判断
覆盖盲区 新服务上线很久,但没有架构说明、实现参考或排障记录 较高,影响新人和排障

一个简单判断标准是:新人按知识库操作会踩坑,说明知识已经失效。

不同层级需要不同保鲜周期

分层以后,维护策略也应该分层。原则不需要每天检查,但实现文档和排障 SOP 可能几天就会过期。

层级 合理审查周期 典型过期信号
L1 原则 年度 团队对某条原则理解出现明显分歧
L2 架构 季度 系统拓扑、依赖关系和文档不一致
L3 规范 月度 Lint 规则、接口约定和文档描述不同
L4 实现 周级或天级 模板跑不通、SDK 版本过期、配置失效
L5 经验 天级 SOP 中的命令、路径、告警名称不存在

这意味着维护系统不能只靠“每月统一检查一次”。更有效的做法是让变更事件触发知识更新。

触发事件 应更新层级 原因
架构评审通过 L2 新的架构决策产生
Lint 规则变更 L3 编码规范发生变化
依赖大版本升级 L4 示例代码和模板可能失效
故障复盘完成 L5 新经验需要沉淀
新服务上线 L2 + L4 需要补服务架构和实现参考
新人反复提问 L3 / L5 高频问题说明文档有缺口

用审计指标代替人工巡检

靠人逐页检查知识库很难持续。更稳定的方式是定义健康指标,让系统自动发现问题。

审计维度 检查内容 健康标准
覆盖率 每层是否有条目,核心服务是否被覆盖 无空层,核心服务都有文档
新鲜度 条目最后更新时间 L4/L5 不应长期无人更新
图谱连通 是否存在孤立节点 每个条目至少有一条关系边
层级平衡 各层条目数量是否合理 L1 控制数量,避免某层占比过高
反向引用 下游实现能否追溯到规范和架构 关键实现有来源说明
反馈闭环 故障经验是否推动规范或实现更新 重大复盘有后续改进边

增量同步可以设计成三段式:

flowchart LR
    A[Phase 1 审计] --> B[发现覆盖缺口和过期条目]
    B --> C[Phase 2 摄入]
    C --> D[加载源文档]
    D --> E[分块/分类/去重]
    E --> F[写入或更新分层知识库]
    F --> G[Phase 3 后审计]
    G --> H[对比覆盖率和连通性变化]

去重和更新策略可以结合 checksum 与 entry ID:

场景 动作
内容不变,层级不变 skip,跳过
内容变化,层级不变 update,保留创建时间并更新内容
内容相同或相近,但层级改变 move,删除旧层条目并写入新层
全新内容 write,新增条目和关系

这套机制的重点不是一次性生成漂亮目录,而是让知识库能随着代码、架构和运维经验持续变化。

检索效果应该怎么评估

分层知识库不能只看主观体验,需要用检索指标评估。常见指标包括:

指标 含义
Hit@K 前 K 个结果里是否命中正确文档
MRR 正确结果排名越靠前,分数越高
Context Precision 返回上下文里有多少是相关内容
Context Recall 应该召回的内容里有多少被召回
Faithfulness 生成答案是否忠于上下文
Answer Relevancy 答案是否真正回应问题

一个工程知识库的评测集应覆盖不同问题类型,而不是只测简单问答:

查询类型 典型问题
代码细节 函数用法、配置方法、SDK 初始化
运维排障 告警处理、发布回滚、容量规划
架构概念 技术选型、模块边界、通信方式
跨服务关联 依赖关系、数据流、故障影响面
导航 新人阅读路径、知识覆盖度
服务定位 服务职责、技术栈、业务域归属

从常见表现看,不同方案的优势并不一样:

方案 更擅长的问题 容易吃亏的问题
Naive RAG 代码细节、明确字段、局部文档问答 跨服务关联、导航、全局理解
LLM Wiki 概念解释、综述、稳定主题学习 高频变化的代码细节和运维信息
Knowledge Graph 依赖关系、影响面、关键节点发现 直接参数问答和操作步骤
GraphRAG 全局主题总结、局部实体扩展 构建成本和增量更新
分层知识库 层级定位、角色适配、导航路径 函数级深度不如向量检索
分层知识库 + RAG 结构化导航 + 代码级细节 系统复杂度更高,需要维护索引和图谱

在工程实践里,混合检索通常更稳:分层结构负责让系统找对方向,RAG 负责补齐具体细节,知识图谱负责连接上下游关系。

一个可落地的目录结构

分层知识库可以从简单目录开始,不一定一开始就上复杂平台。

knowledge-base/
  L1-principles/
    engineering-principles.md
    reliability-principles.md

  L2-architecture/
    order-domain-adr.md
    service-topology.md

  L3-standards/
    api-design-standard.md
    logging-standard.md
    lint-rules.md

  L4-implementation/
    java-sdk-usage.md
    service-template.md
    config-examples.md

  L5-experience/
    incident-2026-05-order-timeout.md
    rollback-sop.md
    alert-troubleshooting.md

  graph/
    edges.yaml
    nodes.yaml

  roles.yaml
  index.md

关系边可以用 YAML 描述:

edges:
  - from: engineering-principles
    to: order-domain-adr
    type: governs

  - from: order-domain-adr
    to: api-design-standard
    type: constrains

  - from: api-design-standard
    to: java-sdk-usage
    type: implements

  - from: incident-2026-05-order-timeout
    to: rollback-sop
    type: feedback

索引页负责给人和 Agent 提供入口:

# Knowledge Index

## 新人路径
1. L1-principles/engineering-principles.md
2. L2-architecture/service-topology.md
3. L3-standards/api-design-standard.md
4. L5-experience/alert-troubleshooting.md

## 开发者路径
1. L3-standards/api-design-standard.md
2. L4-implementation/service-template.md
3. L4-implementation/java-sdk-usage.md

## SRE 路径
1. L5-experience/alert-troubleshooting.md
2. L5-experience/rollback-sop.md
3. L2-architecture/service-topology.md

只要有分层、索引、角色和关系边,就已经具备 Knowledge Context Layer 的雏形。后续可以逐步增加自动分类、图谱可视化、向量检索、健康审计和增量同步。

适合和不适合使用分层知识库的场景

分层知识库适合知识复杂、角色多、文档生命周期差异明显的团队。对于只有少量文档的小项目,直接用搜索或简单 RAG 就够了。

场景 是否适合 原因
多服务工程团队 适合 服务依赖、架构约束、运维经验需要关联
新人 onboarding 成本高 适合 可以设计跨层阅读路径
Agent 需要调用内部知识完成任务 适合 需要稳定上下文编排
文档经常过期 适合 分层审计和变更触发能降低腐烂
只有十几篇静态文档 不一定适合 结构成本可能大于收益
只做简单 FAQ 不一定适合 Naive RAG 或全文搜索足够
强依赖函数级代码问答 需要混合 RAG 分层结构不替代代码级召回

核心设计原则

分层知识库最重要的不是“五个目录”,而是几条设计原则:

  1. 先分层,再检索。 先判断问题需要原则、架构、规范、实现还是经验,再进入对应层级召回。
  2. 用图谱表达关系。 文档之间要有约束、实现、验证、反馈等明确边,不能只靠文件夹隔离。
  3. 按角色分配上下文。 不同角色有不同优先层级和上下文预算,不能返回同一批材料。
  4. 把更新绑定到变更事件。 架构评审、规则变更、故障复盘、新服务上线都应该触发知识同步。
  5. 让 RAG 补细节,不让 RAG 承担全部结构。 向量检索适合找代码级片段,但不适合独自管理知识层级、角色和关系。

最终目标很明确:当用户或 Agent 提出问题时,系统不是返回几段看起来相似的文本,而是在正确层级、正确角色和正确关系路径上组织答案。这样,知识库才不只是文档仓库,而是真正可被 Agent 使用的上下文基础设施。


评论