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

使用langchain create_sql_agent时CONVERSATIONAL_REACT_DESCRIPTION类型报错

解决LangChain SQL智能体记忆功能实现问题

问题本质

create_sql_agent 目前仅支持有限的Agent类型,AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION 不在其适配范围内,所以无论用枚举值还是字符串写法都会报错。

替代实现方案

改用通用Agent初始化框架 initialize_agent,结合SQL工具包构建带记忆功能的SQL对话Agent,具体步骤如下:

  1. 导入依赖模块
from langchain.agents import initialize_agent, AgentType
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.sql_database import SQLDatabase
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
  1. 初始化数据库与SQL工具集
# 替换为你的数据库URI
db = SQLDatabase.from_uri("postgresql://user:password@localhost:5432/dbname")
# 绑定LLM到SQL工具包
toolkit = SQLDatabaseToolkit(db=db, llm=ChatOpenAI(temperature=0))
# 获取所有SQL相关工具
tools = toolkit.get_tools()
  1. 配置记忆与初始化带记忆的Agent
# 初始化对话记忆
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 初始化LLM
llm = ChatOpenAI(temperature=0)

# 创建支持记忆的聊天型Agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
    memory=memory,
    verbose=True
)
  1. 添加自定义Prompt(可选)
    如果需要自定义Prompt模板,可通过agent_kwargs传入:
from langchain.prompts import PromptTemplate

custom_prompt = PromptTemplate(
    input_variables=["input", "chat_history", "agent_scratchpad"],
    template="""基于历史对话:
{chat_history}

用户当前问题:{input}

请借助SQL工具,按以下思路处理:
{agent_scratchpad}
"""
)

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
    memory=memory,
    agent_kwargs={"prompt": custom_prompt},
    verbose=True
)

原理说明

initialize_agent 是LangChain的通用Agent初始化接口,支持包括CHAT_CONVERSATIONAL_REACT_DESCRIPTION在内的多种Agent类型,结合SQL工具包提供的数据库操作能力,就能实现带对话记忆的SQL智能体功能,完美替代create_sql_agent的局限场景。

内容的提问来源于stack exchange,提问作者Sarath Sahadevan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:15:56