返回市场
奥拉玛聊天与MCP

奥拉玛聊天与MCP

作者:redbuilding5 星标更新:2025-05-29

项目介绍

🔍 🤖 🌐 OhSee (Ollama Chat with MCP)

使用模型上下文协议(MCP)将本地LLM与实时网络搜索功能及数据库查询相结合的强大演示,具有现代的网页界面和持久的对话。

概述

Ollama Chat with MCP展示了如何通过工具扩展本地语言模型的功能。该应用程序结合了通过Ollama运行的本地LLM的力量、最新的网络搜索功能以及数据库查询,所有这些都由一个强大的后端和用户友好的React前端管理。对话历史记录使用MongoDB进行存储。

项目包含几个关键组件:

  • 后端(FastAPI):管理聊天逻辑、Ollama交互、MCP服务通信(包括启动和管理如网络搜索和SQL查询等MCP服务),以及对话持久化。
  • 前端(React):供用户与聊天应用互动的现代响应式网页界面。
  • MCP网络搜索服务器模块:使用Serper.dev API提供网络搜索功能,作为后台服务运行。
  • MCP SQL服务器模块:提供查询MySQL数据库的工具,作为后台服务运行。
  • MongoDB:存储对话历史和用户数据。

这种架构展示了MCP如何使本地模型访问外部工具和数据源,显著增强其能力,现在有了更可扩展和功能丰富的设置。

特性

  • 🔎 增强型网络聊天:在对话中访问实时网络搜索结果。
  • 💾 持久对话:聊天历史保存在MongoDB中,允许用户恢复对话。
  • 🧠 本地模型执行:使用Ollama完全在自己的硬件上运行模型。
  • 🔌 MCP集成:展示多个工具的Model Context Protocol的实际实现,由主后端管理。
  • 💻 现代网页界面:使用React构建,提供响应式和交互式的用户体验。
  • 📊 结构化的搜索结果:干净地格式化网络搜索数据以优化上下文。
  • ⚙️ 后端API:FastAPI后端提供强大的API端点用于聊天和对话管理。
  • 🗃️ SQL查询工具:MCP工具用于与MySQL数据库交互,改进了模式处理和查询重试逻辑。
  • 🔄 对话管理:列出、重命名和删除对话。

要求

  • Python 3.11+
  • Node.js (v18+) 和 npm/yarn(用于前端)
  • 安装并运行本地的 Ollama
  • Serper.dev API密钥(提供免费层级)
  • MongoDB实例(本地或云端)
  • MySQL服务器(可选,用于SQL查询工具)
  • 网络连接(用于网络搜索和包下载)

安装

  1. 克隆仓库:

    git clone https://github.com/redbuilding/ollama-chat-with-mcp.git
    cd ollama-chat-with-mcp
    
  2. 设置后端:

    • 导航到后端目录:
      cd backend
      
    • 安装Python依赖项:
      pip install -r requirements.txt
      
    • backend目录下创建一个.env文件。这是后端及其管理的MCP服务查找环境变量的地方:
      # 对于网络搜索(server_search.py)
      SERPER_API_KEY=your_serper_api_key_here
      
      # 对于MongoDB(main.py)
      MONGODB_URI=mongodb://localhost:27017/
      MONGODB_DATABASE_NAME=mcp_chat_db
      
      # 对于MySQL数据库查询(server_mysql.py)
      DB_HOST=localhost
      DB_USER=your_db_user
      DB_PASSWORD=your_db_password
      DB_NAME=your_db_name
      
  3. 设置前端:

    • 导航到前端目录:
      cd ../frontend
      
      (如果你在backend/中,否则从项目根目录导航:cd frontend
    • 安装Node.js依赖项:
      npm install
      # 或
      # yarn install
      
  4. 确保Ollama已安装且有可用模型: 应用程序可能默认使用特定模型(例如,llama3.1)。拉取你想要的模型:

    ollama pull llama3.1
    # 或你喜欢的模型如llama3, mistral等
    

    如果支持,你可以在UI中选择模型,或者在后端的.env文件中配置默认值。

使用方法

  1. 确保前置条件正在运行:

    • Ollama:必须正在运行。
    • MongoDB:你的MongoDB实例必须可访问。
    • MySQL服务器(如果使用SQL工具):你的MySQL服务器必须正在运行并且可以通过.env中提供的凭据访问。
  2. 启动后端服务器: 导航到backend目录并运行FastAPI应用:

    # 从后端目录
    uvicorn main:app --reload --port 8000
    

    后端API通常可在http://localhost:8000访问。 FastAPI应用会自动启动并管理MCP服务(网络搜索和SQL查询)作为后台进程,无需单独运行server_search.pyserver_mysql.py

  3. 启动前端开发服务器: 导航到frontend目录并运行:

    npm run dev
    # 或
    # yarn dev
    

    网页界面通常可在http://localhost:5173(或Vite指定的其他端口)访问。

与应用互动

  • 打开浏览器至前端URL(例如,http://localhost:5173)。
  • 使用聊天界面发送消息。
  • 在UI中切换“使用网络搜索”或“使用数据库”开关以启用这些工具。
  • 使用侧边栏管理对话(创建新对话、选择、重命名、删除)。

遗留客户端(即将淘汰)

原始的chat_client.py(终端)和chat_frontend.py(Gradio)仍然存在于仓库中,但不属于主要重构的应用程序。它们未被维护,并可能无法正确工作,将在未来的更新中被淘汰。

工作原理

  1. 用户与React前端互动。
  2. 前端向FastAPI后端API发送请求(聊天消息、对话管理)。
  3. 对于聊天消息,后端(main.py)处理请求:
    • 可能与Ollama交互以获取本地LLM的响应。
    • 如果用户通过UI启用了一个工具(例如,网络搜索、SQL查询):
      • 后端准备必要的上下文(例如,获取SQL的数据库模式)。
      • 它可能会提示Ollama模型生成特定工具的输入(例如,SQL查询)。
      • 后端然后与相关的MCP服务模块(作为子进程管理,例如server_search.py逻辑用于网络搜索,server_mysql.py逻辑用于SQL执行)通信。
      • MCP服务模块执行工具(例如,调用Serper.dev API,查询MySQL)。
      • 来自MCP服务模块的结果返回给后端。
      • 后端可能会用工具的结果重新提示Ollama以生成最终的知情响应。
  4. 后端从MongoDB存储/检索对话历史。
  5. 最终响应返回给前端并显示给用户。

自定义

  • Ollama模型:在UI中选择可用模型。注意,适合编码的模型可能更适合MCP SQL聊天(例如,codestral)。
  • 搜索结果:调整backend/main.py中的搜索结果数量。
  • 数据库模式上下文:修改backend/main.py中的MAX_TABLES_FOR_SCHEMA_CONTEXT以控制发送给LLM的表模式数量。
  • 提示工程:修改发送给Ollama的系统提示以定制响应和SQL生成。
  • 样式:通过修改CSS文件或React组件内的样式来自定义前端外观。

贡献

欢迎贡献!请随意提交Pull Request。

许可证

本项目根据MIT许可证发布 - 查看LICENSE文件了解详情。