字节面试官:讲一下CLAUDE.md、Memory、RAG 三层知识管理

很多开发者以为有了 Claude Code 就能自动写代码了,不需要记忆系统。但这个观点忽略了一个关键问题:跨会话的知识如何积累?

一、核心问题:三层知识管理是什么?

在构建 AI 编程助手或企业知识助手时,经常会遇到三个概念:CLAUDE.mdMemoryRAG。它们听起来都是"存知识",但实际上是三种本质不同的机制,解决的是完全不同的问题。

如果这三件事没想清楚,搭建出来的系统要么重复冗余,要么在关键时候什么都不记得。

三句话建立基础认知

机制 本质 解决的问题
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,顺序不能反

三层知识管理架构总览

内容类型

知识管理层

最高优先级

中等优先级

参考优先级

每次全量

按需选择

实时检索

访问模式

CLAUDE.md

模型决策

Memory

RAG

项目规则

编码规范

禁止行为

用户偏好

技术决策

个人习惯

产品文档

API 手册

历史案例


三、选型决策树:一条知识该放哪里?

知道了三者的差异,核心问题是:一条知识到底该放哪里?

用三个问题做判断:

共享规则

个人偏好

固定不变

会变化

几十行

几万篇

一条新知识

问题 1: 这是所有用户共享的规则,还是某个用户的个人偏好?

问题 2: 这条知识是固定不变的,还是会随时间更新?

Memory

问题 3: 知识量级是几十行还是几万篇文档?

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 才算真正把"知识管理"这件事做完整了。

知识管理决策速查表

知识管理

CLAUDE.md

静态规范

行为约束

全量读入

优先级最高

Memory

动态记忆

用户偏好

选择性读入

自动衰减

RAG

外部知识

领域文档

实时检索

按需取用


Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐