mcp-llm-db网关
这个项目是我解决一个常见问题的方法:如何让大型语言模型(LLM)使用数据库,而不给它城堡的钥匙。目标是用Python构建一个安全的API网关,让LLM查询数据库以获取信息,但阻止任何更改或删除数据的尝试。
核心思想:“模型上下文协议”(MCP)
经过一番尝试和错误,我最终使用了一个名为“模型上下文协议”(MCP)的系统。
要求LLM编写SQL的主要问题是它可能不可靠。对于PostgreSQL这样的特定数据库,它可能会出现语法错误,或者只是编造表名。
MCP通过使LLM的工作更容易来解决这个问题。LLM不需要编写SQL,只需要根据用户的问题创建一个简单的JSON对象。然后,我的Flask服务器接收这个JSON并构建真实、安全的SQL查询。这将复杂的逻辑从不可预测的LLM转移到可预测的Python代码。
此存储库包括两个客户端,以显示为什么MCP方法更好:
client_structured_query.py:使用MCP的推荐客户端。client_raw_sql.py:我的第一次尝试,它显示了要求LLM编写原始SQL的问题。
入门指南
你需要什么
- Python 3.8+
- Docker(这是运行PostgreSQL数据库最简单的方法)
- Ollama安装了一个现成的模型(我用
llama3).
设置步骤
- 克隆项目:
git clone https://github.com/your-username/mcp-llm-db-gateway.git
cd mcp-llm-db-gateway- 设置Python虚拟环境:
# On macOS/Linux
python3 -m venv venv
source venv/bin/activate
# On Windows
python -m venv venv
.\venv\Scripts\activate- 安装软件包:
pip install -r requirements.txt- 使用Docker运行数据库:
这些命令将启动一个PostgreSQL容器,并用示例Chinook数据集填充它。
- 启动容器:
docker run --name mcp-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres- 创建数据库:
docker exec -it mcp-postgres psql -U postgres -c "CREATE DATABASE chinook_db;"- 下载数据脚本:
# On macOS/Linux:
curl -o Chinook_PostgreSql.sql https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_PostgreSql.sql
# On Windows PowerShell, use this instead:
# Invoke-WebRequest -Uri https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_PostgreSql.sql -OutFile Chinook_PostgreSql.sql- 加载数据(密码为 mysecretpassword):
psql -h localhost -U postgres -d chinook_db -f Chinook_PostgreSql.sql如何运行它
- 启动服务器:
在第一个终端中,运行Flask服务器。
python app.py- 运行客户端:
在第二个终端中,运行客户端脚本。
# This is the main client that uses the MCP
python client_structured_query.py然后,脚本将要求您为数据库键入一个问题。
技术选择
- python & 烧瓶:用于构建API。Flask非常适合构建像这样简单干净的web服务器。
- SQL炼金术:这个库是与数据库通信的关键。它处理PostgreSQL和SQLite之间的差异,最重要的是,通过使用参数化查询来防止SQL注入。
- PostgreSQL:用于发展的数据库。
- 码头工人:我用它在容器中运行PostgreSQL。这比直接在我的机器上安装要容易得多,也使其他人更容易设置项目。
- 没有:用于在本地运行Llama 3型号。
