Grok API怎么接着上轮对话?previous_response_id、保存期限与会话隔离
用Responses API保存上一轮响应ID并继续追问,检查30天服务端保存范围、store=…
文章目录
自建Grok问答工具时,第二轮只发送“那再加一项呢”,模型未必知道上一轮指什么。Responses API支持保存对话状态,用previous_response_id继续先前响应。本文以虚构物品清单演示两轮调用、检查上下文和隔离用户。代码只做语法检查,未执行付费API调用,需要自己的xAI API访问权限,不能把网页聊天历史当作同一条API会话。
第一步:区分响应ID与业务会话
官方将Responses API列为推荐文本接口,默认保存请求、模型响应及相关推理内容,服务端保存期限为30天。在期限内可以凭响应ID检索或继续。这个ID是某次模型响应的标识,不是你业务里用户的账号ID,也不是可以随便给所有访客共用的固定聊天编号。
准备一张应用侧映射表,记录用户、业务会话、最近响应ID和更新时间。只让同一用户继续自己的会话,读取ID前检查归属。练习阶段用虚构列表,不存真实个人材料;密钥从本机环境变量读取,绝不传到前端网页。
第二步:用两轮请求建立最小例子
先在本地安装openai包,并配置XAI_API_KEY。下面使用兼容的OpenAI SDK连接https://api.x.ai/v1,模型名沿用核对时官方示例。实际使用前检查账号当前可用模型与计费;示例不承诺特定额度或运行时长。运行会产生两次API请求。
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1", timeout=180.0)
first = client.responses.create(
model="grok-4.7", store=True,
input=[{"role": "user", "content":
"这是虚构练习。清单只有水、纸巾。请按原顺序重复,不添加。"}])
print(first.output_text)
second = client.responses.create(
model="grok-4.7", store=True,
previous_response_id=first.id,
input=[{"role": "user", "content":
"在刚才清单末尾追加雨伞,再列出完整清单,不增加其他项目。"}])
print(second.output_text)
# 应用下一轮应保存second.id,而不是一直使用first.id。
第二轮只传新增用户消息并带上第一轮ID。预期完整列表是水、纸巾、雨伞,但仍需查看实际回答,不能因为接口成功就认定上下文正确。不要把完整旧消息再次拼接,同时又引用同一历史ID,导致语义重复或让排查变复杂。
第三步:核对连续链与分支
第三轮应使用second.id继续最新分支。若每次都使用first.id,就相当于从第一轮创建不同分支,后续不会自动包含第二轮变化。这种行为适合有意生成备选方案,但用于连续聊天时容易表现成“记得最初内容,却忘记刚才修改”。
人工验收:第一轮仅有水和纸巾;第二轮保留两项并在末尾加雨伞;新会话不带旧ID时,不应假设知道旧清单。记录每轮响应ID与父ID的对应关系,只保存在后端所需范围,不把完整响应或密钥打印到公共日志。
同时处理多个请求时,应在应用侧控制同一会话的更新顺序。两个追问都读取到同一个旧ID,会各自形成分支;最后写入数据库的结果不一定代表用户真正的先后顺序。先用串行两轮验证,再设计队列或版本检查,比直接并发后猜原因更容易定位。
第四步:理解store=false与保存期限
不希望服务端保存前后请求时,可设置store=False,但这意味着不能依赖该次响应被服务端保存来续聊。官方提供由客户端维护历史及加密推理内容的另一种方式;不要只保存output_text就宣称恢复了所有上下文,也不要把关闭保存等同于已经完整处理本地资料管理。
30天过后,旧响应会被移除。要在更久以后继续,应按官方要求维护必要历史和加密推理内容,并在新请求中传入。实际业务还可以由用户确认一份精简摘要后开启新会话,但必须说明这属于摘要续接,会丢失细节,不能冒充原会话完整恢复。
第五步:检索、删除和处理错误
可通过client.responses.retrieve(response_id)检查已存响应,也可用client.responses.delete(response_id)删除不再需要的响应。先确认ID属于目标用户和练习记录,再操作,不把一次删除响应说成整个业务用户的数据都被清除。ID不存在时检查保存设置、期限和取用记录,不盲目重复付费请求。
最终验收包括两轮列表正确、父子ID串接正确、不同用户不共用会话,以及服务端保存策略与应用侧记录一致。这能解决续聊断上下文的问题;它与提示词缓存、流式输出分别属于不同机制,保存了状态也不代表后续调用免费或可以省去权限与用量核对。
官方资料
资料核对日期:2026年11月1日。
本文地址:https://www.163264.com/18766

