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

LangChain中ChatGoogleGenerativeAI多工具调用报错求助

解决LangChain中Gemini-1.5-Flash多工具调用报错问题

这个报错是因为Gemini模型对工具响应的格式校验比OpenAI更严格,多轮工具调用时,LangChain默认生成的工具响应缺失了必填的name字段,导致Google API返回400错误。下面是几个可行的解决/规避方案:

  • 给工具返回结果强制补充工具名称
    修改工具的返回结构,手动把工具名加到返回数据里,确保LangChain传递给Gemini的响应包含name字段。示例代码:

    from langchain.tools import tool
    
    @tool
    def get_student_data(student_name: str) -> dict:
        # 原有业务逻辑:从CSV读取学生数据
        student_info = {"name": student_name, "math_score": 85, "english_score": 92}
        # 强制补充工具名称字段
        return {"name": "get_student_data", "data": student_info}
    
  • 自定义Agent输出解析器补全字段
    针对Gemini的要求,重写输出解析器,确保工具响应的name字段不会为空。示例代码:

    from langchain.agents import AgentOutputParser
    from langchain.schema import AgentActionReturn, AgentFinish
    
    class GeminiToolResponseParser(AgentOutputParser):
        def parse(self, text: str) -> AgentActionReturn | AgentFinish:
            parsed_result = super().parse(text)
            # 检查工具返回结果,补全缺失的name字段
            if isinstance(parsed_result, AgentActionReturn):
                for res in parsed_result.return_values:
                    if "name" not in res or not res["name"]:
                        res["name"] = parsed_result.tool
            return parsed_result
    

    之后把这个解析器绑定到Agent上即可。

  • 配置Gemini模型的工具调用专属参数
    初始化ChatGoogleGenerativeAI时,明确设置工具调用的配置,让模型更规范地处理多轮调用:

    from langchain_google_genai import ChatGoogleGenerativeAI
    from langchain.agents import create_tool_calling_agent, AgentExecutor
    
    llm = ChatGoogleGenerativeAI(
        model="gemini-1.5-flash",
        temperature=0,
        function_calling_config={"mode": "auto", "allowed_function_names": [t.name for t in tools]}
    )
    # 后续创建Agent和Executor的逻辑保持不变
    agent = create_tool_calling_agent(llm, tools, prompt)
    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
    
  • 调整Prompt模板,明确要求模型返回工具名称
    在Agent的系统Prompt里添加明确要求,让模型每次返回工具响应时都带上工具名,比如:

    每次调用工具获取结果后,必须在返回的响应中包含工具的名称,格式示例:{"name": "get_student_data", "result": "查询到的学生数据"}

内容的提问来源于stack exchange,提问作者Victor Virgolino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:18:24