LangChain中的新型Chain之create_sql_query_chain
在数据库操作中,SQL查询是核心技能,但对于非技术人员来说,SQL语法往往是个门槛。今天我们来探索LangChain中的一个强大工具——create_sql_query_chain,它能将自然语言转换为SQL查询语句,让不懂SQL的人也能轻松操作数据库。
一、环境准备与导入
首先看代码的导入部分:
import os
from dotenv import load_dotenv
from langchain_classic.chains.sql_database.query import create_sql_query_chain
from langchain_community.utilities import SQLDatabase
from langchain_openai import ChatOpenAI
- os:Python标准库,用于读取环境变量
- dotenv:管理.env文件中的环境变量
- create_sql_query_chain:我们今天要讲的核心功能,创建SQL查询链
- SQLDatabase:LangChain的数据库工具类
- ChatOpenAI:OpenAI兼容的聊天模型接口
二、环境配置
# 加载env环境变量
load_dotenv()
这行代码从.env文件加载环境变量,通常包含:
OPENAI_BASE_URL=https://api.deepseek.com
OPENAI_API_KEY=your_api_key_here
三、初始化大语言模型
# 构建模型
llm = ChatOpenAI(
model="deepseek-chat",
base_url=os.getenv('OPENAI_BASE_URL'),
api_key=os.getenv('OPENAI_API_KEY'),
)
这里创建了一个ChatOpenAI实例,但重点在于:
- model="deepseek-chat":使用的是DeepSeek模型
- base_url:指定了DeepSeek的API地址
- 这样配置可以让LangChain的OpenAI接口兼容其他OpenAI API兼容的服务
四、数据库连接配置
# 构造mysql数据源
db = SQLDatabase.from_uri(f"mysql+pymysql://root:123456@192.168.1.10:3306/test_db")
数据库连接字符串的格式为:
数据库类型+驱动://用户名:密码@主机地址:端口/数据库名
五、创建SQL查询链
# 创建create_sql_query_chain实例
chain = create_sql_query_chain(llm, db)
这是最核心的一步!create_sql_query_chain函数:
接收两个参数:大语言模型实例和数据库连接
内部工作原理:
- 自动获取数据库的元数据(表结构、字段信息)
- 将数据库结构信息嵌入到提示词中
- 训练模型理解如何将自然语言转换为SQL
六、执行查询
基础查询方式:
# 执行结果
response = chain.invoke({"question": "数据表sys_user有多少用户"})
invoke方法接受一个字典,其中question键包含用户的自然语言问题。
指定表查询方式:
# 可以指定使用的多张表
response = chain.invoke({
"question": "数据表sys_user有多少用户",
"table_names_to_use": ["sys_user"]
})
table_names_to_use参数的作用:
- 限制模型只考虑指定的表
- 提高查询准确性
- 避免模型选择不相关的表
七、结果输出与分析
import os
from dotenv import load_dotenv
from langchain_classic.chains.sql_database.query import create_sql_query_chain
from langchain_community.utilities import SQLDatabase
from langchain_openai import ChatOpenAI
# 加载env环境变量
load_dotenv()
# 构建模型
llm = ChatOpenAI(
model="deepseek-chat",
base_url=os.getenv('OPENAI_BASE_URL'),
api_key=os.getenv('OPENAI_API_KEY'),
)
# 构造mysql数据源
db = SQLDatabase.from_uri(f"mysql+pymysql://root:123456@192.168.1.12:3306/test_db")
# 创建create_sql_query_chain实例
chain = create_sql_query_chain(llm, db)
# 执行结果
response = chain.invoke({"question": "数据表sys_user有多少用户"})
# 可以指定使用的多张表
# response = chain.invoke({"question": "数据表sys_user有多少用户",
# "table_names_to_use":["sys_user"]})
# 结果:# SQLQuery: SELECT COUNT(*) AS `user_count` FROM `sys_user`
print(response)
运行后会得到类似这样的输出:
SELECT COUNT(*) AS user_count FROM sys_user
网硕互联帮助中心





评论前必须登录!
注册