尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Fastgpt知识库接入oneapi和自定义大模型:TaoToken统一Key配置与docker-compose验证

Fastgpt知识库接入oneapi和自定义大模型:TaoToken统一Key配置与docker-compose验证 1. FastGPT 知识库接入自定义大模型时到底卡在哪FastGPT 是一个开箱即用的知识库问答系统能把你自己的文档、网页、FAQ 灌进去然后通过大模型来回答特定领域的问题。它适合做专属 AI 客服、内部知识助手、产品文档问答这类场景。但很多人第一次用 docker-compose 部署完 FastGPT 之后会发现一个尴尬的事系统自带的模型只有那么几个想接自己的大模型或者第三方模型服务根本不知道从哪下手。问题的核心在于 FastGPT 本身不直接管理各种大模型的鉴权它把这件事交给了 OneAPI 来做。OneAPI 是一个模型聚合网关负责把不同厂商的模型统一成 OpenAI 兼容的接口格式FastGPT 只需要知道 OneAPI 的地址和一个 Key就能调用后面挂着的所有模型。所以整条链路是FastGPT → OneAPI → 实际模型服务。你自定义的大模型要能被 FastGPT 用上必须先在 OneAPI 里配好渠道再在 FastGPT 的配置文件里声明这个模型的存在。我见过太多人卡在两个地方。第一个是 docker-compose 里的环境变量没改对FastGPT 压根没连上 OneAPI表现就是对话一直转圈或者直接报鉴权失败。第二个是 config.json 里加了模型定义但字段没填全尤其是datasetProcess、usedInClassify这些布尔值只要有一个该为 true 的没设知识库索引就会报错说没有可用的处理模型。这两个坑我在不同环境里都踩过下面会把每一步拆开讲清楚。还有一个容易被忽略的点知识库问答和普通对话用的是不同的模型能力。普通对话只需要一个 chat 模型但知识库需要 embedding 模型来做向量索引还需要一个 datasetProcess 模型来做 QA 拆分。如果你只配了 chat 模型没配 embedding知识库创建的时候就会卡在索引阶段。所以这篇内容会同时覆盖对话模型、索引模型和文本处理模型的配置。TaoToken 在这里的角色是提供一个统一的 Key 和兼容 OpenAI 的接口地址你可以把它理解成 OneAPI 上游的一个模型来源。OneAPI 里添加渠道的时候把 TaoToken 的 API 地址和 Key 填进去就能把模型挂到 FastGPT 可用的模型列表里。这样你不需要在每个模型厂商那里分别申请 Key一个统一 Key 就能管住后面所有模型的调用。2. TaoToken 前置准备与 OneAPI 渠道配置在动 FastGPT 的配置文件之前先把上游的模型来源准备好。TaoToken 提供的是 OpenAI 兼容接口Base URL 是https://taotoken.net/api你需要先在控制台创建一个 API Key。这个 Key 后面会填到 OneAPI 的渠道配置里OneAPI 再用它去调用实际的模型。登录 TaoToken 控制台之后进 API Keys 页面创建一个新的 Key复制出来备用。注意这个 Key 只在创建的时候完整显示一次关掉页面就看不到了所以先存到安全的地方。如果你还没有账号可以直接用官网入口注册流程很快不需要绑卡就能拿到试用额度。接下来是 OneAPI 这边的操作。假设你已经通过 docker-compose 把 OneAPI 跑起来了默认端口是 3000浏览器打开http://你的服务器IP:3000登录。第一次登录用 root 账号密码是 123456进去之后第一件事就是改密码这个不用多说。登录之后点左侧菜单的「渠道」然后点「添加新的渠道」。这里有几个关键字段要填字段填写内容说明类型OpenAI因为 TaoToken 是 OpenAI 兼容接口名称taotoken随便起自己能认出来就行分组default保持默认FastGPT 走 default 分组模型手动输入你要用的模型名比如 gpt-4o、claude-3-5-sonnet 等密钥你刚才创建的 TaoToken Key以 sk- 开头代理留空不需要额外代理地址https://taotoken.net/api注意结尾不要加 /v1模型那一栏需要手动输入OneAPI 不会自动拉取模型列表。你输入什么模型名FastGPT 那边就要对应写什么模型名两边必须完全一致大小写敏感。比如你在 OneAPI 渠道里写了gpt-4oFastGPT 的 config.json 里 model 字段也必须是gpt-4o写成GPT-4o就会报「无所用模型」。填完之后点「提交」然后回到渠道列表点一下刚添加的渠道右边的「测试」按钮。如果显示绿色成功说明 OneAPI 已经能通过 TaoToken 调通模型了。如果报错先检查 Key 有没有复制完整、地址有没有多写/v1、模型名是不是 TaoToken 支持的。这一步通了后面的 FastGPT 配置才有意义。注意OneAPI 的渠道测试走的是/v1/chat/completionsTaoToken 的 Base URL 填https://taotoken.net/api就行OneAPI 会自动拼接路径。如果你填成https://taotoken.net/api/v1就会变成/api/v1/v1/chat/completions直接 404。3. docker-compose 环境变量与 config.json 可复制配置现在进入 FastGPT 的部署目录。假设你的 FastGPT 是用 docker-compose 部署的目录结构大概是这样的fastgpt/ ├── docker-compose.yml ├── config.json └── pg/先改docker-compose.yml。找到 fastgpt 服务下面的 environment 段里面有几个和 OneAPI 对接相关的变量。你需要确保这几个值指向你的 OneAPI 实例services: fastgpt: image: ghcr.io/labring/fastgpt:latest environment: - OPENAI_BASE_URLhttp://oneapi:3000/v1 - CHAT_API_KEYsk-你的OneAPI令牌 - ONEAPI_URLhttp://oneapi:3000 volumes: - ./config.json:/app/data/config.json这里解释一下。OPENAI_BASE_URL是 FastGPT 调用对话模型时走的地址指向 OneAPI 的容器内地址。如果你 OneAPI 和 FastGPT 在同一个 docker-compose 网络里直接用服务名oneapi加端口 3000 就行。CHAT_API_KEY是 OneAPI 里生成的令牌不是 TaoToken 的 Key注意区分。ONEAPI_URL是 FastGPT 用来查询 OneAPI 模型列表的地址有些版本会用到。OneAPI 的令牌需要在 OneAPI 后台的「令牌」页面创建。点「添加新的令牌」名称随便填额度可以设成无限分组选 default提交后复制生成的sk-开头的字符串填到上面CHAT_API_KEY的位置。改完 docker-compose 之后还要改config.json。这个文件是 FastGPT 的模型声明文件里面定义了哪些模型可用、每个模型的能力边界。默认的 config.json 只有几个模型你需要把自己要用的模型加进去。下面是一个完整的可复制片段包含了对话模型和 embedding 模型{ feConfigs: { lafEnv: https://laf.dev }, systemEnv: { vectorMaxProcess: 15, qaMaxProcess: 15, pgHNSWEfSearch: 100 }, llmModels: [ { model: gpt-4o, name: gpt-4o, avatar: /imgs/model/openai.svg, maxContext: 128000, maxResponse: 16000, quoteMaxToken: 120000, maxTemperature: 1.2, charsPointsPrice: 0, censor: false, vision: true, datasetProcess: true, usedInClassify: true, usedInExtractFields: true, usedInToolCall: true, usedInQueryExtension: true, toolChoice: true, functionCall: false, customCQPrompt: , customExtractPrompt: , defaultSystemChatPrompt: , defaultConfig: {} } ], vectorModels: [ { model: text-embedding-3-small, name: text-embedding-3-small, avatar: /imgs/model/openai.svg, price: 0.1, defaultToken: 500, maxToken: 8000 } ] }llmModels数组里放对话模型vectorModels数组里放索引模型。每个对话模型必须至少有一个datasetProcess为 true否则知识库创建时会报「没有可用的数据处理模型」。usedInClassify、usedInExtractFields、usedInToolCall、usedInQueryExtension这几个也建议至少一个为 true不然对应的功能会不可用。如果你要加多个模型直接在llmModels数组里追加对象就行注意 JSON 逗号别写错。改完 config.json 之后执行重启docker compose down docker compose up -d等容器起来之后打开 FastGPT 的 Web 界面进「模型配置」页面应该能看到你刚加的模型出现在列表里。如果没看到先检查 config.json 的 JSON 格式是否合法可以用python -m json.tool config.json验证一下。4. 验证请求与知识库问答连通性配置改完重启之后不要急着建知识库先做一次最简单的对话验证。打开 FastGPT 的聊天界面新建一个对话在模型选择那里选你刚加的gpt-4o然后发一句「你好请回复 ok」。如果正常返回说明 FastGPT → OneAPI → TaoToken → 模型这条链路是通的。如果这一步就报错先看 FastGPT 的容器日志docker compose logs -f fastgpt常见的报错有401 Unauthorized说明CHAT_API_KEY填错了或者 OneAPI 令牌没生效。如果是local proxy failed或者连接超时说明OPENAI_BASE_URL指向的地址不对检查 OneAPI 容器是否在运行、端口是否对得上。如果是reading choices相关的错误通常是 OneAPI 返回的响应格式不对大概率是 TaoToken 的 Base URL 多写了/v1。对话通了之后再验证知识库。进「知识库」页面新建一个知识库上传一个小的文本文件比如一个产品 FAQ。在索引模型那里选text-embedding-3-small然后点「开始索引」。索引过程中可以在日志里看到进度如果报错说没有可用的 embedding 模型回去检查vectorModels数组里的 model 名是否和 OneAPI 渠道里填的一致。索引完成后新建一个应用关联这个知识库然后问一个只有知识库里才有的问题。比如你上传的 FAQ 里写了「退货政策是 7 天无理由」你就问「退货政策是什么」。如果模型回答出了 7 天无理由说明知识库检索和问答都正常了。这里有个细节知识库问答会先用 embedding 模型把问题向量化然后去向量库里检索相关片段再把片段和问题一起发给对话模型。所以 embedding 模型和对话模型必须都能正常工作缺一不可。如果你只配了对话模型没配 embedding知识库索引那一步就会失败。提示索引模型和对话模型可以来自不同的渠道。比如对话用 gpt-4oembedding 用 text-embedding-3-small只要 OneAPI 里对应的渠道都配好了就行。TaoToken 的 Key 可以同时用于这两类模型不需要分开申请。5. 本篇常见错误排查对照这一节把实际部署中最容易遇到的几个报错和对应解法列出来方便你对照排查。报错一401 Unauthorized或invalid api key这个最直接就是 Key 不对。检查三个地方OneAPI 渠道里的 TaoToken Key 是否完整、FastGPT docker-compose 里的CHAT_API_KEY是否是 OneAPI 生成的令牌、OneAPI 令牌是否绑定了 default 分组。有时候 OneAPI 令牌创建后需要等几秒才生效刷新一下页面再试。报错二local proxy failed或connection refusedFastGPT 连不上 OneAPI。如果你 OneAPI 和 FastGPT 在同一个 docker-compose 里OPENAI_BASE_URL应该写http://oneapi:3000/v1用服务名而不是 localhost。如果 OneAPI 是单独部署的写实际 IP 和端口。检查 OneAPI 容器是否在运行docker ps | grep oneapi。报错三reading choices或unexpected responseOneAPI 返回的响应不是 OpenAI 格式。最常见的原因是 TaoToken 的 Base URL 填成了https://taotoken.net/api/v1导致路径重复。改成https://taotoken.net/api就行。另外检查 OneAPI 渠道类型是否选的是 OpenAI选错了类型响应格式会不对。报错四知识库索引时报「没有可用的数据处理模型」config.json 里llmModels数组中没有任何一个模型的datasetProcess为 true。至少要把一个对话模型的这个字段设成 true然后重启 FastGPT。如果你加了多个模型确保至少有一个是 true。报错五FastGPT 模型列表里看不到自定义模型config.json 改完没重启或者 JSON 格式有误。先验证 JSONpython -m json.tool config.json。如果格式没问题执行docker compose down docker compose up -d。有时候浏览器缓存会导致页面不刷新强制刷新一下CtrlShiftR。报错六OneAPI 渠道测试成功但 FastGPT 对话报「无所用模型」模型名不一致。OneAPI 渠道里填的模型名和 config.json 里的model字段必须完全一样包括大小写和连字符。比如 OneAPI 里写gpt-4oconfig.json 里写gpt-4o不能写成gpt4o或GPT-4o。改完两边都重启。报错七OAuth 相关报错如果你在 OneAPI 里配置了 OAuth 登录但 FastGPT 调用时没带对应的 token会报 OAuth 错误。这种情况一般出现在 OneAPI 开启了用户验证但 FastGPT 用的是无验证令牌。检查 OneAPI 的「系统设置」里是否开启了「允许无令牌访问」或者 FastGPT 用的令牌是否有权限。6. 长期编码与 Agent 场景的 Key 管理建议FastGPT 的知识库问答跑通之后你可能会想把它接到更多的场景里比如做成 API 给外部系统调用或者和 Cline、Codex 这类编码工具配合使用。这时候 Key 的管理就变得重要了。TaoToken 的统一 Key 在这里的优势是你不需要为每个模型厂商单独维护一套鉴权一个 Key 就能覆盖对话、embedding、代码补全等多种模型。在 OneAPI 里你可以按分组来管理不同用途的 Key比如给 FastGPT 用一个分组给编码工具用另一个分组这样即使某个 Key 泄露了影响范围也可控。如果你打算长期跑知识库和 Agent 任务建议关注一下 Coding Plan 这类套餐它针对高频调用场景做了额度优化比按量计费更划算。具体的接入方式和额度说明可以在控制台里看到。对于需要频繁调试的场景我自己的做法是在 OneAPI 里建两个渠道一个指向 TaoToken 的正式 Key用于生产环境另一个用测试 Key专门给开发调试用。这样即使调试时把额度跑超了也不会影响线上服务。FastGPT 的 config.json 里可以只声明生产模型调试的时候临时改一下 docker-compose 里的CHAT_API_KEY指向测试令牌就行。最后提醒一点FastGPT 的 config.json 改动后一定要重启容器才生效而且docker compose down之后再up -d不要只restart因为环境变量和挂载文件的变更需要重建容器才能生效。这个坑我在不同项目里见过好几次每次都是重启方式不对导致配置没加载。
返回列表