微信扫码
添加专属顾问
我要投稿
企业级文本到SQL解决方案,MindSQL开源包,助力构建高并发Chat2SQL应用。核心内容:1. MindSQL开源包特点:开源免费、隐私保护、灵活构建2. 解决企业应用难点:提高准确率、支持高并发处理3. 工作原理与关键功能:RAG模型、两步程序、核心API组件
MindSQL 是一个文本到 SQL 生成的 Python 包,开源、且支持 RAG,能帮助我们构建 Chat2SQL 的相关应用。
除了常规一些开源软件的特点:
MindSQL 还解决了企业应用两大难点:准确率不高和不能支持高并发的问题:
使用 MindsSQL 实现高精度取决于所提供的训练数据的质量,更多的训练数据可提高高精度。
MindSQL 的强大架构可自动扩展以每分钟处理数千个请求。
MindSQL 是一个 Python 库,它使用 RAG(检索增强生成) 在大型语言模型的帮助下创建适合您的数据库的精确 SQL 查询。
MindSQL 遵循简单的两步程序来简化您的数据库交互:
为了充分利用 MindSQL 的功能,您主要需要与两个关键功能进行交互:
minds.index(...)
:此功能在初始步骤中起着关键作用,允许您将特定于数据库的详细信息索引到向量存储中。此信息可作为后续 SQL 查询生成的基础语料库。minds.ask_db(...)
:此功能有助于直接与数据库通信。它允许您提出问题,并利用存储在向量存储中的上下文来构建 SQL 查询,以准确解决您的问题。MindSQL 由三个基础组件组成,每个组件都继承并实现了 MindSQLCore 类提供的 API:
MindSQL的使用非常简单,首先安装 python 包:
pip install mindsql
然后环境变量设置,可以通过命令行或者 .env
文件来设置:
常见数据库 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 语句合并到系统的知识库中,您可以提供必要的架构信息, 从而增强系统有效解释和响应数据库相关查询的能力。
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 的源码地址,大家感兴趣的话可以对其进行二开:
[1]
: https://github.com/Mindinventory/MindSQL/
--- END ---
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-01-01
2024-07-25
2024-05-06
2025-01-21
2024-09-20
2024-07-20
2024-06-12
2024-08-13
2024-12-26
2024-07-11
2025-03-08
2025-03-03
2025-03-02
2025-03-01
2025-02-26
2025-02-23
2025-02-18
2025-02-15