You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vertex AI Gemini函数调用返回结果触发_InactiveRpcError报错求助

数据库交互聊天机器人函数调用错误修复思路

问题场景

正在开发基于Gemini API的数据库交互聊天机器人,已定义list_tables、describe_table、execute_query三个数据库操作函数并封装为工具传入模型。模型生成的SQL存在列名错误(将products表的product_name写成name),手动修正SQL后,尝试将数据库查询结果以函数响应形式返回给模型生成可读内容时,触发_InactiveRpcError,错误提示:

Please ensure that the number of function response parts should be equal to number of function call parts of the function call turn.

错误原因分析

该错误核心是函数响应的结构/数量与模型发起的函数调用不匹配:

  • 模型上一轮消息中发起了N个函数调用,当前返回的响应必须对应N个函数的执行结果
  • 函数响应的格式不符合Vertex AI SDK要求,比如错误嵌套content字段,或者响应结构与函数声明的返回类型不匹配
  • 手动修正SQL后,未正确执行查询获取结果,反而错误地将修正后的SQL语句作为响应内容传入,导致格式完全错误

修复步骤与代码示例

1. 先执行修正后的SQL获取真实结果

手动修正SQL后,必须先调用execute_query执行查询,拿到数据库返回的结果,而不是直接处理SQL语句本身:

# 修正SQL列名
corrected_sql = func.args["sql"].replace("name", "product_name")
# 执行修正后的SQL,获取真实查询结果
query_result = execute_query(corrected_sql)

2. 按正确格式构造函数响应

Part.from_function_response的response参数需要直接传入函数执行结果,无需额外嵌套content字段,且要与函数声明的返回结构一致:

# 构造符合要求的函数响应
function_response = vertexai.generative_models.Part.from_function_response(
    name=func.name,  # 必须与模型调用的函数名完全一致(这里是execute_query)
    response={"result": query_result}  # 匹配execute_query函数的返回字段
)

# 发送响应给模型
user_response = chat.send_message(
    vertexai.generative_models.Content(
        role="user",
        parts=[function_response]
    )
)

3. 优化方案:避免手动修正SQL

手动修正SQL不是长久方案,可让模型先调用describe_table获取products表的结构,再生成正确SQL:

  • 当模型首次生成错误SQL时,触发describe_table("products")获取字段信息
  • 将表结构返回给模型,让模型自动修正SQL并重新发起execute_query调用

关键注意事项

  • 确保函数响应的数量与模型上一轮的函数调用数量完全对应(如果模型调用了1个函数,就返回1个响应)
  • 函数响应的结构必须与FunctionDeclaration中定义的返回类型严格匹配
  • 聊天上下文必须连贯,每一轮的函数调用和响应要一一对应

内容的提问来源于stack exchange,提问作者Anna Bozhenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:21:04