AI 是怎么“记住“你的上下文的?
技术探索 · 2026
第一章:当我通过 API 和 AI 对话时,它是怎么知道"上文"的?
| chat\聊天 | 提问 | ai回复 |
| chat1 | A | A1 |
| B | B1 |
谜题:我第二次调用 API 时,传过去的是 仅仅是B,还是 A + A1 + B?
答案确实在我意料之中——
传过去的是 A + A1 + B,完整的对话历史。每一次 API 请求都是全新的,服务器不替你记任何东西。
所谓的"上下文记忆",其实是你的客户端把完整历史拼进 messages 数组,每次一起打包发过去。AI 本身是无状态的——它每次看到的,只是你给它的那份完整剧本。
你的客户端实际发送的内容:
// 第一轮
messages: [ { role: "user", content: "A" } ]
// 第二轮(带上全部历史)
messages: [
{ role: "user", content: "A" },
{ role: "assistant", content: "A1" },
{ role: "user", content: "B" }
]
顺带一提:这也解释了为什么长对话越来越贵——每次请求的 token 数随历史线性增长,直到撞上上下文窗口的天花板。
第二章:那网页版呢?
搞清楚 API 之后,新的疑问冒出来了:我新开了三个聊天框——
| chat\聊天 | 提问 | 回复 |
| chat1(项目内) | A | A1 |
| chat2(同一项目) | B | B1 |
| chat3(项目之外) | C | C1 |
AI 怎么可能跨聊天"认识"我?
先破一个迷信:AI 默认不能跨聊天框读取历史记录。chat1、chat2、chat3 是完全隔离的三个宇宙。
那种"AI 好像记得我"的感觉,来自两套巧妙的机制。
机制一:Memory(记忆功能)
Claude 会在对话中悄悄提炼关键信息,把"聊天A+A1+B+B1"这类事实存成一条条记忆条目,挂在你的账户下。下次开启任何新对话时,这些条目会被自动塞进 system prompt 的开头。
AI 其实不是"跨聊天记住了"——是记忆被提前注入了。
模型实际看到的 chat3 开头(你不可见):
system:"A+A1+B+B1+C"
user: "C(你在 chat3 问的问题)"
机制二:Projects(项目功能)
项目内所有聊天共享同一份 Project Instructions(项目说明)。你手动写入的背景信息,每次对话都会带着它——但 chat1 和 chat2 彼此之间仍然互不知晓。
//三个聊天框,各自的真实内容
chat1(项目内)
[ 项目说明, A, A1 ]
chat2(项目内)
[ 项目说明, B, B1 ] — 完全不知道 A 的存在
chat3(项目外)
[ 记忆条目, C, C1 ] — 完全不知道 A、B 的存在
//共享的是项目说明,而不是对话历史。聊天框之间依然是孤岛。
全局视角:一张图看懂三种"记忆"

第三章:一句话总结
跨聊天的"记忆",本质上是把信息转移到 system prompt 里——不是真正读取了历史对话。AI 每次仍然只能看到当前这个聊天框的内容。
这有点像一个演员,每次上台前助手会递给他一张小抄,写着"你认识这位观众,他在学英语"。演员并不记得上次演出,但看了小抄就能无缝接上。
而当你在网页端"清除对话"时,真正发生的是:下次打开的聊天框,再也不携带任何历史——小抄被清空了。
更多推荐


所有评论(0)