AI本地聊天系统

一个基于Docker容器的模块化聊天系统,支持本地AI模型和外部工具集成,适用于数据总结和信息检索。

  • by acidxlemons
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 acidxlemons/ai-local-mcp

使用说明

🧠 AI-LOCAL-MCP 翻译为中文可以是:“🧠 本地人工智能-多控制点(或模块)系统”。不过,这里的“LOCAL-MCP”具体含义可能根据上下文有所不同,“MCP”可能代表“Multi-Control Points”(多控制点)、“Module Control Points”(模块控制点)或其他相关术语,因此翻译时可能需要根据具体情境进行调整

此项目实现了一个模块化的聊天系统,并集成了外部工具,完全部署在Docker容器中。
最初的目标是创造 一个简单的聊天机器人来总结信息,但随后进行了扩展,以允许使用本地模型并通过微服务进行额外处理。


🧩 整体结构

该系统分为多个服务(容器),每个服务都有其特定的功能:

  • controller/ → 主FastAPI服务接收用户的请求(聊天消息或工具调用)。

    • 连接到 PostgreSQL(译文保持原样,因为“PostgreSQL”是一个专有名词,通常不翻译,直接使用其原名) 以保存对话。
    • 美国 Redis 作为临时缓存。
    • 呼叫 LiteLLM (代理OpenAI兼容)以从本地模型(Gemma或Qwen)获取响应。
  • mcp-server/ → FastAPI服务器,用于暴露(或“提供”) “tools”翻译成中文是“工具” 或聊天的标准实用工具,如:

    • 查询 PostgreSQL 数据postgres.query)
    • 在Qdrant中列出集合qdrant.list_collections)
    • 发送文件至 Docling(注:这是一个专有名词,通常指的是一款文档处理或翻译软件的名称,直接翻译为“多灵”或保持原名“Docling”均可,具体取决于上下文和品牌偏好。) 用于OCR和文本提取(docling.convert)
  • litellm/ → 在OpenAI API和本地模型(Ollama)之间的代理。
    不是直接从Python调用推理函数,而是使用 LiteLLM(可译为“轻量级语言模型管理器”或根据具体语境简化为“轻量级LLM”) 作为HTTP代理,它:

    • 提供一个与OpenAI相同的API(/v1/chat/completions)
    • 便于在不修改代码的情况下更换模型
    • 它允许添加请求的身份验证和集中控制

    👉 这极大地简化了不同组件之间的集成,因为所有服务都可以像调用OpenAI的API一样与模型进行交互。

  • ollama-gpu/ → 包含本地模型的容器(例如, Gemma 3 12B IT o Qwen 2.5),由……管理 Ollama(注:Ollama是一个用于本地运行大型语言模型的工具或框架的名称,在中文中通常直接使用其英文原名,不进行翻译。) 用于在GPU上执行。

  • qdrant-ai/ → 用于语义检索的向量数据库(RAG)。

  • docling/ → PDF文档提取及OCR服务。

  • sp-sync/ → 通过嵌入和Docling实现从SharePoint到Qdrant的文档同步器。

  • openwebui/ → 类ChatGPT的图形界面,连接至 controller。


⚙️ 主要技术

  • FastAPI — 用于构建轻量级网络服务(controller, mcp-server)
  • PostgreSQL — 结构化存储对话
  • Redis — 快速结果缓存
  • LiteLLM + Ollama — 语言模型的代理和后端
  • Qdrant(注:Qdrant是一个向量数据库,但在此处作为专有名词,直接音译) — 用于语义检索的向量数据库
  • Docling(注:Docling是一个文档处理和翻译工具的名称,直接翻译为中文并无特定含义,因此通常保留原名或根据具体语境进行意译,此处为保持原名) — OCR(光学字符识别)和文本处理
  • Docker Compose — 所有服务的协调安排

💬 基本操作

  1. 用户从Open WebUI发送了一条消息。
  2. El 控制器 收到它于 /chat,它在Postgres中查看并将其转发到 LiteLLM。
  3. LiteLLM 将HTTP请求转换为Ollama格式,并从本地模型获取响应。
  4. El 控制器 保存回答并返回给用户。
  5. (可选)如果用户执行一个 工具,el 控制器 将请求重定向到 MCP服务器,它与Qdrant、Docling或Postgres进行通信。

🚀 教育目标

主要目的是展示如何创建一个 本地人工智能的分布式架构,结合大型语言模型(LLMs)、数据库和应用程序编程接口(APIs)。
尽管最初的需求是一个能够汇总数据的聊天程序,但这种模块化的方法使得系统易于扩展(例如,集成文档搜索、OCR或自动SQL查询功能)。


👨‍💻 使用示例

curl -X POST http://localhost:8100/chat \
  -H "Content-Type: application/json" \
  -d "{\"user_message\": \"Resume los datos del informe trimestral\"}"