🧠 Gradio+Ollama+MCP:隐私意识本地LLM代理演示
概述
该项目演示了如何构建 具有隐私意识的本地托管LLM代理 使用 没有 (用于在硬件上运行LLM) 模型上下文协议(MCP) 用于安全调用工具,以及 格拉迪奥 用于会话式web UI——所有这些都由本地SQLite数据库提供支持,并作为代理和MCP服务器公开。
关键概念
- 模型上下文协议(MCP):
- 一种开放协议,允许LLM将本地或远程工具“调用”为API——标准化工具(DB、函数、搜索等)如何插入LLM工作流。 - MCP允许 *尊重隐私,可审计* 工具使用,因为所有函数调用和数据访问都可以在本地监控。
- 本地化Ollama LLM:
- Ollama允许您运行最先进的LLM(如Granite、Llama 3、Qwen等) *完全在您的机器上*--没有数据离开你的电脑。 - 该项目使用 花岗岩3.1 MoE模型 用于局部推理。
- 隐私意识代理:
- 您的查询和数据永远不会离开您的设备。 - 所有工具和数据库操作 *本地执行*. - 该架构与边缘设备和自托管部署兼容。
______________________________________________________________________
建筑
server.py--启动FastMCP MCP MCP服务器,通过HTTP公开数据库工具。client.py--运行Gradio聊天UI,并将本地LLM(通过Ollama)连接到MCP工具,以获得工具增强响应。
______________________________________________________________________
高水位流量
- 用户交互 通过Gradio用户界面(
client.py). - 代理 使用Ollama LLM+MCP客户端调用工具(例如读/写SQLite)。
- MCP服务器 (
server.py)公开工具API(add_data/read_data),并在本地DB上执行SQL。 - 所有逻辑和数据 保持私有和本地。
______________________________________________________________________
🖥️ 系统配置
操作系统
- Ubuntu 24.04 LTS
- 内核:
6.11.0-25-generic - 架构:
x86_64(64位)
处理器(CPU)
- 型号:第13代英特尔®酷睿™i9-13950HX
- 芯数:24芯/32螺纹
- 最大频率:5.50 GHz
- 虚拟化:支持VT-x
- L1缓存:896 KiB(数据),1.3 MiB(指令)
- L2缓存:32 MiB
- L3缓存:36 MiB
图形(GPU)
- NVIDIA RTX 5000 Ada世代
- 虚拟RAM:16GB
- 驱动程序版本:550.144.03
- CUDA版本:12.4
Python环境
- Python版本:3.11.9
- 虚拟环境:
python -m venv final1
杂项
- 虚拟化功能:已启用(VT-x)
- NUMA节点:1(节点0:0-31中的所有CPU)
______________________________________________________________________
server.py——SQLite的MCP服务器
目的: 将SQLite作为一组工具公开(add_data, read_data)通过MCP,任何兼容MCP的LLM代理都可以安全地查询/更新数据库。
亮点:
- 用途 FastMCP 用于快速设置MCP服务器。
- 初始化SQLite,创建两个表:
people和interactions.
- 显示两个工具:
- add_data(query):插入任何SQL行(用于演示目的;可能仅限于生产环境)。 - read_data(query):运行SQL SELECT查询并返回结果。
- 设计用于 *本地* 使用;易于交换DB或添加更多工具。
代码摘要:
import sqlite3
from fastmcp import FastMCP
# Create and configure MCP server
mcp = FastMCP(name="SQLiteMCPServer", port=8000, transport="streamable-http", ...)
# Setup SQLite
...
# Tool: Insert SQL record
@mcp.tool(name="add_data", ...)
def add_data(query: str) -> bool:
...
# Tool: Query records
@mcp.tool(name="read_data", ...)
def read_data(query: str = "SELECT * FROM people") -> list:
...
# Start server
if __name__ == "__main__":
mcp.run(transport="streamable-http", host="127.0.0.1", port=8000)______________________________________________________________________
client.py——带有MCP感知Ollama代理的Gradio聊天机器人
目的: Gradio聊天机器人界面由 *本地* LLM(通过Ollama)可以自主调用MCP公开的数据库工具(添加/读取),作为其工作流程的一部分。
亮点:
- 成为LLM: 跑
granite3.1-moe本地——没有数据发送到外部服务器。 - MCP客户端: 连接到MCP服务器
http://127.0.0.1:8000/mcp并动态加载可用工具。 - 功能代理: LLM代理(通过
llama_index)它可以使用语言推理和工具调用来完成查询。 - Gradio用户界面: 简单的聊天界面+最近的互动显示。
- 完整的本地日志记录: 每个用户代理聊天和工具调用都会记录到SQLite中,以确保可审计性和隐私性。
代码结构:
# Import LLM (Ollama), MCP client, Gradio, etc.
from llama_index.llms.ollama import Ollama
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec
from llama_index.core.agent.workflow import FunctionAgent
from gradio.queueing import Queue
...
# Set up Ollama LLM
llm = Ollama(model="granite3.1-moe", ...)
# Connect to MCP server, get tool specs
mcp_client = BasicMCPClient("http://127.0.0.1:8000/mcp")
mcp_spec = McpToolSpec(client=mcp_client)
# Initialize FunctionAgent with loaded tools
agent = FunctionAgent(...)
# Gradio UI: Chatbot, input, buttons, history display
with gr.Blocks(...):
...
# Message handling: Sends chat to agent, which may call tools, logs all activity
def handle_message(...):
...如何在当地跑步
整个应用程序旨在在专用的Python虚拟环境中运行(mcpollama). 假设:
- Ollama已安装(使用
curl -fsSL https://ollama.com/install.sh | sh). - 模型
granite3.1-moe已被拉动(ollama pull granite3.1-moe).
分步说明
- 创建并激活虚拟环境:
python3 -m venv final1
source final1/bin/activate- 安装Python要求:
pip install -r requirements.txt- 启动MCP服务器(在终端1中):
python server.py- 启动Ollama(如果尚未运行,请在单独的终端中启动):
ollama serve- 启动Gradio聊天UI(在终端2中):
python client.py- 打开Gradio web界面
导航到终端中显示的链接(通常 http://127.0.0.1:7860).
- 检查sqlitebrowser demo.db
______________________________________________________________________
提示: 保持你的 mcpollama 每当运行这些脚本时,虚拟环境都会被激活,以避免与系统Python包发生冲突。 如果您需要(重新)拉取Olama模型:
ollama pull granite3.1-moe______________________________________________________________________
隐私和安全说明
- 一切都在本地运行 (代码、模型和数据): *没有云推理,没有远程数据库,除非你配置它!*
- 所有工具调用 通过MCP服务器路由,使工具调用显式且可监控。
- 不向外部发送用户数据 除非你专门编写了一个这样做的工具。
______________________________________________________________________
MCP+Ollama+Gradio:有什么独特之处?
- 本地法学硕士推理:
代理人是 *真正的私人*--您的提示、数据和结果永远不会被任何第三方看到。
- 组合工具使用:
您可以添加更多工具(API、自定义Python函数等)作为MCP端点,代理将自动发现它们。
- 可复制用于黑客马拉松、研究和教学
只需最少的设置,即可轻松演示本地LLM代理的自主性和隐私性。
______________________________________________________________________
示例用例
- 查询数据库中的人员:
“30岁以上的医生都是谁?”
- 添加新用户:
“加上一个名叫阿卡什的人,35岁,职业科学家。”
- 查看调试和研究的工具调用跟踪和时间。
______________________________________________________________________
许可证
阿帕奇-2.0
______________________________________________________________________
鸣谢
- 帕塔·普拉蒂姆·雷(2025 Gradio经纪人和MCP黑客马拉松)
______________________________________________________________________
