本文详解 Gemini Pro 多轮对话的两种官方推荐方式——手动维护消息列表与使用 start_chat() 会话对象,解决因 SDK 版本过低或消息格式混用导致的 TypeError 错误。
本文详解 gemini pro 多轮对话的两种官方推荐方式——手动维护消息列表与使用 `start_chat()` 会话对象,解决因 sdk 版本过低或消息格式混用导致的 `typeerror` 错误。
在使用 Google Generative AI Python SDK 调用 gemini-pro 模型进行多轮对话时,开发者常遇到如下错误:
TypeError: Could not create `Blob`, expected `Blob`, `dict` or an `Image` type...Got a: <class 'google.ai.generativelanguage_v1beta.types.content.Content'>
该错误并非逻辑缺陷,而是 SDK 版本兼容性问题:旧版(如 <0.5.0)对 Content 对象与字典混合传入 generate_content() 的支持不完善,导致类型校验失败。
✅ 正确做法一:升级 SDK 并规范使用 generate_content()(适用于精细控制消息流)
首先确保安装最新稳定版 SDK:
pip install --upgrade google-generativeai
验证版本(推荐 ≥ 0.5.1):
import google.generativeai as genaiprint(genai.__version__) # 应输出 '0.5.1' 或更高
然后按以下方式构建消息历史(注意:response.candidates[0].content 是 Content 类型,SDK 0.5.1+ 已原生支持直接追加):
model = genai.GenerativeModel("gemini-pro")messages = [{"role": "user", "parts": ["hello"]}]response = model.generate_content(messages)messages.append(response.candidates[0].content) # ✅ 兼容新版:Content 可直接 appendmessages.append({"role": "user", "parts": ["How does quantum physics work?"]})response = model.generate_content(messages)print(response.text)# 输出示例:**Quantum physics** is a fundamental theory in physics that describes...
✅ 正确做法二:优先使用 start_chat()(更简洁、更健壮)
start_chat() 封装了会话状态管理,自动处理消息序列、角色轮换与上下文累积,是官方推荐的多轮交互首选方式:
model = genai.GenerativeModel("gemini-pro")convo = model.start_chat() # 创建持久化会话对象# 第一轮r1 = convo.send_message("hello")print(r1.text) # → "Hello! How can I assist you today?"# 第二轮(自动携带历史)r2 = convo.send_message("How does quantum physics work?")print(r2.text) # → 完整回答,基于前序上下文
⚠️ 注意事项:
? 总结:
多轮对话失败的核心原因通常是 SDK 版本滞后。升级至 google-generativeai >= 0.5.1 后,两种方式均可稳定运行;但生产环境中强烈建议采用 start_chat() ——它语义清晰、容错性强,且与 Gemini 的会话式设计哲学完全对齐。