MCPO是一个基于自然语言处理技术的SQL检索系统,能够将用户的自然语言查询转换为SQL语句,并执行数据库查询。该系统特别针对中文场景进行了优化,使用了TF-IDF和大语言模型相结合的方法来提高检索精度。
- 使用TF-IDF + jieba分词优化中文检索
- 支持大语言模型(如Qwen2.5)改写SQL,提高查询精度
- 提供客户端-服务器架构,支持分布式部署
- 支持离线应用模式,适用于无网络环境
- 基于MCP(Model-Client-Protocol)协议实现服务通信
项目包含以下主要组件:
- 离线应用 (
offline_app.py): 独立运行的应用程序,支持自然语言到SQL的转换和数据库查询 - MCP服务器 (
mcp_server.py): 提供自然语言到SQL转换的服务接口 - MCP客户端 (
mcp_client.py): 连接到MCP服务器,发送查询请求并获取结果 - SQL模板库 (
nlsql.json): 包含预定义的自然语言描述和对应SQL模板
- Python 3.x
- 自然语言处理: jieba分词、TF-IDF向量化
- 机器学习: scikit-learn (余弦相似度计算)
- 大语言模型: OpenAI API兼容接口 (支持Qwen、Deepseek等模型)
- 数据库: MySQL
- 通信协议: MCP (Model-Client-Protocol)
pip install -r requirements.txt在 offline_app.py 和 mcp_server.py 中可以配置以下参数:
- 大语言模型API地址和密钥
- MySQL数据库连接信息
- 本地模型路径
直接运行离线应用程序:
python offline_app.py然后根据提示输入自然语言查询,系统会自动检索相关SQL模板,使用大语言模型改写SQL,并执行数据库查询。
- 首先启动MCP服务器:
python mcp_server.py- 然后在另一个终端启动客户端:
python mcp_client.py客户端会连接到服务器,并发送测试查询。
SQL模板库(nlsql.json)的数据格式如下:
[
{
"id": 1,
"description": "自然语言描述",
"sql": "对应的SQL语句"
},
...
]- 用户输入自然语言查询
- 系统使用TF-IDF + jieba分词对查询进行处理
- 系统从SQL模板库中检索最相关的SQL模板
- 使用大语言模型根据用户查询改写SQL语句
- 执行改写后的SQL语句并返回结果
系统日志保存在 logs 目录下,可用于追踪系统运行状态和调试问题。
- 确保MySQL数据库已正确配置并可访问
- 大语言模型API需要正确配置,支持本地部署的模型服务(如Ollama)
- 系统性能取决于SQL模板库的质量和覆盖范围