
Gemini Pro 在启用工具(tools)后,默认会强制将用户问题路由至函数调用流程,导致无法回答与工具无关的普通问题;需通过配置 enable_automatic_function_calling=True 并配合手动响应处理机制,才能兼顾工具调用与自然语言问答能力。
gemini pro 在启用工具(tools)后,默认会强制将用户问题路由至函数调用流程,导致无法回答与工具无关的普通问题;需通过配置 `enable_automatic_function_calling=true` 并配合手动响应处理机制,才能兼顾工具调用与自然语言问答能力。
在使用 Google Generative AI SDK 调用 Gemini Pro 模型时,若为 GenerativeModel 配置了 tools 参数(如自定义函数),模型行为将发生关键变化:它不再默认以纯文本方式响应所有输入,而是优先尝试将用户消息解析为函数调用请求。即使问题明显不涉及工具(例如“美国总统是谁?”),模型也可能返回类似 I cannot fulfill this request. The available tools lack the desired functionality. 的提示——这并非 Bug,而是当前 Gemini 工具调用机制的设计约束:当工具存在时,模型倾向于仅通过工具路径响应,而非回退到通用语言生成。
要真正实现“工具可用时调用、不可用时自然作答”的混合能力,必须采用显式函数调用循环(function-calling loop),而非依赖 enable_automatic_function_calling=True 单一开关。该参数仅控制是否自动触发工具调用,但不启用智能回退机制。正确做法如下:
- 发送初始消息;
- 检查响应中是否包含 function_call;
- 如有,则执行对应函数并发送结果作为新消息继续对话;
- 如无 function_call,则直接使用 .text 获取答案。
✅ 正确示例代码:
Veo 3.1增强了音频生成能力、提示词理解能力和角色一致性控制。支持多参考图生成、场景扩展(Scene Extension)、更长视频制作以及更精准的镜头控制,同时提升了画面真实感和叙事能力。是当前 Google 主推的旗舰视频生成模型。
import google.generativeai as genai
def multiply(a: float, b: float) -> float:
"""Returns the product of a and b."""
return a * b
genai.configure(api_key="YOUR_API_KEY") # 替换为实际 API Key
model = genai.GenerativeModel(
model_name="gemini-1.0-pro",
tools=[multiply]
)
chat = model.start_chat()
# 发送普通问题
response = chat.send_message("Who is the president of the USA?")
print("First response text:", response.text) # ✅ 正常输出 "Joe Biden"
# 发送可触发工具的问题
response = chat.send_message("What is 6 multiplied by 7?")
if response.candidates[0].content.parts[0].function_call:
# 提取参数并调用函数
fc = response.candidates[0].content.parts[0].function_call
result = multiply(**dict(fc.args))
# 将函数结果作为新消息发回
follow_up = chat.send_message(
genai.types.Content(
parts=[genai.types.Part.from_function_response(
name="multiply",
response={"result": result}
)]
)
)
print("Tool result:", follow_up.text) # ✅ 输出 "42.0"
⚠️ 注意事项:
- enable_automatic_function_calling=True 仅适用于单次工具调用场景(如简单计算器),无法解决多轮混合问答需求;
- Gemini 当前版本(截至 2024)不支持自动 fallback 到文本生成,必须由开发者显式判断响应类型;
- 建议始终检查 response.candidates[0].content.parts 是否含 function_call 或 text,避免 AttributeError;
- 生产环境应添加异常处理(如参数类型校验、网络超时、空响应等)。
总结:工具集成不是“开/关”式功能,而是需要主动管理的交互流程。理解 Gemini 的响应结构(Part.function_call vs Part.text),并构建健壮的调用循环,是同时支持工具执行与通用问答的唯一可靠路径。










