(LangChain实战12):LangChain中的新型Chain之create_sql_query_chain

LangChain中的新型Chain之create_sql_query_chain

在数据库操作中,SQL查询是核心技能,但对于非技术人员来说,SQL语法往往是个门槛。今天我们来探索LangChain中的一个强大工具------create_sql_query_chain,它能将自然语言转换为SQL查询语句,让不懂SQL的人也能轻松操作数据库。

一、环境准备与导入

首先看代码的导入部分:

python 复制代码
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兼容的聊天模型接口

二、环境配置

python 复制代码
# 加载env环境变量
load_dotenv()

这行代码从.env文件加载环境变量,通常包含:

python 复制代码
OPENAI_BASE_URL=https://api.deepseek.com
OPENAI_API_KEY=your_api_key_here

三、初始化大语言模型

python 复制代码
# 构建模型
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兼容的服务

四、数据库连接配置

python 复制代码
# 构造mysql数据源
db = SQLDatabase.from_uri(f"mysql+pymysql://root:123456@192.168.1.10:3306/test_db")

数据库连接字符串的格式为:

复制代码
数据库类型+驱动://用户名:密码@主机地址:端口/数据库名

五、创建SQL查询链

python 复制代码
# 创建create_sql_query_chain实例
chain = create_sql_query_chain(llm, db)

这是最核心的一步!create_sql_query_chain函数:

  1. 接收两个参数:大语言模型实例和数据库连接

  2. 内部工作原理

    • 自动获取数据库的元数据(表结构、字段信息)
    • 将数据库结构信息嵌入到提示词中
    • 训练模型理解如何将自然语言转换为SQL

六、执行查询

基础查询方式:

python 复制代码
# 执行结果
response = chain.invoke({"question": "数据表sys_user有多少用户"})

invoke方法接受一个字典,其中question键包含用户的自然语言问题。

指定表查询方式:

python 复制代码
# 可以指定使用的多张表
response = chain.invoke({
    "question": "数据表sys_user有多少用户",
    "table_names_to_use": ["sys_user"]
})

table_names_to_use参数的作用

  • 限制模型只考虑指定的表
  • 提高查询准确性
  • 避免模型选择不相关的表

七、结果输出与分析

python 复制代码
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
相关推荐
闻哥几秒前
MySQL三大日志深度解析:redo log、undo log、binlog 原理与实战
android·java·jvm·数据库·mysql·adb·面试
头发长了几秒前
在 VS2022 中创建 Qt C++ 项目并配置 OpenSceneGraph 3.6.5,进行三维模型开发
数据库·c++·qt
xcLeigh2 分钟前
SQL 注入防不住?金仓内核级防火墙,白名单防护零误报
数据库·数据安全·sql注入·kingbasees·金仓数据库·数据补丁
WLJT1231231232 分钟前
赋能工业制造 铸就品质基石
人工智能·制造
Lab_AI2 分钟前
创腾科技推出DeepSeek智能一体机:AI4S驱动研发效率提升300%,打造科学家“第二大脑”
人工智能·ai4s·deepseek·科学智能
IT_陈寒3 分钟前
Redis 缓存击穿 vs 雪崩:5个实战方案让你的系统稳如磐石
前端·人工智能·后端
1941s4 分钟前
Dify(Agent + RAG)指南:从安装到实战的开源 LLM 应用开发平台
人工智能·低代码
fareast_mzh4 分钟前
Mistral AI本地部署 C++无需Nvidiad独立显卡也能运行(CPU推理)
开发语言·c++·人工智能
深小乐5 分钟前
从 AI Skills 学实战技能(二):读懂 skill-vetter,学会 Skills 安全审查
人工智能
勇气要爆发6 分钟前
吴恩达《LangChain LLM 应用开发精读笔记》8-Document Loading 文档加载
笔记·langchain·dreamweaver