FAISS + Google Gemini Pro Latest Google Gemini Pro Latest + Python 3.10++ SQLite+ PostgreSQL+ ChromaDB+ Llama 2

用RAG库将自然语言问题转为SQL查询数据库并可视化结果

LLM负责生成SQL,ChromaDB检索DDL与问答示例作为上下文,数据库连接器执行查询,三者协作完成Text-to-SQL

✓ 几行代码即可接入✓ 支持扩展Snowflake、BigQue ✕ 依赖LLM生成的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.coremindsql.databasesmindsql.llmsmindsql.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.lockpyproject.toml),代码结构分为 core、databases、llms、vectorstores、_utils、_helper 等模块

优缺点

  • ✓ 几行代码即可接入
  • ✓ 支持扩展Snowflake、BigQue
  • ✕ 依赖LLM生成的SQL准确性

出处

本方案挖掘自开源项目 Mindinventory/MindSQL,方案内容与实施命令均来自其 README 原文。

方案出处
Mindinventory/MindSQL:MindSQL: A Python Text-to-SQL RAG Library simplifying database interactions. Sea
447 star MindSQL: A Python Text-to-SQL RAG Library simplifying database interactions. Seamlessly integrates with PostgreSQL, MySQL, SQLite, Snowflake, and BigQuery. Powered by GPT-4 and Llama 2, it enables nat

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。