☰
FastGPT 使用 One API 接入 Azure、ChatGLM 和本地模型:TaoToken 统一 Key 的配置清单
2026/10/7 19:49:37 网站建设 项目流程

1. FastGPT 多模型接入的真实痛点:为什么你的 One API 渠道总是匹配失败

FastGPT 本身只内置了 OpenAI 的对话与向量模型配置,当你需要接入 Azure OpenAI、智谱 ChatGLM、或者跑在自己机器上的本地模型时,直接改 FastGPT 的环境变量是行不通的。原因很简单:FastGPT 只认 OpenAI 格式的/v1/chat/completions接口,而 Azure 的 URL 结构、ChatGLM 的鉴权方式、本地模型的端口和模型名,全都对不上。

这时候 One API 就派上用场了。它做的事情是把不同厂商的接口统一转换成 OpenAI 格式,FastGPT 只需要把OPENAI_BASE_URL指向 One API,把CHAT_API_KEY换成 One API 生成的令牌,剩下的路由、鉴权、模型映射全部由 One API 内部完成。听起来很顺,但实际操作时最容易踩的坑是:One API 的渠道里填的模型名,必须和 FastGPT 请求时传的model参数完全一致,差一个字符都会报model not found。

我试过在 FastGPT 里配置 ChatGLM 时,One API 渠道填的是glm-4,但 FastGPT 的config.json里写的是chatglm4,结果请求直接 404。后来把两边对齐才通。所以这篇内容的核心不是教你装 One API,而是把「渠道配置 → 令牌生成 → FastGPT 环境变量 → 模型映射 → curl 验证」这条链路完整跑通,并且给出可复制的配置片段。

适合谁看:已经在用 FastGPT 做知识库问答,但需要接入 Azure 或国产模型的人;手里有多个厂商 Key,想统一成一个入口的人;本地跑了 Ollama 或 vLLM,想让 FastGPT 调用的人。下面从 One API 的渠道配置开始,一步步给到可落地的参数。

2. TaoToken 统一 Key 在 One API 中的接入位置与前置准备

在讲 One API 渠道配置之前,先说明 TaoToken 在这个架构里的位置。TaoToken 提供的是 OpenAI 兼容的统一 API 入口,你可以把它理解成「上游聚合层」:One API 作为 FastGPT 的网关,TaoToken 作为 One API 的上游渠道之一。这样做的收益是,你不需要在 One API 里分别填 Azure 的 endpoint、ChatGLM 的 key、本地模型的地址,而是把 TaoToken 当成一个渠道,用它的统一 Key 去覆盖多个模型。

具体来说,One API 的渠道配置里,渠道类型选「OpenAI」,Base URL 填 TaoToken 的 API 地址https://taotoken.net/api,模型列表里填你实际要用的模型 ID,比如gpt-4o、glm-4、claude-3-5-sonnet等。One API 会把 FastGPT 传来的模型名透传给 TaoToken,TaoToken 再根据模型名路由到对应的上游。这样 FastGPT 侧只需要一个令牌,就能访问多个厂商的模型。

前置准备需要三样东西:第一,One API 已经部署并可以登录(Docker 或 Sealos 都行,本文不展开部署步骤);第二,TaoToken 的 API Key,在控制台创建;第三,FastGPT 的docker-compose.yml或环境变量文件可编辑。如果你还没有 TaoToken 的 Key,可以先到 TaoToken 控制台 创建一个,创建时注意保存,页面关闭后不再显示完整 Key。

另外提醒一点:One API 的渠道里,Base URL 不要带/v1,因为 One API 会自动拼接。如果你填了https://taotoken.net/api/v1,最终请求会变成/v1/v1/chat/completions,直接 404。这个坑我在 Azure 渠道上也踩过,Azure 的 endpoint 需要带/openai/deployments/xxx,但 One API 的 OpenAI 渠道类型只认标准路径,所以 Azure 建议用「Azure OpenAI」渠道类型单独配,不要和 TaoToken 混在同一个渠道里。

3. 可复制的 One API 渠道配置与 FastGPT 环境变量片段

这一节给到具体的配置片段。先看 One API 的渠道配置,在「渠道」页面点击「添加渠道」,按下面的 JSON 结构填写(One API 的渠道编辑界面支持直接粘贴 JSON 批量导入):

{ "type": 1, "name": "taotoken-unified", "base_url": "https://taotoken.net/api", "key": "sk-你的TaoTokenKey", "models": "gpt-4o,gpt-4o-mini,glm-4,glm-4-flash,claude-3-5-sonnet-20241022,text-embedding-3-small", "group": "default", "model_mapping": "{\"chatglm4\":\"glm-4\",\"azure-gpt4\":\"gpt-4o\"}" }

这里type: 1代表 OpenAI 兼容渠道,models字段列出你要暴露给 FastGPT 的模型名,model_mapping是可选的映射表,用于把 FastGPT 里的别名映射到 TaoToken 的真实模型 ID。比如 FastGPT 的config.json里写的是chatglm4,但 TaoToken 只认glm-4,就可以通过映射自动转换,省去改 FastGPT 配置的麻烦。

如果你要单独接 Azure,渠道类型选「Azure OpenAI」,Base URL 填https://你的资源名.openai.azure.com,模型列表填部署名,比如gpt-4o-deploy。本地模型(Ollama)则选「OpenAI」渠道,Base URL 填http://host.docker.internal:11434/v1,模型填qwen2.5:7b之类。注意 Docker 里访问宿主机要用host.docker.internal,Linux 下可能需要加extra_hosts。

然后是 FastGPT 的环境变量,在docker-compose.yml的fastgpt服务下修改:

environment: - OPENAI_BASE_URL=http://one-api:3000/v1 - CHAT_API_KEY=sk-OneAPI生成的令牌 - EMBEDDING_BASE_URL=http://one-api:3000/v1 - EMBEDDING_API_KEY=sk-OneAPI生成的令牌

如果 One API 和 FastGPT 不在同一个 Docker 网络,one-api换成实际 IP 或域名。Sealos 部署的话,用内网地址可以省流量。改完后docker-compose down && docker-compose up -d重启 FastGPT。

最后是 FastGPT 的模型配置文件/projects/app/src/data/config.json,找到llmModels数组,添加 ChatGLM 的条目:

{ "model": "glm-4", "name": "ChatGLM-4", "avatar": "/imgs/model/glm.svg", "maxContext": 128000, "maxResponse": 4000, "quoteMaxToken": 100000, "maxTemperature": 1.0, "charsPointsPrice": 0, "censor": false, "vision": false, "datasetProcess": true, "usedInClassify": true, "usedInExtractFields": true, "usedInToolCall": true, "usedInQueryExtension": true, "toolChoice": true, "functionCall": false, "defaultConfig": {} }

向量模型加到vectorModels里,模型名要和 One API 渠道里的text-embedding-3-small一致。改完重启 FastGPT,模型选择列表里就会出现 ChatGLM-4。

4. 用 curl 验证 Azure 与本地模型响应的完整动作

配置改完不代表通了,必须用 curl 直接打 One API 的接口,确认模型路由正确。先验证 TaoToken 渠道下的 ChatGLM:

curl -X POST http://localhost:3000/v1/chat/completions \ -H "Authorization: Bearer sk-OneAPI令牌" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-4", "messages": [{"role": "user", "content": "用一句话介绍你自己"}], "stream": false }'

如果返回的 JSON 里有choices[0].message.content,说明 One API 成功路由到 TaoToken,TaoToken 再路由到 ChatGLM。如果报model not found,检查 One API 渠道的models字段是否包含glm-4,以及model_mapping是否把别名映射对了。

验证 Azure 渠道:

curl -X POST http://localhost:3000/v1/chat/completions \ -H "Authorization: Bearer sk-OneAPI令牌" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-deploy", "messages": [{"role": "user", "content": "hello"}], "max_tokens": 50 }'

Azure 的报错通常是 401,原因是 Key 或 endpoint 填错。注意 Azure 的 Key 是资源密钥,不是 OpenAI 的 Key,两者不通用。如果返回DeploymentNotFound,说明模型名和 Azure 里的部署名不一致。

验证本地模型(Ollama):

curl -X POST http://localhost:3000/v1/chat/completions \ -H "Authorization: Bearer sk-OneAPI令牌" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:7b", "messages": [{"role": "user", "content": "1+1等于几"}] }'

本地模型最常见的报错是connection refused,因为 One API 在 Docker 里,访问不到宿主机的localhost:11434。解决办法是把 Base URL 改成http://host.docker.internal:11434/v1,或者在docker-compose.yml里给 One API 加extra_hosts: - "host.docker.internal:host-gateway"。

三个 curl 都返回正常结果后,再回到 FastGPT 界面新建对话,选择对应模型测试。如果 FastGPT 报reading choices错误,说明 One API 返回的结构不对,通常是渠道类型选错了,比如把 Azure 配成了 OpenAI 类型。

5. 本篇常见错误排查:401、local proxy failed、reading choices 与 OAuth

第一个高频错误是401 Unauthorized。在 One API 渠道里出现 401,九成是 Key 填错。TaoToken 的 Key 以sk-开头,Azure 的 Key 是 32 位十六进制字符串,ChatGLM 的 Key 格式又不一样。如果你把 TaoToken 的 Key 填到了 Azure 渠道里,必然 401。排查方法:在 One API 的「日志」页面看请求详情,里面会显示实际使用的渠道和 Key 前缀。

第二个是local proxy failed。这个报错通常出现在 One API 尝试访问本地模型时,原因是 Docker 网络隔离。One API 容器里的localhost指向容器自身,不是宿主机。解决办法前面提过,用host.docker.internal替代localhost。如果是 Linux 环境,还需要在docker-compose.yml里显式声明extra_hosts。另外,如果你用了 TaoToken 的 API 地址,确认容器能出网,curl https://taotoken.net/api在容器内能通。

第三个是reading choices错误。FastGPT 收到 One API 的响应后,会解析choices字段。如果 One API 返回的是错误信息而不是标准结构,FastGPT 就会报这个错。常见原因:One API 渠道的模型名和请求的模型名不匹配,One API 返回了{"error": {"message": "model not found"}},FastGPT 解析不到choices。排查方法:直接 curl One API,看返回体里有没有choices。如果没有,就是模型映射问题。

第四个是 OAuth 相关报错。如果你在 One API 里配置了 Claude 渠道,可能会遇到OAuth token expired。这是因为 Claude 的鉴权方式和其他厂商不同,One API 的 Claude 渠道需要填 session key 而不是 API key。建议 Claude 模型统一走 TaoToken 渠道,用 OpenAI 兼容格式调用,避免 OAuth 的坑。TaoToken 的 接入文档 里有各模型的调用示例,可以直接参考。

还有一个容易忽略的点:One API 的令牌有额度限制,默认 root 用户 200 刀。如果 FastGPT 报insufficient quota,去 One API 的「令牌」页面编辑额度,或者用 root 账号给自己充值。这个不是技术问题,但卡住过不少人。

6. 从 One API 到 TaoToken:统一 Key 后的模型管理与调用建议

配置跑通之后,日常维护的重点就变成了模型管理。One API 的渠道列表里,你可以给每个渠道设置优先级和权重。比如 TaoToken 渠道设权重 100,Azure 渠道设权重 50,这样大部分请求走 TaoToken,Azure 作为备用。如果某个模型在 TaoToken 上响应慢,可以在model_mapping里把它单独映射到 Azure 渠道。

对于长期做编码或 Agent 开发的场景,建议把常用模型固定下来,不要频繁改 FastGPT 的config.json。做法是在 One API 的model_mapping里做一层别名,FastGPT 侧只写别名,比如my-gpt4、my-glm,实际路由由 One API 控制。这样换模型时只改 One API,不用重启 FastGPT。

如果你需要频繁切换模型做对比测试,可以用 TaoToken 模型对话 直接验证各模型的响应质量,确认后再配到 One API 里。对于需要长期跑 Agent 任务的场景,Coding Plan 提供了更稳定的调用额度,适合替代按量计费的零散 Key。

最后给一个实用技巧:One API 的「日志」页面可以按渠道筛选,如果某个渠道连续报错,直接禁用,FastGPT 侧无感知。另外,FastGPT 的config.json改完后,如果不想重启整个容器,可以只重启fastgpt服务:docker-compose restart fastgpt。但环境变量改动必须down再up,因为环境变量在容器创建时注入,restart不会重新读取。

整套流程的核心就一句话:One API 做路由,TaoToken 做统一 Key,FastGPT 只认一个 Base URL 和一个令牌。把模型映射对齐,curl 验证通过,剩下的就是日常维护了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询