使用LangChain Agent生成面试计划时触发Human工具解析响应错误
问题解决:LangChain Agent主动提问生成面试计划时的解析错误
问题背景
尝试用LangChain Agent为软件工程师生成1个月面试准备计划,期望Agent主动提问获取当前技能水平等信息,但运行代码时触发解析响应错误,无法像ChatGPT那样自然发起提问。
错误根源
使用AgentType.CONVERSATIONAL_REACT_DESCRIPTION时,该Agent要求输出严格遵循「思考-行动-输入」的固定模板,而直接让Agent输出提问内容的方式不符合模板规则,导致解析失败。
可行解决方案
方案1:切换适配聊天场景的Agent类型
改用AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,该类型针对聊天场景优化了格式容错性,能自然处理主动提问需求:
import os from langchain.memory import ConversationBufferMemory from langchain.chat_models import ChatOpenAI from langchain.agents import load_tools, initialize_agent from langchain.agents import AgentType os.environ["OPENAI_API_KEY"] = "sk-xxx" def _handle_error(error) -> str: return str(error)[:50] if __name__ == '__main__': llm = ChatOpenAI(temperature=0.0) tools = load_tools( ["human"], llm=llm, ) # 开启return_messages适配聊天消息格式 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) agent_chain = initialize_agent( tools, llm, agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory, max_iterations=3, handle_parsing_errors=_handle_error ) agent_chain.run( "我需要你为软件工程师生成一份为期一个月的面试准备计划,请先询问我的当前技能水平、目标岗位类型(如后端/前端/全栈)、目标公司层级等信息,再根据这些信息生成计划。")
方案2:优化提示词引导格式兼容
若坚持使用原Agent类型,需修改提示词,明确引导Agent通过Human工具发起提问:
agent_chain.run( "请生成一份软件工程师的1个月面试准备计划。你需要先通过Human工具询问我的当前技术栈熟练度、目标岗位、已有面试经验等信息,再基于这些信息制定计划。现在请调用Human工具发起第一个提问。")
关键注意点
- 切换到
CHAT_CONVERSATIONAL_REACT_DESCRIPTION时,必须将ConversationBufferMemory的return_messages设为True,适配聊天消息格式。 - 提示词需明确告知Agent要通过
Human工具获取用户信息,而非直接输出提问内容。
内容的提问来源于stack exchange,提问作者Rajeev
相关产品推荐
相关产品推荐

