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
相关产品推荐
相关产品推荐

