Python使用LLM把自然语言翻译成SQL语句
1. 数据
1.1 原始数据
$ cat sneakers_cleaned.csv
品牌,型号,类型,上市时间,价格(元),重量(g),产品特点
ASICS,MetaSpeed RAY,竞速跑鞋,2025.04,1899,129,超临界发泡中底,史上最轻碳板跑鞋
Nike,Vaporfly 4,马拉松竞速,2025.03,1599,198,全掌ZoomX泡棉+碳纤维板,推进力优化、小体重专属
Saucony,ENDORPHIN ELITE 2,顶级竞速,2025.01,1699,210,PWRRUN PB中底+碳板,暴力回弹、精英破三款
adidas,ADIZERO EVOSL,竞速训练,2025.05,1299,225,LIGHTSTRIKE PRO泡棉,蓝白/灰黑/经典三配色
李宁,飞电4 Ultra,竞速跑鞋,2025.04,1499,185,蹦丝鞋面+全掌碳板,湿地止滑GCU大底
On昂跑,Cloudsurfer 2,缓震跑鞋,2025.02,1299,280,CloudTec Phase中底,柔韧支撑、慢跑优选
New Balance,RCVRY联名款,恢复拖鞋,2025.06,799,150,Fresh Foam X缓震,运动后肌肉放松设计
特步,160X 3.5PRO,马拉松竞速,2025.03,1299,192,XT-ACE碳板,前代改进版、推进效率提升
361°,飞飙FUTURE 2,精英竞速,2025.04,1399,189,收窄后跟设计,专业运动员定制款
Brooks,Hyperion Elite 4 PB,竞速跑鞋,2025.01,1499,195,PEBA发泡中底,能量回馈率提升23%
ASICS,GEL-NIMBUS 26,缓震跑鞋,2025.01,1299,285,FF BLAST PLUS中底,长距离舒适性标杆
Mizuno,WAVE INSPIRE 19,支撑跑鞋,2025.02,999,310,WAVE波浪板+ENERZY泡棉,稳定抗扭、防内翻
安踏,柏油路霸3,赤足训练,2025.04,599,255,分趾压力释放设计,仿自然步态、通勤训练两用
李宁,超轻22,学生跑鞋,2025.03,599,240,蹦轻弹中底,校园通勤轻量化设计
鸿星尔克,强噪3微晶白,通勤跑鞋,2025.05,499,270,抗菌银离子鞋垫,商务休闲无缝切换
亚瑟士,GEL-KAYANO 28,支撑跑鞋,2025.03,1299,295,GEL缓震胶+Air Mesh,足弓支撑强化版
匹克,态极5.0 PRO,缓震跑鞋,2025.04,699,290,自适应中底科技,软弹脚感、日常慢跑优选
New Balance,Fresh Foam 1080v11,顶级缓震,2025.01,1399,300,一体式鞋面设计,长距离缓冲王者
...
1.2 数据库数据
2. 简单代码查询
import pandas as pd
from sqlalchemy import create_engine
from dotenv import load_dotenv
import os# 加载 .env 文件
load_dotenv()# 获取数据库配置
dbname = os.getenv('DB_NAME')
user = os.getenv('DB_USER')
password = os.getenv('DB_PASSWORD')
host = os.getenv('DB_HOST')
port = os.getenv('DB_PORT')# 创建数据库连接
engine = create_engine(f'postgresql://{user}:{password}@{host}:{port}/{dbname}')# 按条件查询
expensive_sneakers = pd.read_sql('SELECT * FROM sneakers WHERE 价格 > 3000', engine)
print("\n价格高于3000的跑鞋:")
print(expensive_sneakers)
输出:
价格高于3000的跑鞋:品牌 型号 类型 上市时间 价格 重量 产品特点
0 Miu Miu 科技织物运动鞋 厚底鞋 2025-05-01 7400 410 动态针织鞋面,奢侈品户外风增高显瘦设计
1 Balenciaga Hamptons 复古运动鞋 2025-06-01 6500 390 做旧皮革+涂鸦鞋带,Demna遗作限量艺术款
2 Gucci x NBA 篮球文化鞋 休闲鞋 2025-03-01 8900 380 红蓝编织带,NBA 75周年纪念收藏款
3 Prada Cloudbust Thunder 厚底鞋 2025-04-01 7200 420 锯齿外底+网面,未来主义机能风增高设计
3. 基于规则的查询
import pandas as pd
from sqlalchemy import create_engine
from dotenv import load_dotenv
import os
import re# 加载 .env 文件
load_dotenv()# 获取数据库配置
dbname = os.getenv('DB_NAME')
user = os.getenv('DB_USER')
password = os.getenv('DB_PASSWORD')
host = os.getenv('DB_HOST')
port = os.getenv('DB_PORT')# 创建数据库连接
engine = create_engine(f'postgresql://{user}:{password}@{host}:{port}/{dbname}')def translate_to_sql(natural_query):"""将自然语言查询转换为SQL语句"""# 转换为小写便于处理query = natural_query.lower()# 定义字段映射field_mapping = {'价格': '价格','品牌': '品牌','重量': '重量','上市时间': '上市时间'}# 构建基础SQLbase_sql = "SELECT * FROM sneakers"# 处理条件where_conditions = []# 处理品牌相关的查询brands = ['ASICS', 'Nike', 'Saucony', 'adidas', '李宁', 'On昂跑', 'New Balance', '特步', '361°', 'Brooks', 'Mizuno', '安踏', '鸿星尔克', '亚瑟士', '匹克', 'Skechers', 'HOKA', 'Asics', 'Puma', 'Salomon', '凯乐石', 'The North Face', 'Lowa', 'Oakley', 'Columbia', 'Merrell', 'Altra', 'La Sportiva', 'Arc\'teryx', 'Scarpa', '索康尼', 'Salewa', 'Mammut', 'Topo Athletic', 'Inov8', 'Kith x Salomon','CLOT x adidas', 'Nike x Apron Records', 'Crocs x 宝可梦', 'Converse x Tyler','adidas x 皇马', 'Miu Miu', 'Balenciaga', 'PUMA x A$AP Rocky', 'The North Face x HYKE','Joe Freshgoods x NB', 'Gucci x NBA', 'Prada', 'Vans x Van Gogh', 'Salomon x MM6','Nike x Wu-Tang Clan', 'Birkenstock x Union LA', 'Travis Scott x Jordan','Song for the Mute x adidas', 'Corteiz x Nike', 'BAPE®', 'Jordan', 'Crocs x G-SHOCK','FILA x Hailey Bieber', 'Valentino x Vans', 'PUMA x NOFAITH', 'ASICS x Kiko Kostadinov','New Balance x JJJJound', 'HOKA x Engineered Garments', 'Concepts x Nike','UNDERCOVER x Nike', 'Stüssy x Birkenstock', 'On昂跑 x LOEWE', 'Salomon x BEAMS','adidas x Wales Bonner', 'Nike x Sacai', 'Reebok x Vetements', 'Puma x Rhude','Columbia x Snow Peak', 'Vans x Supreme', 'Under Armour', '咕咚', 'Reebok', 'Cree']for brand in brands:if brand.lower() in query or brand in query:where_conditions.append(f"品牌 = '{brand}'")break# 处理上市时间相关的查询# 处理上市时间相关的查询if '上市时间' in query or '什么时候' in query:# 优先查找年月格式,如"2025年5月"year_month_match = re.search(r'(\d{4})年[^\d]{0,3}(\d{1,2})月', natural_query)if year_month_match:year = year_month_match.group(1)month = year_month_match.group(2).zfill(2) # 补齐为两位数where_conditions.append(f"上市时间 >= '{year}-{month}-01' AND 上市时间 <= '{year}-{month}-31'")else:# 查找年份格式的上市时间year_match = re.search(r'(\d{4})年', natural_query)if year_match:year = year_match.group(1)where_conditions.append(f"上市时间 >= '{year}-01-01' AND 上市时间 <= '{year}-12-31'")else:# 查找月份格式month_match = re.search(r'(\d{4})\.(\d{2})', natural_query)if month_match:year = month_match.group(1)month = month_match.group(2)where_conditions.append(f"上市时间 >= '{year}-{month}-01' AND 上市时间 <= '{year}-{month}-31'")# 处理价格相关的查询if '价格' in query or '多少钱' in query or '元' in query:# 查找价格数值price_match = re.search(r'(\d+)(?:块|元)?', query)if price_match:price = price_match.group(1)if '高于' in query or '大于' in query or '超过' in query:where_conditions.append(f"价格 > {price}")elif '低于' in query or '小于' in query:where_conditions.append(f"价格 < {price}")elif '等于' in query or '是' in query:where_conditions.append(f"价格 = {price}")# 处理重量相关的查询if '重量' in query or '轻' in query or '重' in query or '克' in query or 'g' in query:weight_match = re.search(r'(\d+)(?:克|g)', query)if weight_match:weight = weight_match.group(1)if '轻于' in query or '小于' in query:where_conditions.append(f"重量 < {weight}")elif '重于' in query or '大于' in query:where_conditions.append(f"重量 > {weight}")elif '等于' in query or '是' in query:where_conditions.append(f"重量 = {weight}")# 组装SQL语句if where_conditions:sql_query = base_sql + " WHERE " + " AND ".join(where_conditions)else:sql_query = base_sqlreturn sql_querydef execute_query(sql_query):"""执行SQL查询并返回结果"""try:df = pd.read_sql(sql_query, engine)return dfexcept Exception as e:print(f"查询执行出错: {e}")return Nonedef format_output(df, natural_query):"""格式化输出结果"""if df is None or df.empty:return "未找到符合条件的数据。"print(f"\n根据您的查询 '{natural_query}',查询结果如下:")print(df.to_string(index=False))return f"共找到 {len(df)} 条记录。"def natural_language_query(natural_query):"""主函数:处理自然语言查询"""print(f"原始查询: {natural_query}")# 翻译为SQLsql_query = translate_to_sql(natural_query)print(f"生成的SQL: {sql_query}")# 执行查询result_df = execute_query(sql_query)# 格式化输出return format_output(result_df, natural_query)# 示例使用
if __name__ == "__main__":# 示例查询queries = ["价格超过3000元的跑鞋","Nike品牌的跑鞋","重量小于180克的跑鞋","李宁品牌的跑鞋,价格高于1000元","上市时间是2025年5月的运动鞋",]for query in queries:natural_language_query(query)print("-" * 50)
输出结果:
原始查询: 价格超过3000元的跑鞋
生成的SQL: SELECT * FROM sneakers WHERE 价格 > 3000根据您的查询 '价格超过3000元的跑鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点Miu Miu 科技织物运动鞋 厚底鞋 2025-05-01 7400 410 动态针织鞋面,奢侈品户外风增高显瘦设计Balenciaga Hamptons 复古运动鞋 2025-06-01 6500 390 做旧皮革+涂鸦鞋带,Demna遗作限量艺术款
Gucci x NBA 篮球文化鞋 休闲鞋 2025-03-01 8900 380 红蓝编织带,NBA 75周年纪念收藏款Prada Cloudbust Thunder 厚底鞋 2025-04-01 7200 420 锯齿外底+网面,未来主义机能风增高设计
--------------------------------------------------
原始查询: Nike品牌的跑鞋
生成的SQL: SELECT * FROM sneakers WHERE 品牌 = 'Nike'根据您的查询 'Nike品牌的跑鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点
Nike Vaporfly 4 马拉松竞速 2025-03-01 1599 198 全掌ZoomX泡棉+碳纤维板,推进力优化、小体重专属
Nike Air Max 1000 缓震跑鞋 2025-06-01 1499 320 3D打印一体成型,雕塑感透气鞋面轻量化设计
Nike React Infinity 5 稳定跑鞋 2025-01-01 1199 310 ReactX泡棉,防受伤设计升级
Nike Invincible 4 顶级缓震 2025-03-01 1499 330 ZoomX加厚,极致缓冲保护膝盖
Nike Air Max 1000 缓震跑鞋 2025-06-01 1499 320 3D打印一体成型,雕塑感透气鞋面轻量化设计
Nike React Infinity 5 稳定跑鞋 2025-01-01 1199 310 ReactX泡棉,防受伤设计升级
Nike Invincible 4 顶级缓震 2025-03-01 1499 330 ZoomX加厚,极致缓冲保护膝盖
Nike Vaporfly Next% 3 马拉松竞速 2025-03-01 2399 185 ZoomX泡棉2.0+弧形碳板,能量回馈88%的破三神器
--------------------------------------------------
原始查询: 重量小于180克的跑鞋
生成的SQL: SELECT * FROM sneakers WHERE 重量 < 180根据您的查询 '重量小于180克的跑鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点ASICS MetaSpeed RAY 竞速跑鞋 2025-04-01 1899 129 超临界发泡中底,史上最轻碳板跑鞋
New Balance RCVRY联名款 恢复拖鞋 2025-06-01 799 150 Fresh Foam X缓震,运动后肌肉放松设计On昂跑 Cloudboom Strike LS 环保竞速 2025-01-01 2199 175 机器人喷涂热塑性鞋面,3分钟成型极轻量化
--------------------------------------------------
原始查询: 李宁品牌的跑鞋,价格高于1000元
生成的SQL: SELECT * FROM sneakers WHERE 品牌 = '李宁' AND 价格 > 1000根据您的查询 '李宁品牌的跑鞋,价格高于1000元',查询结果如下:
品牌 型号 类型 上市时间 价格 重量 产品特点
李宁 飞电4 Ultra 竞速跑鞋 2025-04-01 1499 185 蹦丝鞋面+全掌碳板,湿地止滑GCU大底
李宁 心流·胡迪联名 复古越野 2025-04-01 1299 285 薄底皮革+弹性网布,玩具总动员30周年限量款
李宁 龙雀Pro 竞速跑鞋 2025-03-01 1899 180 超临界发泡+异构碳板,精英竞速能量回馈85%
李宁 绝影4 弹射跑鞋 2025-06-01 1599 295 双层强结构,高弹缓震能量循环
李宁 飞电4.0 Challenger 训练跑鞋 2025-03-01 1099 200 蹦丝鞋面+3/4碳板,竞训两用高性价比
李宁 龙雀Pro 竞速跑鞋 2025-03-01 1899 180 超临界发泡+异构碳板,精英竞速能量回馈85%
李宁 绝影4 弹射跑鞋 2025-06-01 1599 295 双层强结构,高弹缓震能量循环系统
李宁 飞电4.0 Challenger 训练跑鞋 2025-03-01 1099 200 蹦丝鞋面+3/4碳板,竞训两用高性价比
李宁 飞电4 Challenger 碳板训练鞋 2025-02-01 1099 200 蹦丝鞋面+3/4碳板,500元档国产碳板之光
--------------------------------------------------
原始查询: 上市时间是2025年5月的运动鞋
生成的SQL: SELECT * FROM sneakers WHERE 上市时间 >= '2025-05-01' AND 上市时间 <= '2025-05-31'根据您的查询 '上市时间是2025年5月的运动鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点adidas ADIZERO EVOSL 竞速训练 2025-05-01 1299 225 LIGHTSTRIKE PRO泡棉,蓝白/灰黑/经典三配色鸿星尔克 强噪3微晶白 通勤跑鞋 2025-05-01 499 270 抗菌银离子鞋垫,商务休闲无缝切换安踏 劲风2 体训鞋 2025-05-01 459 245 A-WEB呼吸网面,学生体测多场景适用鸿星尔克 强噪3正黑 全能跑鞋 2025-05-01 499 275 防泼水处理,雨天通勤+夜跑反光Saucony TEMPUS 2 支撑跑鞋 2025-05-01 999 290 PWRRUN PB中底,轻量支撑防内翻亚瑟士 MAGIC SPEED 4 竞速训练 2025-05-01 1199 205 FF TURBO中底,前掌碳板提速设计The North Face Altamesa 500 HYKE 户外徒步 2025-05-01 1799 380 DREAM MID SOLE中底,联名款砂石棕配色Merrell Moab Speed 2 轻量徒步 2025-05-01 899 310 Vibram Megagrip,湿地防滑平衡支撑Scarpa Ribelle Run 高山越野 2025-05-01 1899 340 Vibram Litebase,冰雪岩混合地形Salomon Thundercross 泥地越野 2025-05-01 1199 315 深齿耳齿设计,泥泞地形脱泥强化Adidas Terrex Speed Ultra 轻量越野 2025-05-01 1299 285 LIGHTSTRIKE PRO,竞速级轻量化设计The North Face Altamesa 500 HYKE 户外徒步 2025-05-01 1799 380 DREAM MID SOLE中底,联名砂石棕配色山地靴Merrell Moab Speed 2 轻量徒步 2025-05-01 899 310 Vibram Megagrip,湿地防滑平衡支撑鞋Scarpa Ribelle Run 高山越野 2025-05-01 1899 340 Vibram Litebase,冰雪岩混合地形专业款Salomon Thundercross 泥地越野 2025-05-01 1199 315 深齿耳齿设计,泥泞地形脱泥强化款Adidas Terrex Speed Ultra 轻量越野 2025-05-01 1299 285 LIGHTSTRIKE PRO,竞速级轻量化设计Salomon Cross Hike 2 徒步鞋 2025-05-01 1399 355 Advanced Chassis,多日重装支撑系统ASICS Gel-Sonoma 7 入门越野 2025-05-01 799 300 GEL缓震胶,初阶越野训练性价比款CLOT x adidas SUPERSTAR BREATHE 休闲鞋 2025-05-01 1399 350 海军蓝麂皮+网眼,呼吸主题联名轻量化设计Miu Miu 科技织物运动鞋 厚底鞋 2025-05-01 7400 410 动态针织鞋面,奢侈品户外风增高显瘦设计The North Face x HYKE Altamesa 500 户外潮流鞋 2025-05-01 1799 370 鞋带盖模块,日系极简风山系穿搭Vans x Van Gogh 星空Slip-On 板鞋 2025-05-01 1299 350 油画印花鞋面,艺术博物馆联名限量款
New Balance x JJJJound 990v6 休闲鞋 2025-05-01 1899 330 元祖灰麂皮,极简主义联名款UNDERCOVER x Nike Daybreak 复古跑鞋 2025-05-01 1499 290 拼色网眼,高桥盾解构美学Salomon x BEAMS ACS Pro Advanced 机能鞋 2025-05-01 1799 330 金属银涂层,未来感城市通勤款Reebok x Vetements Instapump Fury 潮流鞋 2025-05-01 1999 370 充气模块+荧光色,颠覆性重构设计Vans x Supreme Old Skool 板鞋 2025-05-01 899 310 红白Box Logo,街头文化符号经典adidas 4DFWD 3 科技跑鞋 2025-05-01 1699 300 光固化中底,能量推进效率提升23%Salomon Index.03 可回收鞋 2025-05-01 1299 280 单一材料结构,环保拆解设计安踏 柏油路霸4 赤足训练 2025-05-01 569 250 分趾压力释放2.0,仿自然步态进阶款New Balance SuperComp Trainer v3 厚底训练 2025-05-01 1299 300 FuelCell+碳板,长距离推进强化Brooks Adrenaline GTS 23 支撑跑鞋 2025-05-01 1099 320 DNA LOFT v3,平衡支撑防内翻李宁 吾适6S 休闲跑鞋 2025-05-01 799 310 蹦轻弹+GCU,潮流设计+全天候防滑鸿星尔克 极风2.0 竞速训练 2025-05-01 569 265 银离子抗菌鞋垫,防臭透气设计Under Armour HOVR Sonic 6 竞速训练 2025-05-01 999 275 HOVR+碳板,轻量化速度反馈adidas 4DFWD 3 科技跑鞋 2025-05-01 1699 300 光固化中底,能量推进效率提升23%Salomon Index.03 可回收鞋 2025-05-01 1299 280 单一材料结构,环保拆解设计安踏 柏油路霸4 赤足训练 2025-05-01 569 250 分趾压力释放2.0,仿自然步态进阶款New Balance SuperComp Trainer v3 厚底训练 2025-05-01 1299 300 FuelCell+碳板,长距离推进强化Brooks Adrenaline GTS 23 支撑跑鞋 2025-05-01 1099 320 DNA LOFT v3,平衡支撑防内翻李宁 吾适6S 休闲跑鞋 2025-05-01 799 310 蹦轻弹+GCU,全天候防滑设计鸿星尔克 极风2.0 竞速训练 2025-05-01 569 265 银离子抗菌鞋垫,防臭透气设计Under Armour HOVR Sonic 6 竞速训练 2025-05-01 999 275 HOVR+碳板,轻量化速度反馈安踏 C10 Pro 材料科技鞋 2025-05-01 1299 240 嵌段聚醚酰胺树脂中底,航空材料减震验证鸿星尔克 极风2.0 竞速训练 2025-05-01 569 265 银离子抗菌鞋垫,防臭透气设计
--------------------------------------------------
4. 基于LLM翻译
import pandas as pd
from sqlalchemy import create_engine
from dotenv import load_dotenv
import os
import re
from openai import OpenAI# 加载 .env 文件
load_dotenv()# 获取数据库配置
dbname = os.getenv('DB_NAME')
user = os.getenv('DB_USER')
password = os.getenv('DB_PASSWORD')
host = os.getenv('DB_HOST')
port = os.getenv('DB_PORT')# 从环境变量获取 DeepSeek API Key
api_key = os.getenv("DEEPSEEK_API_KEY")
if not api_key:raise ValueError("请设置 DEEPSEEK_API_KEY 环境变量")# 初始化 OpenAI 客户端
client = OpenAI(api_key=api_key,base_url="https://api.siliconflow.cn/v1", # DeepSeek API 的基地址
)# 创建数据库连接
engine = create_engine(f'postgresql://{user}:{password}@{host}:{port}/{dbname}')def translate_to_sql_with_llm(natural_query):"""使用大模型将自然语言查询转换为SQL语句"""# 构建提示词prompt = f"""你是一个专业的数据库管理员,擅长将自然语言查询转换为SQL语句。数据库表名为 sneakers,包含以下字段:- 品牌 (文本)- 型号 (文本)- 类型 (文本)- 上市时间 (日期,格式如: 2025-04-01, 2024-11-24)- 价格 (数字,单位:元)- 重量 (数字,单位:克)- 产品特点 (文本)请将以下自然语言查询转换为PostgreSQL SQL查询语句,只返回SQL语句,不要包含其他内容:"{natural_query}"注意事项:0. 忽略大小写1. 品牌字段是"品牌",不是brand2. 价格字段是"价格",不是price3. 重量字段是"重量",不是weight4. 上市时间字段是"上市时间",不是launch_time5. 日期格式在数据库中是类似2025-04-01这样的格式,比较时需要使用字符串比较6. 忽略鞋的类型示例:输入:价格超过2000的跑鞋输出:SELECT * FROM sneakers WHERE 价格 > 2000输入:Nike品牌的跑鞋输出:SELECT * FROM sneakers WHERE 品牌 = 'Nike'输入:上市时间是2025年5月的运动鞋输出:SELECT * FROM sneakers WHERE 上市时间 >= '2025-05-01' AND 上市时间 <= '2025-05-31'"""try:response = client.chat.completions.create(model="Pro/deepseek-ai/DeepSeek-V3",messages=[{"role": "system", "content": "你是一个专业的数据库管理员,擅长将自然语言查询转换为SQL语句。严格按照用户要求的格式输出SQL语句,不要添加任何额外说明。"},{"role": "user", "content": prompt}],temperature=0.1,stream=False)sql_query = response.choices[0].message.content.strip()# 移除可能的 Markdown 格式标记sql_query = re.sub(r'^```sql\s*', '', sql_query)sql_query = re.sub(r'\s*```$', '', sql_query)return sql_queryexcept Exception as e:print(f"大模型转换出错: {e}")return Nonedef execute_query(sql_query):"""执行SQL查询并返回结果"""try:df = pd.read_sql(sql_query, engine)return dfexcept Exception as e:print(f"查询执行出错: {e}")return Nonedef summarize_with_llm(df, natural_query):"""使用大模型对查询结果进行总结"""if df is None or df.empty:return "未找到符合条件的数据。"# 将数据转换为文本格式data_text = df.to_string(index=False)# 构建提示词prompt = f"""你是一个专业的数据分析员,请对以下查询结果进行简洁明了的总结。用户的查询是:"{natural_query}"查询结果如下:{data_text}请用中文回答,总结要点:1. 符合条件的记录总数2. 主要特征或趋势(如价格范围、主要品牌等)3. 其他值得注意的信息回答要简洁明了,不要超过2000字。"""try:response = client.chat.completions.create(model="Pro/deepseek-ai/DeepSeek-V3",messages=[{"role": "system", "content": "你是一个专业的数据分析员,擅长对数据进行总结分析。"},{"role": "user", "content": prompt}],temperature=0.3,stream=False)summary = response.choices[0].message.content.strip()return summaryexcept Exception as e:print(f"大模型总结出错: {e}")# 返回基本的统计信息return f"共找到 {len(df)} 条记录。\n\n数据预览:\n{data_text[:500]}..."def format_output(df, natural_query):"""格式化输出结果"""if df is None or df.empty:return "未找到符合条件的数据。"print(f"\n根据您的查询 '{natural_query}',查询结果如下:")print(df.to_string(index=False))return f"共找到 {len(df)} 条记录。"def natural_language_query(natural_query):"""主函数:处理自然语言查询"""print(f"原始查询: {natural_query}")# 使用大模型翻译为SQLsql_query = translate_to_sql_with_llm(natural_query)if not sql_query:return "无法生成SQL查询语句。"print(f"生成的SQL: {sql_query}")# 执行查询result_df = execute_query(sql_query)# 格式化输出return format_output(result_df, natural_query) # 示例使用
if __name__ == "__main__":# 示例查询queries = ["价格超过3000元的跑鞋","Nike品牌的跑鞋","重量小于180克的跑鞋","李宁品牌的跑鞋,价格高于1000元","上市时间是2025年5月的运动鞋",]for query in queries:natural_language_query(query)print("-" * 50)#llm summaryprint("*"*50)sql_query = translate_to_sql_with_llm(queries[0]) print(f"生成的SQL: {sql_query}")# 执行查询result_df = execute_query(sql_query)# 执行查询result_df = execute_query(sql_query)print(summarize_with_llm(result_df, queries[0]))
输出结果:
原始查询: 价格超过3000元的跑鞋
生成的SQL: SELECT * FROM sneakers WHERE 价格 > 3000根据您的查询 '价格超过3000元的跑鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点Miu Miu 科技织物运动鞋 厚底鞋 2025-05-01 7400 410 动态针织鞋面,奢侈品户外风增高显瘦设计Balenciaga Hamptons 复古运动鞋 2025-06-01 6500 390 做旧皮革+涂鸦鞋带,Demna遗作限量艺术款
Gucci x NBA 篮球文化鞋 休闲鞋 2025-03-01 8900 380 红蓝编织带,NBA 75周年纪念收藏款Prada Cloudbust Thunder 厚底鞋 2025-04-01 7200 420 锯齿外底+网面,未来主义机能风增高设计
--------------------------------------------------
原始查询: Nike品牌的跑鞋
生成的SQL: SELECT * FROM sneakers WHERE 品牌 = 'Nike' AND 类型 = '跑鞋'
--------------------------------------------------
原始查询: 重量小于180克的跑鞋
生成的SQL: SELECT * FROM sneakers WHERE 重量 < 180根据您的查询 '重量小于180克的跑鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点ASICS MetaSpeed RAY 竞速跑鞋 2025-04-01 1899 129 超临界发泡中底,史上最轻碳板跑鞋
New Balance RCVRY联名款 恢复拖鞋 2025-06-01 799 150 Fresh Foam X缓震,运动后肌肉放松设计On昂跑 Cloudboom Strike LS 环保竞速 2025-01-01 2199 175 机器人喷涂热塑性鞋面,3分钟成型极轻量化
--------------------------------------------------
原始查询: 李宁品牌的跑鞋,价格高于1000元
生成的SQL: SELECT * FROM sneakers WHERE 品牌 = '李宁' AND 价格 > 1000根据您的查询 '李宁品牌的跑鞋,价格高于1000元',查询结果如下:
品牌 型号 类型 上市时间 价格 重量 产品特点
李宁 飞电4 Ultra 竞速跑鞋 2025-04-01 1499 185 蹦丝鞋面+全掌碳板,湿地止滑GCU大底
李宁 心流·胡迪联名 复古越野 2025-04-01 1299 285 薄底皮革+弹性网布,玩具总动员30周年限量款
李宁 龙雀Pro 竞速跑鞋 2025-03-01 1899 180 超临界发泡+异构碳板,精英竞速能量回馈85%
李宁 绝影4 弹射跑鞋 2025-06-01 1599 295 双层强结构,高弹缓震能量循环
李宁 飞电4.0 Challenger 训练跑鞋 2025-03-01 1099 200 蹦丝鞋面+3/4碳板,竞训两用高性价比
李宁 龙雀Pro 竞速跑鞋 2025-03-01 1899 180 超临界发泡+异构碳板,精英竞速能量回馈85%
李宁 绝影4 弹射跑鞋 2025-06-01 1599 295 双层强结构,高弹缓震能量循环系统
李宁 飞电4.0 Challenger 训练跑鞋 2025-03-01 1099 200 蹦丝鞋面+3/4碳板,竞训两用高性价比
李宁 飞电4 Challenger 碳板训练鞋 2025-02-01 1099 200 蹦丝鞋面+3/4碳板,500元档国产碳板之光
--------------------------------------------------
原始查询: 上市时间是2025年5月的运动鞋
生成的SQL: SELECT * FROM sneakers WHERE 上市时间 >= '2025-05-01' AND 上市时间 <= '2025-05-31'根据您的查询 '上市时间是2025年5月的运动鞋',查询结果如下:品牌 型号 类型 上市时间 价格 重量 产品特点adidas ADIZERO EVOSL 竞速训练 2025-05-01 1299 225 LIGHTSTRIKE PRO泡棉,蓝白/灰黑/经典三配色鸿星尔克 强噪3微晶白 通勤跑鞋 2025-05-01 499 270 抗菌银离子鞋垫,商务休闲无缝切换安踏 劲风2 体训鞋 2025-05-01 459 245 A-WEB呼吸网面,学生体测多场景适用鸿星尔克 强噪3正黑 全能跑鞋 2025-05-01 499 275 防泼水处理,雨天通勤+夜跑反光Saucony TEMPUS 2 支撑跑鞋 2025-05-01 999 290 PWRRUN PB中底,轻量支撑防内翻亚瑟士 MAGIC SPEED 4 竞速训练 2025-05-01 1199 205 FF TURBO中底,前掌碳板提速设计The North Face Altamesa 500 HYKE 户外徒步 2025-05-01 1799 380 DREAM MID SOLE中底,联名款砂石棕配色Merrell Moab Speed 2 轻量徒步 2025-05-01 899 310 Vibram Megagrip,湿地防滑平衡支撑Scarpa Ribelle Run 高山越野 2025-05-01 1899 340 Vibram Litebase,冰雪岩混合地形Salomon Thundercross 泥地越野 2025-05-01 1199 315 深齿耳齿设计,泥泞地形脱泥强化Adidas Terrex Speed Ultra 轻量越野 2025-05-01 1299 285 LIGHTSTRIKE PRO,竞速级轻量化设计The North Face Altamesa 500 HYKE 户外徒步 2025-05-01 1799 380 DREAM MID SOLE中底,联名砂石棕配色山地靴Merrell Moab Speed 2 轻量徒步 2025-05-01 899 310 Vibram Megagrip,湿地防滑平衡支撑鞋Scarpa Ribelle Run 高山越野 2025-05-01 1899 340 Vibram Litebase,冰雪岩混合地形专业款Salomon Thundercross 泥地越野 2025-05-01 1199 315 深齿耳齿设计,泥泞地形脱泥强化款Adidas Terrex Speed Ultra 轻量越野 2025-05-01 1299 285 LIGHTSTRIKE PRO,竞速级轻量化设计Salomon Cross Hike 2 徒步鞋 2025-05-01 1399 355 Advanced Chassis,多日重装支撑系统ASICS Gel-Sonoma 7 入门越野 2025-05-01 799 300 GEL缓震胶,初阶越野训练性价比款CLOT x adidas SUPERSTAR BREATHE 休闲鞋 2025-05-01 1399 350 海军蓝麂皮+网眼,呼吸主题联名轻量化设计Miu Miu 科技织物运动鞋 厚底鞋 2025-05-01 7400 410 动态针织鞋面,奢侈品户外风增高显瘦设计The North Face x HYKE Altamesa 500 户外潮流鞋 2025-05-01 1799 370 鞋带盖模块,日系极简风山系穿搭Vans x Van Gogh 星空Slip-On 板鞋 2025-05-01 1299 350 油画印花鞋面,艺术博物馆联名限量款
New Balance x JJJJound 990v6 休闲鞋 2025-05-01 1899 330 元祖灰麂皮,极简主义联名款UNDERCOVER x Nike Daybreak 复古跑鞋 2025-05-01 1499 290 拼色网眼,高桥盾解构美学Salomon x BEAMS ACS Pro Advanced 机能鞋 2025-05-01 1799 330 金属银涂层,未来感城市通勤款Reebok x Vetements Instapump Fury 潮流鞋 2025-05-01 1999 370 充气模块+荧光色,颠覆性重构设计Vans x Supreme Old Skool 板鞋 2025-05-01 899 310 红白Box Logo,街头文化符号经典adidas 4DFWD 3 科技跑鞋 2025-05-01 1699 300 光固化中底,能量推进效率提升23%Salomon Index.03 可回收鞋 2025-05-01 1299 280 单一材料结构,环保拆解设计安踏 柏油路霸4 赤足训练 2025-05-01 569 250 分趾压力释放2.0,仿自然步态进阶款New Balance SuperComp Trainer v3 厚底训练 2025-05-01 1299 300 FuelCell+碳板,长距离推进强化Brooks Adrenaline GTS 23 支撑跑鞋 2025-05-01 1099 320 DNA LOFT v3,平衡支撑防内翻李宁 吾适6S 休闲跑鞋 2025-05-01 799 310 蹦轻弹+GCU,潮流设计+全天候防滑鸿星尔克 极风2.0 竞速训练 2025-05-01 569 265 银离子抗菌鞋垫,防臭透气设计Under Armour HOVR Sonic 6 竞速训练 2025-05-01 999 275 HOVR+碳板,轻量化速度反馈adidas 4DFWD 3 科技跑鞋 2025-05-01 1699 300 光固化中底,能量推进效率提升23%Salomon Index.03 可回收鞋 2025-05-01 1299 280 单一材料结构,环保拆解设计安踏 柏油路霸4 赤足训练 2025-05-01 569 250 分趾压力释放2.0,仿自然步态进阶款New Balance SuperComp Trainer v3 厚底训练 2025-05-01 1299 300 FuelCell+碳板,长距离推进强化Brooks Adrenaline GTS 23 支撑跑鞋 2025-05-01 1099 320 DNA LOFT v3,平衡支撑防内翻李宁 吾适6S 休闲跑鞋 2025-05-01 799 310 蹦轻弹+GCU,全天候防滑设计鸿星尔克 极风2.0 竞速训练 2025-05-01 569 265 银离子抗菌鞋垫,防臭透气设计Under Armour HOVR Sonic 6 竞速训练 2025-05-01 999 275 HOVR+碳板,轻量化速度反馈安踏 C10 Pro 材料科技鞋 2025-05-01 1299 240 嵌段聚醚酰胺树脂中底,航空材料减震验证鸿星尔克 极风2.0 竞速训练 2025-05-01 569 265 银离子抗菌鞋垫,防臭透气设计
--------------------------------------------------
**************************************************
生成的SQL: SELECT * FROM sneakers WHERE 价格 > 3000
1. **记录总数**:共查询到4款价格超过3000元的跑鞋。 2. **主要特征**: - **价格范围**:6500元至8900元,均为高端奢侈品跑鞋。 - **品牌分布**:均为奢侈品牌(Miu Miu、Balenciaga、Gucci x NBA、Prada)。 - **设计风格**:以厚底鞋、复古/限量款为主,强调艺术联名、机能风或收藏价值。 3. **其他亮点**: - 重量较轻(380g-420g),但更侧重设计而非运动性能。 - 含特殊款(如Gucci x NBA联名、Balenciaga限量艺术款)。 - 均为2025年新品,定位时尚或收藏市场。 (总结:高价跑鞋均为奢侈品牌限量/联名款,注重设计而非实用性。)