字节面试官:讲一下CLAUDE.md、Memory、RAG 三层知识管理
很多开发者以为有了 Claude Code 就能自动写代码了,不需要记忆系统。但这个观点忽略了一个关键问题:跨会话的知识如何积累?
字节面试官:讲一下CLAUDE.md、Memory、RAG 三层知识管理
很多开发者以为有了 Claude Code 就能自动写代码了,不需要记忆系统。但这个观点忽略了一个关键问题:跨会话的知识如何积累?
一、核心问题:三层知识管理是什么?
在构建 AI 编程助手或企业知识助手时,经常会遇到三个概念:CLAUDE.md、Memory、RAG。它们听起来都是"存知识",但实际上是三种本质不同的机制,解决的是完全不同的问题。
如果这三件事没想清楚,搭建出来的系统要么重复冗余,要么在关键时候什么都不记得。
三句话建立基础认知
| 机制 | 本质 | 解决的问题 |
|---|---|---|
| CLAUDE.md | 人写给模型的静态规范 | “怎么做” - 行为规则 |
| Memory | 模型自动提炼的动态记忆 | “记住谁” - 用户偏好 |
| RAG | 从外部知识库实时检索 | “知道什么” - 领域知识 |
详细定义
CLAUDE.md:静态规范约束
每次对话开始时,CLAUDE.md 的内容会被完整地插入 system prompt,优先级最高。你在里面写什么,模型就被什么约束着。
典型内容:
- 不许修改 main.py
- 代码风格用 PEP8
- 禁止用 print 调试
- 项目架构说明
它是行为规则,不是知识库。
Memory:动态用户记忆
会话结束后,模型会把它认为值得记住的内容写入记忆文件,比如:
- 这个用户不喜欢 verbose 输出
- 他上次说了用 Redis 不用 Memcached
下次对话时,相关记忆会被选择性读入。它是个性化积累,随用户行为自动更新,不需要人工维护。
RAG:外部知识检索
存储公司内部文档、产品手册、代码库、历史工单等。用户提问时,系统先检索最相关的片段,再把这些片段作为上下文塞给模型。
它解决的是知识覆盖问题——你不可能把几万篇文档都塞进 system prompt,RAG 按需取用。
二、核心差异对比
把三个机制的关键维度放在一起对比,差异一目了然:
| 对比维度 | CLAUDE.md | Memory | RAG |
|---|---|---|---|
| 写入方式 | 人工编写,版本控制 | 模型自动提炼 | 文档索引,批量导入 |
| 读取时机 | 每次对话全量读入 | 按相关性选择性读入 | 提问后实时检索 |
| 更新方式 | 人工修改 | 会话结束后自动写入 | 文档更新时重建索引 |
| 生命周期 | 永久,稳定 | 动态更新,有衰减 | 与文档绑定 |
| 适合存什么 | 规则、规范、角色定义 | 用户偏好、个人习惯 | 领域知识、业务文档 |
| 容量上限 | 几十行到几百行 | 数十到数百条记忆 | 无上限 |
| 优先级 | 最高(约束级) | 中(偏好级) | 最低(参考级) |
三个关键差异点
1. 读取时机的差异
CLAUDE.md 是强制全量读入,每次对话模型都完整看一遍,哪怕这次任务跟里面的规则完全无关。所以 CLAUDE.md 不能太长——超过两三千字,会占用太多 token 预算,正文内容反而被压缩。
Memory 是按相关性选择性读入,类似一个轻量 RAG,只把最相关的几条记忆拉出来,不会全量加载。
RAG 是提问后实时检索,完全按需。
2. 生命周期的差异
CLAUDE.md 里的内容你不改它就永远在那里,适合存那些不会随时间变化的东西。
Memory 有置信度衰减,长期没有被用到的记忆权重会下降,过期的临时信息会自然退场——这也意味着你不能把重要规则存在 Memory 里,因为它可能被衰减掉。
RAG 的生命周期跟文档绑定,文档改了重新索引就好。
3. 优先级的差异
优先级最高的是 CLAUDE.md。如果 CLAUDE.md 里写着"不许调用外部 API",但 RAG 检索到的文档里有调用 API 的代码示例,模型会遵循 CLAUDE.md 的约束,不会直接照搬 RAG 的内容。
这个优先级关系在设计系统时很重要——行为约束放 CLAUDE.md,知识参考放 RAG,顺序不能反。
三层知识管理架构总览
三、选型决策树:一条知识该放哪里?
知道了三者的差异,核心问题是:一条知识到底该放哪里?
用三个问题做判断:
三个判断问题详解
问题 1:这是所有用户共享的规则,还是某个用户的个人偏好?
- 如果是"这个项目里任何人都不能动 main.py" → 规则 → 放 CLAUDE.md
- 如果是"这个用户不喜欢在代码里加太多注释" → 偏好 → 放 Memory
规则对所有人生效,偏好只对特定用户生效。两者混放是最常见的错误。
问题 2:这条知识是固定不变的,还是会随时间更新的?
- 如果是"项目代码风格用 PEP8",几年都不会变 → 放 CLAUDE.md 或 RAG
- 如果是"用户上次说了改用 Redis" → 可能会变 → 放 Memory
问题 3:这条知识的量级是几十行还是几万篇文档?
- 如果是几十行、每次对话都需要模型完整知道 → 放 CLAUDE.md
- 项目结构说明、核心规范、禁止行为清单
- 如果是几千篇产品手册、历史工单、代码库 → 放 RAG
- 按需检索,用户问哪个,检索哪个
四、实战场景:三层如何分工
用四个具体场景来验证框架,看看实际项目里三者怎么配合。
场景 A:企业知识助手
在这个场景里,监管合规是最硬的约束。
| 层级 | 存储内容 | 原因 |
|---|---|---|
| CLAUDE.md | “不得给出具体投资建议”、“所有推荐必须附上风险提示”、“不得直接报价” | 约束需要每次对话都在场 |
| Memory | 客户上次关注的产品类型、咨询结论、偏好风格 | 历史交互积累,不用每次从头说 |
| RAG | 产品条款文档、历史理赔案例、监管政策文件 | 几千页文档,按需检索 |
三层缺一不可:
- 没有 CLAUDE.md → 合规约束靠模型自觉,风险不可控
- 没有 Memory → 每次客户进来都要重新介绍需求,体验差
- 没有 RAG → 几千页文档全塞进 system prompt 根本放不下
场景 B:个人编程助手
| 层级 | 存储内容 |
|---|---|
| CLAUDE.md | 代码风格规范(“用 Black 格式化”)、禁止操作清单(“不能直接 git push main”)、项目结构说明 |
| Memory | 用户技术偏好(“喜欢详细注释”)、讨论过的技术决策(“缓存层用 Redis”)、个人习惯(“先写测试再写实现”) |
| RAG | 公司内部 API 文档、历史 PR 代码示例、技术规范文档 |
场景 C:只用了 RAG,另外两层完全没配
这是很多开发者的现状,具体会带来什么问题:
没有 CLAUDE.md 的后果:
- 模型不知道项目规范
- 每次写代码,函数命名风格可能不一样(下划线/驼峰混用)
- 忘了项目不用 ORM,需要反复纠正
没有 Memory 的后果:
- 每次新会话,模型对用户一无所知
- 不知道用户是十年经验的工程师,不需要解释基础概念
- 不知道用户喜欢简洁回答
- 之前讨论过的技术决策,每次都要重新讨论
你花了几个月和助手建立的"默契",每次会话结束就清零了。这是"这个助手不够聪明"的根源。
RAG 的局限性:
- RAG 解决了"知道什么",能回答你问的那些问题
- 但"怎么做"和"记住你是谁"这两件事,RAG 完全无能为力
场景 D:三层都配了,但配错了
常见配置错误:
| 错误配置 | 问题 | 正确做法 |
|---|---|---|
| 把合规规则放进 RAG | 规则有时被检索到,有时不被检索到,合规行为不稳定 | 放 CLAUDE.md |
| 把用户偏好写死在 CLAUDE.md | 多用户系统时,所有用户都被当成同一类用户回答 | 放 Memory |
配置示例
# CLAUDE.md 片段(静态规则,版本控制)
# 编码规范:用 Black 格式化,函数名用动词开头
# 禁止行为:不许直接 git push main,不许改 config.yaml
# 架构说明:前端 /frontend,API /api,禁止混放
# Memory 写入(会话结束后自动)
memory_entry = {
"type": "user",
"content": "用户是后端工程师,有十年经验,喜欢简洁回答和详细注释",
"confidence": 0.9,
"last_seen": "2026-05-07"
}
# RAG 检索(提问时实时)
def answer_with_context(question: str) -> str:
# 1. 从向量库检索相关文档片段
relevant_chunks = vector_db.search(question, top_k=5)
# 2. 组装 prompt:CLAUDE.md 规则(已在 system prompt)+
# 当前相关记忆 + 检索到的文档 + 用户问题
return llm.call(context=relevant_chunks, question=question)
五、面试怎么答
问法一:“你的系统里知识是怎么管理的?”
标准答法(30 秒说完):
“我们用了三层知识管理。第一层是 CLAUDE.md,放项目规则和行为约束,每次对话全量读入,优先级最高;第二层是 Memory,放用户偏好和历史决策,会话结束后自动提炼写入,下次按相关性读入;第三层是 RAG,放领域文档和业务知识,按需检索。三层分工不同,CLAUDE.md 解决’怎么做’,Memory 解决’记住谁’,RAG 解决’知道什么’。”
问法二:“Claude Code 都能自动写代码了,还要什么记忆系统?”
回答思路:
“Claude Code 的自动写代码能力,解决的是’当下这次会话里,我能做什么’。但记忆系统解决的是’跨会话,系统越来越懂我’。没有记忆系统,你跟 Claude Code 打交道的第一百次,和第一次一样陌生——你要反复告诉它你的技术偏好、项目约定、你不喜欢什么风格。记忆系统让这些积累留下来,让工具真正越用越顺手。”
追问:“三层里哪层最容易被忽视?”
答案是 Memory。
- CLAUDE.md 很多人知道
- RAG 被讲烂了
- 但 Memory 的动态写入和跨会话个性化,是大多数人没想到要做的那一层,也是最能拉开差距的那一层
六、总结
三层知识管理的本质区别,用一句话收口:
CLAUDE.md 是给所有人的铁律,Memory 是给某个人的记忆,RAG 是给任何人的知识库。
这三件事放混了,系统就会在某些关键场景出问题;分清楚了,你的 Agent 才算真正把"知识管理"这件事做完整了。
知识管理决策速查表
更多推荐



所有评论(0)