当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > Gemini Interactions API 怎样保存多轮会话状态

Gemini Interactions API 怎样保存多轮会话状态

来源:17golang原创 2026-11-03 07:07:07 0浏览 收藏

Gemini Interactions API 的多轮状态可以交给服务端保存:取出上一轮完成响应的 id,下一轮把它放进 previous_interaction_id。应用仍要持久化“业务会话对应哪个最新 ID”,并在每轮重新传入需要的系统指令、工具和生成参数。保存 ID 不等于永久保存聊天记录,也不会自动解决多用户隔离和并发覆盖。

官方地址:https://ai.google.dev/gemini-api/docs/interactions-overview

用会话游标引用服务端历史

可以把这种模式称为“服务端历史+应用游标”。服务端保存 Interaction 对象及相关上下文;业务系统保存一个会话游标,用来定位该业务会话最近一次完成的交互。新一轮只提交新的输入和前驱 ID,服务端据此查找历史,无须应用每轮重新拼接完整对话。

这里的“最近”指当前分支已经确认完成并被应用接受的记录。不要把正在生成的任务 ID 直接当作已完成回答,也不要把另一条业务会话的 ID 拼进当前对话。Interaction ID 是上下文引用,不是用户身份凭证。

业务会话游标与服务端交互历史的静态关系
图1:静态结构说明图。应用保存引用,服务端保存交互历史;连线表示字段关联,不代表执行顺序或实测结果。

确定适合保存的状态和使用压力

当业务是持续的文案协作、客服辅助或研究追问,应用希望进程重启后还能继续同一个分支时,保存游标很合适。比如“活动文案工作台”第一次要求围绕海边书店设计活动,第二次继续要求缩短文案,前驱 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,更新时要求旧版本号仍然匹配,成功后递增;冲突响应应保存为独立记录,交由用户选择分支或重新组织输入。若产品只允许线性对话,更直接的做法是让同一会话同一时刻只有一个在途请求。

每轮配置与业务游标版本的依赖边界
图2:静态依赖说明图。配置属于每轮请求,版本号属于业务游标;图示不表示 API 自动执行并发控制。

处理保留期限和不确定失败的后果

官方文档说明默认 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。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Docker Compose 怎样使用 env_file 管理服务变量Docker Compose 怎样使用 env_file 管理服务变量
上一篇
Docker Compose 怎样使用 env_file 管理服务变量
Gemini API 内置 URL Context 怎样处理网页资料
下一篇
Gemini API 内置 URL Context 怎样处理网页资料
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    855次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    859次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    938次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    914次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    744次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码