LangChain中create_pandas_dataframe_agent自定义工具添加问题排查
LangChain Pandas Agent 添加自定义工具问题解决
问题原因与解决方案
1. TypeError: 多值参数冲突问题
当使用AgentType.OPENAI_FUNCTIONS类型创建pandas agent时,create_pandas_dataframe_agent函数内部会自动生成处理DataFrame的内置工具。直接传入tools参数会和内部生成的工具重复传递给OpenAIFunctionsAgent,触发got multiple values for keyword argument 'tools'错误。
解决方法:使用extra_tools参数传递自定义工具,该参数专门用于添加额外工具,不会与内置工具冲突。
2. Agent不调用自定义工具问题
问题根源有两个:
- 参数传递错误:原代码用
tool参数无法正确注入自定义工具 - 工具描述模糊:LLM无法准确判断触发工具的场景
解决方法:
- 改用
extra_tools参数传递自定义工具 - 优化工具描述,明确触发条件,让LLM清晰知道何时调用工具
修改后的代码示例
自定义工具定义(优化描述)
class callStaf(BaseModel): def run(self, keyword): return {"status": "submitted", "staff name": "abcd-xxx-xx1234"} tools = [ Tool( name="CallStaff", func=callStaf.run, description="当用户明确提出需要工作人员协助、请求人工介入时,调用此工具联系工作人员。", ) ]
修正后的pandas agent创建代码
conversational_agent = create_pandas_dataframe_agent( ChatOpenAI(temperature=0, model="gpt-3.5-turbo"), df, prefix=self.prefix.format(summary=summary, history=history), verbose=True, handle_parsing_errors=True, agent_type=AgentType.OPENAI_FUNCTIONS, extra_tools=tools # 替换为extra_tools参数 )
补充说明
create_pandas_dataframe_agent针对不同agent_type有参数差异:
- 对于
OPENAI_FUNCTIONS类型,必须用extra_tools添加自定义工具 - 旧版本的
tool参数已废弃,无法正确传递多工具列表,会导致工具不生效
内容的提问来源于stack exchange,提问作者shihar
相关产品推荐
相关产品推荐

