尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

2024年7月手把手教你搭建,企业级AI大模型知识库问答系统:Docker+Ollama+FastGPT 配 TaoToken 统一 Key 通道

发布时间:2026/9/29 21:28:46

资讯中心
01
ARTICLE

2024年7月手把手教你搭建,企业级AI大模型知识库问答系统:Docker+Ollama+FastGPT 配 TaoToken 统一 Key 通道

2024年7月手把手教你搭建,企业级AI大模型知识库问答系统:Docker+Ollama+FastGPT 配 TaoToken 统一 Key 通道
1. 企业内网知识库问答为什么我最后选了 Docker Ollama FastGPT企业里做知识库问答最头疼的从来不是模型效果而是三件事数据不能出内网、模型要能换、部署要能复现。我见过太多团队一开始用在线 API 跑得挺爽等到要把合同、工单、内部文档喂进去的时候安全部门一句「数据出境」就直接卡死。所以这套方案的核心思路很明确推理跑在内网编排跑在容器里模型调用走统一 Key 通道。FastGPT 负责知识库的切片、向量化、检索和对话编排Ollama 负责在本机或内网服务器上跑大语言模型和 Embedding 模型Docker 把这一堆依赖打包成可复制的服务。三者组合起来你得到的是一个能离线运行、能换模型、能对外只暴露一个端口的问答系统。那 TaoToken 在这里扮演什么角色简单说它是模型调用的统一入口。你可以把它理解成一个「模型网关」FastGPT 不需要关心后面接的是本地 Ollama、云端大模型还是别的什么只需要按 OpenAI 兼容格式发请求由 TaoToken 统一管理 Key、路由和额度。这样做的直接好处是本地模型和云端模型可以混用——简单问题走本地省成本复杂问题走云端保效果而 FastGPT 侧的配置几乎不用改。这套东西适合谁适合有内网部署需求、又不想被单一模型绑死的团队适合想先本地跑通再逐步接云端的个人开发者也适合需要给客户交付一套「能演示、能扩展」的问答系统的同学。下面我从零开始把 docker-compose 骨架、FastGPT 环境变量、config 配置和验证步骤全部给出来你照着改改就能跑。2. 前置准备TaoToken 统一 Key 通道怎么开在动手写 compose 之前先把模型调用这条链路理清楚。FastGPT 本身不直接跟 Ollama 对话它通过一个 OpenAI 兼容的接口层去调模型。你可以用 OneAPI 做这层也可以直接用 TaoToken 作为统一通道。我这边推荐用 TaoToken原因是它把 Key 管理、模型路由和用量统计放在了一起后面你要加云端模型或者换模型只改一处就行。第一步打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并登录。进去之后先别急着建应用先到控制台把基础信息看一下。第二步进入 API Keys 页面创建一个 Key。这个 Key 就是你后面填到 FastGPT 环境变量里的凭证。创建的时候建议按用途命名比如fastgpt-kb-local方便以后区分是哪个系统在用。地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentfastgpt_kbutm_campaignrewrite 。第三步确认你要用的模型。如果你打算本地 Ollama 跑 qwen 系列那在 TaoToken 侧配置一个指向本地 Ollama 的通道即可如果你还想同时接云端模型做兜底就在模型列表里把对应模型加上。模型对话的调试入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentfastgpt_kbutm_campaignrewrite 你可以先在那里发一条消息确认 Key 和模型都通。第四步记下 API 地址。TaoToken 的 API 入口是 https://taotoken.net/api 这个地址后面会作为 FastGPT 的OPENAI_BASE_URL。注意这里不要加多余的路径FastGPT 会自己拼/v1/chat/completions。提示Key 只显示一次创建后立刻复制保存。如果你是在团队里用建议给每个环境单独建 Key方便排查问题时定位是哪个环节的调用出了状况。到这里统一 Key 通道就准备好了。接下来进入 Docker 编排部分。3. 可复制的 docker-compose 骨架Ollama FastGPT 依赖服务这一节是全文最核心的部分。我直接把一份可用的 compose 骨架拆开讲你复制过去改几个变量就能起。整体结构是Ollama 跑在宿主机上也可以用容器但宿主机性能更好FastGPT 及其依赖MongoDB、PostgreSQL、Redis、MinIO跑在 Docker 里TaoToken 作为模型网关。先建目录mkdir -p /opt/kbqa cd /opt/kbqa然后创建docker-compose.ymlversion: 3.8 services: mongo: image: mongo:6.0 container_name: kbqa-mongo restart: always ports: - 27017:27017 environment: - MONGO_INITDB_ROOT_USERNAMEroot - MONGO_INITDB_ROOT_PASSWORDkbqa_mongo_2024 volumes: - ./data/mongo:/data/db networks: - kbqa-net pg: image: pgvector/pgvector:pg16 container_name: kbqa-pg restart: always ports: - 5432:5432 environment: - POSTGRES_USERkbqa - POSTGRES_PASSWORDkbqa_pg_2024 - POSTGRES_DBfastgpt volumes: - ./data/pg:/var/lib/postgresql/data networks: - kbqa-net redis: image: redis:7-alpine container_name: kbqa-redis restart: always ports: - 6379:6379 command: redis-server --requirepass kbqa_redis_2024 volumes: - ./data/redis:/data networks: - kbqa-net minio: image: minio/minio:latest container_name: kbqa-minio restart: always ports: - 9000:9000 - 9001:9001 environment: - MINIO_ROOT_USERkbqa_minio - MINIO_ROOT_PASSWORDkbqa_minio_2024 command: server /data --console-address :9001 volumes: - ./data/minio:/data networks: - kbqa-net fastgpt: image: ghcr.io/labring/fastgpt:latest container_name: kbqa-fastgpt restart: always ports: - 3000:3000 depends_on: - mongo - pg - redis - minio environment: - DEFAULT_ROOT_PSW1234 - OPENAI_BASE_URLhttps://taotoken.net/api - CHAT_API_KEYsk-你的TaoTokenKey - DB_MAX_LINK30 - TOKEN_KEYkbqa_token_key_2024 - FILE_TOKEN_KEYkbqa_file_token_2024 - MONGODB_URImongodb://root:kbqa_mongo_2024mongo:27017/fastgpt?authSourceadmin - PG_URLpostgresql://kbqa:kbqa_pg_2024pg:5432/fastgpt - REDIS_URLredis://default:kbqa_redis_2024redis:6379 - MINIO_ENDPOINTminio - MINIO_PORT9000 - MINIO_ACCESS_KEYkbqa_minio - MINIO_SECRET_KEYkbqa_minio_2024 - MINIO_BUCKETfastgpt - MINIO_PUBLIC_BUCKETfastgpt-public volumes: - ./config.json:/app/data/config.json networks: - kbqa-net networks: kbqa-net: driver: bridge这份骨架里几个关键点我单独说一下。pgvector/pgvector:pg16这个镜像自带向量扩展FastGPT 做知识库检索要靠它别用普通 postgres 镜像。OPENAI_BASE_URL填 TaoToken 的 API 地址CHAT_API_KEY填你刚才创建的 Key。MinIO 的两个 bucket 名字要和 config.json 里保持一致否则上传文件会报错。Ollama 我建议直接装在宿主机上不放进 compose。原因是模型文件大放容器里每次重建都要重新拉而且宿主机跑推理性能更稳。装好之后执行ollama pull qwen2.5:7b ollama pull shaw/dmeta-embedding-zh拉完之后用ollama list确认两个模型都在。然后测试一下 Ollama 的接口curl http://localhost:11434/api/chat -d { model: qwen2.5:7b, messages: [{role: user, content: 你是谁}], stream: false }能返回 JSON 就说明本地推理通了。Embedding 模型也测一下curl http://localhost:11434/api/embeddings -d { model: shaw/dmeta-embedding-zh, prompt: 天空是灰色的 }返回里带embedding数组就正常。这两步过了再启动 FastGPT 那套容器。4. FastGPT 环境变量与 config.json 配置片段compose 里的环境变量只是第一层FastGPT 真正决定「用哪个模型」的是config.json。这个文件挂载到容器里的/app/data/config.json你改完重启容器就生效。先创建config.json{ feConfigs: { lafEnv: https://laf.dev }, systemEnv: { vectorMaxProcess: 15, qaMaxProcess: 15, pgHNSWEfSearch: 100 }, llmModels: [ { model: qwen2.5:7b, name: Qwen2.5-7B-本地, maxContext: 32000, maxResponse: 4000, quoteMaxToken: 30000, maxTemperature: 1.2, vision: false, defaultSystemChatPrompt: }, { model: gpt-4o-mini, name: GPT-4o-mini-云端兜底, maxContext: 128000, maxResponse: 4000, quoteMaxToken: 120000, maxTemperature: 1, vision: true } ], vectorModels: [ { model: shaw/dmeta-embedding-zh, name: Dmeta-Embedding-中文, defaultToken: 700, maxToken: 3000 } ], reRankModels: [], audioSpeechModels: [], whisperModel: {} }这里llmModels里我放了两个模型本地 qwen2.5 和云端 gpt-4o-mini。它们都通过 TaoToken 这个统一通道走FastGPT 侧不需要知道哪个是本地哪个是云端只需要知道模型名。vectorModels里放的是 Embedding 模型名字必须和ollama list里显示的完全一致差一个字符都会报「模型不存在」。环境变量和 config 的对应关系我用表格列一下方便你对照排查配置项位置作用常见错误OPENAI_BASE_URL环境变量模型调用入口多写/v1导致 404CHAT_API_KEY环境变量TaoToken Key复制时带空格modelconfig.json模型标识与 Ollama 名称不一致nameconfig.json前端显示名可自定义不影响调用MINIO_BUCKET环境变量文件存储桶与 MinIO 实际桶名不符改完 config 后重启 FastGPTdocker compose restart fastgpt然后看日志确认没有报错docker compose logs -f fastgpt日志里出现Server is running之类的字样就说明服务起来了。5. 验证问答链路从上传文档到拿到回答服务起来之后别急着建复杂应用先用最小链路验证一遍。打开浏览器访问http://localhost:3000用户名root密码1234就是 compose 里DEFAULT_ROOT_PSW设的值。登录后先建一个知识库。左侧菜单进「知识库」新建一个选择我们配置的 Embedding 模型Dmeta-Embedding-中文。然后上传一个测试文档比如一份产品说明的 txt 或 pdf。上传后系统会自动切片、向量化这个过程会调用 Ollama 的 embedding 接口你可以在 Ollama 那边看到请求日志。等索引状态变成「已就绪」再建一个应用。进「应用」新建一个「简易对话」类型的应用在模型配置里选Qwen2.5-7B-本地关联刚才建的知识库。保存后进入对话界面问一个只有文档里才有的问题比如文档里写了「保修期是 36 个月」你就问「保修期多久」。如果回答里带出了「36 个月」并且有引用来源说明整条链路通了FastGPT 检索 → 向量模型 → 大模型生成 → TaoToken 通道 → 返回。如果回答是空的或者报错按下一节的排查顺序来。再补一个接口层的验证直接打 TaoToken 的对话接口确认 Key 本身没问题curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoTokenKey \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 用一句话说明知识库的作用}], stream: false }这个请求通了说明 Key 和通道没问题问题就只可能在 FastGPT 或 Ollama 侧。6. 本篇常见错排查模型不存在、连接超时、向量维度不匹配错误一Model not found或model does not exist最常见的原因是 config.json 里的模型名和 Ollama 实际拉下来的名字不一致。执行ollama list看准确名称比如你拉的是qwen2.5:7bconfig 里就不能写qwen:7b。Embedding 模型同理shaw/dmeta-embedding-zh要一字不差。改完 config 记得重启 fastgpt 容器。错误二FastGPT 容器访问不到宿主机 Ollama如果你把 Ollama 装在宿主机而 FastGPT 在容器里容器默认是访问不到localhost:11434的。解决办法是在 compose 里给 fastgpt 服务加一行extra_hosts: - host.docker.internal:host-gateway然后在 config 或通道配置里把 Ollama 地址写成http://host.docker.internal:11434。Linux 下如果host-gateway不生效就换成宿主机的内网 IP比如http://192.168.1.100:11434同时确认 Ollama 启动时监听了0.0.0.0。错误三向量维度不匹配这个报错通常长这样expected 1024 dimensions, not 768。原因是知识库创建时用的 Embedding 模型和后来换的模型维度不一样。Dmeta-embedding-zh 是 1024 维如果你中途换成了别的 768 维模型已有向量就对不上。解决办法是重建知识库或者把 config 里的 vectorModels 固定成同一个模型别混用。错误四上传文件后一直「索引中」先看 fastgpt 日志有没有报错再看 Ollama 那边有没有收到 embedding 请求。如果 Ollama 没收到说明 FastGPT 的向量模型配置没生效如果收到了但很慢是模型本身推理慢7B 模型在 CPU 上跑确实会慢可以考虑换更小的模型或者加 GPU。错误五TaoToken 返回 401检查CHAT_API_KEY有没有多余空格Key 有没有过期或被删。可以先用第 5 节的 curl 命令单独测 Key排除是 FastGPT 配置问题还是 Key 本身问题。7. 后续扩展与统一通道的长期用法跑通最小链路之后这套系统还有不少可以扩展的地方。比如你可以把本地 qwen2.5 作为默认模型处理日常问答把云端模型配成「复杂问题兜底」在 FastGPT 的应用里按场景切换。因为所有模型都走 TaoToken 这一个通道你不需要在 FastGPT 里维护多套 Key 和地址换模型只改 config.json 里的模型名。如果你后面要做长期编码或者 Agent 类的应用可以了解一下 Coding Plan 相关的入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentfastgpt_kbutm_campaignrewrite 它更适合需要持续调用、按量管理的场景。日常调试模型通不通还是用模型对话页面最快 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentfastgpt_kbutm_campaignrewrite 。Key 的管理和新建在控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentfastgpt_kbutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentfastgpt_kbutm_campaignrewrite 遇到接口格式问题先翻文档比瞎试快。最后说一个我踩过的坑config.json 改完之后光重启 fastgpt 容器有时候不够因为 FastGPT 有缓存。稳妥做法是docker compose down再docker compose up -d让配置彻底重新加载。另外 MinIO 的桶如果第一次没自动创建进http://localhost:9001用 compose 里的账号密码手动建两个桶名字和 config 里对上能省掉很多「文件上传失败」的排查时间。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。