让Agent用自然语言查数据库:Text-to-SQL从零到一实战教程

发布时间:2026/8/7 5:32:31

让Agent用自然语言查数据库:Text-to-SQL从零到一实战教程
让Agent用自然语言查数据库Text-to-SQL实战企业里最多的数据在哪里。在数据库里。销售数据、用户数据、订单数据、库存数据全在数据库里。以前要查个数据得找数据分析师写SQL跑报表。等半天才能拿到结果。有了Agent以后这件事变简单了。业务人员直接用自然语言提问Agent自己写SQL自己查数据库自己把结果整理成答案。这个方向叫Text-to-SQL是Agent落地最快的场景之一。这一篇我们从零讲起。怎么让Agent连上数据库怎么让它写对SQL实际用的时候有哪些坑怎么提高准确率。先搭个实验环境我们用SQLite做演示。不用装数据库服务一个文件就是一个库方便上手。先准备一个示例数据库。我们造一张销售表几张产品表方便后面测试。importsqlite3# 创建数据库连接connsqlite3.connect(sales.db)cursorconn.cursor()# 创建产品表cursor.execute( CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, category TEXT, price REAL ) )# 创建销售表cursor.execute( CREATE TABLE IF NOT EXISTS sales ( id INTEGER PRIMARY KEY, product_id INTEGER, quantity INTEGER, amount REAL, sale_date TEXT, region TEXT, FOREIGN KEY (product_id) REFERENCES products(id) ) )# 插入示例产品数据products[(1,智能手机A,电子产品,2999),(2,笔记本电脑B,电子产品,5999),(3,无线耳机C,电子产品,399),(4,运动T恤D,服装,129),(5,跑鞋E,服装,459),]cursor.executemany(INSERT OR REPLACE INTO products VALUES (?,?,?,?),products)# 插入示例销售数据sales[(1,1,120,359880,2026-07-01,北京),(2,2,45,269955,2026-07-01,上海),(3,3,200,79800,2026-07-02,广州),(4,1,150,449850,2026-07-02,上海),(5,4,300,38700,2026-07-03,北京),(6,5,80,36720,2026-07-03,深圳),(7,2,60,359940,2026-07-04,广州),(8,3,250,99750,2026-07-04,上海),]cursor.executemany(INSERT OR REPLACE INTO sales VALUES (?,?,?,?,?,?),sales)conn.commit()conn.close()运行这段代码就会在当前目录生成一个sales.db文件里面有两张表和一些示例数据。最简单的Text-to-SQLLangChain有现成的SQL数据库工具。我们来搭一个最简单的版本。先装依赖。pipinstalllangchain langchain-openai python-dotenv然后写代码。fromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_community.utilitiesimportSQLDatabasefromlangchain_community.tools.sql_database.toolimportQuerySQLDataBaseToolfromlangchain.chainsimportcreate_sql_query_chain load_dotenv()# 连接数据库dbSQLDatabase.from_uri(sqlite:///sales.db)# 初始化模型modelChatOpenAI(modelgpt-3.5-turbo,temperature0)# 创建SQL查询链chaincreate_sql_query_chain(model,db)# 提问responsechain.invoke({question:7月2号上海卖了多少部手机})print(response)运行一下你会看到它生成的SQL语句。create_sql_query_chain只负责生成SQL不会真的执行。要执行的话得自己调用数据库工具。我们把执行也加上。fromlangchain_community.tools.sql_database.toolimportQuerySQLDataBaseTool# 创建查询执行工具execute_queryQuerySQLDataBaseTool(dbdb)# 生成SQLsqlchain.invoke({question:7月2号上海卖了多少部手机})print(生成的SQL,sql)# 执行SQLresultexecute_query.invoke(sql)print(查询结果,result)这样就能拿到查询结果了。做成Agent上面的例子是用Chain的方式。我们把它做成Agent效果会更好。Agent可以多轮思考SQL写错了还能自己改。fromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_community.utilitiesimportSQLDatabasefromlangchain_community.tools.sql_database.toolimportQuerySQLDataBaseToolfromlangchainimporthubfromlangchain.agentsimportAgentExecutor,create_react_agent load_dotenv()# 连接数据库dbSQLDatabase.from_uri(sqlite:///sales.db)# 初始化模型modelChatOpenAI(modelgpt-3.5-turbo,temperature0)# 创建数据库查询工具query_toolQuerySQLDataBaseTool(dbdb)tools[query_tool]# 创建Agentprompthub.pull(hwchase17/react)agentcreate_react_agent(model,tools,prompt)agent_executorAgentExecutor(agentagent,toolstools,verboseTrue,handle_parsing_errorsTrue,)# 测试resultagent_executor.invoke({input:7月份上海的总销售额是多少})print(答案,result[output])Agent的好处是如果第一次写的SQL有问题查不到数据或者报错了它可以自己调整重新写SQL再查。简单的Chain做不到这一点。为什么有时候SQL写不对你可能会发现有时候Agent写的SQL不对。表名猜错了字段名用错了关联关系没搞对。原因很简单。大模型不知道你的数据库长什么样。它只能看到表名和字段名靠名字来猜是什么意思。猜得准不准全看命名规不规范。提高准确率有几个办法。第一个表和字段命名要规范。用有意义的英文名字别用拼音缩写别用单字母。sales_amount就比sa好懂多了。第二个给Agent更多的元数据。告诉它每张表是干什么的每个字段是什么意思有哪些枚举值。LangChain的SQLDatabase支持自定义表描述。# 自定义表描述table_descriptions{sales:销售记录表每一行代表一笔销售订单。包含产品ID、数量、金额、销售日期和销售地区。,products:产品表包含产品名称、分类和价格。product_id和sales表的product_id关联。}dbSQLDatabase.from_uri(sqlite:///sales.db,custom_table_infotable_descriptions,)加上描述以后Agent对表的理解更准确SQL写错的概率会降低。第三个用视图或者同义词。把复杂的表结构做成视图视图名和字段名起得直观一点。Agent查视图就好了不用理解复杂的表关系。第四个给few-shot例子。在Prompt里加几个问题-SQL的示例。大模型看到例子以后写出来的SQL会更准确。安全问题让Agent直接查数据库安全是绕不开的话题。SQL注入是第一个担心的。好在LangChain的SQL工具做了一些防护默认只允许SELECT语句不能执行INSERT、UPDATE、DELETE。数据不会被改。但还有别的风险。数据泄露。Agent可能查到不该看的数据。比如普通员工问了一句全公司工资最高的人是谁。Agent要是真去查了就麻烦了。性能问题。Agent写的SQL可能很慢全表扫描、笛卡尔积把数据库跑挂了。权限过大。Agent用什么账号连数据库。给高权限了不安全给低权限了查不到需要的数据。这些问题没有完美的解决方案只能层层设防。第一权限最小化。Agent用的数据库账号只给它需要的表的SELECT权限。其他表一概看不到。第二查询限制。设置超时时间设置返回行数上限。SQL跑太久自动杀掉返回太多行自动截断。第三内容审核。查询结果返回之前过一遍敏感信息检测。涉及隐私的数据做脱敏。第四人工审核。重要的查询或者可能有风险的查询让人确认一下再执行。做企业内部应用安全一定要放在心上。别等出事了再补。实际效果怎么样实话说现在的Text-to-SQL还做不到百分之百准确。简单查询单表查个总数、平均值基本没问题。准确率能到百分之八九十。中等复杂度两三张表关联加几个条件也还可以。七成左右的准确率吧。复杂查询多表嵌套、窗口函数、复杂统计就不行了。经常写不对。而且准确率跟数据模型的能力也有关系。GPT-4写SQL就比GPT-3.5好不少。国产模型里DeepSeek和通义的SQL能力也还可以。所以实际落地的时候通常是辅助角色。Agent生成SQL人来审核和修改。能省掉很多写SQL的时间但还不能完全替代人。对非技术人员来说能用自然语言查数据哪怕有时候需要人帮忙调一下也比学SQL容易多了。下一篇我们讲文件处理工具。PDF、Word、Excel这些文档Agent怎么读取、解析、生成。

相关新闻

Embarcadero Dev-C++ 6.3 中文乱码:从编码原理到三端统一解决方案

Embarcadero Dev-C++ 6.3 中文乱码:从编码原理到三端统一解决方案

2026/8/7 5:32:31

1. 项目概述:Embarcadero Dev-C 6.3 中文乱码的根源与影响如果你最近从经典的Dev-C 5.11升级到了Embarcadero接手后发布的6.3版本,并且在编写或运行包含中文字符的程序时,遇到了令人头疼的乱码问题,比如控制台输出一堆问号“&…

大模型应用降本增效实战:Skill技能封装如何减少60% Token消耗

大模型应用降本增效实战:Skill技能封装如何减少60% Token消耗

2026/8/7 5:32:31

1. 项目概述:当“技能”成为降本增效的利器最近在折腾大模型应用时,我反复被一个现实问题困扰:Token消耗。无论是调用OpenAI的API,还是使用Claude、DeepSeek等模型,每一次交互都在“烧钱”或消耗宝贵的额度。尤其是在处…

搜索引擎接入实战:让AI Agent学会上网找答案(Tavily/SerpAPI对比)

搜索引擎接入实战:让AI Agent学会上网找答案(Tavily/SerpAPI对比)

2026/8/7 5:32:31

搜索引擎接入,让Agent学会上网找答案 Agent最常用的能力是什么。我投搜索一票。 大模型再聪明,它的知识也是有截止日期的。训练数据之后发生的事,它不知道。领域专业知识,它可能也不全。这时候搜索就派上用场了。 搜索能力决定了A…

从零构建流媒体平台:FFmpeg转码与HLS自适应流技术实践

从零构建流媒体平台:FFmpeg转码与HLS自适应流技术实践

2026/8/7 6:32:33

最近在技术社区里,我注意到一个有趣的现象:很多开发者,尤其是独立开发者或小团队,都在寻找一种高效、低成本的方式来构建自己的流媒体应用或内容分发平台。无论是想搭建个人影音库、创建知识付费课程,还是运营一个垂直…

从游戏资源提取到引擎重建:技术视角下的游戏角色动画复刻全流程

从游戏资源提取到引擎重建:技术视角下的游戏角色动画复刻全流程

2026/8/7 6:32:33

最近在技术社区里,我注意到一个有趣的现象:很多开发者,尤其是游戏开发者和独立创作者,开始热衷于将游戏中的经典场景、角色动作或剧情片段,通过技术手段进行“解构”与“二次创作”。这不仅仅是简单的录屏剪辑&#xf…

医疗NLP实战:从“患者:天黑了”到结构化症状的智能抽取与标准化

医疗NLP实战:从“患者:天黑了”到结构化症状的智能抽取与标准化

2026/8/7 6:32:33

最近在医疗信息化项目中,我遇到了一个看似简单却让团队头疼不已的问题:如何让系统“理解”并准确响应“患者:天黑了”这样的自然语言描述?这背后,远不止是文本匹配那么简单。这并非一个孤立的案例。在电子病历录入、医…

CoordTransform终极指南:3分钟解决地图坐标偏差难题

CoordTransform终极指南:3分钟解决地图坐标偏差难题

2026/8/7 6:32:33

CoordTransform终极指南:3分钟解决地图坐标偏差难题 【免费下载链接】coordtransform 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 项目地址: https://gitcode.com/gh_m…

VS Code Remote-SSH连接阿里云ECS的配置与排错指南

VS Code Remote-SSH连接阿里云ECS的配置与排错指南

2026/8/7 6:32:33

1. 项目概述:当VS Code Remote-SSH遇上阿里云去年团队将开发环境迁移到阿里云ECS时,我经历了整整三天的Remote-SSSH连接噩梦。明明本地连接正常的配置,在云服务器上却频繁出现"Resolver error: Error: Running the contributed command:…

UnityWebRequest实战:从基础GET到高级断点续传

UnityWebRequest实战:从基础GET到高级断点续传

2026/8/7 6:22:33

1. 项目概述:为什么UnityWebRequest是网络交互的基石 在Unity开发中,无论是加载一个远程的配置文件、下载一张贴图,还是从服务器拉取玩家的存档数据,网络请求都是绕不开的核心功能。很多开发者,尤其是刚接触Unity不久的…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/6 19:19:00

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

CAD图库管理:从文件归档到设计资产管理的效率革命

CAD图库管理:从文件归档到设计资产管理的效率革命

2026/8/7 0:02:15

你肯定遇到过这种情况:打开一个老项目,想找某个特定的图块——比如一个标准的门、一个特定的设备符号,或者一个公司logo。你记得它就在某个DWG文件里,或者曾经从某个同事那里拷来过。于是,你开始在一堆命名混乱的文件夹…

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

2026/8/7 0:02:15

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款功能强…

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

2026/8/7 0:02:15

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求。而“软件测试”是质量控制的关键手段之一,属于QC范畴下的具体实践,其目标是发现缺陷、验证功能正确性、评估软件质量属…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/6 5:43:30

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…