Fastgpt部署和模型接入:用docker-compose与OneAPI打通TaoToken统一通道

📅 发布时间:2026/10/9 18:17:33
Fastgpt部署和模型接入:用docker-compose与OneAPI打通TaoToken统一通道
1. FastGPT 本地部署后模型接不上的真实场景FastGPT 这个项目玩过知识库的人基本都绕不开。它本身是一个开箱即用的知识库问答系统支持流程编排、数据集管理、多路召回前端界面也做得挺完整。但真正把它拉到本地用 docker-compose 跑起来之后很多人会卡在同一个地方模型接不进去。我见过太多人卡在这一步。FastGPT 容器起来了页面能打开账号能注册数据集也能建但一到配置模型就懵了。因为 FastGPT 自己不带模型它需要一个 OpenAI 兼容的接口来提供对话和向量能力。官方文档推荐用 OneAPI 做中转于是你又要去部署 OneAPI然后 OneAPI 里再配渠道渠道里再填各种厂商的 Key。一圈下来密钥散落在好几个地方切换模型要改配置测试连通性还得来回点。更麻烦的是多模型切换。今天想用 qwen-max 做对话明天想换成别的后天向量模型又要换一个。如果每个模型都单独配一个渠道、单独管一个 Key维护成本会随着模型数量线性上涨。而且很多厂商的接口地址、鉴权方式、参数命名都不完全一样OneAPI 虽然做了适配但你仍然要逐个渠道去填。这篇要解决的就是把这条链路收敛成一条统一通道。核心思路是FastGPT 通过 OneAPI 拿模型OneAPI 的 endpoint 指向 TaoToken 的统一 API 通道所有模型共用一套 Key 和一个 Base URL。这样你只需要在 OneAPI 里配一个渠道就能拿到对话、向量、甚至推理模型的全部能力。FastGPT 那边只需要加载 OneAPI 暴露出来的模型列表配置一次就完事。适合谁看如果你正在本地或内网部署 FastGPT需要接入多个模型但不想管理一堆密钥或者你已经跑通了 FastGPT 但模型配置总是报错这篇的步骤可以直接照着做。下面从 docker-compose 编排开始到 OneAPI 渠道配置再到 FastGPT 模型参数最后给验证请求的具体动作。2. TaoToken 统一通道在 FastGPT 链路里的位置先把架构说清楚不然后面配的时候容易乱。FastGPT 的模型接入分两类一类是对话模型llm负责问答、推理、工具调用另一类是向量模型embedding负责把文本转成向量存进向量库。这两类模型在 FastGPT 里是分开配置的但它们的请求最终都走同一个出口——OneAPI。OneAPI 在这里的角色是「模型网关」。它对外暴露一个 OpenAI 兼容的/v1/chat/completions和/v1/embeddings接口FastGPT 只管往这个接口发请求不关心背后是哪个厂商。OneAPI 内部通过「渠道」来决定请求转发到哪里。传统做法是每个厂商配一个渠道比如阿里云百炼一个渠道、其他厂商一个渠道每个渠道填各自的 Key 和 Base URL。现在把 OneAPI 的渠道 endpoint 改成 TaoToken 的统一通道情况就变了。TaoToken 提供的是一个聚合后的 OpenAI 兼容接口Base URL 是https://taotoken.net/api你用同一个 Key 就能调用它支持的多个模型。也就是说OneAPI 里只需要配一个渠道类型选 OpenAIBase URL 填 TaoToken 的地址Key 填你在 TaoToken 拿到的 Key然后把模型列表填进去。这样 FastGPT 请求 OneAPIOneAPI 请求 TaoTokenTaoToken 再路由到具体模型。这样做的好处很直接。第一密钥只有一份存在 OneAPI 的渠道配置里不用在 FastGPT 里再填一遍。第二模型切换只需要改 OneAPI 渠道里的模型列表FastGPT 那边重新加载一次就行。第三TaoToken 的接口是 OpenAI 兼容的OneAPI 不需要做特殊适配按标准 OpenAI 渠道配就能通。需要提前准备的东西一台能跑 docker 和 docker-compose 的机器Linux 或 macOS 都行Windows 用 WSL2FastGPT 的 docker-compose 文件OneAPI 的容器以及一个 TaoToken 的 API Key。Key 在 TaoToken 控制台的 API Keys 页面创建地址是https://taotoken.net/console/api-keys。创建的时候注意保存页面关闭后 Key 不会再次完整显示。如果你还没决定用哪些模型可以先想好两类一个对话模型比如 qwen-max 这类一个向量模型比如 text-embedding-v3 这类。向量模型的维度要记下来FastGPT 配置里要填填错了向量库会报维度不匹配。3. docker-compose 编排 FastGPT 与 OneAPI 的可复制配置这一节给可直接复制的配置。先建目录再写 compose 文件然后启动。目录结构建议这样把 FastGPT 和 OneAPI 的数据分开存方便备份和排查mkdir -p /home/tech/dockerData/fastgpt mkdir -p /home/tech/dockerData/oneapi cd /home/tech/dockerData/fastgptFastGPT 官方提供了 pgvector 版本的 compose 文件直接下载curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml下载下来之后需要改几个地方。原文件里 FastGPT 的模型配置指向的是它自带的 OneAPI 服务我们要确保 OneAPI 的地址和端口对得上。下面是一个整合后的 compose 片段把 FastGPT、OneAPI、Postgres带 pgvector、MongoDB 都编排在一起。你可以直接替换原文件里的对应部分version: 3.3 services: pg: image: pgvector/pgvector:0.7.0-pg15 container_name: fastgpt-pg restart: always ports: - 5432:5432 environment: - POSTGRES_USERusername - POSTGRES_PASSWORDpassword - POSTGRES_DBpostgres volumes: - ./pg/data:/var/lib/postgresql/data mongo: image: mongo:5.0.18 container_name: fastgpt-mongo restart: always ports: - 27017:27017 environment: - MONGO_INITDB_ROOT_USERNAMEusername - MONGO_INITDB_ROOT_PASSWORDpassword volumes: - ./mongo/data:/data/db oneapi: image: justsong/one-api:latest container_name: fastgpt-oneapi restart: always ports: - 3001:3000 environment: - TZAsia/Shanghai volumes: - /home/tech/dockerData/oneapi:/data depends_on: - mongo fastgpt: image: ghcr.io/labring/fastgpt:latest container_name: fastgpt restart: always ports: - 3000:3000 environment: - MONGODB_URImongodb://username:passwordmongo:27017/fastgpt?authSourceadmin - PG_URLpostgresql://username:passwordpg:5432/postgres - DEFAULT_ROOT_PSW123456 - OPENAI_BASE_URLhttp://oneapi:3000/v1 - CHAT_API_KEYsk-xxxxxx - FILE_TOKEN_KEYfiletoken volumes: - ./config.json:/app/data/config.json depends_on: - mongo - pg - oneapi几个关键点说明一下。OPENAI_BASE_URL指向的是 OneAPI 容器在 docker 网络里的地址也就是http://oneapi:3000/v1不是宿主机的 localhost。CHAT_API_KEY这里先随便填一个后面在 OneAPI 里创建令牌后替换。OneAPI 的端口映射是3001:3000因为 FastGPT 已经占了宿主机的 3000所以 OneAPI 在宿主机上用 3001 访问。启动容器docker-compose up -d启动后等 10 秒左右OneAPI 第一次启动可能会因为连 MongoDB 的顺序问题需要重启一次。这是已知现象重启一下就好docker restart fastgpt-oneapi重启完检查容器状态docker ps应该能看到四个容器都在运行。如果 OneAPI 反复重启看日志docker logs fastgpt-oneapi --tail 50日志里如果出现连不上 Mongo 的报错确认mongo容器的用户名密码和 OneAPI 环境变量里的一致。OneAPI 默认用 SQLite 也行但既然 compose 里已经有 Mongo直接让它用 Mongo 更稳。接下来进 OneAPI 配置渠道。浏览器打开http://你的机器IP:3001默认账号是root密码是123456。第一次登录会要求改密码改完重新登录。进「渠道」页面点「添加新的渠道」。类型选「OpenAI」名称随便写比如taotoken。关键在「代理」和「Base URL」这里。Base URL 填https://taotoken.net/api注意不要带/v1OneAPI 会自动补。密钥填你在 TaoToken 创建的 API Key。模型列表填你要用的模型比如qwen-max,text-embedding-v3填完保存。然后去「令牌」页面创建一个令牌这个令牌是给 FastGPT 用的。创建后复制出来替换 compose 文件里 FastGPT 的CHAT_API_KEY然后重启 FastGPTdocker restart fastgpt到这里链路就通了FastGPT → OneAPI令牌鉴权→ TaoToken统一 Key→ 具体模型。4. 验证请求与 FastGPT 模型参数配置配置完不能只看页面要实际发请求验证。分两步先验证 OneAPI 到 TaoToken 通不通再验证 FastGPT 能不能加载模型。先测 OneAPI 的接口。用 curl 直接打 OneAPI 的 chat 接口带上刚才创建的令牌curl http://localhost:3001/v1/chat/completions \ -H Authorization: Bearer 你的OneAPI令牌 \ -H Content-Type: application/json \ -d { model: qwen-max, messages: [{role: user, content: 你好回复一个字}], max_tokens: 10 }如果返回里有choices字段和内容说明 OneAPI 到 TaoToken 这条链路是通的。如果报 401检查令牌是否正确、渠道是否启用。如果报模型不存在检查渠道里的模型列表有没有拼错。再测向量接口curl http://localhost:3001/v1/embeddings \ -H Authorization: Bearer 你的OneAPI令牌 \ -H Content-Type: application/json \ -d { model: text-embedding-v3, input: 测试文本 }返回里应该有data数组每个元素带embedding向量。记下向量的维度后面 FastGPT 配置要用。然后进 FastGPT 页面地址是http://你的机器IP:3000默认账号root密码123456。进「账号」→「模型提供商」找到 OpenAI 那一栏点「编辑」。Base URL 填http://oneapi:3000/v1密钥填 OneAPI 的令牌。保存后点「模型测试」如果显示成功说明 FastGPT 能连上 OneAPI。接下来配置模型列表。FastGPT 需要一个config.json来定义每个模型的参数。这个文件在 compose 里挂载到了./config.json。下面是一个可用的配置片段包含一个对话模型和一个向量模型[ { model: qwen-max, metadata: { model: qwen-max, name: qwen-max, maxContext: 32000, maxResponse: 8000, quoteMaxToken: 60000, maxTemperature: 1, vision: false, toolChoice: true, functionCall: false, defaultSystemChatPrompt: , datasetProcess: true, usedInClassify: true, customCQPrompt: , usedInExtractFields: true, usedInQueryExtension: true, customExtractPrompt: , usedInToolCall: true, defaultConfig: {}, fieldMap: {}, type: llm, showTopP: true, showStopSign: true, responseFormatList: [text, json_object], provider: Qwen, isActive: true, requestUrl: , requestAuth: , reasoning: false } }, { model: text-embedding-v3, metadata: { model: text-embedding-v3, name: text-embedding-v3, defaultToken: 512, maxToken: 8000, defaultConfig: { dimensions: 1024 }, type: embedding, provider: OpenAI, isActive: true, charsPointsPrice: 0, normalization: false, requestUrl: , requestAuth: } } ]几个参数要重点核对。maxContext是模型的最大上下文长度填小了会截断长文本填大了可能超出模型实际能力。maxResponse是单次回复的最大 token 数。向量模型的dimensions必须和实际返回的向量维度一致text-embedding-v3 默认是 1024如果你在 TaoToken 那边调整过维度这里要同步改。type字段区分 llm 和 embedding不能填错。改完config.json后重启 FastGPTdocker restart fastgpt然后进 FastGPT 的「模型提供商」页面应该能看到 qwen-max 和 text-embedding-v3 出现在列表里。点「测试」逐个验证对话模型测试会发一条简单消息向量模型测试会检查维度。最后做一个端到端验证在 FastGPT 里新建一个知识库上传一个小文本文件选择 text-embedding-v3 作为向量模型等索引完成。然后新建一个应用选择 qwen-max 作为对话模型关联刚才的知识库问一个和文件内容相关的问题。如果模型能引用知识库内容回答整条链路就完全打通了。5. 常见报错排查401、local proxy failed、reading choices这一节列几个实际部署中高频出现的报错以及对应的排查方向。这些报错我都在不同环境里遇到过按顺序排查基本能定位。报错一401 Unauthorized这个最常见。FastGPT 或 OneAPI 返回 401说明鉴权没过。分两种情况如果是 FastGPT 调 OneAPI 报 401检查 FastGPT 的CHAT_API_KEY和 OneAPI 里创建的令牌是否一致注意令牌有前缀sk-复制的时候别漏。如果是 OneAPI 调 TaoToken 报 401检查渠道里的 Key 是否正确以及 Key 是否还有效。TaoToken 的 Key 在控制台可以查看状态如果被禁用或额度耗尽也会返回 401。还有一种隐蔽情况OneAPI 渠道里 Base URL 填成了https://taotoken.net/api/v1OneAPI 又自动补了一次/v1变成/api/v1/v1路径不对也可能返回 401 或 404。正确填法是https://taotoken.net/api不带/v1。报错二local proxy failed这个报错通常出现在 OneAPI 的渠道测试里。意思是 OneAPI 尝试连接上游地址失败了。先确认容器网络能不能通外网docker exec -it fastgpt-oneapi ping taotoken.net如果 ping 不通检查宿主机的 DNS 和网络配置。如果 ping 通但渠道测试还是失败检查 Base URL 有没有多余空格或者是不是用了 https 但容器里没有对应的 CA 证书。OneAPI 的日志会记录具体的连接错误docker logs fastgpt-oneapi --tail 100 | grep -i error日志里如果出现dial tcp或connection refused基本就是地址或端口问题。报错三reading choices 相关错误FastGPT 报reading choices或Cannot read properties of undefined (reading choices)说明它期望的响应结构里没有choices字段。这通常是 OneAPI 返回了错误信息但 FastGPT 按正常响应去解析。根因在 OneAPI 到 TaoToken 这一段。去 OneAPI 的「日志」页面看最近的请求记录找到对应的错误详情。常见原因是模型名称不匹配——FastGPT 请求的模型名在 OneAPI 渠道的模型列表里不存在OneAPI 返回了错误FastGPT 解析失败。解决办法是核对 FastGPT 的config.json里的model字段和 OneAPI 渠道里的模型列表是否完全一致大小写、连字符都要对上。报错四向量维度不匹配这个报错出现在知识库索引阶段提示维度不一致。原因是 FastGPT 配置的dimensions和实际返回的向量维度不同。去 OneAPI 日志里看 embedding 请求的响应确认实际维度然后改config.json里的dimensions重启 FastGPT重新建知识库索引。已经建好的索引如果维度不对需要删掉重建。报错五OneAPI 渠道测试通过但 FastGPT 测试失败这种情况通常是 FastGPT 的 Base URL 配错了。FastGPT 容器里访问 OneAPI 要用容器名oneapi不是localhost。确认OPENAI_BASE_URL是http://oneapi:3000/v1。如果 FastGPT 和 OneAPI 不在同一个 docker 网络里需要手动指定 network或者用宿主机的 IP 加映射端口。排查的时候养成看日志的习惯。FastGPT 的日志docker logs fastgpt --tail 100OneAPI 的日志docker logs fastgpt-oneapi --tail 100两个日志对照着看基本能定位到是哪一段出的问题。6. 统一通道后的模型管理与接入入口链路打通之后日常维护其实很轻。所有模型的增删改都在 OneAPI 的渠道里操作FastGPT 那边只需要在config.json里同步模型定义。如果你要加一个新模型步骤是在 TaoToken 确认该模型可用在 OneAPI 渠道的模型列表里加上模型名在 FastGPT 的config.json里加一段对应的 metadata重启 FastGPT。不需要动 FastGPT 的密钥配置也不需要重新配渠道。这种收敛带来的一个实际好处是你可以把 OneAPI 的渠道配置和 FastGPT 的config.json都纳入版本管理。渠道配置在 OneAPI 的数据库里可以通过它的导出功能备份config.json本身就是文件直接提交到 git 就行。换机器部署的时候把这两个配置恢复改一下环境变量里的地址就能快速拉起一套一样的环境。如果你后面要接 Claude Code 或者做更复杂的 Agent 编排TaoToken 的 Coding Plan 也走同一套 Key 体系地址在https://taotoken.net/coding-plan。模型对话的调试入口在https://taotoken.net/chat可以先用它确认某个模型是否可用再去 OneAPI 里配。接入文档在https://taotoken.net/doc里面有各语言的调用示例和参数说明。API Key 的管理入口是https://taotoken.net/console/api-keys建议给 FastGPT 单独创建一个 Key方便按项目区分用量。如果 Key 泄露或者要轮换在控制台禁用旧 Key、创建新 Key然后更新 OneAPI 渠道里的密钥重启 OneAPI 容器即可FastGPT 那边不用动。最后说一个实际踩过的坑。OneAPI 的渠道里有一个「模型重定向」功能如果你在 TaoToken 那边用的模型名和 OneAPI 里填的不一样可以用重定向做映射。但 FastGPT 的config.json里填的必须是 OneAPI 暴露出来的模型名也就是重定向后的名字。这个顺序别搞反否则会出现 OneAPI 测试通过但 FastGPT 找不到模型的情况。配置的时候按「TaoToken 模型名 → OneAPI 渠道模型名 → FastGPT config 模型名」这条链逐段核对基本不会出错。