Gemini Interactions API 怎样保存多轮会话状态
Gemini Interactions API 的多轮状态可以交给服务端保存:取出上一轮完成响应的 id,下一轮把它放进 previous_interaction_id。应用仍要持久化“业务会话对应哪个最新 ID”,并在每轮重新传入需要的系统指令、工具和生成参数。保存 ID 不等于永久保存聊天记录,也不会自动解决多用户隔离和并发覆盖。
官方地址:https://ai.google.dev/gemini-api/docs/interactions-overview
用会话游标引用服务端历史
可以把这种模式称为“服务端历史+应用游标”。服务端保存 Interaction 对象及相关上下文;业务系统保存一个会话游标,用来定位该业务会话最近一次完成的交互。新一轮只提交新的输入和前驱 ID,服务端据此查找历史,无须应用每轮重新拼接完整对话。
这里的“最近”指当前分支已经确认完成并被应用接受的记录。不要把正在生成的任务 ID 直接当作已完成回答,也不要把另一条业务会话的 ID 拼进当前对话。Interaction ID 是上下文引用,不是用户身份凭证。

确定适合保存的状态和使用压力
当业务是持续的文案协作、客服辅助或研究追问,应用希望进程重启后还能继续同一个分支时,保存游标很合适。比如“活动文案工作台”第一次要求围绕海边书店设计活动,第二次继续要求缩短文案,前驱 ID 就能表达这两轮的上下文关系。
| 状态 | 保存位置 | 职责 |
|---|---|---|
| Interaction 历史 | API 服务端 | 为后续交互提供上下文 |
| 最近完成的 ID | 业务数据库或单用户本地文件 | 恢复当前会话分支 |
| 系统指令、工具、生成配置 | 应用配置 | 每轮明确提交 |
| 业务消息、用户授权、版本号 | 业务数据库 | 归属判断、并发控制和恢复 |
如果业务要求独立掌握完整记录,仍需另存自己的业务消息。一个前驱 ID 无法替代审计日志、用户账号和完整的数据保留策略。
用 Python 保存并恢复最近的 Interaction ID
下面是单用户、单进程的本地教学例子。先安装官方 google-genai SDK;官方概览列出的 Python Interactions 支持起点为 2.3.0。设置环境变量 GEMINI_API_KEY,模型通过 GEMINI_MODEL 指定为当前项目可以使用且支持 Interactions 的模型,不把模型名称写死在业务状态中。
# 安装官方 SDK;密钥通过运行环境注入,不写进文件 python -m pip install --upgrade google-genai
将下面程序保存为 conversation.py。首次运行不带前驱;再次运行读取已保存 ID。输入示例是本次原创,程序没有在本文中实际调用收费接口,模型回答也不预先假定。
import json
import os
from pathlib import Path
from google import genai
STATE = Path("bookshop-session.json")
CONFIG = "你是活动文案助手。保持中文回答,不虚构活动日期和价格。"
def ask(message):
# 本地文件只适合一个业务会话;线上必须按用户和会话分开
previous = None
if STATE.exists():
saved = json.loads(STATE.read_text(encoding="utf-8"))
previous = saved["last_interaction_id"]
params = {
"model": os.environ["GEMINI_MODEL"],
"input": message,
"store": True,
"system_instruction": CONFIG,
}
if previous:
params["previous_interaction_id"] = previous
# 请求失败不更新游标;超时不代表服务端必然没有创建记录
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
result = client.interactions.create(**params)
if result.status != "completed" or not result.id:
raise RuntimeError("本轮尚未正常完成,保留旧游标")
# 临时文件替换减少半写文件;这不构成跨进程并发锁
temporary = STATE.with_suffix(".tmp")
temporary.write_text(
json.dumps({"last_interaction_id": result.id}, ensure_ascii=False),
encoding="utf-8",
)
temporary.replace(STATE)
return result.output_text
if __name__ == "__main__":
# 每次输入新问题;例如先问海边书店活动,再追问精简文案
print(ask(input("本轮问题:")))
第一次可以输入“为海边书店设计一个周末阅读活动,只写活动主题和三项内容”,下一次输入“保留刚才主题,把三项内容缩短为每项十个字以内”。程序从文件恢复的应该是第一次成功完成后的 ID。观察是否保留主题是使用时的结果判断,不能把模型文字一致性当成持久化系统的唯一证明。
示例遇到网络异常或文件损坏会直接报错,不自动开始新会话掩盖问题。保存文件失败时应保留本轮已获得的响应 ID供业务恢复,避免误以为旧游标仍是唯一有效状态;正式系统应把响应记录与会话游标更新纳入同一业务事务。
排除配置继承与并发覆盖两个反例
第一个反例是第一轮传了 system_instruction,后续只传前驱。官方说明前驱保留的是输入输出历史,tools、system_instruction、generation_config 都只适用于当前 Interaction。示例把系统指令放在每轮参数里;有工具或生成配置时也应由应用每轮明确组装。
第二个反例是两个请求同时读取相同的旧 ID。它们都引用同一前驱,却分别生成新记录,形成两个分支;最后一次写数据库会掩盖另一个分支。文件替换只能减少半写,不会把这两个响应自动合并。
业务端可以为每个会话保存 revision,更新时要求旧版本号仍然匹配,成功后递增;冲突响应应保存为独立记录,交由用户选择分支或重新组织输入。若产品只允许线性对话,更直接的做法是让同一会话同一时刻只有一个在途请求。

处理保留期限和不确定失败的后果
官方文档说明默认 store=true。当前概览列出的保留期为付费层 55 天、免费层 1 天;付费项目还可配置较短的保留窗口,因此实际恢复能力要按项目设置决定。记录被删除或过期后,本地还保存着 ID 也不能保证继续使用。
设置 store=false 会阻止把该交互作为后续轮次的前驱使用,而且与后台执行不兼容。需要无状态模式时,应由应用在后续请求中提交完整且格式正确的会话历史,不能只发送最新一句话并期待服务端凭空记住。
超时属于“不确定结果”:不能仅因客户端没收到响应就认定服务端没有创建交互。不要在通用异常处理里无限重试或静默清空游标;记录业务请求状态,把重复提交和分支选择交给明确的恢复流程。服务端历史也不意味着可以无限增长而忽略模型上下文限制或成本。
用判断清单选择有状态或无状态
- 是否将游标绑定到经过授权的用户与业务会话,而不是使用全局 ID?
- 是否只在本轮完成后推进游标,并记录保存失败和不确定请求?
- 是否每轮重传系统指令、工具与生成配置?
- 是否为并发提交选择串行处理或版本冲突机制?
- 是否在项目保留期之外另有业务消息恢复方案?
重启应用为什么仍然失忆?先区分游标没有持久化、读错业务会话、前驱已过期与本轮配置遗漏。不要把所有问题都归为模型不记得。
能否换模型继续?需要后续模型支持历史输出对应的输入模态,尤其是包含图片、音频等内容的会话;保存了 ID 不会绕过模型能力限制。
ID 是否能当永久聊天备份?不能。它更适合当前服务端保留窗口内的上下文引用,长期备份应由业务系统按需求保存。
官方参数与保留规则:https://ai.google.dev/gemini-api/docs/interactions-overview;接口资源说明:https://ai.google.dev/api/interactions-api。
Docker Compose 怎样使用 env_file 管理服务变量
- 上一篇
- Docker Compose 怎样使用 env_file 管理服务变量
- 下一篇
- Gemini API 内置 URL Context 怎样处理网页资料
-
- 科技周边 · 人工智能 | 59分钟前 | python · 异步任务 · gemini · 批处理 · JSONL Batch API Gemini API 离线生成 google-genai
- Gemini API Batch 怎样处理大量离线生成请求
- 486浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | enum 工具调用 Gemini API Function Calling FunctionDeclaration
- Gemini API 怎样为工具参数提供枚举约束
- 322浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | ai · 可观测性 · 链路追踪 OpenTelemetry AI代理 工具调用
- AI 代理怎样记录工具调用链路和失败原因
- 250浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Ollama API 怎样流式读取模型响应
- 167浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 并发控制 · 并发请求 vLLM 推理服务 OpenAI兼容服务
- vLLM OpenAI 兼容服务怎样限制并发请求
- 392浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- RAG 应用怎样用检索评估区分召回和生成问题
- 476浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- OpenTelemetry OTTL 怎样按条件修改日志属性
- 172浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | go · 可观测性 · Go OpenTelemetry OTLP otelc 编译期插桩
- OpenTelemetry Go 编译期插桩怎样接入服务
- 348浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Gemini API 内置 URL Context 怎样处理网页资料
- 204浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Gemini API 函数调用怎样串联多个工具
- 265浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 855次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 859次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 938次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 914次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 744次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

