跳到正文
This is Oscar
返回

知识需要一个 Meta-Knowledge 层

原文标题:Knowledge needs a meta-knowledge layer
原文链接:https://www.pinecone.io/learn/series/beyond-retrieval/knowledge-needs-meta-knowledge/

在第 1 部分里,我主张:成熟 RAG 系统中的核心失败,并不是狭义上的 retrieval 失败。系统即使能检索到权威且相关的文本,仍可能给出错误答案,因为它从未判断这些证据是否“在这里、现在、在这些条件下”适用。那就是 applicability 问题。

接下来的问题是架构层面的:系统需要什么,才能在生成开始之前强制执行 applicability?

它需要的不只是一个 corpus。它需要一个 meta-layer:描述每个 knowledge base 是做什么的、何时适用、需要哪些输入、应如何查询,以及边界在哪里。它需要“知道自己知道什么”。我把这称为 meta-knowledge layer

只要 corpus 不再是同质的,meta-knowledge 就是必需的。成熟组织会累积带条件的真值:按地区、套餐层级、产品版本、生效日期、环境或用户状态分叉的策略。最简单的 RAG 架构会把这些都当成一类东西:全部建索引,然后交给相似度搜索去排序。当 corpus 很小且内部一致时,这可能可行;但当同一个问题在不同条件下存在不同有效答案时,这种做法会失效。

延续第 1 部分的用例:用户问“我的烤面包机坏了——我能换新吗?”一个朴素系统会检索到标准零售保修、公共事业计划保修、以及更新后的故障排查要求中的相关段落。每段都“主题相关”,但它们不属于同一个策略分支。系统把它们混在一起时,会输出一段流畅但在真实流程中不会被执行的答案。

这就是 franken-answer:把局部相关的证据跨越不兼容的 applicability frame 拼接在一起。

狭义 retrieval 本身并没有问题。失败是 结构性 的。系统被要求在查询时决定 applicability,但没人告诉它组织内部的“真值分区”是怎样划分的。

组织本来就知道自己的知识并非“一种东西”。不同团队维护不同文档;不同系统记录不同流程;不同访问控制、权威等级与新鲜度规则同时存在。问题不在于这些区分不存在,而在于许多 RAG 栈没有在运行时显式表示它们。

一个有用的思考单位是 knowledge base:位于检索接口之后的一组有边界的文档。一个 knowledge base 可覆盖零售保修策略,另一个覆盖公共事业计划资格,再一个覆盖故障排查流程,还有一个覆盖履约操作。这不要求物理上分离的向量库——可以是独立索引、namespace、过滤视图或其他边界。关键在于运行时必须知道:这些是范围规则、必需输入和权威结构都不同的独立域。

但即便如此,分区只是必要条件,不是充分条件。知识一旦分区,agent 会面对新问题:这个问题该查哪个 knowledge base?它是否有足够信息去“安全地”查询?

这正是 meta-knowledge layer 的作用。

我把 meta-knowledge 的具体实现称为 “manifest”。manifest 是一个 agent 可读取的 knowledge base 契约。它描述 knowledge base 的用途、使用时机、必须先知道哪些输入、查询如何构造、哪些来源是权威,以及这个 knowledge base 的边界到哪里。

可以把它看作 retrieval 的接口描述:它定义如何调用 knowledge base,以及何时调用才是有效的。

这比普通 metadata 更广。metadata 可以告诉你文档日期、所有者、标签;manifest 告诉运行时如何在 retrieval 之前 推理 applicability。它把“关于知识的知识”变成可执行约束。

也需要说明本文不在讨论什么:问题并不是字面上的“单索引坏,多索引好”。成熟系统早已使用过滤器、namespace、ACL 和路由启发式。它们有帮助,但并不足以单独解决 applicability。更深层需求是:范围规则、必需输入、权威条件和边界条件,必须在运行时显式且可检查。

实践里,一个 manifest 可能包含五类信息:

这个顺序很重要,因为它对应运行时决策顺序。

采用 manifest 的系统能以更纪律化的方式处理 applicability:

  1. 路由与范围检查:agent 或 router 读取 manifests,判断哪个 knowledge base 真正匹配用户目标。如果没有任何 knowledge base 在范围内,就应尽早重定向,而不是检索“看起来相关”的文本并生成自信但错误的答案。
  2. 收集必需输入:manifest 声明 retrieval 有意义前必须知道什么。保修类 knowledge base 可能要求产品型号、购买或注册日期、地区和计划状态。若缺失,系统应先提问,而不是猜。
  3. 构造查询:选定 knowledge base 且具备必需输入后,系统按 manifest 模板/规则组装查询。这样 retrieval 会与该 knowledge base 的结构对齐,而不是依赖用户原始措辞里“碰巧出现”的词。
  4. 检索证据:只有此时,系统才向选定 knowledge base 请求上下文。
  5. 回答前一致性检查:检索结果并不自动安全可用。运行时仍需验证返回材料是否与用户分支一致、时间上仍然有效、且权威性足够支撑答案。若不满足,系统应继续提问、谨慎回答或拒答。

这套结构可处理多种常见 applicability 失败:

这就是为什么高 recall 不够。向量检索擅长找“相关段落”,但“相关”弱于“适用”。

支持系统可能因为匹配“烤面包机更换”而检索到标准 24 个月零售保修,即便该设备来自公共事业计划,真实条件是 12 个月窗口加注册要求。两种情况下 retrieval 看起来都很好,答案仍可能错误。缺失的不是更多语义相似度,而是可执行的 applicability 约束。

烤面包机示例很清楚地说明了操作层面的差异。

没有 meta-layer 时,agent 会在所有可用来源里搜索并抓住“听起来最近”的指导:检索零售保修、计划保修和 1 月 1 日后新增故障排查要求,再把它们混成一个看似有帮助、却不对应任何有效分支的答案。

引入 meta-layer 后,行为会变化:

两套系统的 retrieval 骨干可以完全一样。差别是:一个把 applicability 作为显式运行时问题处理,另一个把它交给运气。

这对 agentic 系统更关键。agent 一旦可以调工具、修改状态、触发工作流,选错 knowledge base 带来的就不只是错误段落,而是错误动作。

一个被要求重启支付服务的运维 agent,应先验证环境、权限和部署拓扑,再选择 runbook。一个计费 agent 在变更用户套餐前,应先验证账户状态、套餐层级和地区。原则与 RAG 一样:agent 不能仅因找到语义相关流程就行动;只有该流程的 applicability 条件被满足时才应行动。

这种方法有成本。manifest 需要编写、维护,并与底层 knowledge bases 保持同步;它们会漂移。它们也不能替代高质量 retrieval、来源治理和判断力。但它强制了一种有价值的纪律:同一个组织在整理知识时,也必须以运行时可检查的形式声明范围、权威与前置条件。实践中,这往往比把这些逻辑藏在 prompts、heuristics 和“希望”里更不脆弱。

RAG 的实际上限不是 recall,而是在真实约束下的 applicability。

当 meta-knowledge layer 被表达成具体工件时,它才真正可操作:每个 knowledge base 一个 manifest,再配一个读取 manifests 的 planner,决定该问什么、查什么、如何编排序列调用,以及在什么情况下根本不应回答。

所以,当你看到一个“流畅但错误”的答案,不要只问“系统检索到了什么?”要问更难的问题:它是否为用户目标选对了 knowledge base?它是否具备必需输入,还是应先澄清?证据是否权威、当前有效且内部一致?以及系统是否本就不该回答?

在本系列下一篇里,我们会进入实践部分:用 progressive introspection 技术和基于 LLM 的 planning / routing,创建一个可运行的 manifest 与 planner。

引用


分享到:

上一篇
从 model 到 agent:为 Responses API 配备 computer environment
下一篇
在 n8n 中构建 RAG 工作流:如何选择合适的 Pinecone 节点