使用langchain create_sql_agent时CONVERSATIONAL_REACT_DESCRIPTION类型报错
解决LangChain SQL智能体记忆功能实现问题
问题本质
create_sql_agent 目前仅支持有限的Agent类型,AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION 不在其适配范围内,所以无论用枚举值还是字符串写法都会报错。
替代实现方案
改用通用Agent初始化框架 initialize_agent,结合SQL工具包构建带记忆功能的SQL对话Agent,具体步骤如下:
- 导入依赖模块
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
- 初始化数据库与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()
- 配置记忆与初始化带记忆的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 )
- 添加自定义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
相关产品推荐
相关产品推荐

