1645 字
约 5 分钟
17
LLM-Wiki知识库
2026-10-13
无标签
LLM-Wiki 知识库:知识编译与持久化
系列:ToyAgent 智能体知识库 08/26
一句话核心:RAG 是"知识躺着,问一次查一次";LLM-Wiki 是把项目知识编译成结构化条目、持久保存、增量维护——编译一次,持续复用。
为什么需要
智能体需要的知识其实分两类,处理方式完全不同:
- 检索型知识——文档、手册、网页,量大且杂,单次提问只用到其中一小角。这类知识适合 RAG:每次现场检索、用完即弃。
- 项目知识——架构约定、代码规范、部署流程、业务规则。它总量小、被高频引用、要求"永远在场"。每次都去翻文档既浪费 token 又不可靠,正确做法是编译成条目,随启动直接加载。
这个提法源自 Karpathy 对 LLM-Wiki 的描述,而它的工程形态你早就见过:AGENTS.md、CLAUDE.md——仓库根目录那份随对话自动注入的约定文件,就是"编译好的项目知识"。
一句话区分两者:RAG 的知识是只读快照,每次检索;LLM-Wiki 的知识是活条目,能在对话中增量沉淀、重启不丢。
核心机制
骨架是三步:加载 Wiki → 命中条目 → 增强生成,外加一个"编译指令"入口。
// 基础 Wiki:启动时编译一次(生产中来自仓库里的 AGENTS.md / CLAUDE.md)
private static final Map<String, String> BASE_WIKI = Map.of(
"架构约定", "本项目零依赖教学实现,模块间只经接口通信……",
"代码规范", "Java 17 语法;注释使用简体中文 Javadoc……",
"部署流程", "编译后启动,默认端口 8099……");
// 编译指令:把对话中的知识沉淀进 Wiki,并写入磁盘持久化
if (input.startsWith("编译:")) {
String topic = parseTopic(input); // "编译:发布流程:……" → "发布流程"
String content = parseContent(input);
userWiki.put(topic, content); // 增量条目
persistUserWiki(); // 写 wiki/user-wiki.md,重启可恢复
}
三个关键设计:
- 双层结构:基础 Wiki 只读(编译期固定),用户 Wiki 可写(对话中增量编译),查询时合并。
- 显式编译指令:用
编译:前缀触发沉淀,把"什么值得记"的决策权先交给用户;生产里可以升级为模型自主判断。 - 持久化:条目落盘而不是留内存,否则进程一重启,积累的项目知识全部蒸发。
编译与查询两条链路的状态流转:
stateDiagram-v2
[*] --> 基础Wiki: 启动加载
基础Wiki --> 命中条目: 用户提问
用户Wiki --> 命中条目: 用户提问
命中条目 --> 增强生成: 注入条目内容
增强生成 --> [*]: 带出处的回答
对话中 --> 用户Wiki: 编译指令
用户Wiki --> 磁盘落盘: persistUserWiki
磁盘落盘 --> 用户Wiki: 重启恢复
图示:基础 Wiki 启动即加载、用户 Wiki 靠编译指令增量沉淀并落盘持久化,查询时双层合并命中后增强生成。
举例
模拟对话轨迹——演示"编译一次,立即可用":
用户:项目用什么代码规范?
Agent:(命中 BASE_WIKI["代码规范"])
根据项目约定 [代码规范]:Java 17 语法,注释使用简体中文 Javadoc。
用户:编译:发布流程:每周三灰度,周五全量上线
Agent:(userWiki.put("发布流程", "每周三灰度,周五全量上线"))
已编译条目「发布流程」并持久化到 user-wiki.md。
用户:发布流程是什么?
Agent:(命中 userWiki["发布流程"]——刚才编译的知识立刻可用)
按已沉淀的约定 [发布流程]:每周三灰度,周五全量上线。
(用户点「重置」→ userWiki 清空;再问"发布流程"→ 查无此条目,如实拒答)
写文件落盘后的产物长这样:
wiki/user-wiki.md
---
发布流程: 每周三灰度,周五全量上线
数据库约定: 正文统一存 t_article_content 表,缓存键 article:*
---
生产视角的对照:这套机制在本仓库的形态就是 CLAUDE.md + memory 目录——架构约定、部署流程、踩坑记录全部编译成 markdown 条目,每次会话启动时注入,而不是靠 RAG 每次去代码库里捞。区别只在于:教学版用 编译: 前缀人工沉淀,生产版由 Agent 会话结束自动归纳沉淀("自我更新 Wiki")。
和 RAG 的对比
| 维度 | RAG(07) | LLM-Wiki |
|---|---|---|
| 知识来源 | 静态文档集合,只读 | 内置条目 + 对话中增量编译 |
| 生命周期 | 每次提问重新检索 | 持久化落盘,启动即恢复 |
| 典型问题 | "这份文档里说了什么" | "这个项目的约定是什么" |
| 检索方式 | 相似度打分取 Top-N | 条目名/语义直接命中 |
面试考点
- LLM-Wiki 和 RAG 怎么选? 看知识的访问模式:低频、海量、单次引用 → RAG;高频、小量、必须永远在场 → 编译成条目常驻。项目约定类知识用 RAG 反而危险——检索漏了,Agent 就按自己的默认习惯行事。
- 为什么条目要持久化? 智能体的价值随使用积累。不落盘的"学习"是伪学习,进程重启即归零,用户每次都要重新教一遍。
- AGENTS.md 是什么? LLM-Wiki 思想的工程落地:把团队给 AI 的约定(架构、规范、命令)编译成仓库内的固定文件,Agent 启动即加载,等同于"编译期知识"。
生产化路径
- 条目进仓库:编译产物直接提交为
AGENTS.md/CLAUDE.md,走 code review 管控质量,而不是存在 Agent 私有存储里。 - 编译自动化:会话结束时让模型提炼"本次学到了什么值得沉淀的",生成条目草稿,人工确认后合并进 Wiki(审校制,防止把错误经验固化)。
- 检索增强命中:条目多了以后,"命中条目"一步也可以上 Embedding——Wiki 条目本质是小型 RAG 语料,两者不冲突。
- 条目治理:加时间戳与来源标记,定期清理过时条目;约定类知识过期比没有更危险。
评论
0 条
还没有评论,先写一条吧。