使用OpenAI Tools Agent构建LangChain代理执行器遇ChatGeneration解析错误求助
问题描述
我跟着Krish NAik的LangChain与代理教程,用create_openai_tools_agent构建代理执行器,配置了Wikipedia和Arxiv工具,但执行查询时一直报错:"This output parser only works on ChatGeneration."
相关代码:
from langchain.agents import create_openai_tools_agent agent = create_openai_tools_agent(llm,tools,prompt) ## Agent Executer from langchain.agents import AgentExecutor agent_executer = AgentExecutor(agent=agent, tools=tools, verbose=True) agent_executer.invoke({"input":"What's the paper 1605.08386 about?"})
尝试添加handle_parsing_errors=True参数后问题仍未解决,报错堆栈关键信息:
153 try: 154 self._validate_inputs(inputs) 155 outputs = ( --> 156 self._call(inputs, run_manager=run_manager) 157 if new_arg_supported 158 else self._call(inputs) 159 ) 161 final_outputs: Dict[str, Any] = self.prep_outputs( 162 inputs, outputs, return_only_outputs 163 ) 164 except BaseException as e: ... ---> 60 raise ValueError("This output parser only works on ChatGeneration output") 61 message = result[0].message 62 return parse_ai_message_to_openai_tool_action(message)
解决方案
这个错误的核心原因是你使用的LLM不是Chat模型,create_openai_tools_agent要求必须使用OpenAI的聊天模型(比如gpt-3.5-turbo、gpt-4这类),而不是文本补全模型(比如text-davinci-003)。
解决步骤:
- 确保初始化LLM时使用的是ChatOpenAI类,而非OpenAI类
- 修改后的示例代码:
from langchain.chat_models import ChatOpenAI # 初始化聊天模型 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 后续agent和executor代码保持不变 from langchain.agents import create_openai_tools_agent agent = create_openai_tools_agent(llm, tools, prompt) from langchain.agents import AgentExecutor agent_executer = AgentExecutor(agent=agent, tools=tools, verbose=True) agent_executer.invoke({"input":"What's the paper 1605.08386 about?"})
额外检查项:
- 确认
prompt是适配OpenAI Tools Agent的正确格式,可使用langchain.prompts.chat.ChatPromptTemplate构建符合要求的提示词 - 确保Wikipedia、Arxiv工具已正确初始化,无配置错误
内容的提问来源于stack exchange,提问作者IISsENII
相关产品推荐
相关产品推荐

