AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


真·企业级方案!MindSQL开源:四种训练方式+私有数据+RAG+生产高并发

发布日期:2025-03-09 20:19:09 浏览次数: 1527 来源:数翼
推荐语

企业级文本到SQL解决方案,MindSQL开源包,助力构建高并发Chat2SQL应用。

核心内容:
1. MindSQL开源包特点:开源免费、隐私保护、灵活构建
2. 解决企业应用难点:提高准确率、支持高并发处理
3. 工作原理与关键功能:RAG模型、两步程序、核心API组件

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

MindSQL 是一个文本到 SQL 生成的 Python 包,开源、且支持 RAG,能帮助我们构建 Chat2SQL 的相关应用。

除了常规一些开源软件的特点:

  • • 开源 软件包及其不同的前端集成均免费供任何人使用。
  • • 隐私 它旨在让您控制公司的数据,无需外部监控。
  • • 掌控之中 您可以按照自己想要的任何方式构建它,并将所有业务数据连接并集成起来。

MindSQL 还解决了企业应用两大难点:准确率不高和不能支持高并发的问题:

高度准确

使用 MindsSQL 实现高精度取决于所提供的训练数据的质量,更多的训练数据可提高高精度。

高并发

MindSQL 的强大架构可自动扩展以每分钟处理数千个请求。

工作原理

MindSQL 是一个 Python 库,它使用 RAG(检索增强生成) 在大型语言模型的帮助下创建适合您的数据库的精确 SQL 查询。

MindSQL 遵循简单的两步程序来简化您的数据库交互:

  • • 首先,它将数据库的具体信息索引到向量存储中,从而创建适合您数据的 RAG“模型”。
  • • 随后,它会根据您的查询制定 SQL 查询,从而实现在数据库上的无缝执行。

为了充分利用 MindSQL 的功能,您主要需要与两个关键功能进行交互:

  • • minds.index(...):此功能在初始步骤中起着关键作用,允许您将特定于数据库的详细信息索引到向量存储中。此信息可作为后续 SQL 查询生成的基础语料库。
  • • minds.ask_db(...):此功能有助于直接与数据库通信。它允许您提出问题,并利用存储在向量存储中的上下文来构建 SQL 查询,以准确解决您的问题。

MindSQL 由三个基础组件组成,每个组件都继承并实现了 MindSQLCore 类提供的 API:

  • • 数据库:此组件专用于管理与数据库相关的功能。
  • • 向量存储:向量存储包专注于存储和组织索引数据库上下文,作为查询生成的重要参考语料库。
  • • LLMs:LLMs 包负责将大型语言模型集成到 MindSQL 框架中,增强该库理解和生成上下文相关的 SQL 查询的能力。

安装使用

MindSQL的使用非常简单,首先安装 python 包:

pip install mindsql

然后环境变量设置,可以通过命令行或者 .env 文件来设置:

  • • API_KEY: 用于使用 OpenAI、Gemini、LLAMA 等 LLM 进行身份验证的 API 密钥
  • • DB_URL: 数据库的 URL 或连接字符串
  • • EXAMPLE_PATH: 您可能想要用于批量索引的任何示例 JSON 文件或数据的路径

常见数据库 DB_URL 和格式如下:

  • • mysql://username:password@host:port/database
  • • postgresql://username:password@host:port/database
  • • mongodb://username:password@host:port/database

程序很简单,先引入相关包:

from mindsql.core import MindSQLCore
from mindsql.databases import Sqlite
from mindsql.llms import GoogleGenAi
from mindsql.vectorstores import ChromaDB

传入LLM配置,和向量数据库,指定数据库类型即可创建 MindSQLCore 实例。

# Choose the Vector Store. LLM and DB You Want to Work With And
# Create MindSQLCore Instance With Configured Llm, Vectorstore, And Database
minds = MindSQLCore(
    llm=GoogleGenAi(config={"api_key""YOUR-API-KEY"}),
    vectorstore=ChromaDB(),
    database=Sqlite()
)

使用数据库连接字符串连接数据库:

connection = minds.database.create_connection(url="YOUR_DATABASE_CONNECTION_URL")

把所有的数据结构都进行索引,存入向量数据库:

minds.index_all_ddls(connection=connection, db_name='NAME_OF_THE_DB')

从指定的示例路径批量索引问题(RAG知识库),如果没有示例问题也可以不执行此步骤:

minds.index(bulk=True, path="your-qsn-sql-example.json")

然后就可以向数据库提出问题了,

response = minds.ask_db(
    question="YOUR_QUESTION",
    connection=connection,
    visualize=True
)

在Python中还可以从响应中提取并显示图表,

chart = response["chart"]
chart.show()

最后别忘了关闭数据库连接:

connection.close()

完整的程序如下:

from mindsql.core import MindSQLCore
from mindsql.databases import Sqlite
from mindsql.llms import GoogleGenAi
from mindsql.vectorstores import ChromaDB

config = {"api_key""YOUR-API-KEY"}

minds = MindSQLCore(
    llm=GoogleGenAi(config=config),
    vectorstore=ChromaDB(),
    database=Sqlite()
)

connection = minds.database.create_connection(url="YOUR_DATABASE_CONNECTION_URL")

minds.index_all_ddls(connection=connection, db_name='NAME_OF_THE_DB')
minds.index(bulk=True, path="your-qsn-sql-example.json")

response = minds.ask_db(
    question="YOUR_QUESTION",
    connection=connection,
    visualize=True
)

chart = response["chart"]
chart.show()

connection.close()

查询数据

ask_db(...)方法作为查询系统和从底层数据中获取见解的主要接口,其结构如下:

result = ask_db(
    question = "员工的平均工资是多少"
    connection = my_connection, 
    table_names = ["employees"], 
    visualize = False
)

table_names 参数是可选的, 可用于在需要时指定相关表。 如果提供了 table_names, MindSQL 将不会从向量数据库中检索相关表, 而是使用提供的表名来获取相关DDL

将 visualize 参数设置为 True, 用户可以请求使用 plotly 图表对查询结果进行可视化(除了做Demo,这个参数一般是关闭的)。

手动构建索引知识库

前面提到了使用示例文件来构建索引知识库,我们还可以在任意时候使用代码来构建。

构建索引有如下多种方式:

问答对

添加问题-SQL 对时,您可以直接指示系统如何解释特定的用户查询。 这是通过将问题与其对应的 SQL 查询关联起来来实现的, 从而使系统能够理解用户的意图并准确检索相关数据。

index(
    question = "平均工资是多少?" ,
    sql = "SELECT AVG(工资) FROM 员工"
)

添加 DDL 语句

添加数据定义语言 (DDL) 语句, 也就是定义数据库对象的结构,例如表、列和数据类型。 通过将 DDL 语句合并到系统的知识库中,您可以提供必要的架构信息, 从而增强系统有效解释和响应数据库相关查询的能力。

index(ddl="CREATE TABLE employees (id INT, name VARCHAR(50), salary FLOAT)")

添加文档字符串

添加文档字符串涉及提供对于系统理解其所运行的领域至关重要的特定上下文信息。 此文档可以包括有关业务逻辑、 行业特定术语或准确解释用户查询所需的任何其他相关信息的详细信息。

index(documentation="员工工资以美元($)计算")

批量数据添加

为了高效地集成来自外部源的多个问题 SQL 对,请使用带有 bulk=True 标志的索引方法并指定 JSON 文件 (data.json) 的路径。 这样可以快速提取数据并将其集成到系统的知识库中。

index(bulk=True, path="data.json")

JSON文件的数据结构:

[
  {
    "Question": "员工的平均工资是多少?",
    "SQLQuery": "SELECT AVG(salary) FROM employees"
  },
]

最后

测试下来在400多张表的情况下,简单查询基本都可以,但是在相近字段和相近表的选择上有时候会出错。

此时指定表的查询效果比较好,不过在实际使用中需要上层应用的支持,比如先用 AI 进行表选择。

但是实际生产中靠的还是私有训练数据,大多数实际客户的Chat2BI场景有限,这部分的准确率可以逼近 100%。

Github 的源码地址,大家感兴趣的话可以对其进行二开:

  • • https://github.com/Mindinventory/MindSQL/[1]

引用链接

[1]https://github.com/Mindinventory/MindSQL/


--- END ---

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询