拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

docker compose 搭建 ollama 和 fastgpt:用 chatglm 跑通本地知识库问答

docker compose 搭建 ollama 和 fastgpt:用 chatglm 跑通本地知识库问答 1. 为什么要在本地用 docker compose 跑 Ollama FastGPT如果你手头有一台带显卡的机器或者一台内存够大的工作站想搭一套完全私有的知识库问答又不想把文档传到别人的服务器上那 Ollama FastGPT 这套组合是绕不开的。Ollama 负责把大模型跑起来FastGPT 负责把文档切片、向量化、检索、拼上下文再交给模型回答两者用 docker compose 编排重启、迁移、备份都省心。这篇聚焦的是「用 docker compose 编排 ollama 与 fastgpt接入 chatglm 完成本地知识库问答」的完整落地。我会给出可复制的 compose 骨架、模型拉取方式、FastGPT 里模型配置项怎么填最后用一个真实问答动作把链路跑通。适合已经装好 Docker 和 docker compose、想从零跑通私有化问答的人。系统我用的是 Ubuntu 24.04显卡是 NVIDIA所以会带上 GPU 版本的写法CPU 版本我也会标出来。先说清楚整体链路FastGPT 本身不跑大模型它通过 OneAPI 这个网关去调模型。所以实际是 FastGPT → OneAPI → Ollama → chatglm。很多人第一次配 FastGPT 卡住就是没搞明白 OneAPI 这一层。下面按顺序来。2. 前置准备TaoToken 与本地环境在动手之前先把两个概念分清楚。Ollama 是本地推理引擎模型权重在你自己的磁盘上而如果你后面想让 FastGPT 同时具备联网能力或者调用更强的云端模型做兜底可以接一个统一的模型网关。TaoToken 就是这样一个入口官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。它的作用是让你在 FastGPT 的 OneAPI 里多配一个渠道需要的时候切过去不用改业务代码。本地环境这边确认三件事docker --version docker compose version nvidia-sminvidia-smi能出显卡信息说明驱动没问题。如果要用 GPU 跑 Ollama还需要装 NVIDIA Container Toolkit装完之后docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi能打印出显卡才算通。CPU 跑也行就是 chatglm 这种量级的模型会慢问答等个十几秒很正常。目录规划建议这样后面挂载路径不容易乱mkdir -p /opt/ai-stack/{ollama,fastgpt,oneapi} cd /opt/ai-stack把模型文件、compose 文件、FastGPT 配置都放在这个目录下迁移的时候整个目录打包带走就行。3. 用 docker compose 编排 Ollama 并拉取 chatglm3.1 Ollama 的 compose 骨架先写 Ollama 的 compose。GPU 版本关键在deploy.resources.reservations.devices这段把显卡透传给容器services: ollama: image: ollama/ollama:latest container_name: ollama restart: unless-stopped ports: - 11434:11434 volumes: - ./ollama:/root/.ollama environment: - OLLAMA_HOST0.0.0.0 - OLLAMA_KEEP_ALIVE24h deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu]CPU 版本把deploy整段删掉即可。OLLAMA_KEEP_ALIVE24h是让模型常驻显存不然每次问答都要重新加载第一次响应会特别慢。启动docker compose up -d ollama docker compose logs -f ollama看到Listening on [::]:11434就说明起来了。3.2 拉取 chatglm 模型Ollama 官方库里有现成的 chatglm 系列直接 pull 最省事不用自己去转换 GGUFdocker compose exec ollama ollama pull glm4:9b如果你想要更小的glm4:9b大概 5 到 6 个 G显存 8G 以上能跑。拉完之后确认docker compose exec ollama ollama list会看到glm4:9b在列表里。想快速验证模型本身能不能答docker compose exec ollama ollama run glm4:9b 用一句话解释什么是向量数据库能正常吐字说明 Ollama 这一层没问题。这里提醒一句如果你之前按老教程自己用 llama.cpp 转 GGUF 再ollama create路径挂载很容易出错报no such file or directory直接用官方库的模型能省掉这一整段折腾。4. FastGPT OneAPI 的 compose 与模型配置4.1 拉取官方 compose 与 configFastGPT 官方提供了 pgvector 版本的 compose测试和中小规模最省事cd /opt/ai-stack/fastgpt curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml docker compose up -d起来之后 OneAPI 第一次连 MySQL 可能要重试等十秒重启一次sleep 10 docker restart oneapi4.2 在 OneAPI 里把 Ollama 配成渠道浏览器打开http://你的IP:3001默认账号root密码123456。进「渠道」→「添加新的渠道」类型选 OllamaBase URL 填http://ollama:11434注意这里用容器名因为 OneAPI 和 Ollama 在同一个 docker 网络里模型填glm4:9b。保存后点「测试」返回成功就说明 OneAPI 能连上 Ollama 了。如果你还想接 TaoToken 作为补充渠道就在同一个页面再加一个渠道类型选 OpenAI 兼容Base URL 填https://taotoken.net/api把在 https://taotoken.net/api-keys 生成的 Key 填进去。这样 FastGPT 里就能同时看到本地模型和云端模型按场景切换。4.3 FastGPT 的 config.json 模型配置项FastGPT 读的是config.json里的llmModels和vectorModels。找到 llmModels 数组加一项{ model: glm4:9b, name: chatglm-9b-local, maxContext: 8000, maxResponse: 2000, quoteMaxToken: 6000, maxTemperature: 1, charsPointsPrice: 0, censor: false, vision: false, datasetProcess: true, usedInClassify: true, usedInExtractFields: true, usedInToolCall: true, usedInQueryExtension: true, toolChoice: true, functionCall: false, defaultSystemChatPrompt: }model必须和 OneAPI 里填的模型名完全一致差一个字符都会报「找不到模型」。maxContext别超过模型实际上下文glm4:9b 给 8000 比较稳。改完重启docker compose restart fastgpt oneapi向量模型这块FastGPT 默认用text-embedding-ada-002如果你没有对应的 embedding 服务可以在 OneAPI 里也配一个或者换成 Ollama 的 embedding 模型比如nomic-embed-text然后在 config.json 的 vectorModels 里对应改掉。5. 验证一次完整的知识库问答链路配置完别急着建知识库先用一个最小动作验证链路。进 FastGPT 界面http://你的IP:3000新建一个应用模型选chatglm-9b-local直接在对话框里问一句你好请用一句话介绍你自己。如果模型正常回复说明 FastGPT → OneAPI → Ollama → chatglm 这条链路是通的。这一步很关键很多人知识库问答答非所问其实是模型链路根本没通却以为是检索的问题。链路通了之后再建知识库上传一个 PDF 或 txt选好向量模型等索引完成。然后在应用里关联这个知识库问一个只有文档里才有的问题比如文档里写了「本系统默认端口是 8899」你就问「本系统默认端口是多少」。如果回答出 8899说明检索 生成整条私有化问答链路跑通了。实测下来最容易出问题的是向量模型和对话模型用了不同的渠道导致检索到的内容和模型理解对不上。建议初期两个都用同一套稳定后再拆。6. 本篇常见报错排查报错一OneAPI 提示「找不到渠道」。多半是 OneAPI 第一次启动没连上 MySQLdocker restart oneapi重启一次基本能解决。如果还不行检查渠道里的 Base URL 是不是写成了localhost:11434容器之间要用服务名ollama。报错二FastGPT 里模型列表为空。检查config.json改完有没有重启 fastgpt以及model字段和 OneAPI 里的模型名是否一字不差。大小写敏感。报错三Ollama 容器起不来日志报 GPU 相关错误。说明 NVIDIA Container Toolkit 没装好先用 CPU 版本 compose 把流程跑通再回头修 GPU。报错四问答很慢第一次要等半分钟。这是模型没常驻显存确认OLLAMA_KEEP_ALIVE24h生效并且显存足够放下整个模型。显存不够会触发 CPU 回退速度断崖式下降。报错五知识库检索到了内容但回答不相关。先确认向量模型和对话模型是否匹配再检查切片大小默认 500 字符对中文偏大可以调到 300 左右试试。7. 后续怎么扩展这套私有化问答链路跑通之后扩展方向有几个。一是把 Ollama 换成更大的模型比如 glm4:9b 换成 32b只要显存够改一下 OneAPI 渠道里的模型名和 config.json 就行业务侧不用动。二是在 OneAPI 里加 TaoToken 渠道做云端兜底本地模型答不了的复杂问题切过去配置入口在 https://taotoken.net/console Key 在 https://taotoken.net/api-keys 生成。三是如果你要长期跑编码类或 Agent 类任务可以考虑 Coding Plan地址是 https://taotoken.net/coding-plan 配合本地模型做分工。整套东西的价值在于数据不出内网文档、问答记录都在你自己的磁盘上。docker compose 的好处是哪天要换机器把/opt/ai-stack整个目录拷过去docker compose up -d就能恢复模型和知识库都还在。
返回列表