Responses API 的每次请求本身可以独立运行。要保持多轮上下文,可以在客户端重发必要历史,也可以使用 previous_response_id 把新请求接到上一条响应。无论选哪种方式,你都要保存用户归属,并验证第二轮确实引用了第一轮信息。
用 previous_response_id 继续对话
OpenAI 官方会话状态指南展示了多种状态管理方式。下面先创建第一轮,再把响应 ID 传给第二轮。

from openai import OpenAI
client = OpenAI()
first = client.responses.create(
model="gpt-6-luna",
input="记住项目代号是青鸟,只回复收到。",
)
second = client.responses.create(
model="gpt-6-luna",
previous_response_id=first.id,
input="刚才的项目代号是什么?",
)
print(second.output_text)
预期第二轮回答“青鸟”。数据库应保存当前用户、会话 ID、上一响应 ID 和更新时间;读取上一响应前先校验归属,不能让用户 A 传入用户 B 的响应 ID。
什么时候自己保存历史
如果你需要精确控制发送给模型的每一条消息、做长期归档或跨供应商迁移,可以在本地保存并只重发必要历史。优点是控制清晰,代价是要自己处理截断、摘要、敏感数据和 Token 成本。使用 previous_response_id 可减少手工拼接,但仍应保存业务侧会话关系和失败状态。
验证状态没有串线
- 会话 A 保存代号“青鸟”,会话 B 保存代号“海鸥”。
- 分别追问代号,结果必须对应自己的会话。
- 故意把 B 的上一响应 ID 交给 A,业务后端应在调用 OpenAI 前拒绝。
- 删除或过期会话后再追问,应明确开始新会话,不能静默接上旧历史。
多轮上下文会增加输入 Token。较长对话应保留关键事实、摘要旧轮次并丢弃无关内容;摘要也可能遗漏信息,所以重要业务数据应来自数据库,而不是依赖模型“记忆”。
常见问题
previous_response_id 会自动保存我的业务数据吗?它连接模型响应,订单、权限和用户资料仍应由你的系统管理。
为什么第二轮忘了指令?先检查是否传错响应 ID,以及新请求中的指令是否覆盖旧行为。本文未访问你的项目数据,保存时长和数据控制要按账号设置核对。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31639.html