用RAG库将自然语言问题转为SQL查询数据库并可视化结果
LLM负责生成SQL,ChromaDB检索DDL与问答示例作为上下文,数据库连接器执行查询,三者协作完成Text-to-SQL
方案简介
MindSQL 是一个 Python RAG(检索增强生成)库,目标是让用户用少量代码即可与数据库进行自然语言交互。它通过将数据库的 DDL(数据定义语言)和问答-SQL 示例对索引到向量库(如 ChromaDB),在用户提问时检索相关上下文交给大语言模型(如 Google Gemini、Llama 2),由 LLM 生成 SQL 并在数据库上执行,还可直接将结果可视化成图表。该方案适合希望为应用快速添加"用自然语言查询数据库"能力的开发者,支持 PostgreSQL、MySQL、SQLite 等主流数据库,并可通过实现 IDatabase 接口扩展到 Snowflake、BigQuery 等数据库。
亮点与能力
- 用几行代码实现用户与数据库的自然语言交互
- 支持多种 LLM:GPT-4、Llama 2、Google Gemini
- 支持多种知识库:ChromaDB、Faiss
- 无缝集成 PostgreSQL、MySQL、SQLite
- 可通过扩展
IDatabase接口支持 Snowflake 和 BigQuery - 支持将数据库中所有 DDL 语句批量索引到向量库
- 支持从 JSON 文件批量索引问题-SQL 示例对
- 提问后可自动生成图表可视化结果
组成与分工
- MindSQLCore:核心编排模块,接收配置好的 LLM、向量库和数据库实例
- ChromaDB:向量知识库,存储并检索 DDL 与问题-SQL 示例对
- GoogleGenAi (Google Gemini):大语言模型,负责根据检索上下文生成 SQL
- Sqlite / PostgreSQL / MySQL 连接器:建立数据库连接并执行查询
- Visualization 模块:将查询结果绘制为图表(
response["chart"])
前置要求
- Python 3.10 或更高版本
- 安装 MindSQL:
commandline
pip install mindsql
- LLM 服务的 API Key(如 Google GenAI 的 key)
- 一个可连接的数据库(如 SQLite)
实施步骤
1. 安装 MindSQL
commandline
pip install mindsql
2. 导入模块并配置 API Key
从 mindsql.core、mindsql.databases、mindsql.llms、mindsql.vectorstores 分别导入核心类,并在 config 中填入你的 API Key:
python
config = {"api_key": "YOUR-API-KEY"}
3. 创建 MindSQLCore 实例
选择要使用的向量库、LLM 和数据库,组合创建核心实例:
python
minds = MindSQLCore(
llm=GoogleGenAi(config=config),
vectorstore=ChromaDB(),
database=Sqlite()
4. 建立数据库连接
python
connection = minds.database.create_connection(url="YOUR_DATABASE_CONNECTION_URL")
5. 索引 DDL 与示例对
将指定数据库的所有 DDL 语句索引到向量库,并可从 JSON 文件批量索引问题-SQL 示例:
python
minds.index_all_ddls(connection=connection, db_name='NAME_OF_THE_DB')
minds.index(bulk=True, path="your-qsn-sql-example.")
6. 提问并可视化
python
response = minds.ask_db(
question="YOUR_QUESTION",
connection=connection,
visualize=True
chart = response["chart"]
chart.show()
connection.close()
使用与配置要点
日常使用时,核心 API 为:
create_connection(url=...):用指定 URL 创建数据库连接index_all_ddls(connection=..., db_name=...):把数据库中全部 DDL 索引进向量库,供检索增强使用index(bulk=True, path=...):从 JSON 文件批量导入问题-SQL 示例对,提升生成质量ask_db(question=..., connection=..., visualize=True):提问并返回含 SQL 结果与图表的响应,通过response["chart"]取出图表并chart.show()展示- 使用结束后调用
connection.close()关闭连接
注意事项与常见问题
- 必须使用 Python 3.10 或更高版本
- API Key 需替换为真实值(示例中的
YOUR-API-KEY),数据库连接 URL 和数据库名也需按实际替换 - 向量库、LLM、数据库均为可插拔组合,可按需更换(如 Faiss、Llama 2)
- 项目使用 Poetry 管理依赖(
poetry.lock与pyproject.toml),代码结构分为 core、databases、llms、vectorstores、_utils、_helper 等模块
优缺点
- ✓ 几行代码即可接入
- ✓ 支持扩展Snowflake、BigQue
- ✕ 依赖LLM生成的SQL准确性
出处
本方案挖掘自开源项目 Mindinventory/MindSQL,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。