ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

完全离线:Ollama + LibreChat 搭一套不联网的私有 AI 聊天室

完全离线:Ollama + LibreChat 搭一套不联网的私有 AI 聊天室 完全离线Ollama LibreChat 搭一套不联网的私有 AI 聊天室【免费下载链接】LibreChatEnhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active项目地址: https://gitcode.com/GitHub_Trending/li/LibreChat数据不出内网、模型本地推理、聊天记录只落在自己的数据库里——这是很多企业、研究团队和注重隐私的个人用户对AI 聊天室的真实诉求。公有云 API 的每次调用都在向外部传输你的提示词与业务上下文而断网环境下自托管的开源方案正在成为数据敏感场景下的标准答案。LibreChat 是这条路上最完整的拼图之一它不仅是长得像 ChatGPT 的界面而是一套自带 Ollama 原生客户端、Agents/MCP 生态、消息检索与多用户权限的对话基础设施。把它的模型后端换成 Ollama前端、编排、存储全部跑在本地就能获得一个真正意义上的私有 AI 聊天室。本文基于 LibreChat 仓库源码拆解对接配置、离线依赖准备与本地模型选型三个层面的实操细节。一、为什么是 LibreChatOllama 是一等公民在很多聊天 UI 里接入 Ollama 需要借道一层 OpenAI 兼容代理。而 LibreChat 在仓库中把 Ollama 做成了内置客户端不依赖第三方网关。API 服务端的依赖声明直接写明了这一点——api/package.json 中依赖了官方ollamaJS SDKollama: ^0.5.0并在 api/app/clients/OllamaClient.js 中实现了一个完整的OllamaClientconst { Ollama } require(ollama); // ... constructor(options {}) { const host deriveBaseURL(options.baseURL ?? http://localhost:11434); this.streamRate options.streamRate ?? Constants.DEFAULT_STREAM_RATE; this.client new Ollama({ host }); }几个值得注意的工程细节默认地址直连未配置baseURL时默认指向http://localhost:11434这是 Ollama 的默认监听端口本地零配置即可联通。流式输出chatCompletion通过for await (const chunk of stream)逐 token 消费 Ollama 的原生流并以streamRate控制节流节奏把模型生成过程实时推给前端。原生多模态支持formatOpenAIMessages会把消息中的image_url提取为 base64 并塞进images字段这意味着本地跑一个视觉模型如 llava、qwen2.5-vl 系列LibreChat 前端上传图片即可对话无需任何额外网关。模型探测fetchModels静态方法请求 Ollama 的/api/tags接口5 秒超时把本地已下载的模型清单实时同步给前端下拉框。在数据提供层Ollama 同样被登记为一级端点packages/data-provider/src/config.ts 中KnownEndpoints.ollama ollamaUI 会为它渲染独立的模型图标与选择入口。从依赖、客户端到 UI 图标Ollama 整条链路在 LibreChat 中都是原生支持而非插件式兼容。二、对接配置一个 YAML 端点搞定LibreChat 的配置入口是librechat.yaml参考仓库根目录的 librechat.example.yaml。Ollama 端点以自定义端点endpoints.custom的形式声明。仓库测试样例 api/server/services/Config/loadConfigModels.spec.js 中给出了一个完整可用的 Ollama 配置块endpoints: custom: - name: Ollama apiKey: user_provided baseURL: http://localhost:11434/v1/ models: default: [mistral, llama2:13b] fetch: false三个关键字段的含义都能在源码测试中得到印证apiKey: user_provided声明该端点不需要任何 API Key本地推理天然无鉴权。测试注释明确写道For groq and ollama, since the apiKey isuser_provided, models should not be fetched——即此模式下模型列表不会被自动探测必须靠models.default静态声明。baseURL指向 Ollama注意这里的路径带/v1/后缀走的是 Ollama 的 OpenAI 兼容接口用于 LibreChat 通用对话管线而前文提到的OllamaClient则走原生 SDK 路径两者在架构中是并存的。models.default是唯一来源当fetch: false时你在前端能选到哪些模型完全由这个列表决定。loadConfigModels在加载时还会把Ollama/OLLAMA/OLLaMA等各种大小写变体统一规范化为小写ollama见同文件第 584-589 行测试所以配置时名称写法可以随意最终只会注册一个端点。如果你的 Ollama 服务一定能被容器访问到也可以反向操作把fetch: true让 LibreChat 启动时调用 packages/api/src/endpoints/models.ts 中的fetchOllamaModels通过/api/tags自动拉取本地全部已下载模型并缓存 2 分钟。离线环境下两种模式都能工作前者更可控可以隐藏不想暴露给用户的模型后者更省事新ollama pull的模型立即出现。三、离线部署镜像、依赖与 SSRF 豁免离线环境的镜像准备是整套方案落地时最容易卡壳的环节。LibreChat 官方 compose 文件 docker-compose.yml 默认拉起五个服务api主服务、mongodb会话存储、meilisearch消息全文检索、vectordbpgvectorRAG 向量库、rag_api文档问答。离线部署前需要在一台能联网的机器上把这些镜像全部docker pull下来再导出导入内网镜像仓库registry.librechat.ai/librechat-ai/librechat-dev:latest mongo:8.0.20 getmeili/meilisearch:v1.35.1 pgvector/pgvector:0.8.0-pg15-trixie registry.librechat.ai/librechat-ai/librechat-rag-api-dev-lite:latest ollama/ollama:latestOllama 容器的接入官方在 docker-compose.override.yml.example 中提供了开箱即用的服务定义services: ollama: image: ollama/ollama:latest deploy: resources: reservations: devices: - driver: nvidia capabilities: [compute, utility] ports: - 11434:11434 volumes: - ./ollama:/root/.ollama要点在于模型权重目录./ollama:/root/.ollama必须挂载到宿主机。Ollama 的模型文件GGUF 量化包动辄数 GB 到几十 GB放进命名卷后不便离线搬运挂载到宿主目录后可以在联网环境ollama pull好模型再连同整个目录一起拷贝进内网。挂载之外还有两处离线必改容器间通信地址如果 Ollama 与 LibreChat 同处一个 compose 网络baseURL应写http://ollama:11434/v1/服务名即主机名否则写http://host.docker.internal:11434/v1/指向宿主机。官方 compose 已为 api 服务配置了extra_hosts: host.docker.internal:host-gateway宿主机上的 Ollama 进程也能被容器访问到。SSRF 豁免LibreChat 默认拦截对 localhost/内网 IP 的出站请求。若用户侧配置了baseURL: user_provided的端点必须在 librechat.example.yaml 的endpoints.allowedAddresses中显式放行本地服务endpoints: allowedAddresses: - localhost:11434 - 127.0.0.1:11434 - ollama:11434配置文件里的注释写得很直白allowedAddresses是一个SSRF 豁免列表而不是严格白名单只对列出的主机:端口解除默认拒绝公网域名不受影响。这套默认拒绝 显式放行的机制恰好是离线私有部署的安全加分项——内网里即使有人摸到了管理端口也无法借 LibreChat 的 Actions 或 MCP 通道去探测内网其他主机。四、模型选型显存、内存与效果的三方权衡离线聊天室的体验上限最终由你喂给 Ollama 的模型决定。选型时优先看三个硬指标参数量、量化等级、上下文长度。16GB 内存 / 8GB 显存的入门机7B~8B 级模型是甜点区间。qwen2.5:7b-instruct的中文能力和指令遵循在同体积模型里是第一梯队llama3.1:8b的英文与代码表现均衡mistral:7b则胜在推理速度。Q4_K_M 量化后权重约 4~5GB普通台式机即可流畅运行。32GB 内存的中端机可以上 13B~14B 级如qwen2.5:14bQ4 量化后约 8~9GB配合 GPU 的 offload 策略生成质量相比 7B 有明显跃升中文长文本场景尤其值得。多模态需求选llava或qwen2.5-vl系列。别忘了第一节提到的细节——LibreChat 的OllamaClient原生支持 base64 图片消息视觉模型接入后上传截图让 AI 解读是开箱即用的能力。另一个容易被忽略的取舍是num_ctx上下文窗口。OllamaClient 的请求体校验api/app/clients/OllamaClient.js 中的ollamaPayloadSchema完整支持num_ctx、top_k、top_p、repeat_penalty、temperature等原生采样参数但更大的上下文窗口意味着 KV cache 占用成倍上涨8K 上下文在 7B Q4 模型上会多占约 1~2GB 内存。离线部署时建议按实际对话长度设定num_ctx而不是盲目拉满。最后提醒一个容易踩的坑对话标题生成titleConvo默认依赖一个独立的模型调用。离线场景建议把titleModel显式指定为本地已下载的模型或者干脆在端点配置中关闭titleConvo否则每次新建对话都会多一次本地推理且如果引用了未下载的模型名还会产生报错。五、离线方案的边界与延伸完全离线不等于功能降级。Ollama LibreChat 的组合在断网环境下依然保留多用户注册与权限控制、MongoDB 持久化的完整会话历史、Meilisearch 的消息全文检索、RAG 文档问答rag_api pgvector 全程本地、以及基于本地模型的 Agents 编排。需要明确取舍的是那些强依赖外部网络的能力联网搜索Web Search、云端图像生成DALL-E-3 等、以及需要外网 MCP 服务器的远程工具。这些在离线拓扑里要么禁用要么替换为本地实现。好在 LibreChat 的 Actions/MCP 通道都受 SSRF 默认拒绝策略保护离线部署时把这些能力关掉本身就是在收敛攻击面。数据不出内网、模型权重可携带、界面与交互不输商用产品——LibreChat 与 Ollama 的组合为私有 AI 聊天室提供了一个从单机到企业内网都成立的完整方案。配置的核心就三件事写对endpoints.custom里的 Ollama 端点、在 compose 里挂好模型目录并做好 SSRF 豁免、选一个与硬件匹配的量化模型。剩下的交给这套把连接器做到极致的开源基础设施。【免费下载链接】LibreChatEnhanced ChatGPT Clone: Features Agents, MCP, Skills, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active项目地址: https://gitcode.com/GitHub_Trending/li/LibreChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进