当前位置: 首页 > news >正文

AI代码开发宝库系列:Text2SQL技术入门

Text2SQL技术入门 - 让非程序员也能玩转数据库查询

前言:告别复杂的SQL语句,拥抱自然语言查询新时代!

你是否曾经为了一个简单的数据查询而苦恼?是否因为不会写SQL语句而求人帮忙?现在,有了Text2SQL技术,你只需要用大白话就能轻松查询数据库了!今天我们就来聊聊这个神奇的技术,让你也能成为数据分析小能手!

一、Text2SQL是什么鬼?简单来说就是翻译官!

想象一下,你是一个运营小姐姐,老板突然问你:"咱们上个月在抖音投放的广告,哪一天的费用最高?"在过去,你可能需要:

  1. 打开数据库管理工具

  2. 写复杂的SQL语句

  3. 各种JOIN、WHERE、ORDER BY...

  4. 跑半天可能还写错

但现在,有了Text2SQL,你只需要说:"帮我查一下抖音上个月哪天投放费用最高",系统就能自动帮你生成SQL并返回结果!

Text2SQL = 自然语言 + 数据库查询,它就是你和数据库之间的翻译官!

二、Text2SQL是如何炼成的?三大进化阶段揭秘!

1. 远古时代:人工规则模板

就像早期的翻译机,只能翻译固定的句子,换个说法就不行了。

2. 机器学习时代:序列到序列模型

开始能学习一些规律,但处理复杂语义还是有点吃力。

3. 现代AI时代:大语言模型(LLM)

这就是我们现在用的技术!它能理解复杂的自然语言,还能生成准确的SQL语句。比如你问"查一下30岁以下客户的信息",它能准确理解并生成:

SELECT CustomerID, Name, DateOfBirth 
FROM CustomerInfo 
WHERE DateOfBirth > '1995-01-01';

三、实战演示:三步搞定Text2SQL系统

第一步:准备数据表结构

我们以保险公司的客户数据为例:

CREATE TABLE CustomerInfo (CustomerID INT PRIMARY KEY,Name VARCHAR(50),Gender VARCHAR(10),DateOfBirth DATE,PhoneNumber VARCHAR(20),MaritalStatus VARCHAR(20)
);
​
CREATE TABLE PolicyInfo (PolicyNumber INT PRIMARY KEY,CustomerID INT,ProductID INT,PremiumPaymentStatus VARCHAR(20)
);

第二步:选择合适的AI模型

根据你的需求选择:

  • 预算充足:GPT-o1、Claude 3.7(准确率高)

  • 私有化部署:Qwen-Coder、DeepSeek-V3(安全性好)

  • 性价比之选:Qwen-Turbo(速度快,价格低)

第三步:实现核心代码

这里我们用LangChain框架来快速搭建:

from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain.chat_models import ChatOpenAI
​
# 连接数据库
db = SQLDatabase.from_uri("mysql+pymysql://user:password@localhost:3306/insurance")
​
# 初始化AI模型
llm = ChatOpenAI(model="qwen-turbo",temperature=0.01,openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",openai_api_key="your_api_key"
)
​
# 创建SQL智能体
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent_executor = create_sql_agent(llm=llm,toolkit=toolkit,verbose=True
)
​
# 开始查询!
result = agent_executor.run("找出所有未支付保费的客户姓名和电话")
print(result)

运行结果可能就是这样:

NamePhoneNumber
张三13800138000
李四13900139000

四、Text2SQL的未来应用场景:不只是查数据那么简单!

1. 企业智能BI系统

让每个员工都能通过自然语言查询业务数据,不再需要专门的分析师。

2. 客服机器人升级

客服不仅能回答常见问题,还能直接查询客户订单、账单等信息。

3. 智能运营助手

运营人员可以直接问"昨天哪个渠道的转化率最高?",系统自动给出答案和图表。

4. 教育培训工具

帮助初学者通过自然语言学习SQL,降低数据库学习门槛。

5. 私有化部署方案

金融机构、政府部门可以部署在内网,安全查询敏感数据。

五、进阶技巧:让你的Text2SQL更聪明!

1. Prompt优化技巧

-- language: SQL
### Question: {用户查询问题}
### Input: {数据表建表语句}
### Response:
Here is the SQL query I have generated:
```sql
{生成的SQL语句}
​

2. 结合RAG技术提升准确率

通过向量数据库存储常见查询示例,提高SQL生成的准确性。

3. 错误处理和优化

记录常见的错误类型,通过RAG优化解决字段名错误、多表关联等问题。

六、完整代码实现:手把手教你搭建Text2SQL系统

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Text2SQL智能查询系统完整实现
作者:AI代码开发宝库
"""
​
import os
from langchain.agents import create_sql_agent, AgentExecutor
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain.chat_models import ChatOpenAI
import mysql.connector
from typing import List, Dict
​
class Text2SQLSystem:def __init__(self, db_uri: str, api_key: str, model: str = "qwen-turbo"):"""初始化Text2SQL系统Args:db_uri: 数据库连接URIapi_key: API密钥model: 使用的AI模型"""# 连接数据库self.db = SQLDatabase.from_uri(db_uri)# 初始化AI模型self.llm = ChatOpenAI(model=model,temperature=0.01,openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",openai_api_key=api_key)# 创建工具包和智能体self.toolkit = SQLDatabaseToolkit(db=self.db, llm=self.llm)self.agent_executor = create_sql_agent(llm=self.llm,toolkit=self.toolkit,verbose=True)def query(self, question: str) -> str:"""执行自然语言查询Args:question: 自然语言查询问题Returns:查询结果"""try:result = self.agent_executor.run(question)return resultexcept Exception as e:return f"查询出错: {str(e)}"def get_table_info(self) -> str:"""获取数据库表信息Returns:表信息描述"""tables = self.db.get_usable_table_names()info = "可用的数据表:\n"for table in tables:info += f"- {table}\n"return info
​
def main():"""主函数 - 演示Text2SQL系统使用"""# 配置信息(请替换为你的实际配置)DB_URI = "mysql+pymysql://student123:student321@rm-uf6z891lon6dxuqblqo.mysql.rds.aliyuncs.com:3306/action"API_KEY = os.environ.get('DASHSCOPE_API_KEY', 'your_api_key_here')# 创建Text2SQL系统实例text2sql = Text2SQLSystem(DB_URI, API_KEY)# 显示可用表信息print("=== Text2SQL智能查询系统 ===")print(text2sql.get_table_info())# 示例查询queries = ["获取所有客户的姓名和联系电话","找出所有未支付保费的保单号和客户姓名","查询英雄攻击力前5名的英雄","代理人执照即将到期的有哪些?按到期时间排序"]for query in queries:print(f"\n--- 查询: {query} ---")result = text2sql.query(query)print(f"结果:\n{result}")
​
# 高级功能:自定义Prompt优化
class AdvancedText2SQLSystem(Text2SQLSystem):def __init__(self, db_uri: str, api_key: str, model: str = "qwen-turbo"):super().__init__(db_uri, api_key, model)# 优化的系统提示self.system_prompt = """你是一个专业的SQL生成助手,请严格按照以下规则生成SQL:1. 只使用提供的数据表结构2. 确保SQL语法正确3. 添加必要的注释说明4. 对于复杂查询,优先考虑性能优化"""def query_with_context(self, question: str, context: str = "") -> str:"""带上下文的查询Args:question: 查询问题context: 额外上下文信息Returns:查询结果"""full_question = f"{context}\n{question}" if context else questionreturn self.query(full_question)
​
if __name__ == "__main__":main()

结语:Text2SQL开启数据查询新纪元!

Text2SQL技术正在改变我们与数据交互的方式。从简单的查询到复杂的分析,从技术人员专享到人人可用,这项技术的潜力是巨大的。

未来,随着AI技术的不断发展,我们可以期待:

  • 更准确的语义理解能力

  • 更广泛的数据库支持

  • 更智能的查询优化

  • 更安全的权限控制

现在就开始学习和应用Text2SQL技术吧!让数据查询变得简单有趣,让每个业务人员都能成为数据分析师!

记住:技术改变生活,AI赋能未来!

代码

sql_agent_deepseek.py

#!/usr/bin/env python
# coding: utf-8# ## 使用DeepSeek进行数据表的查询# In[1]:from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain.llms.openai import OpenAI
from langchain.agents import AgentExecutordb_user = "student123"
db_password = "student321"
#db_host = "localhost:3306"
db_host = "rm-uf6z891lon6dxuqblqo.mysql.rds.aliyuncs.com:3306"
db_name = "action"
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")
db# In[3]:from langchain.chat_models import ChatOpenAI
import os# 从环境变量获取 dashscope 的 API Key
api_key = os.environ.get('DASHSCOPE_API_KEY')# 通过LLM => 撰写SQL
llm = ChatOpenAI(temperature=0.01,model="deepseek-v3",  #model = "qwen-turbo",# openai_api_key = "sk-9846f14a2104490b960adbf5c5b3b32e",# openai_api_base="https://api.deepseek.com"openai_api_base = "https://dashscope.aliyuncs.com/compatible-mode/v1",openai_api_key  = api_key
)# 需要设置llm
toolkit = SQLDatabaseToolkit(db=db, llm=llm)# SQL智能体:给它目标,它自己会进行规划,最终把结果给你
agent_executor = create_sql_agent(llm=llm,toolkit=toolkit,verbose=True
)# In[4]:# Task: 描述数据表
agent_executor.run("描述与订单相关的表及其关系")# In[7]:# 这个任务,实际上数据库中 没有HeroDetails表
agent_executor.run("描述HeroDetails表")# In[3]:agent_executor.run("描述Hero表")# In[7]:agent_executor.run("找出英雄攻击力最高的前5个英雄")

这部分是实际的查询任务:

- 智能体会将自然语言查询转换为SQL语句
- 然后在数据库中执行查询并返回结果
- 从任务可以看出,这个数据库可能包含与游戏相关的数据表,如英雄(Hero)表等


作者简介:AI代码开发宝库,专注于分享前沿AI技术与实用代码,让更多人轻松掌握人工智能!关注我,获取更多干货内容!

版权声明:本文为原创文章,转载请注明出处!

http://www.dtcms.com/a/552969.html

相关文章:

  • 网站充值链接怎么做三亚做网站推广
  • 在Azure webapp中搭建 基于chroma的 RAG agent
  • 【春秋云境】CVE-2024-38856 Apache OFbiz从未授权到RCE
  • 货拉拉用户画像基于 Apache Doris 的数据模型设计与实践
  • JAR 包中替换依赖jar的正确姿势(Windows 环境)
  • linux驱动开发之pr_warn和pr_warning
  • Keil(MDK-ARM)和 STM32CubeIDE对比
  • Linux上使用Docker安装MinIO指南
  • Maven 依赖冲突:解决 jar 包版本不一致的 3 种方法
  • android集成react native组件踩坑笔记(Activity局部展示RN的组件)
  • 多语言网站思路十大h5页面制作工具
  • 汽车之家网站系统是什么做的防爆玻璃门网站建设
  • k8s——services资源+pod详解1
  • 基于深度学习的医疗器械分类编码映射系统:实现篇
  • [人工智能-大模型-122]:模型层 - RNN是通过神经元还是通过张量时间记录状态信息?时间状态信息是如何被更新的?
  • React 18.x 学习计划 - 第六天:React路由和导航
  • 逻辑回归正则化参数选择实验报告:贝叶斯优化与网格搜索的效率对比
  • 建设景区网站推文网站中了木马了怎么办
  • 【JAVA 进阶】重生之我要学会 JUC 并发编程
  • POST 数据提交注入测试sqlilabs less 11
  • 微服务高并发设计考虑要点
  • 解码LVGL Linux 系统(Ubuntu/WSL + 开发板)移植
  • 长春网站制作昆明君创网络科技有限公司
  • 把 CLI 搬上 Web:在内网打造“可二开”的 AI IDE,为什么这条路更现实?
  • iOS 上架应用市场全流程指南,App Store 审核机制、证书管理与跨平台免 Mac 上传发布方案(含开心上架实战)
  • 酒厂网站源码now9999网站提示建设中
  • iOS 中的引用计数
  • C++多线程运行整理
  • 【渲染引擎基础】圣杯架构——固定逻辑时长+插值渲染
  • iOS 崩溃日志分析工具全指南,多工具协同构建稳定性分析体系