在保留应用控制权的同时,发送 Gemini 多轮对话提示词。
Gemini 对话会把之前的用户和模型消息作为下一次回复的上下文。SDK 可以协助管理历史记录,但生产应用仍需自行处理限制、验证、持久化、隐私与故障恢复。
对话 API 核心概念
对话历史
后续问题依赖之前的消息。保持角色与顺序正确,只发送下一次请求真正需要的上下文。
系统指令
把持续生效的角色、风格、限制或输出格式与当前用户消息分开。
流式输出
长回复可分段返回以改善体验;需要完整验证后才能展示时,使用非流式响应更简单。
运行控制
上线前限制 token、延迟、重试、存储、工具权限和用户输入。
创建并继续一次对话
使用当前模型创建 chat,发送第一条消息,再通过同一会话对象发送追问。SDK 会把之前的轮次组合成后续请求所需的上下文。
- 模型标识符放入配置,不要永久写死示例型号。
- 为每次对话分配应用自己的 ID,便于日志和持久化。
- 明确处理空响应、拦截结果、网络错误和超时。
管理聊天记录
历史消息会占用上下文,也可能包含敏感信息。只保留延续对话所需的内容,必要时总结旧消息,并制定明确的数据保留策略。
- 手工构造 REST 请求时保持 user 与 model 角色顺序。
- 不要在未验证授权与完整性时信任客户端提交的聊天记录。
- 在适用场景让用户能够理解、删除或重新开始对话。
选择流式或完整响应
流式输出可降低长答案的感知等待时间,但片段可能不完整,也不能直接用于执行操作。非流式响应更适合先验证完整结果。
- 将流式文本作为不可信内容渲染,并允许用户取消。
- 工具参数和最终响应验证完成前,不执行不可逆操作。
- 监控首 token 时间、总延迟、完成率和取消率。
谨慎调整生成参数
temperature、输出 token 上限、停止序列和采样参数会影响变化程度与长度。不同模型的支持和建议不同,应逐项调整并用自己的任务评测。
- 先明确输出要求,再考虑改变采样设置。
- 根据界面和业务设置输出长度与成本预算。
- 以当前模型官方文档确认支持的参数。
保护生产对话流程
模型输出、检索内容、上传文件和用户消息都属于不可信输入。权限和验证必须由模型外的应用代码强制执行。
- API 密钥只保存在服务端,并设置用户级限流和滥用防护。
- 每次工具调用都要授权,并用严格 Schema 验证参数。
- 默认避免记录密钥或完整对话,并明确保留与脱敏规则。
Python
第二条消息在同一个 SDK chat 会话中追问第一条消息。请将 GEMINI_MODEL 设置为当前受支持的模型。
import os
from google import genai
client = genai.Client()
model = os.environ["GEMINI_MODEL"]
chat = client.chats.create(model=model)
first = chat.send_message(
"Explain context caching for a backend developer."
)
print(first.text)
follow_up = chat.send_message(
"Now give me a production-readiness checklist."
)
print(follow_up.text)