技术探索 · 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 每次仍然只能看到当前这个聊天框的内容。

这有点像一个演员,每次上台前助手会递给他一张小抄,写着"你认识这位观众,他在学英语"。演员并不记得上次演出,但看了小抄就能无缝接上。

而当你在网页端"清除对话"时,真正发生的是:下次打开的聊天框,再也不携带任何历史——小抄被清空了。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐