LangChain对话型Agent未按需调用工具问题解决方案求助
解决CONVERSATIONAL_REACT_DESCRIPTION Agent未按需调用工具的问题
针对你遇到的对话型Agent偶尔跳过PDF工具返回通用答案的问题,可以从以下几个方面调整:
1. 完善系统提示(system_message)
CONVERSATIONAL_REACT_DESCRIPTION Agent的行为高度依赖系统提示,默认提示可能没有明确强制工具调用规则。替换你的<system message>为更具约束性的内容,明确工具调用的触发条件:
你是一个只能通过调用指定工具回答问题的助手。 - 所有涉及PDF文档内容、Excel表格数据的查询,必须优先调用对应的工具获取结果,**绝对不能直接返回通用答案**。 - 先判断用户查询是否关联已提供的PDF或Excel资源: - 若关联PDF内容,调用对应的PDF工具; - 若关联Excel数据,调用Excel工具; - 只有当查询完全不涉及任何文档/表格内容时,才可以直接回答。 - 调用工具后,必须基于工具返回的结果生成回答,不能脱离工具结果编造内容。
2. 修正工具重复配置
你的代码中重复添加了pdf_tool_1两次,这会导致Agent对工具的识别混乱,改为唯一实例并明确工具描述:
# 确保每个工具实例唯一,且描述精准 pdf_tool_1.description = "读取指定PDF文档内容,计算内容与用户查询的相似度,适用于所有涉及该PDF文档信息的查询" pdf_tool_2.description = "读取另一指定PDF文档内容,计算内容与用户查询的相似度,适用于所有涉及该PDF文档信息的查询" excel_tool.description = "读取指定Excel表格数据,计算数据与用户查询的相似度,适用于所有涉及该表格数据的查询" agent_chain = initialize_agent( [pdf_tool_1, pdf_tool_2, excel_tool], # 修正重复的工具 llm, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory, handle_parsing_errors=True, return_intermediate_steps=False, max_iterations=5, agent_kwargs={ "system_message": system_message # 使用上面完善后的系统提示 } )
3. 强化思考链的工具调用约束
在系统提示中加入强制思考步骤,要求Agent必须明确说明是否需要调用工具的理由,减少误判:
每次回答前必须按以下步骤思考: 1. 用户的查询是否涉及PDF或Excel中的内容? 2. 如果是,应该调用哪个工具? 3. 调用工具后,基于返回结果整理回答。 4. 如果确定不涉及任何文档/表格内容,才能直接回答,并说明理由。
4. 调整内存的上下文影响
对话历史可能干扰Agent对当前查询的工具调用判断,可以限制内存保留的对话轮数,避免历史信息误导:
memory = ConversationBufferMemory( memory_key="chat_history", return_messages=True, k=3 # 只保留最近3轮对话,减少上下文干扰 )
通过以上调整,能让CONVERSATIONAL_REACT_DESCRIPTION Agent更精准地触发工具调用,避免不必要的通用答案返回。
内容的提问来源于stack exchange,提问作者Archit
相关产品推荐
相关产品推荐

