跳到主要内容

OKF 与 LLM Wiki 深度解析:从知识库到可编译知识操作系统

Rainy
雨落无声,代码成诗 —— 致力于技术与艺术的极致平衡
Rainy
29 MIN READ... VIEWS

LLM Wiki 不是“给大模型看的百科页面”,而是把组织知识编译成一种人能读、机器能检索、Agent 能遍历、系统能验证的长期知识结构。

先澄清一个容易混淆的点:OKF 在开放知识领域通常指 Open Knowledge Foundation;而本文讨论的 OKF 是面向 LLM Wiki 的 Open Knowledge Format,可以理解为一种工程规范提案,用来约束 AI 原生知识库的目录、页面、元数据、引用、链接、校验和演进方式。

截至 2026-06-19,LLM Wiki 更像一个快速成型的系统范式,而不是已经被 W3C、ISO 或某个基金会正式标准化的协议。腾讯研究者在 2026 年 5 月的 LLM-Wiki 论文中,把它描述为一种“Retrieval as Reasoning”的检索范式:把原始文档编译成结构化 Wiki 页面,提供搜索、阅读和链接跟随工具,并用 Error Book 记录和修复知识构建错误。本文的 OKF 则是在这个方向上给出一套更可落地的格式规范。


一句话理解

传统 RAG 的核心对象是 Chunk

原始文档 -> 切块 -> 向量化 -> Top-K 检索 -> 塞给 LLM

LLM Wiki 的核心对象是 Page

原始文档 -> 编译 -> 结构化 Wiki 页面 -> 索引/链接/校验 -> Agent 搜索、阅读、遍历

OKF 的核心对象是 可校验的知识格式

Page + Metadata + Facts + Sources + Links + Quality Rules + Change History

如果用操作系统类比:

层级传统 RAGLLM Wiki / OKF
存储单元ChunkPage / Fact / Source
组织方式扁平列表目录、页面、双向链接、关系图
检索方式一次性 Top-K搜索、阅读、跟链接、多轮充分性判断
质量控制依赖分块和 rerank来源追踪、结构校验、冲突检测、错误账本
人类可维护性强,页面可读、可审、可编辑
Agent 适配被动上下文注入主动工具调用和路径遍历

关键差异不是“有没有向量数据库”,而是知识是否被组织成可推理的结构。


为什么传统 RAG 不够用?

RAG 很适合回答局部事实问题,比如“某份合同的付款周期是多少”。但当问题变成下面这种形态时,扁平 Chunk 会越来越吃力:

  • 跨文档比较:A 产品和 B 产品的 SLA 差异是什么?
  • 多跳推理:某个功能的负责人是谁,他最近修改过哪些相关模块?
  • 时序判断:这个政策在 2025 年和 2026 年有什么变化?
  • 证据审计:答案里每个结论来自哪个原始来源?
  • 知识治理:某条知识过期了,怎样找到所有依赖它的页面?

传统 RAG 的典型问题有三类。

1. Chunk 没有身份

Chunk 通常只是一个文本片段。它可能有 document_idchunk_idembedding,但它不是一个稳定的知识对象。

当文档更新后:

  • Chunk 边界可能变化;
  • 向量 ID 可能重建;
  • 引用它的问答无法稳定追踪;
  • 旧答案很难知道自己依赖的是哪一版知识。

LLM Wiki 则会把“实体、概念、流程、事件、决策”抽象成稳定页面。页面可以持续演进,来源可以追加,结论可以被修订。

2. Chunk 之间没有显式道路

向量相似度擅长“找相似文本”,不擅长“沿关系走路”。

例如用户问:

哪个团队负责上季度事故中被回滚的那项功能?

这个问题可能需要路径:

事故复盘 -> 回滚功能 -> 功能 RFC -> Owner 信息 -> 团队页面

向量检索可能命中事故复盘,却不一定继续找到 RFC 和团队页面。LLM Wiki 的页面链接则给 Agent 提供了可遍历路径:先读事故页,再跟随 rolled_back_feature,再跟随 owned_by

3. Chunk 难以治理

RAG 管道常见的质量问题是静默发生的:

  • 分块截断表格;
  • 旧文档和新文档相互冲突;
  • LLM 总结时丢掉关键限定条件;
  • 页面之间出现孤儿链接;
  • 答案引用了没有权限的来源;
  • 同一实体有多个名字,索引没有合并。

LLM Wiki 要求这些问题被显式记录、验证和修复。它把知识库从“索引产物”升级成“长期维护的工程资产”。


LLM Wiki 到底是什么?

LLM Wiki 可以定义为:

一种面向 LLM/Agent 的结构化知识库。它把原始资料编译成稳定的 Wiki 页面,每个页面包含元数据、摘要、事实、来源引用、关系链接和质量状态;Agent 可以通过工具搜索页面、读取页面、跟随链接,并在证据足够时回答。

它有四个基本特征。

1. Human-readable:人能读

LLM Wiki 不应该只是向量库、三元组表或压缩摘要。它首先应该是人类可阅读的 Markdown/Wiki 页面。

原因很简单:知识库会出错。只要会出错,就需要人类能审查、修改、合并和回滚。

2. Machine-traversable:机器能走

页面不仅是文章,还要提供结构化元数据:

  • 稳定 ID;
  • 别名;
  • 标签;
  • 页面类型;
  • 关系边;
  • 来源 ID;
  • 更新时间;
  • 可信度;
  • 权限级别。

这些字段让 Agent 能够有计划地搜索、筛选、跟随、比较和溯源。

3. Source-grounded:结论能溯源

每个事实都应该尽量指向来源,而不是只保留“模型总结过的话”。

claim -> source_id -> original artifact -> line/page/section/hash

没有来源的内容可以存在,但必须标记为 inferredhypothesisneeds_review,不能伪装成事实。

4. Self-evolving:知识能演进

LLM Wiki 不是一次性离线生成结果。真实组织知识每天变化,因此它需要:

  • 增量摄入;
  • 页面合并;
  • 链接修复;
  • 过期检测;
  • 冲突检测;
  • 错误模式沉淀;
  • 质量评分回归测试。

这也是 Error Book 的价值:把反复出现的问题变成下一轮编译的约束。


从 RAG 到 LLM Wiki 的架构迁移

这张图里最重要的变化是:索引不再是唯一产物,页面本身才是主产物。

向量库、BM25、图数据库仍然有用,但它们是 LLM Wiki 的访问层,不是知识本体。


OKF 要规范什么?

OKF 的目标不是发明一个复杂的新文件格式,而是给 Markdown Wiki 增加一层可验证的结构约束。

一个可落地的 OKF 规范至少要管八件事。

规范对象要解决的问题典型字段或规则
身份同一知识对象如何稳定定位idslugkindcanonical_title
来源结论来自哪里source_idlocatorhashretrieved_at
事实哪些内容是可断言知识claimconfidencevalid_fromvalid_until
链接页面如何互相连接wikilinksrelationsbacklinks
目录Agent 如何浏览知识空间_index.mdtopicscollections
质量页面是否可信可用review_statuscoveragestaleness
权限哪些知识可被谁读取visibilitydata_classification
演进知识如何更新和回滚versionchange_logsupersedes

这八件事合起来,才让知识从“文本”变成“可操作对象”。


OKF 推荐目录结构

一个最小可用的 LLM Wiki 可以这样组织:

knowledge/
okf.yaml
sources/
source-manifest.jsonl
raw/
2026/
q2/
incident-2026-05-18.pdf
api-rfc-0042.md
pages/
concepts/
llm-wiki.md
retrieval-as-reasoning.md
systems/
payment-risk-engine.md
people/
platform-team.md
decisions/
adr-0042-use-hybrid-search.md
procedures/
rag-quality-regression.md
indexes/
_index.md
aliases.json
graph.json
page-manifest.jsonl
quality/
error_book.yaml
validation-report.json
eval-sets/
multi-hop-qa.yaml
freshness-qa.yaml

okf.yaml

仓库级配置,定义版本、命名空间、页面类型、关系类型和质量门槛。

okf_version: "0.1"
namespace: "rainlib"
default_language: "zh-CN"
license: "CC-BY-4.0"

page_kinds:
- concept
- entity
- system
- decision
- procedure
- event
- dataset

relation_types:
- depends_on
- owned_by
- supersedes
- contradicts
- implements
- referenced_by

quality_gates:
require_source_for_facts: true
forbid_dangling_links: true
max_unverified_fact_ratio: 0.15
stale_after_days: 90

source-manifest.jsonl

来源清单。每一行是一个来源对象,便于增量处理和哈希校验。

{"source_id":"src:api-rfc-0042","title":"API RFC 0042: Hybrid Search","kind":"markdown","uri":"git://docs/rfc/0042.md","hash":"sha256:8f3a...","created_at":"2026-04-03","retrieved_at":"2026-06-19","visibility":"internal"}
{"source_id":"src:incident-2026-05-18","title":"2026-05-18 Payment Incident Review","kind":"pdf","uri":"s3://knowledge/incidents/2026-05-18.pdf","hash":"sha256:ab91...","created_at":"2026-05-20","retrieved_at":"2026-06-19","visibility":"restricted"}

page-manifest.jsonl

页面清单。它是搜索、权限、增量构建和链接校验的入口。

{"id":"okf:concept:llm-wiki","path":"pages/concepts/llm-wiki.md","kind":"concept","title":"LLM Wiki","aliases":["AI Native Wiki","Agent Wiki"],"tags":["llm","rag","knowledge-base"],"updated_at":"2026-06-19","review_status":"reviewed"}
{"id":"okf:decision:adr-0042-use-hybrid-search","path":"pages/decisions/adr-0042-use-hybrid-search.md","kind":"decision","title":"ADR 0042: 使用混合检索","aliases":["Hybrid Search ADR"],"tags":["search","rag"],"updated_at":"2026-06-19","review_status":"draft"}

OKF 页面格式长什么样?

OKF 页面建议使用 YAML Frontmatter + Markdown Body。Frontmatter 给机器读,正文给人和模型读。

下面是一个完整示例。

---
okf_version: "0.1"
id: "okf:concept:llm-wiki"
kind: "concept"
title: "LLM Wiki"
canonical_title: "LLM Wiki"
aliases:
- "Agent Wiki"
- "AI Native Wiki"
language: "zh-CN"
tags:
- llm
- rag
- knowledge-base
summary: "一种把原始资料编译为结构化 Wiki 页面,并通过搜索、阅读和链接遍历支持 Agent 推理的知识库范式。"
source_ids:
- "src:llm-wiki-paper-2605.25480"
- "src:wicer-paper-2605.07068"
relations:
- type: "extends"
target: "okf:concept:retrieval-augmented-generation"
- type: "related_to"
target: "okf:concept:graph-rag"
quality:
review_status: "reviewed"
confidence: "medium"
coverage: "introductory"
last_verified_at: "2026-06-19"
stale_after: "2026-09-19"
security:
visibility: "public"
data_classification: "public"
---

# LLM Wiki

## TL;DR

LLM Wiki 是一种面向 Agent 的知识组织方式:它将文档编译为结构化页面,页面之间通过显式链接连接,并通过工具接口让 Agent 可以搜索、阅读、跟随链接和检查证据是否充分。

## 定义

LLM Wiki 与传统 RAG 的区别在于,它不把知识主要表示为扁平 Chunk,而是表示为可维护的 Wiki 页面。每个页面应包含来源、事实、关系和质量状态。

## 关键事实

- `fact:llm-wiki:001`:LLM Wiki 将原始文档编译为结构化、互相链接的 Wiki 页面。
- 来源:`src:llm-wiki-paper-2605.25480#abstract`
- 可信度:`high`

- `fact:llm-wiki:002`:LLM Wiki 的访问方式应包括搜索、阅读和链接跟随。
- 来源:`src:llm-wiki-paper-2605.25480#method`
- 可信度:`high`

## 关系

- 扩展:[[okf:concept:retrieval-augmented-generation|RAG]]
- 相关:[[okf:concept:graph-rag|GraphRAG]]
- 依赖:[[okf:concept:source-grounding|来源扎根]]

## 适用场景

- 多跳问答
- 企业知识库
- 研发文档导航
- 合规和政策问答
- 长期个人记忆

## 限制

- 编译过程可能遗漏细粒度事实。
- 页面链接可能出现孤儿链接或错误关系。
- 对时效性要求高的知识需要强制过期和重验证机制。

## 变更记录

- 2026-06-19:创建页面,基于公开 LLM-Wiki 与 WiCER 研究整理。

这个格式有几个设计重点:

  1. id 稳定,不随文件路径变化;
  2. kind 明确页面类型;
  3. aliases 解决同义词和缩写;
  4. source_ids 连接来源清单;
  5. relations 提供机器可遍历关系;
  6. quality 告诉 Agent 这页能否直接信任;
  7. 正文中的事实条目保留来源定位。

页面类型应该怎么划分?

LLM Wiki 最大的设计误区,是把所有内容都写成“文章”。这样看起来整齐,但 Agent 很难选择阅读策略。

建议至少拆出七类页面。

类型用途示例
concept概念解释LLM Wiki、Hybrid Search、Source Grounding
entity稳定实体某个产品、团队、客户、供应商
system系统/服务支付风控引擎、推荐服务、知识编译器
decision决策记录ADR、架构取舍、政策变更
procedure操作流程发布流程、事故处理、质量回归
event事件记录事故、发布、迁移、会议
dataset数据资产指标口径、样本集、评测集

页面类型影响 Agent 的读法:

  • concept:关注定义、边界、与其他概念关系;
  • decision:关注背景、备选项、取舍、后果;
  • procedure:关注前置条件、步骤、回滚;
  • event:关注时间线、参与者、影响和后续动作。

这比“所有页面都一个模板”更适合自动化。


事实、观点和推断必须分开

LLM Wiki 最怕的一件事,是把模型推断写成事实。

OKF 应该强制区分三类内容。

类型含义是否必须有来源示例
fact来源直接支持的事实“API v2 在 2026-04-03 被批准。”
interpretation对事实的解释最好有“该决策主要优化查询延迟。”
hypothesis待验证假设不一定,但必须标注“召回下降可能来自别名索引缺失。”

推荐写法:

facts:
- id: "fact:adr-0042:approved-date"
claim: "ADR 0042 于 2026-04-03 被批准。"
source_refs:
- source_id: "src:api-rfc-0042"
locator: "frontmatter.status.approved_at"
confidence: "high"
valid_from: "2026-04-03"

interpretations:
- id: "interp:adr-0042:latency-goal"
claim: "该决策的主要工程目标是降低跨文档问答的检索延迟。"
based_on:
- "fact:adr-0042:approved-date"
- "fact:adr-0042:benchmark-result"
confidence: "medium"

hypotheses:
- id: "hyp:search-quality:alias-missing"
claim: "近期召回下降可能与别名索引缺失有关。"
evidence_status: "needs_experiment"
owner: "search-platform"

这样做会增加编译成本,但能显著降低“知识库越用越自信、却越来越不可靠”的风险。


链接规范:别只写 Markdown 链接

普通 Markdown 链接只告诉你“跳到哪里”,不告诉你“为什么跳”。

LLM Wiki 需要两种链接:

1. 展示链接

给人看的链接:

参考 [[okf:decision:adr-0042-use-hybrid-search|ADR 0042]]。

2. 语义关系

给机器看的关系:

relations:
- type: "implements"
target: "okf:decision:adr-0042-use-hybrid-search"
evidence:
- "fact:payment-risk-engine:hybrid-search-rollout"

- type: "owned_by"
target: "okf:entity:platform-search-team"
evidence:
- "src:service-catalog#payment-risk-engine.owner"

关系类型应该被白名单化,否则知识图会失控。

常用关系包括:

  • depends_on:依赖;
  • owned_by:负责人或团队;
  • implements:实现某个决策;
  • supersedes:取代旧页面或旧决策;
  • contradicts:与某页面或事实冲突;
  • derived_from:从来源或上游知识生成;
  • part_of:属于某个系统或主题;
  • related_to:弱相关,谨慎使用。

related_to 很容易变成垃圾边,应该限制比例。一个成熟 Wiki 里,强语义关系应该多于弱相关关系。


Error Book:让知识库越用越准

Error Book 是 LLM Wiki 的关键部件。它不是普通日志,而是“错误模式数据库”。

一个 Error Book 条目可以这样写:

errors:
- id: "err:2026-06-19:dangling-link:001"
status: "open"
severity: "high"
category: "dangling_link"
symptom: "页面 pages/systems/payment-risk-engine.md 链接到不存在的 okf:entity:risk-core-team。"
root_cause: "编译器根据来源中的团队简称创建了 WikiLink,但没有先查询 aliases.json。"
affected_pages:
- "okf:system:payment-risk-engine"
constraint: "创建 wikilink 前必须先检查 page-manifest.jsonl 和 aliases.json;无法确认目标时使用纯文本并加入 unresolved_links。"
verifier:
type: "deterministic"
command: "okf validate links"
created_at: "2026-06-19"
last_seen_at: "2026-06-19"

常见错误类别:

错误表现修复方式
孤儿链接链接到不存在页面查别名、建页面、降级纯文本
来源缺失事实没有 source ref回到原文重提取,或标记为推断
事实冲突两页对同一事实给出不同值保留版本和适用时间,标记冲突
页面重复同一实体多个页面合并页面,别名重定向
摘要过度压缩关键限定条件丢失引入 probe 问题回归
权限泄漏公共页引用受限来源阻断发布或生成脱敏版本
过期知识旧政策仍被回答引用设置 valid_until 和 stale check

Error Book 的核心不是“记录错误”,而是把错误变成下一次编译的规则。


LLM Wiki 的运行时工具接口

Agent 使用 LLM Wiki 时,不应该直接拿到整个知识库,而是通过受控工具访问。

最小工具集:

type WikiSearch = (input: {
query: string;
kind?: string[];
tags?: string[];
visibility?: string;
limit?: number;
}) => Array<{
id: string;
title: string;
kind: string;
summary: string;
score: number;
matched_by: Array<"title" | "alias" | "tag" | "content" | "relation">;
}>;

type WikiRead = (input: {
ids: string[];
sections?: string[];
include_sources?: boolean;
include_relations?: boolean;
}) => Array<{
id: string;
title: string;
content: string;
relations: unknown[];
source_refs: unknown[];
}>;

type WikiFollow = (input: {
id: string;
relation_types?: string[];
depth?: number;
}) => Array<{
from: string;
relation: string;
to: string;
evidence?: string[];
}>;

建议再加三个治理工具:

type WikiTrace = (factId: string) => {
claim: string;
sources: Array<{ source_id: string; locator: string; excerpt?: string }>;
};

type WikiReportError = (input: {
page_id: string;
category: string;
description: string;
evidence?: string[];
}) => { error_id: string };

type WikiSufficiencyCheck = (input: {
question: string;
visited_pages: string[];
collected_facts: string[];
}) => {
sufficient: boolean;
missing_evidence: string[];
suggested_next_queries: string[];
};

工具接口的关键规则:

  1. Agent 回答前至少要 wiki_read 一个页面;
  2. 对高风险问题必须返回事实来源;
  3. 不允许越权读取受限页面;
  4. 如果证据不足,应继续搜索或明确说“不足以判断”;
  5. 读到冲突事实时,必须呈现冲突和适用条件。

建设 LLM Wiki 的完整流水线

第 1 步:确定知识边界

不要一开始就说“把公司所有文档做成 LLM Wiki”。这会失败。

先选一个边界清晰、问题高频、来源稳定的领域:

  • 某个产品线;
  • 某套内部平台;
  • 某类政策合规;
  • 某个工程知识域;
  • 某个客户交付项目。

定义三件事:

scope:
domain: "支付风控平台"
users:
- "平台工程师"
- "值班 SRE"
- "产品经理"
core_questions:
- "某个服务的 owner 是谁?"
- "某个告警的处理流程是什么?"
- "最近一次相关事故的根因是什么?"
- "某个架构决策为什么这么做?"
excluded:
- "客户隐私原始数据"
- "未脱敏的生产日志"

边界越清楚,页面类型、权限、评测集就越容易设计。

第 2 步:建立来源层

来源层是整个系统的地基。没有来源层,LLM Wiki 会退化成“模型写的百科”。

来源层需要保存:

  • 原始文件;
  • 来源 URI;
  • 获取时间;
  • 作者或系统;
  • 哈希;
  • 版本;
  • 权限级别;
  • 解析后的结构;
  • 行号、页码或段落定位。

不要只存解析后的文本。PDF、网页、PR、工单、会议纪要都要能追溯到原始 artifact。

第 3 步:解析与规范化

不同来源需要不同解析器:

来源解析重点
Markdown标题层级、代码块、表格、frontmatter
PDF页码、标题、表格、图注、OCR 置信度
Git文件路径、commit、diff、作者、时间
Issue/Ticket状态、评论、参与者、标签、时间线
Slack/飞书线程、回复关系、参与者、权限
数据表schema、字段解释、指标口径、血缘

解析输出不要急着进入 LLM。先变成统一的 Document AST,再进入编译器。

第 4 步:实体和主题识别

编译器需要知道“哪些东西值得成为页面”。

候选页面来源包括:

  • 标题;
  • 专有名词;
  • 服务名;
  • 团队名;
  • ADR 编号;
  • 指标名;
  • API 名;
  • 高频问题;
  • 已有页面的 unresolved link。

实体识别不要完全依赖 LLM。服务目录、代码仓库、组织架构、数据目录等确定性系统应该优先。

第 5 步:页面规划

页面规划决定知识库的骨架。

输入:来源批次 + 现有 page-manifest + aliases + unresolved links
输出:新增页面、更新页面、合并页面、废弃页面计划

示例计划:

plan_id: "compile-plan-2026-06-19-001"
source_batch:
- "src:incident-2026-05-18"
- "src:api-rfc-0042"
actions:
- action: "update_page"
page_id: "okf:system:payment-risk-engine"
reason: "事故复盘包含新的依赖和告警流程。"
- action: "create_page"
page_id: "okf:event:incident-2026-05-18-payment-timeout"
kind: "event"
reason: "新的生产事故,需要独立事件页。"
- action: "update_page"
page_id: "okf:procedure:payment-timeout-runbook"
reason: "事故后 runbook 已更新。"

没有页面规划,LLM 很容易每次都创建新页面,导致重复和混乱。

第 6 步:页面编译

页面编译不是简单总结,而是结构化重写。

编译 Prompt 应该包含:

  • 当前页面旧版本;
  • 相关来源片段;
  • 目标页面类型模板;
  • OKF 字段规则;
  • Error Book 中仍然 open 的约束;
  • 禁止创建无来源事实;
  • 禁止创建未验证 wikilink;
  • 输出 diff 或完整页面。

核心原则:

只把来源支持的内容写入 facts;
推断必须进入 interpretations 或 hypotheses;
缺证据的问题进入 open_questions;
不确定链接进入 unresolved_links;
冲突内容进入 conflicts。

第 7 步:确定性校验

第一层校验应该由代码完成,而不是 LLM。

必做校验:

  • YAML frontmatter 可解析;
  • 必填字段存在;
  • id 全局唯一;
  • kind 属于白名单;
  • relations.type 属于白名单;
  • 所有 wikilink 目标存在;
  • 所有 source_id 存在于 manifest;
  • valid_from 小于 valid_until
  • 页面权限不低于引用来源权限;
  • 没有明显泄漏密钥、Token、PII。

第 8 步:来源扎根校验

第二层校验要回答:

页面里的 claim 是否真的被 source 支持?

可以分三级:

级别方法成本适用
L1字符串/结构匹配日期、编号、owner、状态
L2Embedding entailment 检索摘要、解释性句子
L3LLM verifier多句推断、冲突判断

高风险知识至少要 L2,关键决策和合规内容要 L3。

第 9 步:索引构建

LLM Wiki 通常需要多索引并存:

  • 全文索引:标题、别名、正文;
  • 向量索引:语义搜索;
  • 图索引:关系遍历;
  • 时间索引:版本、有效期、更新时间;
  • 权限索引:可见性过滤;
  • 来源索引:从 source 找到 page/fact。

不要迷信单一向量库。成熟系统往往是混合检索。

第 10 步:评测与回归

LLM Wiki 的评测不应该只看答案对不对,还要看路径对不对。

建议评测维度:

维度指标
答案质量EM、F1、人工评分、LLM-as-judge
证据质量引用覆盖率、来源支持率、错误引用率
遍历效率平均工具调用数、平均读取页面数、延迟
结构健康孤儿页面数、孤儿链接数、重复页面数
新鲜度stale 页面比例、过期事实命中率
权限安全越权召回率、脱敏失败率
演进能力修复后错误复发率、Error Book closure rate

一个很实用的评测集结构:

questions:
- id: "qa:incident-owner:001"
question: "2026-05-18 支付超时事故中,被回滚功能的 owner 团队是谁?"
expected_answer: "Platform Search Team"
required_pages:
- "okf:event:incident-2026-05-18-payment-timeout"
- "okf:decision:adr-0042-use-hybrid-search"
- "okf:entity:platform-search-team"
required_facts:
- "fact:incident-2026-05-18:rollback-feature"
- "fact:adr-0042:owner-team"
type: "multi-hop"
risk: "medium"

什么时候该用 LLM Wiki?

不是所有知识库都需要 LLM Wiki。

适合

  • 知识会长期复用;
  • 问题经常跨文档;
  • 需要明确证据链;
  • 页面本身要被人维护;
  • 知识会不断更新;
  • Agent 需要自主探索;
  • 组织愿意维护质量规则。

不适合

  • 一次性问答;
  • 文档很少且结构简单;
  • 更新频率极高但不需要历史;
  • 只做关键词搜索;
  • 没有任何来源追踪要求;
  • 团队无法承担治理成本。

一个判断标准:

如果你的问题主要是“找一段相关文本”,RAG 足够。
如果你的问题是“沿着知识关系找证据”,LLM Wiki 更合适。

与 GraphRAG、LightRAG、知识图谱的关系

LLM Wiki 不等于 GraphRAG,也不等于传统知识图谱。

方案核心表示优点局限
RAGChunk简单、通用、上线快多跳和治理弱
GraphRAG实体/社区/摘要图全局主题和关系聚合强页面可读性和事实追踪不一定强
传统 KG三元组/本体形式化强,可推理构建成本高,覆盖叙述性知识难
LLM Wiki结构化页面 + 链接 + 来源人机共读,适合 Agent 遍历编译质量和治理成本高
OKF页面格式和治理规范可验证、可迁移、可协作需要工具链支持

最合理的生产架构通常是组合:

OKF Pages 作为知识主干
Graph Index 负责关系遍历
Vector Index 负责语义召回
BM25/全文索引负责精确匹配
Source Archive 负责证据追踪
Verifier 负责质量门禁

生产级架构参考

这个架构有三个关键边界:

  1. 来源层不可被编译结果替代:页面只是派生物,原始来源必须长期保留;
  2. 知识层以页面为主干:索引可以重建,页面和来源历史不能随意丢;
  3. 运行时工具必须受权限控制:Agent 读知识也要经过 ACL、脱敏和审计。

建设路线图

0 到 2 周:做最小闭环

目标不是平台化,而是证明 LLM Wiki 比普通 RAG 更适合某个场景。

交付物:

  • 选定一个知识域;
  • 收集 50 到 200 个来源;
  • 定义 3 到 5 个页面类型;
  • 写出 okf.yaml
  • 生成 30 到 100 个页面;
  • 实现 wiki_searchwiki_read
  • 做 30 道人工问题评测。

不要一开始做图数据库和复杂 UI。先证明页面结构和答案质量有价值。

2 到 6 周:引入质量门禁

交付物:

  • source manifest;
  • page manifest;
  • link validator;
  • source validator;
  • Error Book;
  • 基础 CI;
  • 别名表;
  • 冲突页面列表;
  • 评测集扩展到 100 到 300 题。

这个阶段的目标是让知识库可以持续更新,而不是一次性生成。

6 到 12 周:平台化

交付物:

  • 增量编译;
  • 权限过滤;
  • 多索引检索;
  • wiki_followwiki_trace
  • 人工审阅工作台;
  • stale fact 检测;
  • 版本快照;
  • 业务系统接入。

此时可以把它从实验工具升级为团队基础设施。

12 周以后:知识操作系统

长期方向:

  • Agent 自动提出页面修订;
  • 人类审批高风险变更;
  • 高频问答自动沉淀为 FAQ 或 procedure;
  • 事故、PR、ADR 自动关联;
  • 评测失败自动打开 Error Book;
  • 领域专家只处理冲突和高价值页面;
  • 知识覆盖率成为工程健康指标。

编译 Prompt 模板

下面是一个可直接改造的页面编译 Prompt 骨架。

你是 OKF Page Compiler。你的任务是根据来源资料和现有页面,生成或更新一个符合 OKF v0.1 的 Markdown 页面。

硬性规则:
1. 只把来源直接支持的内容写入 facts。
2. 推断、解释、假设必须分别放入 interpretations 或 hypotheses。
3. 每个 fact 必须包含 source_ref。
4. 不得创建不存在的 wikilink;不确定目标写入 unresolved_links。
5. 不得删除旧页面中的有效事实,除非新来源明确 supersedes。
6. 如果来源之间冲突,保留冲突并写入 conflicts。
7. 输出必须是 YAML Frontmatter + Markdown Body。

页面类型:
{page_kind}

现有页面:
{old_page}

可用页面清单:
{page_manifest}

别名表:
{aliases}

来源片段:
{source_chunks}

Error Book 约束:
{open_constraints}

请输出更新后的完整页面。

生产环境中,建议让模型输出结构化 JSON patch,再由代码渲染 Markdown。这样更容易做字段校验和 diff 审查。


CI 校验清单

把 OKF 当成代码仓库来管理,CI 至少应该检查:

[structure]
- frontmatter parse
- required fields
- valid page kind
- unique id
- valid relation type

[links]
- wikilink target exists
- relation target exists
- alias points to one canonical page
- no circular supersedes chain

[sources]
- source_id exists
- source hash exists
- source visibility >= page visibility
- every fact has source_ref

[quality]
- stale_after not expired
- confidence present
- review_status valid
- unresolved_links below threshold

[security]
- no secret patterns
- no restricted source in public page
- PII policy check

[eval]
- golden questions pass
- source support score above threshold
- no regression on critical questions

如果知识库是给生产 Agent 使用,CI 不通过就不应该发布新快照。


常见坑

1. 把 LLM Wiki 当成“自动写百科”

这会制造大量漂亮但不可靠的页面。正确目标不是写得像百科,而是把来源知识编译成可验证结构。

2. 页面过大

一个页面如果覆盖太多主题,Agent 会读到注意力稀释。建议按实体、决策、流程拆页,再通过关系连接。

3. 页面过碎

过度拆分会导致遍历成本太高。判断标准是:一个页面是否代表一个稳定的知识对象。如果只是某个段落,就不一定需要独立页面。

4. 弱关系太多

到处都是 related_to,图就没有信息量。关系应该尽量有语义和证据。

5. 没有过期机制

知识不是越多越好,过期知识会主动伤害答案。每个页面和关键事实都应该有 stale 策略。

6. 权限后补

权限必须从来源层开始继承。不要先生成公共页面,再尝试从正文里删敏感内容。

7. 只评测回答,不评测证据

答案对了但证据错了,在生产系统里仍然是失败。LLM Wiki 的价值就是可追踪,评测必须覆盖证据链。


一个最小实现可以怎么写?

如果只做 MVP,可以用非常朴素的技术栈:

模块MVP 选择
页面存储Git + Markdown
来源清单JSONL
全文索引SQLite FTS 或 Meilisearch
向量索引pgvector / Qdrant / LanceDB
图索引JSON + NetworkX,后续再换 Neo4j
校验Node/Python CLI
Agent 工具HTTP API 或 MCP Server
审阅Pull Request

MVP 的关键不是技术复杂度,而是格式纪律:

每个页面有 ID
每个事实有来源
每个链接可校验
每次更新可 diff
每个错误可沉淀
每次发布可回滚

做到这些,哪怕没有炫酷 UI,也已经比很多“向量库 + 聊天框”的知识库更可靠。


OKF 的成熟度模型

等级状态特征
L0文档散落文档存在,但没有统一索引和来源清单
L1可检索有 RAG 或全文搜索,但以 Chunk 为主
L2可阅读有 Markdown/Wiki 页面,人能维护
L3可追踪页面事实连接来源,支持引用追踪
L4可遍历页面有稳定关系,Agent 可多跳检索
L5可验证CI 校验结构、来源、权限和评测
L6可演进Error Book、增量编译、自动修复和回归
L7可治理权限、审计、版本、组织流程完整接入

大多数团队不要直接追 L7。先从 L2/L3 做起,补上来源追踪,再引入遍历和 Error Book。


总结

LLM Wiki 的本质,是把知识管理从“检索一段文本”推进到“维护一个可推理的知识结构”。

OKF 的本质,是给这个结构加上工程约束:

  • 页面有稳定身份;
  • 事实有来源;
  • 链接有语义;
  • 权限可继承;
  • 质量可校验;
  • 错误可复用;
  • 更新可回滚;
  • Agent 可通过工具遍历。

如果说传统 RAG 是给 LLM 接一台搜索引擎,那么 LLM Wiki 是给 Agent 接一个知识操作系统。搜索仍然重要,但它只是入口;真正的价值在于页面、关系、证据和演进机制共同形成的长期复利。


参考资料

Logo
RainLib

探索技术、设计与分布式系统的边界。构建面向未来的开发者工具。

留言与建议

© 2026 RainLib. 为未来构建。(Built for the Future)
版权所有。
系统正常