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

模型微调方法:从通用到专用为什么 Text2SQL 准确率如此重要?

针对复杂、高频的查询场景,提供示例 SQL:

examples = [ { "question": "查询每个产品类别的销售数量", "sql": """ SELECT dc.EnglishProductCategoryName, COUNT(*) AS SalesCount FROM FactInternetSales fis INNER JOIN DimProduct dp ON fis.ProductKey = dp.ProductKey INNER JOIN DimProductSubcategory dps ON dp.ProductSubcategoryKey = dps.ProductSubcategoryKey INNER JOIN DimProductCategory dc ON dps.ProductCategoryKey = dc.ProductCategoryKey GROUP BY dc.EnglishProductCategoryName ORDER BY SalesCount DESC; """ }, { "question": "查找最近30天未下单的客户", "sql": """ SELECT dc.FirstName, dc.LastName, dc.EmailAddress FROM DimCustomer dc WHERE dc.CustomerKey NOT IN ( SELECT DISTINCT CustomerKey FROM FactInternetSales WHERE OrderDate >= DATEADD(DAY, -30, GETDATE()) ); """ }, { "question": "查询每个地区的销售额和订单数", "sql": """ SELECT dst.SalesTerritoryRegion, dst.SalesTerritoryCountry, COUNT(DISTINCT fis.SalesOrderNumber) AS OrderCount, SUM(fis.SalesAmount) AS TotalSales FROM FactInternetSales fis INNER JOIN DimSalesTerritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion, dst.SalesTerritoryCountry ORDER BY TotalSales DESC; """ }, { "question": "查询年收入前10的客户及其购买总额", "sql": """ SELECT TOP 10 dc.FirstName, dc.LastName, dc.YearlyIncome, SUM(fis.SalesAmount) AS TotalPurchases FROM DimCustomer dc INNER JOIN FactInternetSales fis ON dc.CustomerKey = fis.CustomerKey GROUP BY dc.CustomerKey, dc.FirstName, dc.LastName, dc.YearlyIncome ORDER BY dc.YearlyIncome DESC; """ } ]

示例 SQL 的价值

  • 帮助模型"举一反三",将示例应用到类似场景
  • 规范 SQL 风格和最佳实践
  • 提升复杂查询的生成质量

2.3 自定义提示词规则

定义全局适用的业务规则:

全局规则: 1. 所有金额字段统一使用 money 类型,注意精度问题 2. 时间范围查询优先使用 DateKey 关联 DimDate 表 3. 产品相关查询需要考虑产品层次结构: Product → Subcategory → Category 4. 客户相关查询注意 GeographyKey 关联地理位置信息 5. 销售数据有两个来源: FactInternetSales (互联网销售) 和 FactResellerSales (经销商销售) 6. 日期字段有三种: OrderDate (下单日期), DueDate (到期日期), ShipDate (发货日期) 7. 金额计算注意货币类型: CurrencyKey 关联 DimCurrency 8. 促销活动: PromotionKey 关联 DimPromotion

三、业务上下文配置:让模型"懂业务"

3.1 术语配置:业务语言 → 技术语言

业务人员说的"大客户",数据库里可能是YearlyIncome > 100000。术语配置是关键桥梁:

{ "terminology": [ { "business_term": "大客户", "technical_mapping": "YearlyIncome > 100000", "description": "年收入超过10万美元的客户" }, { "business_term": "互联网销售", "technical_mapping": "FROM FactInternetSales", "description": "通过网站直接销售给客户的订单" }, { "business_term": "经销商销售", "technical_mapping": "FROM FactResellerSales", "description": "通过经销商渠道的销售" }, { "business_term": "北美地区", "technical_mapping": "SalesTerritoryGroup = 'North America'", "description": "北美销售区域(美国、加拿大)" }, { "business_term": "欧洲地区", "technical_mapping": "SalesTerritoryGroup = 'Europe'", "description": "欧洲销售区域" }, { "business_term": "太平洋地区", "technical_mapping": "SalesTerritoryGroup = 'Pacific'", "description": "太平洋销售区域(澳大利亚等)" }, { "business_term": "自行车类产品", "technical_mapping": "EnglishProductCategoryName = 'Bikes'", "description": "自行车类别产品" }, { "business_term": "配件类产品", "technical_mapping": "EnglishProductCategoryName = 'Accessories'", "description": "配件类别产品" }, { "business_term": "服装类产品", "technical_mapping": "EnglishProductCategoryName = 'Clothing'", "description": "服装类别产品" }, { "business_term": "促销订单", "technical_mapping": "PromotionKey <> 1", "description": "参与了促销活动的订单(PromotionKey=1 表示无促销)" } ] }

3.2 字段描述增强

清晰的字段描述比字段名更重要:

示例:FactInternetSales 表字段描述

-- ❌ 不好的做法(仅有字段名) CREATE TABLE FactInternetSales( ProductKey int, OrderDateKey int, CustomerKey int, SalesAmount money, ... ); -- ✅ 好的做法(包含详细描述) -- 销售事实表:记录互联网销售订单明细 CREATE TABLE FactInternetSales( ProductKey int, -- 产品代理键,关联 DimProduct OrderDateKey int, -- 订单日期键,关联 DimDate(订单创建日期) DueDateKey int, -- 到期日期键,关联 DimDate(应付日期) ShipDateKey int, -- 发货日期键,关联 DimDate(实际发货日期) CustomerKey int, -- 客户代理键,关联 DimCustomer PromotionKey int, -- 促销代理键,关联 DimPromotion(1=无促销) CurrencyKey int, -- 货币代理键,关联 DimCurrency SalesTerritoryKey int, -- 销售区域代理键,关联 DimSalesTerritory SalesOrderNumber nvarchar(20), -- 销售订单号(业务主键) SalesOrderLineNumber tinyint, -- 订单行号(与 SalesOrderNumber 组合为主键) RevisionNumber tinyint, -- 订单修订版本号 OrderQuantity smallint, -- 订购数量 UnitPrice money, -- 单价 ExtendedAmount money, -- 扩展金额 = UnitPrice × OrderQuantity UnitPriceDiscountPct float, -- 单价折扣百分比 DiscountAmount float, -- 折扣金额 ProductStandardCost money, -- 产品标准成本 TotalProductCost money, -- 产品总成本 SalesAmount money, -- 销售金额(实际收入) TaxAmt money, -- 税额 Freight money, -- 运费 CarrierTrackingNumber nvarchar(25), -- 物流跟踪号 CustomerPONumber nvarchar(25), -- 客户采购订单号 OrderDate datetime, -- 订单日期(冗余字段,便于查询) DueDate datetime, -- 到期日期(冗余字段) ShipDate datetime, -- 发货日期(冗余字段) ... );
http://www.cnnetsun.cn/news/3014231.html

相关文章:

  • 成都/攀枝花水泥厂回转窑硬齿面减速机怎么选型?符合JC/T878.3标准
  • 在树莓派的Hailo8L芯片部署自己的YOLOV8模型
  • 大模型应用-筑基期【06:Prompt调试与迭代方法】
  • 工业机器人自动化改造实战:CNC 上下料场景技术选型与落地指南
  • PCF80空间单细胞蛋白组适合做什么?从肿瘤微环境到治疗响应研究
  • 2026 多款免费去水印工具稳定性打分,自媒体素材采集参考|博主自用无广实测
  • 【计算机毕设】基于Spring Boot的生产设备保养与维修智能管理系统的设计与实现
  • 基于51单片机智能电表插座交流电压流Proteus仿真资料设计24-392-1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码
  • 云腾五洲TE100边缘计算盒子:工业物联网的智能中枢,一台更比六台强!
  • OpenAI有6650亿美元表外负债,企业如何采取多模型策略
  • 数位DP:从“穷举数字”到“逐位拆解”
  • Calico IPIP CrossSubnet 与 IPIP 默认模式对比模式介
  • 货运物流系统源码:支持多仓库管理
  • 如何用AI防爆摄像机实现港口船舶零漏报偏航监测?
  • 超长型材拉弯加工,实测数据与效果差异几何?
  • 航空DIC变形测量技术
  • Claude Code 连续修复后台 Agent,开发团队该补哪些防线
  • 计算机毕业设计之jsp基于SSM的在线问答社区系统设计与实现
  • 关键领域软件工厂的安全中枢:Gitee Scan 全面升级
  • 解构引擎——依赖注入(DI)与中间件管道
  • 串联、并联电阻计算方法
  • 测试硬盘的瑞士军刀-fio
  • 企业智能表格的机会点在哪?2026 选型与落地实测指南
  • 中小工厂如何选型?从锟铭智能看设备数据采集关键维度
  • 除醛喷剂除甲醛的效果、使用频率与用量全解析
  • CTF源码解题
  • 2026年AI辅助编程深度实践:从代码生成到架构设计的全流程提效指南
  • 主流 3D 视觉三大技术路线,机器人、机器狗、机械臂、数据采集设备该怎么选?
  • 掌上高考——高校数据爬取+数据可视化
  • 免费版视频去除水印工具推荐:从桌面到手机,一套可操作的素材清理路径