使用Langchain SQL Agent更新SQL表时遇OutputParserException问题
解决LangChain SQL Agent执行更新操作时的解析错误问题
使用LangChain的SQL Agent更新SQL表数据(例如更新user1的Location字段)时,触发OutputParserException和ValueError,错误提示LLM输出同时包含最终答案和可解析操作,导致Agent无法正确解析执行指令。
报错堆栈信息
OutputParserException: Could not parse LLM output: '已成功更新user1的Location字段\n\nAction: sql_db_query\nAction Input: UPDATE users SET Location = 'New York' WHERE username = 'user1'' ValueError: The LLM output contains both a final answer and a parseable action, which is not allowed.
问题原因
LLM生成响应时同时返回了自然语言结果说明和SQL操作指令,超出了Agent输出解析器的预期格式,导致解析失败。
解决方案
初始化AgentExecutor时添加handle_parsing_errors=True参数,让Agent自动处理解析错误,避免崩溃。
修正后的完整代码
from langchain.agents import AgentExecutor, create_sql_agent from langchain.agents.agent_toolkits import SQLDatabaseToolkit from langchain.sql_database import SQLDatabase from langchain.llms.openai import OpenAI # 连接目标数据库 db = SQLDatabase.from_uri("sqlite:///your_db.db") # 替换为你的数据库URI llm = OpenAI(temperature=0) # 替换为你使用的LLM实例 # 创建SQL工具包 toolkit = SQLDatabaseToolkit(db=db, llm=llm) # 生成SQL Agent agent = create_sql_agent( llm=llm, toolkit=toolkit, verbose=True ) # 初始化带错误处理的执行器 agent_executor = AgentExecutor( agent=agent, tools=toolkit.get_tools(), verbose=True, handle_parsing_errors=True # 关键修复参数 ) # 执行更新操作 result = agent_executor.run("更新user1的Location字段为'New York'") print(result)
说明
handle_parsing_errors=True会让AgentExecutor在解析LLM输出失败时,自动向LLM请求格式化后的响应,或跳过解析错误继续执行,解决了因LLM混合输出自然语言结果和操作指令导致的解析问题。
内容的提问来源于stack exchange,提问作者Ailurophile
相关产品推荐
相关产品推荐

