知识库设计
中山大学岭南学院副教授
回到两个底层约束
每次大语言模型的输入和输出,能放的字数有上限。几百份资料放不进一次输入;上一次说过的话,这一次它看不到。
它读进来的是字,写出去的也是字。读文件、改文件、查资料,都是它写出一张请求单,由 Claude Code 或 WorkBuddy 去执行,结果再变成字送回来。
这门课在做什么:一个懂你、能干、可控的数字人
结果能回到来源贯穿每一周
整门课的目的,是带大家自己做一个理想的数字人。前几周讲能干,这周讲怎么让它懂你。
没有记忆的它,如何懂你
没有记忆的它,如何懂你?
大语言模型没有记忆:每一次,它只看得到这一次输入里的东西。基于它的智能体要懂你,靠两件事。
一 写下来
- 关于你的事:专业、年级、在修的课、在做的项目
- 要它记住的事:项目进展、定下的决定
- 做事的规矩:先做什么、哪些事先问你
- 写成文件,放进一个属于你的文件夹
二 需要时找得到
- 每次干活前,先读规则文件
- 要用哪份材料,顺着目录和索引找到
- 找到的读进这一次的输入,也就是上下文
- 找到了、读进来,它才“想起来”
回到第一周那张图

知识库要回答的就一件事:这一次,把哪些资料放进输入?
不是 AI 记得,
而是它每一次都能精准找到
刚好需要它知道的信息。
我的信息中台,由哪几样东西组成
- 目录结构按研究、教学、会议、项目、人名等分区
- 规则文件这个库做什么、每个目录放什么、怎么处理新内容、哪些事先问我
- 文件索引每个文件夹一份,写清这里有什么
- 几个 Skill记一下、研究并保存、维护索引等固定动作

演示:同一趟课程录音,交给两个地方
差在五个动作
| 动作 | 聊天框 | 课程知识库规则文件要它做的事 |
|---|---|---|
| 理解 | 照字面整理,转写里认错的词照抄 | 对照术语词典,更正认错的专有名词,注明原记 |
| 归档 | 笔记只在聊天窗口里 | 存进这门课对应周的文件夹 |
| 连接 | 只看眼前这一段 | 翻出前几周的课程笔记和课程日历,补出“上次讲的”是哪一周 |
| 记录在哪 | 没有地方可补 | 对不上的列进“待确认”,那个文件夹的索引多一行 |
| 复用 | 靠人翻聊天记录 | 下次问这门课,顺着索引就找到 |
知识库的三种技术路线

从第一类讲起:文档索引检索。
第一类:
文档索引检索
模型先读索引,再请求打开要的那几篇。
个人笔记库就用这一类。
为什么不能简单把所有资料
都扔到一个文件夹下面?
一个每天在用的真实库
0_任务中台/AI 任务的过程记录2_AI/AI 实践与案例4_教学/课程5_会议/纪要,按周分6_研究/研究方向7_行政/行政事务9_学习笔记/读书与课程笔记每天有定时任务往里写;只展示目录,不展示笔记内容

让它懂你的,是三样东西
| 组件 | 它管什么 | 课程录音例子里 |
|---|---|---|
| 一 目录结构 | 找得到:光看文件夹名,就知道东西该放哪 | 笔记存进这门课第几周的文件夹 |
二 规则文件CLAUDE.mdAGENTS.md | 写下来:这个库服务谁、收到内容按什么顺序处理、哪些事先问你 | 打开文件夹就读进来;按术语词典更正认错的词,对不上的列进“待确认” |
三 文件索引_index.md | 找得到:每个文件夹一份,告诉它这里有什么 | 顺着索引找到前几周的课程笔记 |

这三样放进它每次的输入,就是前面说的上下文(Context)。备得越到位,它每次表现越稳。
组件一 · 目录结构:给它画一张地图
- 从五到九个分区起步,用起来再拆
- 名字按事说话,
5_会议比“杂项”强得多;
数字前缀管排序,中文管意思 - 允许往下再分一层,如
5_会议/2026年10月_第4周/ - 结构按你的学习和生活来分;今天的模板用的是通用版
AiNote/CLAUDE.md · AGENTS.md规则文件1_关于我/你是谁、在忙什么2_想法/判断、灵感3_工作/小组项目、实习,一项一份4_学习/课程与读书笔记5_会议/讨论记录按周分;人名词典6_研究/ … 9_代码/其余四个区临时工作区/草稿,不放正式笔记.claude/skills/三个 Skill_index.md,是这个目录的目录页。组件二 · 规则文件:写什么、长这样
# 这个笔记库的工作规则 每次开始新任务,先读这份文件
## 这个库服务谁 一位经济学大二学生;背景见 1_关于我/
## 目录分别放什么 每个分区一行;正式笔记不放临时工作区/
## 自带的三个 Skill takenote · research-save · update-vault
## 收到一段内容时,按这个顺序处理 七步:先读对应文件夹的 _index.md 再读笔记 · 判断新建还是更新 · 写完更新 _index.md · 回报相对路径
## 写作要求 不补写没提供的事实 · 拿不准的列“待确认”
## 涉及人名和数字 人名以人名词典为准 · 数字对不上就指出,不默默采信
## 必须先问我的情况 删除、覆盖、批量移动 · 改本文件 · 对外发送 · 个人信息
- 每开一次新任务
- 这份文件进入这一次的输入
- 它开口前已经读过
- 你直接说需求,不用再复述背景
Claude Code 读 CLAUDE.md,
WorkBuddy 读 AGENTS.md,两份同内容。
这份文件,不用你手写
你以为要做的
- 学 Markdown 语法
- 学怎么写规则文件
- 学索引文件的格式
- 再学一门技术
实际要做的
- 一句话交办:“照我刚才说的,帮我把这个库的规则文件写出来。”
- 它写完,你读一遍
- 缺哪一块,告诉它补上
- 改之前让它先把要加的那句话给你看
组件三 · 文件索引:告诉它这里有什么
5_会议/_index.md 里的两行| 文件 | 讲了什么 |
|---|---|
2026年10月_第3周/第1次小组讨论.md | 选题三个候选:直播电商退货率、外卖平台抽成、二手车定价;数据来源未定 |
2026年10月_第4周/第2次小组讨论.md | 定题直播电商退货率;许昊天负责平台数据,苏婉清负责问卷;10 月 30 日前交初稿 |

- 读根目录
_index.md - 判断进哪个分区
- 进子目录读摘要
- 锁定那一份
- 打开取正文
目录说明与索引:一张地图,一份清单
| 目录说明 | 文件索引 | |
|---|---|---|
| 写在哪 | 规则文件里的一节 | 每个文件夹一份 _index.md |
| 回答什么 | 每个分区放哪类东西 | 这个文件夹里现在有哪几份,各讲了什么 |
| 多久变一次 | 加分区、改结构时才改 | 每记一条就多一行 |
| 谁来更新 | 它起草,你先看再批 | 它写完笔记顺手更新(规则里写明) |

组件四 · 配套 Skill:让每次动作都一样
| 模板自带的 Skill | 你说什么话,它接住 | 它负责什么 |
|---|---|---|
| takenote 记一下 | “记一下” “帮我整理成笔记” | 把手上已有的内容归档进库 (上机第二步就是它) |
| research-save 研究并保存 | “研究并保存……” “查一下 XX 记进来” | 主动去外部查, 把新知识带回库里 |
| update-vault 维护索引 | “维护一下索引” “检查有没有断链” | 体检索引与链接, 找出漏进索引的笔记 |

什么时候该固定成 Skill:同一句话,连续三次结果都一样,就该固定下来了。
翻目录,就是一串 Tool Call

不切块、不换成向量。
每一步都是模型写的请求、宿主做的执行,工具记录里看得见。
这种做法叫基于索引文档的 Agentic Search。
上机:四步,把这个库改成你的
也认识你改“关于我”
打开材料包里的课程知识库(AiNote 学生版),工作空间选到库这一层;Claude Code、WorkBuddy 任选一端。老师做一步,你们跟一步。
演示:用 WorkBuddy 走一遍上机四步
第一步:让它认识这个库,也认识你
先读一下这个库,然后用不超过 5 个问题了解我:我的专业和年级、这学期在修哪些课、在做什么小组项目或实习、笔记喜欢怎么写、哪些事必须先问我。根据我的回答更新 1_关于我/ 里那两个文件。不要新建目录,不要动示例笔记。
- 新建任务,工作空间选到课程知识库这一层
- 整段复制上面的指令
- 回答它的问题,按自己的情况说;不写真实姓名、学号、手机号
- 它问的问题,是冲着你来的吗?
- “关于我”里有你刚说的话,
其他文件没被动过?
第二步:记一条
① 收件箱里有一段第 7 周的课堂录音转写,帮我整理成这节课的笔记。
② 记一下下面这段内容。【粘贴素材】
跑的时候盯一件事:它在动笔之前,有没有先去读索引。
对答案:这段随手记里埋了三个坑
| 随手记里怎么说的 | 它应该做到 | |
|---|---|---|
| 素材自己对不上 | 80 份+40 份,说“一共 150 份” | 指出 80+40=120,不跟着抄 150 |
| 和库里记录对不上 | “初稿按上次定的,11 月 2 日交” | 翻出第 2 次讨论记录:定的是 10 月 30 日;11 月 2 日进“待确认”,不替你选 |
| 人名 | “徐浩天”“林可馨” | 人名词典里是许昊天、林可欣:改过来,注明原记 |
| 落点也算一项 | — | 笔记落在 5_会议/2026年10月_第4周/,那个文件夹的 _index.md 多一条具体摘要 |
第三步:关掉对话,让它重新找
我们小组项目现在卡在哪?下一步谁做什么?说明你是怎么找到的。
- 新开一个任务,不要接着刚才那个对话;工作空间还选课程知识库
- 粘贴指令,看它去哪找、怎么找
- 答案里有刚记的那条,也有第 2 次讨论的约定,附上相对路径
- 它说得出读了哪几份
_index.md(根目录 →5_会议/→ 这一周……)
第四步:给它加一条规则
现在我要加一条规则:以后新资料和旧笔记说法对不上时,正文写新的,旧说法连同出处挪进这页末尾的“变更记录”。这条规则加进 CLAUDE.md 和 AGENTS.md。先别动手改文件,把你打算加的那句话发给我看,我说行你再改。改完把收件箱里的“W07 主题改名”通知整理进课程笔记。
- 发出去,它停下来,先给你看要加的那句话
- 看过没问题,回一句“行,改吧。”;写得空就打回去
- 看它把改名通知整理进去,旧名字去了哪
- 它先给你看,没有直接动手改
- 新规则具体:
哪类情况、加什么节、旧说法怎么放 - 旧说法进了变更记录,带出处;两份规则文件一起改了
第二类:
RAG 向量检索
先把文字变成一串数:embeddings
一段话里每个词出现几次,排成一串数(词袋)。只认字面:“净息差”和“净利息收益率”一个字面相同的词都没有,对不上。
一个词常和哪些词一起出现,就近似它的意思。
让模型读几十亿字,给每个词、每段话一串几百到上千个实数,意思相近的,这串数也相近。
这串数是一个向量,所有向量构成一个多维实数空间。比两支箭头的夹角(余弦),夹角越小越像。
每个词,是意思地图上的一个点
两维只留了约 20% 的差异,图上挨着的不一定真近,远近以右边的余弦为准。
它们常出现在一样的句子里。近,不等于同义。
足球离人工智能也有 0.57。单个词的余弦差零点零几,别读太多。
按字对不上,按意思对得上

年报文字里,读得出谁和谁是同类
左图拿 30 家银行照做。每家段落向量取平均,减去 30 家的平均,再两两比。
| 三个检验 | 嵌入 | 作者的词袋 |
|---|---|---|
| 按同业做多空,等权月度七因子 α(美国) | 146 bps | 119 bps |
| 10-K 写明的竞争者,前 100 家找回几成(美国) | 47.7% | 32.8% |
| 后来的并购对象,落在前 100 家里几成(全球) | 49.7% | 17.7% |
用整份 10-K 做的 TNIC,在美国仍略胜。嵌入的长处是能做到全球。
搭一个 RAG,五步

② 换成向量
③ 存起来
⑤ 把这几段和问题一起放进输入,让模型照着答、写出处
名字取自后两步:检索、增强、生成,RAG(Retrieval-Augmented Generation)。
演示 A:按字找,按意思找,再问一个它答不了的
[1] 余弦 0.777 | 农业银行 2025 年年度报告 · 第 26 页
…净利差 1.16 / 1.27 净利息收益率 1.28 / 1.42
[2] 余弦 0.775 | 农业银行 2025 年年度报告 · 第 25 页
…净利息收益率 1.28%,净利差 1.16%,分别下降 14 个和 11 个基点…
上海、民生、华夏、建设、渝农商行:没有农行
演示:净息差还是净利差,用 RAG 与不用
找片段,有三个天生的毛病

你手边的 RAG
| 软件 | 五步藏在哪 | 适合放什么 |
|---|---|---|
| WorkBuddy 资料库 | 上传文件后它替你切块、换成向量; 对话时挂上资料库就会先检索 | 量大、偶尔查的原件 |
| ima 知识库、乐享知识库 | 在 WorkBuddy 资料库里授权接入,调它们自己的检索 | 个人收藏(ima)、 单位团队库(乐享) |
| Cherry Studio 知识库 | 本地建库,选一个向量模型 | 想自己管资料、换模型 |
| Dify、扣子的知识库节点 | 工作流里的一个节点:检索资料 → 交给模型写 | 做成固定流程给团队用 |
回头看:Claude Code 自己不用向量检索
“Early versions of Claude Code used RAG + a local vector db, but we found pretty quickly that agentic search generally works better. It is also simpler and doesn’t have the same issues around security, privacy, staleness, and reliability.”
早期版本的 Claude Code 用过 RAG 加本地向量库,但我们很快发现,让它自己去搜(agentic search)总体效果更好。它也更简单,没有 RAG 在安全、隐私、内容过时和可靠性上的那些问题。
- 列目录看看有哪些文件夹
- 搜关键词看哪个文件提到它
- 打开文件读要的那几段
每一步都是一次 Tool Call,
就是第一类的做法。
进阶:30 家银行年报的 RAG
- 打开银行年报 RAG 文件夹,向量库已经算好
- 同一个问题跑三次:按字、按意思、加公司条件,看要的数排第几
- 让它只凭检索结果答一个比大小的问题,看它说不说“答不了”
- 没有硅基流动 key 时,只问问题清单里的原话
- 说得出按字为什么找不到农行净息差
- 每个数都写了哪家银行、原报告第几页
- 比大小那一问,
它说明了检索不够,没有硬答 - 它没有绕开检索脚本直接翻资料库
第三类:
LLM Wiki 知识编译
别每次现找,把资料编成一本百科
“The LLM is rediscovering knowledge from scratch on every question. There’s no accumulation.”
每问一次,模型都在从头重新找一遍,什么也没攒下。
“The knowledge is compiled once and then kept current, not re-derived on every query.”
知识编一次,之后一直保持更新,不用每次提问再推一遍。
三层:原件、条目、规则

raw_pdfs/(转成的文本放 raw_markdown/);条目=wiki/;规则=库根目录的规则文件与 wiki/schema/日常三个动作:入库、查询、体检

演示 C:问文献维基一个问题
/wiki-query 问:“自动化为什么不一定减少劳动需求?哪几篇论文怎么说?”wiki/_index.md → 进概念页或综合页 → 要细节时才打开原文。答案不是现场从 13 篇 PDF 里拼的,是从编好的页面里取的.workbuddy/skills/;这个库目前只在 Claude Code 上跑过literature-wiki/13 篇论文raw_pdfs/PDF 原件 13raw_markdown/转成的文本 13wiki/_index.md总索引sources/每篇一页 13concepts/概念 7mechanisms/机制 5debates/争议 3synthesis/综合 3log.md日志一页条目长什么样

开头一段:它是什么、为什么要紧
- Definition and Formal Mechanism
- Displacement and the Labor Share
- Displacement vs. Productivity Effect
- Empirical Evidence: US Wage Bill 1947–2017
- … 共 10 个小节,引自 6 篇论文
每个说法后面带出处(作者,年份)
编一页要读完所有相关论文:分几轮、几个子代理分头写

建库是一条流水线:扫描新论文 → 转成文本 → 每篇写一页来源页 → 规划这一轮要写哪些页 → 分组写、互相审 → 不够好再来一轮 → 收尾体检。分组写、互相审,就是 W06 学的多智能体分工。13 篇论文建一次库,要派几个子代理跑好几轮。
演示:七篇论文,建一个多层维基文献库
编出来的东西也会错

同一个模板,换一个领域
文献维基(小)
sources/13concepts/7mechanisms/5debates/3其他8
产权与组织经济学
sources/268concepts/27mechanisms/18debates/7其他11
叙事经济学
sources/47concepts/13mechanisms/6synthesis/8其他10
一本数学书
theorems/637examples/28methods/26concepts/22其他39
收束与复盘
三种办法放在一起比

怎么选:三个问题挨个问

可以叠着用

复盘:谁的库答错了

| 问题 | 预期答案 | 它的答案与出处 | 差在哪一站 |
|---|---|---|---|
| 小组项目下一步谁做什么? | 许昊天交平台数据…… | ……(出处:5_会议/…) | 索引跟着改了吗? |