背景与价值
在检索增强生成(RAG)或 ReAct 等场景中,让大模型直接操作数据库是常见需求。LangChain 提供了丰富的工具链来简化这一过程,其官方文档中的 SQL 能力示例也验证了方案的可行性。
应用场景
过去想要完成数据查询与分析,相关人员必须具备扎实的数据库功底,尤其是编写复杂的 SQL 语句。引入 LangChain 结合大语言模型后,处理这类问题变得轻松许多——核心在于设计清晰的提示词。
- 自然语言转查询
传统流程中,搜索信息需要掌握 SQL 语法,学习成本较高。利用自然语言替代这个过程,意味着业务人员无需学习 SQL 即可查询数据,大幅降低了使用门槛。
- 数据库聊天机器人
除了单次查询,系统还能根据历史对话上下文,结合数据库内容回答多轮问题。这意味着我们可以构建一个懂业务、能查数的智能助手。
实战案例
1. 需求说明
我们需要一个 Python 脚本,能够接收用户的自然语言问题(例如'上个月销售额最高的产品是什么'),自动将其转换为 SQL 查询,执行并返回结果。
2. 实现思路
核心逻辑分为三步:
- 连接数据库并获取 Schema 信息。
- 初始化大语言模型(LLM)。
- 创建 SQL Agent,将用户输入映射为数据库工具调用。
这里要注意,Schema 信息的准确性直接影响 SQL 生成的质量。如果表结构复杂,建议只传入必要的字段描述,避免 Token 浪费。
3. 代码实现
下面是一个最小可运行的示例,展示了如何搭建基础环境。
from langchain.agents import create_sql_agent
from langchain.sql_database import SQLDatabase
from langchain.llms import OpenAI
from sqlalchemy import create_engine
# 1. 初始化数据库连接
# 注意:实际生产中请使用环境变量管理密码
engine = create_engine("sqlite:///example.db")
db = SQLDatabase.from_engine(engine)
# 2. 加载大语言模型
llm = OpenAI(temperature=0)
# 3. 创建 SQL Agent
agent_executor = create_sql_agent(
llm=llm,
db=db,
verbose=True,
agent_type="OPENAI_FUNCTIONS"
)
# 4. 执行查询
response = agent_executor.run("查询用户表中年龄大于 30 岁的记录数量")
print(response)
运行上述代码时,Agent 会自动分析意图,生成对应的 SQL 语句并在数据库中执行。verbose=True 参数非常有用,它能打印出 Agent 的思考路径和最终生成的 SQL,方便我们排查错误。
4. 注意事项
在实际落地过程中,有几个坑值得注意:


