尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

把 DeepSeek 放进 OpenRouter 工作流,TaoToken 管 Key 与出口

发布时间:2026/9/18 1:45:23

资讯中心
01
ARTICLE

把 DeepSeek 放进 OpenRouter 工作流,TaoToken 管 Key 与出口

把 DeepSeek 放进 OpenRouter 工作流,TaoToken 管 Key 与出口
1. 从 Mozilla 报告到 OpenRouter 用量榜为什么要做可替换的 DeepSeek 调用层如果你正在用 OpenRouter 做模型评测最近可能会注意到一个趋势Mozilla 关于开源权重模型与前沿模型差距收窄的报告以及 OpenRouter 按 token 量观察模型使用结构的变化都在提醒工程团队DeepSeek 这类模型已经不能只当备选。要把 DeepSeek 放进现有的 OpenRouter 工作流又不让 Key 散落在多个脚本、多个同事、多个测试分支里我会先把出口切到 TaoToken从 TaoToken 官网 创建 API Key把 Base URL 固定为https://taotoken.net/api然后用 OpenAI 兼容请求头和模型名记录每次 token 用量。本文不讲空泛趋势直接给可复制的配置、请求头、模型名管理方式、用量落库脚本以及 Claude Code、Codex、CC Switch 的接法。很多团队一开始把 OpenRouter 当成唯一入口业务代码里直接写死https://openrouter.ai/api/v1模型名写死deepseek/deepseek-chatKey 放在.env评测脚本再复制一份。这样做短期没问题但一旦要做供应商切换、成本归因、故障回退就会发现三个问题第一Key 的归属和轮换不清晰第二Base URL 与模型名耦合在代码里第三token 用量没有统一记录评测结论无法复现。把 TaoToken 作为 Key 与出口管理层不是推翻 OpenRouter 工作流而是把“调用地址、认证方式、模型别名、用量记录”从业务逻辑里抽出来。这篇文章的目标很具体让你在本地用最少代码跑通一条 DeepSeek 请求拿到usage字段并把模型名、prompt tokens、completion tokens、total tokens、request id 写进本地 SQLite。之后你可以把这套配置复用到 OpenRouter 风格的封装、Claude Code、Codex 和 CC Switch。所有命令都由你在本地执行不涉及任何生产库直连。2. 先拿 Key在 TaoToken 控制台创建 API Key 并固定 Base URL第一步不是写代码而是把认证信息准备好。打开 TaoToken 官网完成登录后进入控制台创建 API Key。复制出来的 Key 只显示一次或很少几次建议立即放进密码管理器或本地.env不要提交到 Git。本文所有示例用YOUR_API_KEY作为占位符你实际运行时替换成自己的 Key。推荐先设置三个环境变量export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_MODELdeepseek-chat这里有两个关键点。第一Base URL 使用https://taotoken.net/api不要在末尾手动加/chat/completions也不要重复拼/v1。第二模型名以 TaoToken 控制台或模型列表里显示的名称为准。本文为了演示使用deepseek-chat作为占位模型名如果你的控制台给出的是带命名空间的名称就替换TAOTOKEN_MODEL的值。把模型名放在环境变量里可以避免在评测脚本、CLI 配置、CI 任务里到处改字符串。如果你原来用 OpenRouter 的 SDK通常只需要改两个参数apiKey与baseURL。业务层的 messages、temperature、max_tokens 可以保留。也就是说DeepSeek 仍然在你的 OpenRouter 工作流里只是出口认证从原来的 Key 换成 TaoToken 的 Key调用地址换成 TaoToken 的兼容 API。为了确认环境变量已经生效可以先执行echo $TAOTOKEN_BASE_URL echo ${TAOTOKEN_API_KEY:0:6}...第二条只会显示 Key 的前几位避免完整泄露。不要用echo $TAOTOKEN_API_KEY把完整 Key 打到终端历史或 CI 日志里。3. 最小可复现用 OpenAI 兼容请求头把 DeepSeek 接进 OpenRouter 工作流先给一个裸 HTTP 的 curl 示例用于确认认证、Base URL、模型名三件事是否一致。这个示例请求到https://taotoken.net/api/chat/completions请求头使用Authorization: Bearer请求体使用 OpenAI Chat Completions 格式。curl -sS https://taotoken.net/api/chat/completions \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [ { role: user, content: 用三句话说明开源权重模型评测为什么要记录 token 用量。 } ], temperature: 0.2 }如果返回 401优先检查Authorization头是否少了Bearer以及Bearer与 Key 之间是否只有一个空格。如果返回 404优先检查 URL 是否被写成了https://taotoken.net/api/v1/chat/completions或https://taotoken.net/api/chat/completions/chat/completions。按照本文约定Base URL 是https://taotoken.net/api具体路径由 HTTP 客户端或 SDK 拼接。接着用 Python OpenAI SDK 复现同样的调用。这样你既能在脚本里记录 usage也方便后续接入评测流水线。import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlhttps://taotoken.net/api, ) resp client.chat.completions.create( modelos.environ.get(TAOTOKEN_MODEL, deepseek-chat), messages[ {role: user, content: 用三句话说明开源权重模型评测为什么要记录 token 用量。} ], temperature0.2, ) print(resp.choices[0].message.content) print(resp.usage)resp.usage通常包含prompt_tokens、completion_tokens、total_tokens等字段。不同模型、不同兼容层可能还会返回额外字段所以后续落库时建议同时保存原始 JSON而不是只保存三个整数。这样以后排查计费差异、重试重复请求、流式与非流式差异时有原始凭证。前端或 Node.js 项目也可以用 OpenAI 兼容写法import OpenAI from openai; const client new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: https://taotoken.net/api, }); const resp await client.chat.completions.create({ model: process.env.TAOTOKEN_MODEL || deepseek-chat, messages: [ { role: user, content: 用三句话说明开源权重模型评测为什么要记录 token 用量。 } ], temperature: 0.2, }); console.log(resp.choices[0].message.content); console.log(resp.usage);如果你的工作流原本使用 OpenRouter 的HTTP-Referer、X-Title等头作为应用标识可以保留但 TaoToken 侧认证仍以Authorization为准。不要为了“兼容”而把多个平台的 Key 混在同一个请求里也不要在前端代码里暴露任何真实 Key。浏览器端应通过你自己的后端转发后端再调用 TaoToken。流式响应下很多兼容实现默认不会在最后一个 chunk 返回 usage。可以显式打开stream client.chat.completions.create( modelos.environ.get(TAOTOKEN_MODEL, deepseek-chat), messages[{role: user, content: 写一个 Python 快速排序示例。}], streamTrue, stream_options{include_usage: True}, ) for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end) if chunk.usage: print(\nusage:, chunk.usage)如果某些 SDK 版本不支持stream_options就用非流式请求做用量采样或者升级 SDK。记录用量的第一原则是评测任务尽量用非流式生产聊天可以流式但要在最后一个 chunk 或服务端日志里补齐 usage。4. 模型名与 token 用量记录把每次请求写进本地 SQLite模型评测最怕“跑过一次结果找不回”。同一个 prompt、同一个模型名、同一个参数今天和明天的结果可能因为模型版本、路由、采样参数不同而变化。因此建议把模型名、请求时间、供应商出口、usage、请求 ID、原始响应都记录下来。下面这段脚本在本地创建 SQLite 表并写入一条真实请求结果。SQL 由你在本地执行表也建在本地文件里不涉及生产库。import json import os import sqlite3 import time from openai import OpenAI DB_PATH token_usage.db conn sqlite3.connect(DB_PATH) conn.execute( CREATE TABLE IF NOT EXISTS llm_usage ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_at TEXT NOT NULL, provider TEXT NOT NULL, model TEXT NOT NULL, prompt_tokens INTEGER, completion_tokens INTEGER, total_tokens INTEGER, request_id TEXT, latency_ms INTEGER, raw_usage TEXT ) ) conn.commit() client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlhttps://taotoken.net/api, ) model os.environ.get(TAOTOKEN_MODEL, deepseek-chat) start time.time() resp client.chat.completions.create( modelmodel, messages[ {role: user, content: 解释 temperature 对代码生成任务的影响不超过 120 字。} ], temperature0.2, ) latency_ms int((time.time() - start) * 1000) usage resp.usage raw_usage usage.model_dump() if hasattr(usage, model_dump) else json.loads(str(usage)) conn.execute( INSERT INTO llm_usage ( created_at, provider, model, prompt_tokens, completion_tokens, total_tokens, request_id, latency_ms, raw_usage ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) , ( time.strftime(%Y-%m-%d %H:%M:%S), taotoken, model, getattr(usage, prompt_tokens, None), getattr(usage, completion_tokens, None), getattr(usage, total_tokens, None), resp.id, latency_ms, json.dumps(raw_usage, ensure_asciiFalse), ), ) conn.commit() conn.close() print(resp.choices[0].message.content) print(已记录用量:, resp.id)运行后可以查询本地记录SELECT created_at, provider, model, prompt_tokens, completion_tokens, total_tokens, latency_ms, request_id FROM llm_usage ORDER BY id DESC LIMIT 10;如果你要做 OpenRouter 与 TaoToken 出口的对比可以再加一个route字段例如openrouter_original与taotoken_export。同一组 prompt 分别跑两次记录模型名、token 用量、延迟和错误码。注意不要在同一行业务请求里重复写库导致统计翻倍评测脚本可以独立记录生产服务则用异步队列或日志管道汇总。模型名管理建议使用别名映射。例如业务代码只写deepseek-chat具体发送时再解析MODEL_ALIASES { deepseek-chat: os.environ.get(TAOTOKEN_MODEL, deepseek-chat), deepseek-reasoner: os.environ.get(TAOTOKEN_REASONER_MODEL, deepseek-reasoner), } def resolve_model(alias: str) - str: if alias not in MODEL_ALIASES: raise ValueError(f未知模型别名: {alias}) return MODEL_ALIASES[alias]这样 OpenRouter 工作流里的模型选择、A/B 实验、回退策略都可以通过配置切换而不需要改业务代码。记录时同时保存“别名”和“实际模型名”后面分析时才知道当时到底调用了哪个模型。5. CLI 双通道Claude Code settings.json、Codex config.toml 与 CC Switch 三件套除了应用代码很多工程师还会在 Claude Code、Codex 这类 CLI 里调用模型。它们的配置方式不同不能把 Claude Code 的ANTHROPIC_*环境变量套到 Codex 上。下面分别给出可复制的配置思路具体模型名请以 TaoToken 控制台和文档为准。CLI 配置要点可以在 TaoToken 官网 的文档入口进一步核对。Claude Code 常用settings.json管理环境变量。一个简化示例如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-5 } }这里的ANTHROPIC_AUTH_TOKEN填你的 TaoToken API KeyANTHROPIC_BASE_URL填https://taotoken.net/api。模型名不要照抄本文的示例按你在 TaoToken 中可用且想在 Claude Code 里使用的模型填写。Claude Code 的配置只适用于 Claude Code不要把这段 JSON 直接塞进 Codex 配置。Codex 使用config.toml配置结构通常包含默认模型和模型供应商。示例model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat使用前在 shell 里设置export TAOTOKEN_API_KEYYOUR_API_KEYCodex 这里读取的是TAOTOKEN_API_KEY不是ANTHROPIC_AUTH_TOKEN。如果你原来的 Codex 配置里写的是 OpenAI 官方地址把base_url替换为https://taotoken.net/api并确认wire_api与 TaoToken 文档要求一致。不同 Codex 版本配置字段可能有差异改完后先用一个最小 prompt 验证。如果你使用 CC Switch 类工具切换多个供应商可以把它理解成“三件套”Base URL、API Key、Model。新增一个自定义供应商时填写名称TaoToken Base URLhttps://taotoken.net/api API KeyYOUR_API_KEY 默认模型deepseek-chat这里的模型名仍然以实际可用列表为准。CC Switch 的价值在于快速切换供应商和模型而不是把 Key 写在多个地方。建议只在一个安全位置保存 Key然后由 CC Switch 或环境变量注入。切换后跑一条最小请求确认返回体里有 usage再用于正式评测。6. 排障清单401、404、模型不存在与用量为空怎么查接入过程中最常见的问题不是模型能力而是配置细节。按下面顺序排查可以覆盖大部分报错。第一类401 Unauthorized。检查Authorization头是否为Bearer YOUR_API_KEY注意 Bearer 大小写、空格数量、Key 是否复制完整。如果 Key 放在.env确认运行进程已经加载如果放在 CI确认变量没有被子任务覆盖。不要用curl -H Authorization: YOUR_API_KEY这种缺少 Bearer 的写法。第二类404 Not Found。最常见原因是 Base URL 与路径拼接重复。本文约定 Base URL 是https://taotoken.net/api使用 SDK 时它会拼/chat/completions使用裸 HTTP 时你手动拼https://taotoken.net/api/chat/completions。不要在 Base URL 后再写/v1也不要写两次/chat/completions。如果你从 OpenRouter 迁移过来原来的https://openrouter.ai/api/v1不能原样保留。第三类400 或模型不存在。确认model字段与控制台显示完全一致包括大小写、连字符、命名空间。不要凭记忆写模型名也不要把 OpenRouter 的模型标识直接当成 TaoToken 的模型名。把模型名放进TAOTOKEN_MODEL环境变量出问题时只改一处。第四类usage 为空或为 null。非流式请求通常会返回 usage流式请求需要显式开启stream_options{include_usage: True}。如果兼容层或 SDK 版本不支持可以先改用非流式采样或者在服务端用请求前后 token 估算兜底。不要把估算值当成精确值写进计费报表。第五类429 或超时。为 SDK 设置合理 timeout并加入指数退避重试。重试时要记录request_id避免同一业务请求被重复计费或重复写库。对于评测任务建议串行或低并发运行减少限流干扰。第六类结果不一致。检查 temperature、top_p、max_tokens、stream 是否一致检查模型别名是否解析到了不同实际模型。用量记录表里同时保存别名和实际模型名排查时就能知道差异来自哪里。7. 从评测到生产把 OpenRouter 的模型选择沉淀为可切换配置当你能稳定跑通单条请求后下一步是把配置从脚本里抽出来。一个简单做法是用 YAML 或环境变量描述供应商和模型别名providers: openrouter_original: base_url: https://openrouter.ai/api/v1 api_key_env: OPENROUTER_API_KEY taotoken_export: base_url: https://taotoken.net/api api_key_env: TAOTOKEN_API_KEY models: deepseek-chat: provider: taotoken_export model: deepseek-chat deepseek-reasoner: provider: taotoken_export model: deepseek-reasoner业务代码只读取模型别名然后根据 provider 创建客户端。切换供应商时改配置不改业务逻辑。评测脚本可以遍历 provider 和模型别名组合统一写入llm_usage表。这样你得到的不只是“哪个模型回答更好”还包括“哪个出口的 token 用量、延迟、错误率更符合预期”。如果你希望进一步统一 Key 与出口管理可以在 TaoToken 官网 控制台里管理 API Key把不同环境、不同项目的 Key 分开。开发环境、评测环境、生产环境不要共用一个 Key。Key 轮换时只改环境变量或密钥管理服务不改代码仓库。生产环境还要考虑日志脱敏。不要把完整 Key、完整 prompt、完整响应体无差别写入日志。用量记录可以只保存 token 数、模型名、request id、延迟和错误码原始响应按需采样保存。如果涉及用户数据落库前做字段过滤。最后把一次成功的请求固定成冒烟测试curl -sS https://taotoken.net/api/chat/completions \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [{role: user, content: 只回复ok}], max_tokens: 8 }冒烟测试通过后再运行完整评测。每次切换 Base URL、模型名、Key 或 SDK 版本都先跑冒烟测试再跑用量记录脚本。这样 OpenRouter 工作流里的 DeepSeek 调用就变成可复现、可审计、可切换的工程配置。8. 可跟做清单与入口把上面的步骤压缩成一份可跟做清单打开官网创建 API Key保存为YOUR_API_KEY。设置TAOTOKEN_BASE_URLhttps://taotoken.net/api。用 curl 调https://taotoken.net/api/chat/completions确认请求头Authorization: Bearer正确。用 Python 或 Node.js SDK 复现同一条请求打印usage。把模型名、prompt tokens、completion tokens、total tokens、request id 写入本地 SQLite。在 Claude Code 用settings.json配ANTHROPIC_*在 Codex 用config.toml配base_url与env_key不要混用。在 CC Switch 里按 Base URL、API Key、Model 三件套新增 TaoToken 供应商。每次切换配置先跑冒烟测试再跑评测和用量记录。如果你还没有 Key可以从下面入口进入。先体验模型对话再选择适合的 Coding Plan然后创建 API Key最后按 Claude Code 文档完成 CLI 配置模型对话https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentopenrouter_deepseek_cta_chatCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentopenrouter_deepseek_cta_plan创建 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentopenrouter_deepseek_cta_keysClaude Code 文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentopenrouter_deepseek_cta_claudecode先把 Key 创建好再把 Base URL 填为https://taotoken.net/api然后用文中的 curl 或 Python 示例跑通第一条 DeepSeek 请求并把 usage 写入本地表。这样你既保留了 OpenRouter 工作流的评测习惯又把 Key 与出口管理收敛到了 TaoToken。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。