一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何正确实现 Gemini Pro 的多轮对话(Multiturn Chat)

时间:2026-07-11 09:32:52 编辑:袖梨 来源:一聚教程网

本文详解 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)  # → 完整回答,基于前序上下文

⚠️ 注意事项:

  • 不要混用两种模式:避免在 convo 对象上调用 generate_content(),也不要在手动 messages 列表中插入 convo.history 的原始 Content 对象(除非明确理解其结构);
  • send_message() 返回 ChatResponse,其 .text 属性即为模型生成文本;若需访问完整结构,请用 .candidates[0].content.parts[0].text;
  • 若需重置会话,重新调用 model.start_chat() 即可,无需手动清空;
  • 所有 parts 字段必须为字符串列表(即使单条文本也写作 ["text"]),不支持纯字符串。

? 总结:
多轮对话失败的核心原因通常是 SDK 版本滞后。升级至 google-generativeai >= 0.5.1 后,两种方式均可稳定运行;但生产环境中强烈建议采用 start_chat() ——它语义清晰、容错性强,且与 Gemini 的会话式设计哲学完全对齐。

热门栏目