LLM数据库安全网关

一个通过Model Context Protocol (MCP)实现的安全API网关,允许大型语言模型(LLM)查询数据库但阻止数据修改操作,适用于需要LLM与数据库安全交互的场景。

  • by ajaybhatiya1234
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ajaybhatiya1234/mcp-llm-db-gateway

使用说明

mcp-llm-db网关

这个项目是我解决一个常见问题的方法:如何让大型语言模型(LLM)使用数据库,而不给它城堡的钥匙。目标是用Python构建一个安全的API网关,让LLM查询数据库以获取信息,但阻止任何更改或删除数据的尝试。

核心思想:“模型上下文协议”(MCP)

经过一番尝试和错误,我最终使用了一个名为“模型上下文协议”(MCP)的系统。

要求LLM编写SQL的主要问题是它可能不可靠。对于PostgreSQL这样的特定数据库,它可能会出现语法错误,或者只是编造表名。

MCP通过使LLM的工作更容易来解决这个问题。LLM不需要编写SQL,只需要根据用户的问题创建一个简单的JSON对象。然后,我的Flask服务器接收这个JSON并构建真实、安全的SQL查询。这将复杂的逻辑从不可预测的LLM转移到可预测的Python代码。

此存储库包括两个客户端,以显示为什么MCP方法更好:

  1. client_structured_query.py:使用MCP的推荐客户端。
  2. client_raw_sql.py:我的第一次尝试,它显示了要求LLM编写原始SQL的问题。

入门指南

你需要什么

  • Python 3.8+
  • Docker(这是运行PostgreSQL数据库最简单的方法)
  • Ollama安装了一个现成的模型(我用 llama3).

设置步骤

  1. 克隆项目:

    git clone https://github.com/your-username/mcp-llm-db-gateway.git
    cd mcp-llm-db-gateway
    
  2. 设置Python虚拟环境:

    # On macOS/Linux
    python3 -m venv venv
    source venv/bin/activate
    
    # On Windows
    python -m venv venv
    .\venv\Scripts\activate
    
  3. 安装软件包:

    pip install -r requirements.txt
    
  4. 使用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
      

如何运行它

  1. 启动服务器: 在第一个终端中,运行Flask服务器。

    python app.py
    
  2. 运行客户端: 在第二个终端中,运行客户端脚本。

    # 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型号。