使用说明
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型号。