You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:02:08