langrq的blog

把博客变成可问答的知识库:OKF 三层架构与质量闭环

文章要点

阐述本站博客问答的 OKF 架构原理——MDX 真相源、三层分工(Authoring / Build / 消费)、路由全文分离、链接图谱扩展与评测质量闭环;纯原理,不涉及实现细节。

本站右下角有一只 Live2D 猫咪——它是访客提问的入口,但不是这篇的重点。这篇要回答的是更底层的问题:

博客文章散落在一篇篇 MDX 里,怎么让 Agent 只基于已写内容作答,而且你能验证它真的答对了?

我的选择是 Open Knowledge Format(OKF):不是再做一个向量库,也不是每次 query 把全部 Markdown 塞进 prompt,而是把博客知识 编译 成一棵可交换的概念图,再分三层各管一段。OKF 格式本身另文解读;这篇只讲 架构原理

一分钟版

要点内容
知识真相源博客 MDX 文章——人写的、可 review 的原始稿
交换格式OKF bundle:一个概念一个文件,链接连成知识图
三层分工Authoring 规范 → Build 同步与索引 → 消费侧路由与作答
核心约束路由阶段只读摘要,作答阶段才读全文
检索策略倒排索引 + 链接图谱扩展 + LLM 精排(不用向量库)
质量闭环自动生成问题 → 跑引擎 → 引用命中率 + 内容正确性双评分
拒答原则博客未覆盖的内容明确拒答,不编造

总体架构

Text
MDX 文章(真相源)
    │
    ▼  Build:正文同步 + 路由索引
OKF 知识库(摘要元数据 + 全文 + 链接图)
    │
    ▼  消费:题型检测 → 预过滤 → 倒排召回 → 图谱扩展 → 精排 → 读全文作答
问答结果(答案 + 引用概念)
    ▲
    └── 质量闭环:评测管线反向验证

三层并列:Authoring 管「怎么写」、Build 管「怎么编译」、消费 管「怎么答」。评测不是第四层,而是绕回去检验前三层是否真 work 的闭环。

Layer A — Authoring:写的时候就为路由服务

OKF 的消费侧 不扫正文做发现——它先读每个概念的摘要卡片(标题、描述、关键词、标签、类型)。这意味着:authoring 质量直接决定召回

手写 bundle 时要遵守几条纪律:

  • 每个概念有明确的 类型,方便按类过滤;
  • 描述和关键词 必须含可检索的实体名——正文里出现但摘要里没有的词,路由阶段根本「看不见」;
  • 相关概念 互链,为后面的图谱扩展预埋边。

这是「宽松消费、严格作者」:消费者不应因缺字段拒收 bundle,但作者偷懒会在路由阶段付出代价。

Layer B — Build:把博客编译进 OKF

博客 MDX 是 真相源——作者改文章、走 Git review,OKF 是编译产物,不是第二份要手工维护的 Wiki。

Build 做两件事:

  1. 正文同步 — MDX 变更时,把归一化后的正文写回对应 OKF 概念;内容 hash 未变则跳过,避免无意义写入。
  2. 路由索引 — 全库生成倒排表和链接邻接表。运行时 只读索引产物,不在 markdown 文件上全库扫描。

这层把「写作」和「问答」解耦:你继续用熟悉的 MDX 工作流写文章,Build 负责把知识编译成 Agent 能高效消费的形状。

Layer C — 消费:先找对文,再读全文

访客提问进来,引擎按题型分岔:

题型路径
归类(如「有哪些 AI 相关文章?」)规则路径:按标签/合集直接返回子集
事实 / 跨文预过滤 → 倒排 Top-K → 图谱扩展 → LLM 精排 → 加载全文作答

事实问答和跨文关联走同一条主干,差别在精排后选几篇、图谱扩展跳几 hop——跨文需要把「A 文引用了 B 文但 B 没被倒排命中」的邻居补进来。

作答阶段的硬约束:

  • 只能基于提供的正文——没覆盖就拒答;
  • 输出必须带 引用的概念 ID——答案可追溯,也为评测提供硬指标。

拒答或低置信时,引擎 扩大检索范围重试,而不是放宽「不能编造」的底线。

站点若有受保护文章,问答功能整体走 站点门控——未解锁则不可用;解锁后引擎基于全部文章作答。鉴权与知识架构正交,这里不展开。

三条设计护栏

1. 路由 / 全文分离

路由阶段 永远不看正文。摘要卡片和完整概念是两种数据——前者用于「找哪几篇」,后者用于「读了之后怎么答」。

好处很直接:token 可控;更关键的是 防止还没选对文就开始编——如果路由阶段就能读到全文,模型容易「答得像真的」而引用却是错的。

2. 链接图谱扩展

纯倒排索引擅长 模糊命中(关键词对上了),但弱在 关系补全(这篇引用了哪篇、改 A 会影响谁)。

OKF 的概念链接是 预编译好的边。倒排召回 Top-K 之后,沿链接把邻居拉进来——向量 RAG 每次 query 现场「再发现」关系;OKF 模式让关系在 authoring 时就写进图里。

3. 可验证拒答

「博客里没有写到」必须是合法输出,且 citedIds 为空时可机器判定。拒答不是失败,是 可测的行为——评测管线专门生成「博客未覆盖」类问题来检验。

质量闭环:怎么知道它答对了

架构画完不等于能上线。我加了一条 评测回路

  1. 从每篇文章 自动生成 测试问题,附带期望引用的概念和参考答案;
  2. 批量跑引擎,支持断点续跑;
  3. 双指标评分——引用 ID 命中率(硬指标)+ LLM 评判内容正确性(软指标)。

路由 recall 是 门禁:找错文或漏选,后面作答再漂亮也是零分。早期评测暴露的典型失败是——正文里有某个技术词,但摘要/metadata 没收录,路由阶段「看不见」→ 误拒答。这反过来驱动 Authoring 和 Build 改进(自动提取关键词写回 frontmatter),而不是在消费侧无限加 prompt 魔法。

和相近方案对比

方案优点局限
纯 RAG 扫 MDX实现快,不用维护第二份知识无预编译关系,跨文关联弱;每次 query 重新检索
纯 LLM 选文链路短摘要不含正文词时漏选;不可解释、难评测
OKF 三层 + 图谱可解释、可评测、可扩展;写作与消费解耦需要 authoring 与 build 纪律

一句话

OKF 把博客知识 编译 成可交换的概念图;Authoring、Build、消费各管一段,路由与全文严格分离;评测闭环保证这不是「能 demo 的猫咪」,而是 可验证的问答系统


延伸阅读卡帕西强推的 LLM Wiki,终于有了通用格式——谷歌发布 OKF(OKF 格式规范解读,与本文互补)

评论

加载评论中...