综合介绍
OpenSearch-SQL 是一个开源项目,它是一个强大的 Text-to-SQL 工具,可以把用户的自然语言描述转化为 SQL 查询语句,帮助不熟悉数据库的人轻松获取数据。这个项目由 OpenSearch-AI 团队开发,基于 Apache 2.0 许可证免费开放。2024 年 8 月,它在 BIRD 基准测试中获得第一名,验证集准确率达 69.3%,测试集达 72.28%。OpenSearch-SQL 不需要额外训练就能运行,支持 GPT、DeepSeek 等模型,适合数据分析和数据库查询。
功能列表
- 将自然语言问题转为 SQL 查询,比如“最高的建筑是什么”转为
SELECT building_name FROM buildings ORDER BY height DESC LIMIT 1
。 - 支持自我学习的 CoT(Chain of Thought)增强方法,提升查询生成准确性。
- 提供 SQL-Like 中间语言,优化复杂 SQL 生成过程。
- 包含输入输出对齐功能,减少模型生成中的错误(幻觉问题)。
- 支持预处理、提取、生成、优化和对齐五大模块,覆盖查询全流程。
- 开源免费,用户可以根据需要修改代码或集成到自己的项目。
使用帮助
OpenSearch-SQL 是一个命令行工具,需要安装和配置才能使用。以下是详细步骤,帮助你从零开始上手。
安装流程
- 准备 Python 环境
确保你的电脑已安装 Python 3.8 或以上版本。可以在终端输入python --version
检查。如果没有,请从 Python 官网(https://www.python.org/)下载安装。 - 下载项目文件
打开浏览器,访问 https://github.com/OpenSearch-AI/OpenSearch-SQL。点击右上角 “Code” 按钮,选择 “Download ZIP” 下载源码,或者用 Git 命令克隆:
git clone https://github.com/OpenSearch-AI/OpenSearch-SQL.git
下载后解压到本地,比如 C:\OpenSearch-SQL
或 /home/user/OpenSearch-SQL
。
- 安装依赖
进入项目文件夹,打开终端,运行以下命令安装所需库:
pip install -r requirements.txt
这会安装项目运行所需的 Python 包,比如用于处理数据和调用模型的库。
数据预处理
OpenSearch-SQL 需要 few-shot 示例来提高查询准确性。可以用官方提供的脚本生成数据。
- 准备数据
项目提供了一个示例文件bird_dev.json
,位于Bird/bird_dev.json
。它基于 DAIL-SQL 方法生成,包含 few-shot 查询示例。如果你有自己的数据,可以替换这个文件。 - 运行预处理脚本
在项目根目录运行:
sh run/run_preprocess.sh
这个脚本会处理 few-shot 数据、表结构和其他信息。完成后,终端会显示每个目录的输出结果。如果你是 Windows 用户,可以用 Git Bash 或 WSL 运行,或者手动执行脚本中的命令。
运行主程序
- 启动程序
在项目根目录运行:
sh run/run_main.sh
这会调用 src/runner/database_manager.py
文件,开始处理查询。程序路径已在脚本中设置好。
- 检查输出
主程序运行后,会根据配置生成 SQL 查询结果。输出文件路径在src/runner/database_manager.py
的_set_paths
函数中定义,可以根据需要调整。
特色功能操作
- 自然语言转 SQL
输入问题比如“哪个城市的销量最高?”程序会生成:
SELECT city FROM sales ORDER BY amount DESC LIMIT 1
你可以在 questions.json
文件中添加自己的问题,运行后查看结果。
- CoT 增强
项目用 Query-CoT-SQL 的格式提供示例。比如: - 用户输入:“平均年龄是多少?”
- CoT 过程:先找到年龄列,再计算平均值。
- 输出:
SELECT AVG(age) FROM users
。 - 对齐功能
如果生成结果有误,程序会自动校正。比如输入“列出所有学生成绩”,但数据库有多个表,它会确保 JOIN 操作正确:
SELECT s.name, sc.score FROM students s JOIN scores sc ON s.id = sc.student_id
注意事项
- 如果需要测试 BIRD 数据集,直接用
Bird/fewshot/questions.json
文件。 - 程序支持多种模型,默认配置可能需要 API 密钥。如果用 GPT 或 DeepSeek,需在代码中设置密钥。
通过这些步骤,你可以轻松将自然语言转为 SQL 查询,处理各种数据分析任务。
应用场景
- 数据分析
数据分析师可以用它把问题转为 SQL,快速统计销售数据或用户行为。 - 教育培训
学生可以用它学习 SQL,输入问题后对比生成的查询语句。 - 自动化报表
企业可以用它自动生成报表SQL,减少手动编写时间。
QA
- OpenSearch-SQL 需要联网吗?
如果用本地模型,不需要联网。但用 GPT 等在线模型时需要网络和 API 密钥。 - 支持哪些数据库?
它针对任何支持 SQL 的数据库,只要提供表结构和数据即可。 - BIRD 榜单第一名意味着什么?
说明它在 Text-to-SQL 任务中准确率最高,能处理复杂查询,2024 年 8 月成绩为测试集 72.28%。