大模型笔记02--基于fastgpt和oneapi构建大模型应用平台:TaoToken统一Key接入与Ollama知识库落地
1. 为什么要在 FastGPT OneAPI 里加一层 TaoToken 统一 KeyFastGPT 是一个基于 LLM 大语言模型的知识库问答系统能通过 Flow 可视化编排工作流把文档入库、向量检索、多模型回答串成一条链路。OneAPI 则是一个 OpenAI 接口管理与分发系统支持把 Ollama、Claude、Gemini、通义千问等不同来源的模型统一成 OpenAI 兼容格式方便二次分发和管理 Key。把这两个开源项目搭在一起就能得到一个可私有化部署的知识库问答平台。但实际落地时会遇到一个很现实的问题模型来源太杂。本地 Ollama 跑着 qwen2、llama3.1云端又想接 Claude 或 Gemini 做兜底每个厂商的 Key 格式、Base URL、计费方式都不一样。如果每个模型都单独配一套 KeyOneAPI 里的渠道管理会变得很乱FastGPT 那边切换模型也容易出错。我试过把 TaoToken 作为统一 Key/API 通道接进来思路是OneAPI 里只维护一个 TaoToken 渠道所有云端模型的请求都走这个渠道出去本地 Ollama 模型继续走本地渠道。这样 FastGPT 侧看到的模型列表是统一的Key 管理也收敛到一处。TaoToken 的 API 地址是 https://taotoken.net/api兼容 OpenAI 接口规范OneAPI 里选 OpenAI 类型渠道就能直接对接。适合谁看已经在用 FastGPT 搭知识库、用 OneAPI 做模型路由但被多厂商 Key 管理搞得很烦的开发者或者刚准备部署这套组合想一步到位把架构设计好的朋友。下面从部署、渠道配置、模型接入到知识库验证一步步走通。2. 前置部署FastGPT OneAPI Ollama 的 Docker Compose 落地前置条件需要先部署好 Ollama具体步骤可以参考 Ollama 相关部署文档。这里重点说 FastGPT 和 OneAPI 的部署它们都用 Docker Compose 拉起。FastGPT 官方提供了基于 docker compose 的快速部署方式直接使用 pgvector 版本测试推荐简单快捷mkdir fastgpt cd 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服务拉起来后用docker compose ps可以看到 6 个运行中的容器。通过 http://127.0.0.1:3000 访问 FastGPT默认账号密码是 root / 1234通过 http://127.0.0.1:3001/ 访问 OneAPI默认账号密码是 root / 123456。Ollama 这边有一个关键配置需要设置OLLAMA_HOST0.0.0.0否则 OneAPI 容器无法正常访问 Ollama 服务。这个坑很常见容器间网络隔离导致 localhost 不通必须让 Ollama 监听所有网卡。# 在 Ollama 服务端设置环境变量后重启 export OLLAMA_HOST0.0.0.0 ollama serve如果你是用 systemd 管理 Ollama可以编辑 service 文件加 Environment[Service] EnvironmentOLLAMA_HOST0.0.0.0重启后验证 Ollama 是否可被外部访问curl http://192.168.x.x:11434/api/tags能返回模型列表就说明网络通了。接下来在 OneAPI 里配置渠道时代理地址填 Ollama 所在机器的实际 IP 和 11434 端口不要填 localhost。OneAPI 的渠道配置有个建议每个渠道最好只配置唯一的一个模型这样使用的时候容易区分。比如一个渠道专门对应 qwen2:7b另一个渠道对应 llama3.1:8b而不是一个渠道里塞一堆模型。这样在 FastGPT 里选模型时看到的名字和实际调用的模型一一对应排障也方便。3. OneAPI 渠道配置TaoToken 统一 Key 与 Ollama 本地模型并存这一节是核心把 TaoToken 作为云端模型的统一入口Ollama 作为本地模型入口两者在 OneAPI 里并存。先登录 OneAPI 管理后台 http://127.0.0.1:3001/进入「渠道」页面点击「添加新的渠道」。3.1 TaoToken 渠道配置云端模型统一入口渠道类型选择「OpenAI」因为 TaoToken 兼容 OpenAI 接口规范。关键参数如下参数填写内容渠道名称taotoken-cloud渠道类型OpenAI代理地址https://taotoken.net/api密钥你在 TaoToken 控制台创建的 API Key模型按需填写如 claude-3-5-sonnet、gpt-4o 等代理地址这里注意不要加 UTM 参数API 调用地址就是 https://taotoken.net/api。密钥从 TaoToken 控制台的 API Keys 页面获取创建后复制粘贴进来。模型字段可以手动填写你需要的模型 ID也可以点「填入相关模型」让 OneAPI 自动拉取。如果自动拉取失败手动填就行格式是逗号分隔。配置完成后点「测试」如果返回成功就说明通道通了。测试时 OneAPI 会发一个简单的 chat 请求能收到响应就 OK。3.2 Ollama 本地渠道配置再添加一个渠道类型选择「Ollama」代理地址填 Ollama 服务的实际 IP 和端口{ channel_name: ollama-local, channel_type: ollama, base_url: http://192.168.x.x:11434, models: qwen2:7b,llama3.1:8b,gemma2:9b, key: ollama }Ollama 渠道的密钥可以随意写因为本地 Ollama 默认不校验 Key。但如果你通过 TaoToken 或其他网关代理 Ollama就要填对应的 Key。3.3 向量模型渠道配置知识库需要向量模型做 embedding。可以用 Ollama 部署 nomic-embed-text也可以用 Docker 部署 m3e。Ollama 方式ollama pull nomic-embed-text:v1.5 ollama pull milkey/m3e:large-f16测试 embedding 接口curl http://localhost:11434/api/embeddings -d { model: nomic-embed-text:v1.5, prompt: The sky is blue because of Rayleigh scattering }Docker 方式部署 m3edocker run -d --nethost --name m3e -p 6008:6008 --gpus all \ -e sk-key111111admin \ registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api测试 m3ecurl --location --request POST http://0.0.0.0:6008/v1/embeddings \ --header Authorization: Bearer 111111admin \ --header Content-Type: application/json \ --data-raw { model: m3e, input: [laf是什么] }测试成功后在 OneAPI 里配置向量模型渠道。如果用 m3e代理填 http://192.xx.xx.1:6008密钥填 sk-key 对应的内容如果用 Ollama 的 nomic-embed-text代理需要配置为 http://192.x.x.1:11435因为 Ollama 默认使用 /api/embeddings 提供向量访问而 FastGPT 调用 OneAPI 默认走 /v1/embeddings需要做路径转发。3.4 FastGPT config.json 模型接入编辑 FastGPT 的 config.json加入 LLM 模型和向量模型配置{ llmModels: [ { model: qwen2:7b, name: ollama-qwen2-7b, avatar: /imgs/model/openai.svg, maxContext: 125000, 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, defaultConfig: {} }, { model: claude-3-5-sonnet, name: taotoken-claude-sonnet, avatar: /imgs/model/openai.svg, maxContext: 200000, maxResponse: 8192, quoteMaxToken: 180000, maxTemperature: 1.0, charsPointsPrice: 0, censor: false, vision: true, datasetProcess: true, usedInClassify: true, usedInExtractFields: true, usedInToolCall: true, usedInQueryExtension: true, toolChoice: true, functionCall: false, defaultConfig: {} } ], vectorModels: [ { model: nomic-embed-text:v1.5, name: nomic-embed-text-v1.5, avatar: /imgs/model/openai.svg, charsPointsPrice: 0, defaultToken: 500, maxToken: 2000, weight: 100, defaultConfig: {}, dbConfig: {}, queryConfig: {} }, { model: m3e, name: m3e, avatar: /imgs/model/openai.svg, charsPointsPrice: 0, defaultToken: 512, maxToken: 3000, weight: 100 } ] }注意datasetProcess、usedInClassify、usedInExtractFields、usedInToolCall、usedInQueryExtension这几个字段务必保证至少有一个为 true否则知识库会报错。改完 config.json 后重启 FastGPTdocker restart fastgpt4. 验证请求从文档入库到多模型回答的完整链路配置完成后走一遍完整链路验证。4.1 新建数据集并导入文档登录 FastGPT http://127.0.0.1:3000进入「知识库」页面新建数据集。向量模型选择 nomic-embed-text-v1.5 或 m3e这两个都是前面配置好的。在 skills 目录提前准备好文档按步骤导入。数据导入到 Ready 需要大模型处理一段时间GPU 一般的话会比较慢耐心等待处理完成即可。如果发现数据一直处于索引中、机器 CPU 长期高负载先检查向量模型渠道是否正常。4.2 新建大模型应用在工作台新建一个大模型应用比如命名为 agent-qwen2-7b使用 qwen2-7b 大模型关联上知识库 nomic-embed-text-v1.5检索模式使用混合检索。配置完成后测试一下可以看到它从目标参考文档中检索知识结合检索的目标知识回答我们的问题。测试完成后点击发布发布成功后可以直接通过聊天界面进入 agent-qwen2-7b 应用。4.3 切换 TaoToken 云端模型验证把应用里的大模型切换成 taotoken-claude-sonnet再问同样的问题。如果 TaoToken 渠道配置正确应该能正常返回回答。这一步验证的是统一 Key 通道是否生效——FastGPT 发请求给 OneAPIOneAPI 根据模型名路由到 TaoToken 渠道TaoToken 再转发到对应的云端模型。验证 OneAPI 日志能看到请求正常转发docker logs one-api --tail 50如果日志里出现 401 错误说明 TaoToken 的 Key 有问题去控制台检查 Key 是否有效、额度是否充足。如果出现 local proxy failed检查代理地址是否填成了 https://taotoken.net/api 而不是其他路径。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节把实际部署中踩过的坑列出来对照报错找原因。5.1 401 错误OneAPI 日志里出现 401通常是 TaoToken 的 API Key 无效或过期。去 TaoToken 控制台的 API Keys 页面重新创建一个 Key复制到 OneAPI 渠道配置里。注意 Key 不要有多余空格。5.2 local proxy failed这个报错说明 OneAPI 无法连接到代理地址。检查两点一是代理地址是否写成了 https://taotoken.net/api不要加 UTM 参数二是服务器网络是否能正常访问该地址。如果服务器在内网需要确认出网策略。5.3 error unmarshalling stream response / reading choicesFastGPT 通过 OneAPI 调用 Ollama qwen2:2b 时报错error unmarshalling stream response: invalid character } after top-level valueFastGPT 提示 LLM api response empty。这个问题出在 Ollama 渠道的流式响应格式和 OneAPI 的解析不兼容。解决方法将渠道设置为「自定义」暂时不用配置为 Ollama 类型调整后重启 OneAPI 就没有继续报错了。5.4 OAuth 相关报错如果 OneAPI 里配置了 OAuth 登录但回调地址不对会出现 OAuth 报错。检查 OneAPI 的「系统设置」里 OAuth 回调地址是否和实际访问地址一致。本地测试一般用不到 OAuth可以先用账号密码登录。5.5 知识库导入报错「当前分组 default 下对于模型 text-embedding-ada-002 无可用渠道」这个报错说明 FastGPT 默认想用 text-embedding-ada-002但 OneAPI 里没有配置这个渠道。解决方法如果有 OpenAI 的 token可以在 OneAPI 配置 text-embedding-ada-002 渠道没有的话自行部署向量模型并在 OneAPI 新建对应的渠道新建知识库时使用自己新建的渠道即可。5.6 Ollama 向量模型知识库上传数据一直卡在索引、docker 日志报 404日志中提到配置 host.docker.internal但测试过几次不行。最后通过 nginx 代理解决该问题。因为 Ollama 向量接口为 /api/embeddings而 FastGPT 调用 OneAPI 默认接口为 /v1/embeddings因此会报错。可以在本地通过 nginx 代理 Ollama将 OneAPI 的 /v1/embeddings 转发到 Ollama 的 /api/embeddings 中。nginx 配置如下server { listen 11435; server_name ollama-server; location / { proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /v1/embeddings { rewrite ^/v1/embeddings$ /api/embeddings break; } location /api/embeddings { proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }转发成功后可以看到 nginx 日志请求正常OneAPI 中 /v1/embeddings 接口也恢复正常。过一段时间后数据集准备就绪节点 CPU 慢慢降下来恢复正常。5.7 FastGPT 报错 503 upstream_error这个通常是 OneAPI 侧渠道不可用导致的。检查 OneAPI 里对应渠道的测试是否通过如果测试失败先解决渠道连通性问题。另外确认 FastGPT 的 config.json 里模型名和 OneAPI 渠道里的模型名一致。6. 长期编码与 Agent 场景把 TaoToken 接入 Coding Plan知识库问答跑通后如果你还想把 TaoToken 用在长期编码或 Agent 场景可以走 Coding Plan 通道。在 OneAPI 里再建一个渠道代理地址同样填 https://taotoken.net/api模型填你 Coding Plan 里开通的模型 ID。对于 Claude Code 这类工具配置方式是在 settings 里指定 Base URL 和 API Key{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken Key } }Cline MCP 或 Codex auth.json 的配置逻辑类似核心三件套是 Base URL、Key、Model ID。Base URL 统一用 https://taotoken.net/apiKey 从控制台获取Model ID 按需填写。如果你在排障过程中需要确认模型可用性可以直接在模型对话页面发一条测试消息比在代码里调试快得多。接入文档里有各语言的调用示例照着改 Base URL 和 Key 就能跑。整套链路跑下来FastGPT 负责知识库和 Flow 编排OneAPI 负责模型路由和 Key 分发TaoToken 作为云端模型的统一出口Ollama 作为本地模型的补充。这样既保留了本地部署的隐私优势又能灵活调用云端模型做能力兜底。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →