多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

本地搭建自己的专属客服之OneApi关联Ollama部署的大模型并创建令牌《下》——TaoToken统一Key接入实践

本地搭建自己的专属客服之OneApi关联Ollama部署的大模型并创建令牌《下》——TaoToken统一Key接入实践 1. 本地客服系统为什么需要统一 Key 通道本地客服系统落地到生产环境时最容易被忽略的一环不是模型本身而是「调用入口」。你可能会遇到这样的场景Ollama 在本机跑着 qwen2.5 或 llama3OneApi 也部署好了FastGPT 也起来了但真正接入业务时前端、后台、定时任务、知识库同步脚本各自持有一份 Key改一次模型要改五六个地方日志里全是不同来源的请求排查问题像大海捞针。这就是统一 Key 通道要解决的问题。OneApi 负责把 Ollama 的本地模型包装成 OpenAI 兼容接口TaoToken 则在这个基础上提供统一的 Key 管理和 API 通道让所有调用方只认一个 Base URL 和一把 Key。对本地客服系统来说这意味着模型切换只改渠道配置业务代码零改动调用量、失败率、延迟都能在一个面板里看到新同事接入时不用再问「Key 在哪」。适合谁看这篇已经用 docker 跑通 Ollama OneApi正在把本地客服系统往可用状态推进的开发者或者手上有多套本地模型、想统一管理调用入口的团队。下面我会把 docker-compose 配置、OneApi 渠道与令牌创建、curl 验证链路完整走一遍每一步都能直接复制。2. TaoToken 前置准备与 OneApi 渠道配置在开始之前先把 TaoToken 的入口理清楚。TaoToken 提供统一的 API 通道官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。你需要先在控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsole 。创建好之后把 Key 复制出来后面 OneApi 渠道配置会用到。OneApi 的渠道配置核心是把「模型来源」和「调用凭证」绑定。Ollama 本地模型的 OpenAI 兼容地址通常是 http://host.docker.internal:11434/v1 或者 http://你的局域网IP:11434/v1 。如果你用的是 TaoToken 作为统一通道那么 Base URL 就填 https://taotoken.net/api Key 填刚才在控制台创建的那把。这里有个容易踩的坑OneApi 跑在 docker 里Ollama 跑在宿主机上容器内访问宿主机需要用 host.docker.internalMac/Windows或者宿主机局域网 IPLinux。如果你在 Linux 上直接写 localhost容器里是访问不到的会报 connection refused。渠道配置的具体步骤登录 OneApi 后台默认地址是 http://localhost:3001 账号 root密码 123456首次登录后建议改掉。进入「渠道」菜单点击「添加新的渠道」。类型选择「OpenAI」名称随便写比如「ollama-local」或「taotoken-channel」。Base URL 填 https://taotoken.net/api 密钥填你的 TaoToken Key。模型列表里手动填入你要用的模型 ID比如 qwen2.5:7b、llama3.1:8b或者 TaoToken 支持的模型名。填完之后点「提交」再点「测试」如果返回成功说明渠道打通了。这一步的关键是模型 ID 要和实际调用时一致。OneApi 不会自动发现 Ollama 的模型列表你得手动填。如果你不确定模型名可以先在宿主机执行 ollama list 看一下。3. 可复制的 docker-compose 与 config.json 配置这一节直接给可复制的配置片段。先看 docker-compose.yml这是 OneApi FastGPT Ollama 的典型组合。注意路径和原文保持一致你只需要替换自己的 Key 和模型名。version: 3.8 services: oneapi: image: justsong/one-api:latest container_name: oneapi restart: always ports: - 3001:3000 environment: - TZAsia/Shanghai volumes: - ./oneapi/data:/data networks: - fastgpt-net fastgpt: image: ghcr.io/labring/fastgpt:latest container_name: fastgpt restart: always ports: - 3000:3000 environment: - TZAsia/Shanghai - OPENAI_BASE_URLhttp://oneapi:3000/v1 - OPENAI_API_KEYsk-你的OneApi令牌 - CHAT_API_KEYsk-你的OneApi令牌 volumes: - ./fastgpt/config.json:/app/data/config.json depends_on: - oneapi networks: - fastgpt-net networks: fastgpt-net: driver: bridge上面这段里OPENAI_BASE_URL 指向 oneapi 容器因为它们在同一个 docker network 里可以直接用服务名访问。OPENAI_API_KEY 填你在 OneApi 里创建的令牌格式是 sk- 开头。再看 config.json这个文件主要包含四块llmModels、vectorModels、audioSpeechModels、whisperModel。本地客服系统最常用的是 llmModels 和 vectorModels。下面是一个最小可用配置{ llmModels: [ { model: qwen2.5:7b, name: Qwen2.5 7B 本地客服, maxContext: 32000, maxResponse: 4096, quoteMaxToken: 30000, maxTemperature: 1.2, vision: false, functionCall: true, defaultSystemChatPrompt: 你是一个专业的客服助手回答要简洁准确。 } ], vectorModels: [ { model: nomic-embed-text, name: 本地向量模型, defaultToken: 512, maxToken: 3000 } ], audioSpeechModels: [], whisperModel: {} }如果你用 TaoToken 统一通道模型名可以换成 TaoToken 支持的模型 IDBase URL 保持 https://taotoken.net/api 不变。这样本地客服系统既能调本地 Ollama也能在需要时切到云端模型业务代码不用动。配置改完之后重启容器。方式一cd 到包含 docker-compose.yml 的目录执行 docker-compose up -d 然后 docker ps 检查是否全部启动。方式二只重启 fastgpt 和 oneapi执行 docker restart fastgpt docker restart oneapi 。重启后等 10 秒左右让服务完成初始化。4. 创建令牌并用 curl 验证调用链路渠道配好之后下一步是创建令牌。进入 OneApi 后台点击顶部「令牌」菜单再点「添加新的令牌」。名称写「fastgpt-local」或「客服系统专用」额度按需设置过期时间可以留空。提交之后在列表里点击「复制」你会得到类似 sk-7cuK1IhqLNhCJsGd3aFc56DeEaD21aE3Bc0648E39754F705 的密钥。这个 Key 就是 FastGPT 和其他调用方要用的。拿到 Key 之后先别急着改业务代码用 curl 验证一下链路是否通。这一步能帮你快速定位是 OneApi 的问题、Ollama 的问题还是网络的问题。curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的OneApi令牌 \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [ {role: user, content: 你好请用一句话介绍你自己} ], temperature: 0.7 }如果你是在本地直接测 OneApi把 URL 换成 http://localhost:3001/v1/chat/completions 。如果返回类似下面的结构说明链路通了{ id: chatcmpl-xxx, object: chat.completion, created: 1730000000, model: qwen2.5:7b, choices: [ { index: 0, message: { role: assistant, content: 你好我是一个本地部署的客服助手。 }, finish_reason: stop } ], usage: { prompt_tokens: 12, completion_tokens: 18, total_tokens: 30 } }看到 choices 里有 content就说明 OneApi 成功把请求转发给了 Ollama 或 TaoToken模型也正常返回了。如果返回 401检查 Key 是否复制完整如果返回 model not found检查渠道里的模型名和请求里的 model 是否一致如果连接超时检查 docker network 和端口映射。验证通过后把 FastGPT 的 docker-compose.yml 里的 OPENAI_API_KEY 换成这个令牌重启 fastgpt 容器。然后在 FastGPT 里新建一个应用选择 qwen2.5:7b 模型发一条测试消息如果能正常回复整个本地客服系统的调用链路就打通了。5. 常见报错排查401、local proxy failed、reading choices这一节把几个高频报错拆开讲都是我在实际部署中遇到过的。401 Unauthorized最常见的原因是 Key 不对或者没带 Bearer 前缀。检查 curl 里的 Authorization 头是不是 Bearer sk-xxx注意 Bearer 和 Key 之间有一个空格。如果 Key 是从 OneApi 复制的确认没有多余换行。还有一种情况是 OneApi 的令牌额度用完了或者被禁用去后台令牌列表看一下状态。local proxy failed这个报错通常出现在 OneApi 转发请求时。原因可能是 Base URL 填错了比如把 https://taotoken.net/api 写成了 https://taotoken.net/api/v1 导致路径重复。OneApi 的渠道 Base URL 一般填到 /api 或 /v1 即可具体看渠道类型。另一个原因是容器内 DNS 解析失败可以在 oneapi 容器里执行 curl -v https://taotoken.net/api 测试连通性。reading choices 报错这个通常表示 OneApi 收到了上游返回但结构不对。常见于模型名不匹配或者上游返回了错误信息。比如你在请求里写 qwen2.5:7b但渠道里配置的是 qwen2.5 OneApi 转发后 Ollama 返回 model not foundFastGPT 解析时就报 reading choices。解决办法是统一模型名或者在 OneApi 的渠道里配置模型重定向。OAuth 相关报错如果你用的是 Codex 或 Claude Code 这类工具可能会遇到 OAuth 认证失败。这时候检查 auth.json 或 settings.json 里的 Base URL 和 Key 是否和 OneApi 一致。以 Codex 为例auth.json 里需要填 OPENAI_API_KEY 和 OPENAI_BASE_URLBase URL 指向 https://taotoken.net/api Key 用 OneApi 令牌。Cline MCP 的配置类似在 settings 里填 Base URL、Key、Model ID 三件套。CC Switch 配置如果你用 CC Switch 管理多个模型通道确保每个通道的 Base URL、Key、Model ID 都填全。Base URL 用 https://taotoken.net/api Key 用 OneApi 令牌Model ID 和渠道里配置的一致。三件套缺一个都会导致调用失败。排查顺序建议先 curl 测 OneApi 直连再 curl 测 FastGPT 容器内访问 OneApi最后在 FastGPT 界面测。这样能快速定位是哪一层的问题。6. 统一 Key 通道的长期维护与接入建议链路打通只是开始长期维护才是本地客服系统稳定运行的关键。我的建议是把 OneApi 的令牌按用途拆分FastGPT 用一个后台脚本用一个定时任务用一个。这样某个令牌出问题时能快速定位影响范围也方便单独重置。模型切换时只需要在 OneApi 渠道里改模型名或 Base URL业务侧不用动。如果你用 TaoToken 统一通道可以在控制台里管理多个上游OneApi 只认 TaoToken 的 Key切换模型时改 TaoToken 的配置即可。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsole API Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keys 。对于长期跑编码任务或 Agent 的场景可以考虑 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-plan 。模型对话测试可以用 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchat 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdoc Claude Code 相关配置参考 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeanthropic 。最后提醒一点本地客服系统的日志要保留尤其是 OneApi 的请求日志。出问题时先看 OneApi 日志里请求有没有到、转发有没有成功再看 Ollama 日志里模型有没有正常加载。大部分问题都能在这两层日志里找到答案。配置改完后记得 docker-compose up -d 重启docker ps 确认容器状态然后再测一遍 curl确保改动生效。
返回列表