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

如何为LangChain SQL聊天应用实现会话上下文关联?

基于LangChain实现SQL聊天应用的会话上下文理解

核心逻辑

要解决用户提问中的指代(比如“这个”)关联问题,关键是让LangChain Agent能读取并利用完整会话历史,先解析指代内容对应的具体实体(如订单ID XYZ),再生成正确的SQL查询。

具体代码实现步骤

1. 初始化会话存储与基础组件

用ConversationBufferMemory维护对话记录,确保每轮对话的上下文都被留存,同时完成数据库和大模型的初始化:

from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase

# 连接目标数据库
db = SQLDatabase.from_uri("sqlite:///your_order_db.db")
# 初始化大语言模型(推荐用GPT-3.5/4类模型,指代解析能力更强)
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")
# 配置会话内存,指定内存键为chat_history,返回完整对话消息
memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True,
    output_key="output"
)

2. 创建带会话内存的SQL Agent

将内存传入Agent,让Agent在生成响应时自动加载历史对话:

# 构建SQL工具包
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
# 创建带内存的SQL Agent
agent = create_sql_agent(
    llm=llm,
    toolkit=toolkit,
    memory=memory,
    verbose=True,
    agent_type="chat-zero-shot-react-description"
)

3. 优化Prompt增强指代解析

如果默认Prompt对指代的处理不够理想,可以自定义Prompt,明确告知LLM优先解析指代内容:

from langchain.prompts import ChatPromptTemplate

# 自定义Prompt模板,强调上下文解析
custom_template = """
你是处理订单数据库的SQL助手,请严格按照以下流程处理问题:
1. 先查看对话历史,解析当前问题中的指代词汇(如“这个”“它”),确定具体对应的实体(比如订单ID、用户ID等)
2. 根据解析后的完整问题,生成正确的SQL查询语句
3. 执行查询并返回清晰的结果

对话历史:{chat_history}
当前用户问题:{input}
可用工具:{tools}
工具说明:{tool_names} = {tools}

输出格式要求:
思考:说明你如何解析指代、生成SQL的逻辑
工具调用:工具名称,参数(如果需要)
最终回答:[查询结果]
"""

# 生成Prompt并替换Agent的默认Prompt
prompt = ChatPromptTemplate.from_template(custom_template)
agent.agent.llm_chain.prompt = prompt

4. 多轮对话测试

运行多轮对话验证效果:

# 第一轮对话:询问最高订单
first_response = agent.run("最近产生的最高订单是哪个?")
print(first_response)  # 预期输出:订单ID:XYZ

# 第二轮对话:测试指代解析
second_response = agent.run("这个是什么时候下单的?")
print(second_response)  # 预期输出:订单XYZ的下单时间(如2024-05-20 14:30:00)

额外优化建议

  • 若对话历史过长,可改用ConversationSummaryMemory压缩历史内容,避免超出LLM上下文窗口
  • 可以在内存中单独存储上一轮的关键实体(如记录last_order_id),让Agent直接读取,进一步提升解析准确率
  • 测试时优先用能力较强的大模型,GPT-3.5及以上版本对指代的理解更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:22:41