ChatGPT 能“记住上文”的原因
原因如下
-
你把对话历史传给了它
每次调用 OpenAI 接口时,都会把之前的对话作为参数传入(messages
列表),模型“看见”了之前你说了什么。 -
它没有长期记忆
它不会自动记住你是谁或你说过什么,除非你手动保存历史并再次传入。 -
依赖上下文窗口
能“记住”的内容是有限的(如 GPT-4 可处理约 128K tokens),超过就会“忘记”早期内容。
总结一句话:
ChatGPT 记住你说过什么,是因为你把历史对话发给它了,而不是它自己真的记得。
✅ 核心原理总结一句话:
ChatGPT 并不是“记住”了你说过什么,而是每次调用 API 时,你 把之前的所有对话历史一起发给它了!
这就是“它知道你说过什么”的根本原因。
代码
🔧 使用 OpenAI Chat API 的方式
以 openai.ChatCompletion.create()
为例,调用格式是这样的:
import openaiopenai.api_key = "你的API密钥"response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system", "content": "你是一个有帮助的助手。"},{"role": "user", "content": "我喜欢猫"},{"role": "assistant", "content": "猫非常可爱,它们很独立又粘人。"},{"role": "user", "content": "它们为什么这么可爱?"}]
)print(response["choices"][0]["message"]["content"])
📌 分析一下这个 messages
参数
这个 messages
是一个聊天记录的列表,模型每次生成回答时都会“看到”这里面的全部内容:
role | content |
---|---|
system | 指定模型的行为和角色 |
user | 你每次输入的内容 |
assistant | 模型上一次的回复 |
所以 ChatGPT 并不是自己“记得”你说了什么,而是你把之前的对话再传了一次,它“看到”了这些内容,然后做出合理回应。
它能记住多长?
取决于你用的模型:
gpt-3.5-turbo
:默认 16K tokens(约等于 30 页文档)gpt-4
:有 128K tokens 的版本(约等于 300 页)
一旦对话太长,超出最大 token 限制,最早的内容就需要被“截断”或者删掉。
举个动态构造的例子(代码)
如果你自己写聊天程序,每次发消息时都要把聊天历史传入:
chat_history = []def chat(user_input):chat_history.append({"role": "user", "content": user_input})response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system", "content": "你是一个聊天机器人。"}] + chat_history)assistant_reply = response['choices'][0]['message']['content']chat_history.append({"role": "assistant", "content": assistant_reply})return assistant_reply# 先问第一句
print(chat("我喜欢狗"))# 再问第二句,模型就知道“我”是谁,“狗”是什么
print(chat("它们聪明吗?"))