拓冰建站拓冰建站
首页 / 资讯中心 / 正文

看 OpenRouter 周请求数时,TaoToken 帮 DeepSeek 记账

1. 从 OpenRouter 周请求榜切到可查账的 DeepSeek 调用最近 OpenRouter 周请求榜和开源权重模型的讨论很多TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentopenrouter_deepseek_ledger 可以直接拿 Key。对做应用开发或模型评测的工程师来说榜单只能说明热度真正要落地时绕不开三个问题请求头发什么、Base URL 填什么、模型名和 token 用量怎么记。本文不走新闻评论路线而是围绕 DeepSeek 这类开源权重模型给你一套可复现的接入与记账方案先从 TaoToken 获取 Key把 Base URL 固定为https://taotoken.net/api再用 OpenAI 兼容接口发请求最后把响应里的usage字段写成 JSONL/CSV方便和 OpenRouter 周请求数、模型用量做本地复盘。这里要先明确一个工程原则供应商入口和调用入口要分开管理。入口用 TaoToken 官网完成注册、创建 Key、查看额度与用量调用入口只认 Base URL 和模型名。这样你在 Claude Code、Codex、CC Switch、Python 脚本之间切换时不会因为把不同工具的配置变量混在一起而出现 401、404、模型不存在等问题。先看最小可运行请求。假设你已经在 TaoToken 控制台创建了 Key并且把 Key 放在环境变量里export TAOTOKEN_API_KEYYOUR_API_KEY然后用curl验证请求头和 Base URL 是否正确curl -sS https://taotoken.net/api/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [ { role: user, content: 用三句话说明开源权重模型评测时最应该记录哪些指标 } ], temperature: 0.2 }这个请求里有两个关键点。第一Authorization必须是Bearer YOUR_API_KEY不是Basic也不是把 Key 拼到 URL 上。第二Base URL 是https://taotoken.net/api请求路径按 OpenAI 兼容形式拼成/chat/completions。如果你使用 OpenAI SDK通常只需要设置base_urlSDK 会自动拼接路径。from openai import OpenAI client OpenAI( api_keyYOUR_API_KEY, base_urlhttps://taotoken.net/api ) resp client.chat.completions.create( modeldeepseek-chat, messages[ {role: user, content: 用三句话说明开源权重模型评测时最应该记录哪些指标} ], temperature0.2 ) print(resp.choices[0].message.content) print(resp.usage)运行后重点看resp.usage。它通常会包含prompt_tokens、completion_tokens、total_tokens。这三个字段就是后面记账的基础。模型名不要凭印象写建议到 TaoToken 模型对话页复制当前可用的模型名https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chat_first 。不同模型别名、上下文长度、是否支持流式用量返回都可能影响你的评测脚本。2. 在 TaoToken 创建 Key请求头、Base URL 与模型名核对这一节按可跟做步骤来。先打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcreate_key_flow 完成登录后进入 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keys 。创建 Key 后你会得到一串只显示一次或部分隐藏的密钥。把它填到本地环境变量不要直接写进代码仓库。建议本地建一个.env文件只用于测试并且加入.gitignore# .env TAOTOKEN_API_KEYYOUR_API_KEY TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_DEFAULT_MODELdeepseek-chat然后在 Python 或 shell 中读取。Python 可以用python-dotenvimport os from dotenv import load_dotenv from openai import OpenAI load_dotenv() client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ[TAOTOKEN_BASE_URL] ) model os.environ.get(TAOTOKEN_DEFAULT_MODEL, deepseek-chat) resp client.chat.completions.create( modelmodel, messages[{role: user, content: 返回一个 JSON包含 ok 字段和当前模型名}], temperature0 ) print(resp.model) print(resp.usage.total_tokens)在核对配置时建议做一个检查清单Base URL 是否为https://taotoken.net/api不要带 UTM也不要随手加多余的/v1除非你使用的工具文档明确要求。请求头是否为Authorization: Bearer YOUR_API_KEY和Content-Type: application/json。模型名是否从 TaoToken 控制台或模型页复制而不是从旧笔记里抄。环境变量是否真的被当前终端加载。可以在终端执行echo $TAOTOKEN_API_KEY检查但不要截图或发到公开渠道。如果使用代理或网关只设置标准 HTTP 代理变量不要把 Key 放到 URL 参数里。请求头配置样例可以固定成下面这样后续 Claude Code、Codex、CC Switch 都围绕这个标准来排查POST /chat/completions HTTP/1.1 Host: taotoken.net Authorization: Bearer YOUR_API_KEY Content-Type: application/json Accept: application/json如果你用 HTTP 客户端例如 Pythonrequests可以这样写import os import requests url https://taotoken.net/api/chat/completions headers { Authorization: fBearer {os.environ[TAOTOKEN_API_KEY]}, Content-Type: application/json, Accept: application/json, } payload { model: deepseek-chat, messages: [{role: user, content: 只输出 pong}], temperature: 0, } r requests.post(url, headersheaders, jsonpayload, timeout60) r.raise_for_status() data r.json() print(data[choices][0][message][content]) print(data[usage])requests版本的好处是你能清楚看到 URL、headers、payload 三部分排障时比 SDK 更容易定位问题。无论用哪种方式最终目标都一样让请求以标准 OpenAI 兼容格式进入https://taotoken.net/api并把返回的usage记录下来。3. 评测脚本把 DeepSeek 的模型名和 token 用量写成 JSONL/CSV做模型评测时最怕的不是调用失败而是调用成功但账记错了。比如一次评测跑了 200 条 prompt模型名换了两次流式和非流式混用最后只记了一个总数没法归因。建议从一开始就用 JSONL 记录每次调用再用 CSV 做汇总。下面是一个可运行的记录脚本。它会调用 TaoToken 的 OpenAI 兼容接口保存模型名、耗时、prompt_tokens、completion_tokens、total_tokens 和请求 ID。模型名示例用deepseek-chat实际请以控制台为准。import os import csv import json import time import uuid from datetime import datetime, timezone from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlhttps://taotoken.net/api ) MODEL os.environ.get(TAOTOKEN_DEFAULT_MODEL, deepseek-chat) JSONL_PATH taotoken_usage.jsonl CSV_PATH taotoken_usage.csv def ask(prompt: str, tag: str eval): started time.time() resp client.chat.completions.create( modelMODEL, messages[ {role: system, content: 你是严谨的模型评测助手回答尽量短。}, {role: user, content: prompt}, ], temperature0.2, ) elapsed_ms int((time.time() - started) * 1000) usage resp.usage row { request_id: getattr(resp, id, str(uuid.uuid4())), created_at: datetime.now(timezone.utc).isoformat(), tag: tag, model: resp.model or MODEL, prompt: prompt, answer: resp.choices[0].message.content, prompt_tokens: usage.prompt_tokens if usage else None, completion_tokens: usage.completion_tokens if usage else None, total_tokens: usage.total_tokens if usage else None, elapsed_ms: elapsed_ms, } with open(JSONL_PATH, a, encodingutf-8) as f: f.write(json.dumps(row, ensure_asciiFalse) \n) return row if __name__ __main__: for i, p in enumerate([ 解释一下模型评测中的 passk。, 用一句话说明 token 用量为什么要按 prompt 和 completion 分开记。, 给出一个开源权重模型服务稳定性的检查项。, ]): row ask(p, tagfdeepseek_eval_{i}) print(row[model], row[total_tokens], row[elapsed_ms], ms)运行后你会得到一个 JSONL 文件每行一条调用记录。接着用 Python 汇总成 CSVimport json import csv from collections import defaultdict agg defaultdict(lambda: { calls: 0, prompt_tokens: 0, completion_tokens: 0, total_tokens: 0, }) with open(taotoken_usage.jsonl, r, encodingutf-8) as f: for line in f: row json.loads(line) key row[model] agg[key][calls] 1 agg[key][prompt_tokens] row[prompt_tokens] or 0 agg[key][completion_tokens] row[completion_tokens] or 0 agg[key][total_tokens] row[total_tokens] or 0 with open(taotoken_usage.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([model, calls, prompt_tokens, completion_tokens, total_tokens]) for model, v in agg.items(): writer.writerow([model, v[calls], v[prompt_tokens], v[completion_tokens], v[total_tokens]])这样你就能回答几个关键问题同一个模型名下跑了多少次、输入和输出 token 比例是多少、某次评测是否因为 prompt 太长导致成本异常。如果你同时对比多个开源权重模型只要在脚本里把MODEL改成控制台里的模型名并在tag里标记版本即可。不要把不同模型的结果混在同一列里否则后面很难复盘。对于流式响应usage不一定在每个 chunk 都返回。可以在请求中显式要求包含用量如果服务端支持通常在最后一个 chunk 给出统计stream client.chat.completions.create( modeldeepseek-chat, messages[{role: user, content: 输出 50 字以内的接入建议}], streamTrue, stream_options{include_usage: True} ) final_usage None for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end) if getattr(chunk, usage, None): final_usage chunk.usage print() print(final_usage)如果final_usage为空先确认你使用的模型和接口是否支持该参数再退回非流式调用做对账。不要用估算值替代真实usage尤其在评测报告里估算会让不同模型的比较失去意义。4. Claude Code 配置settings.json 里使用 ANTHROPIC_* 指向 TaoToken如果你在 Claude Code 里使用 TaoToken配置方式与 OpenAI SDK 不同。Claude Code 侧通常使用ANTHROPIC_*系列环境变量而不是OPENAI_*。你可以在settings.json里配置也可以在 shell 中导出。先看settings.json示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }如果你更习惯用 shell可以这样export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELclaude-sonnet-4-20250514这里要特别注意ANTHROPIC_BASE_URL填https://taotoken.net/api不要带 UTM 参数。ANTHROPIC_AUTH_TOKEN填你在 TaoToken 创建的YOUR_API_KEY。ANTHROPIC_MODEL填你实际要用的模型名具体以 TaoToken Claude Code 文档和模型页为准https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_code_doc 。如果你把ANTHROPIC_*写到 Codex 的配置里就会出现工具读不到配置或鉴权失败的问题下一节会单独说明 Codex 的正确做法。配置完成后建议新开一个终端窗口再启动 Claude Code。可以用下面命令确认环境变量已经进入当前进程env | grep ANTHROPIC输出中应该能看到ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。不要把完整 Key 输出到共享屏幕或日志里。如果 Claude Code 报 401先检查ANTHROPIC_AUTH_TOKEN是否被其他 shell 配置覆盖如果报模型不存在检查ANTHROPIC_MODEL是否从 TaoToken 侧复制如果报连接错误检查ANTHROPIC_BASE_URL是否被误写成带/v1或带查询参数的地址。另外Claude Code 的会话可能会产生多轮请求每轮请求的 token 用量会分散在工具日志中。如果你要做用量对账建议同时保留 TaoToken 控制台的用量记录和本地会话日志。控制台看总量本地日志看单次调用二者结合才能定位异常。5. Codex 配置config.toml 使用 model_providers不要混 ANTHROPIC_*Codex 的配置入口通常不是settings.json也不应该使用ANTHROPIC_*。它一般读取~/.codex/config.toml通过model_provider指定供应商。下面是一个面向 TaoToken 的配置示例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_KEY如果你在 Windows PowerShell 中写法不同$env:TAOTOKEN_API_KEYYOUR_API_KEYCodex 侧的关键点是env_key。它告诉 Codex 从哪个环境变量读取 Key。这里用TAOTOKEN_API_KEY是为了和 Claude Code 的ANTHROPIC_AUTH_TOKEN区分开。不要把 Claude Code 的ANTHROPIC_BASE_URL或ANTHROPIC_AUTH_TOKEN直接搬到 Codex 配置里因为 Codex 不按这套变量读取最终表现就是请求没有带上正确鉴权或者请求发到了非预期地址。配置完成后可以先用一个简单项目测试codex 用一句话说明当前项目的入口文件如果 Codex 报 404优先检查base_url是否为https://taotoken.net/api以及wire_api是否与 TaoToken 文档要求一致。如果报 401检查TAOTOKEN_API_KEY是否在当前终端可用。如果报模型不存在检查model字段是否与控制台模型名一致。Codex 和 Claude Code 可以共用同一个 TaoToken Key但不建议共用同一套环境变量名。Key 可以相同配置命名要分开。这样排障时你能快速判断是 Claude Code 的问题还是 Codex 的问题而不是在多个变量之间互相覆盖。6. CC Switch 三件套把 TaoToken 做成可切换供应商如果你同时使用 Claude Code、Codex 或多个模型供应商CC Switch 这类工具可以把配置切换做得更顺。核心不是装完就完而是把“三件套”填对Base URL、API Key、默认模型。对于 TaoToken三件套建议如下供应商名称TaoToken Base URLhttps://taotoken.net/api API KeyYOUR_API_KEY 默认模型deepseek-chat如果 CC Switch 里区分 Claude 和 Codex建议建两个配置项而不是一个配置到处复用配置一TaoToken-ClaudeCode Base URLhttps://taotoken.net/api API KeyYOUR_API_KEY 模型claude-sonnet-4-20250514 配置二TaoToken-Codex Base URLhttps://taotoken.net/api API KeyYOUR_API_KEY 模型gpt-5-codex这样切换时不会把 Claude Code 的模型名带到 Codex也不会把 Codex 的model_provider逻辑套到 Claude Code。切换后一定要重启对应客户端或新开终端因为很多工具只在启动时读取环境变量。验证方式很简单在 Claude Code 中问一个短问题看是否返回在 Codex 中执行一个只读命令看是否正常。两边都通过再开始跑批量评测。CC Switch 的另一个价值是保留多套供应商配置方便做对比。例如你可以保留一个默认供应商再保留一个 TaoToken 配置用同一个评测脚本分别跑。但要注意脚本侧不要依赖 CC Switch 的切换状态最好在每次运行时显式打印当前base_url和model写进 JSONL。这样即使中途切换过配置历史记录也不会混乱。7. 排障401、404、429、模型名与 usage 对不上接入 TaoToken 时常见问题可以按状态码和字段来定位。第一401 Unauthorized。先检查请求头是否为Authorization: Bearer YOUR_API_KEY。常见错误包括把 Key 写成YOUR_API_KEY字符串没有替换环境变量名写错shell 配置文件没有重新加载在 JSON 配置里漏了引号Key 前后有空格或换行。用curl复现时可以临时把-H打印出来检查但不要输出完整 Key。第二404 Not Found。多数情况是 Base URL 或路径拼错。Base URL 应是https://taotoken.net/api不要带 UTM不要重复写/api也不要随手加/v1除非工具文档明确要求。如果你用 OpenAI SDK设置base_urlhttps://taotoken.net/api后SDK 会拼接/chat/completions。如果你手写 HTTP 请求URL 写成https://taotoken.net/api/chat/completions。第三429 Too Many Requests。先降低并发增加重试退避。批量评测时不要一次性开几百个并发先用 1 到 3 个并发跑通再逐步增加。重试逻辑建议只对 429 和 5xx 做指数退避不要对 401 和 404 盲目重试。第四模型名不存在。不同供应商的模型别名可能不同必须以 TaoToken 控制台为准。到模型对话页 https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chat_first 复制模型名不要从旧文章里抄。模型名大小写、连字符、版本后缀都可能导致失败。第五usage 对不上。先区分prompt_tokens、completion_tokens、total_tokens。有些请求可能包含 system message有些可能启用了流式有些可能在客户端做了重试。每次请求都要记录request_id并把本地记录和控制台用量按时间窗口对齐。如果使用流式确认是否支持stream_options不支持时改用非流式做基准。不要把缓存命中、重试请求、失败请求混入成功用量。第六日志脱敏。记录请求时只记录模型名、Base URL 主机、状态码、耗时和 usage不要记录完整 Key。如果需要排查鉴权可以记录 Key 的后四位或哈希不要记录完整值。TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contenttroubleshoot 可以用于查看控制台状态和用量入口但对外分享日志前一定要清理敏感字段。8. 文末 CTA先在模型对话试再用 Coding Plan最后创建 Key 与 Claude Code 文档如果你准备把这套 DeepSeek 记账流程跑起来建议按下面的高转化路径操作。第一步先到模型对话页做一轮最小验证确认模型名和返回格式https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chat_first 。第二步如果你要把模型接入日常开发流程可以查看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_plan 。第三步到 API Keys 页面创建或管理 Key并把 Base URL 填为https://taotoken.net/apihttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keys 。第四步如果你使用 Claude Code直接对照 Claude Code 文档完成settings.json或ANTHROPIC_*配置https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_code_doc 。最后再强调一次工程顺序先用一个 prompt 验证Authorization: Bearer YOUR_API_KEY和https://taotoken.net/api再写脚本记录model、prompt_tokens、completion_tokens、total_tokens最后扩展到 Claude Code、Codex 和 CC Switch。OpenRouter 周请求榜和开源权重模型热度会变化但你本地这套请求头、配置文件和用量账本是可以复用的。把模型名、Base URL、Key、usage 四个字段管好DeepSeek 一类模型的评测和接入就不会停留在“看起来热闹”而是变成可追踪、可复盘、可对比的真实数据。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门