news 2026/9/18 4:35:38

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
看 OpenRouter 周请求数时,TaoToken 帮 DeepSeek 记账

1. 从 OpenRouter 周请求榜切到可查账的 DeepSeek 调用

最近 OpenRouter 周请求榜和开源权重模型的讨论很多,TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=openrouter_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_KEY="YOUR_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_url,SDK 会自动拼接路径。

from openai import OpenAI client = OpenAI( api_key="YOUR_API_KEY", base_url="https://taotoken.net/api" ) resp = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "user", "content": "用三句话说明开源权重模型评测时最应该记录哪些指标"} ], temperature=0.2 ) print(resp.choices[0].message.content) print(resp.usage)

运行后,重点看resp.usage。它通常会包含prompt_tokenscompletion_tokenstotal_tokens。这三个字段就是后面记账的基础。模型名不要凭印象写,建议到 TaoToken 模型对话页复制当前可用的模型名:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat_first 。不同模型别名、上下文长度、是否支持流式用量返回,都可能影响你的评测脚本。

2. 在 TaoToken 创建 Key:请求头、Base URL 与模型名核对

这一节按可跟做步骤来。先打开 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=create_key_flow ,完成登录后进入 API Keys 页面:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys 。创建 Key 后,你会得到一串只显示一次或部分隐藏的密钥。把它填到本地环境变量,不要直接写进代码仓库。

建议本地建一个.env文件,只用于测试,并且加入.gitignore

# .env TAOTOKEN_API_KEY=YOUR_API_KEY TAOTOKEN_BASE_URL=https://taotoken.net/api TAOTOKEN_DEFAULT_MODEL=deepseek-chat

然后在 Python 或 shell 中读取。Python 可以用python-dotenv

import os from dotenv import load_dotenv from openai import OpenAI load_dotenv() client = OpenAI( api_key=os.environ["TAOTOKEN_API_KEY"], base_url=os.environ["TAOTOKEN_BASE_URL"] ) model = os.environ.get("TAOTOKEN_DEFAULT_MODEL", "deepseek-chat") resp = client.chat.completions.create( model=model, messages=[{"role": "user", "content": "返回一个 JSON,包含 ok 字段和当前模型名"}], temperature=0 ) print(resp.model) print(resp.usage.total_tokens)

在核对配置时,建议做一个检查清单:

  1. Base URL 是否为https://taotoken.net/api,不要带 UTM,也不要随手加多余的/v1,除非你使用的工具文档明确要求。
  2. 请求头是否为Authorization: Bearer YOUR_API_KEYContent-Type: application/json
  3. 模型名是否从 TaoToken 控制台或模型页复制,而不是从旧笔记里抄。
  4. 环境变量是否真的被当前终端加载。可以在终端执行echo $TAOTOKEN_API_KEY检查,但不要截图或发到公开渠道。
  5. 如果使用代理或网关,只设置标准 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": f"Bearer {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, headers=headers, json=payload, timeout=60) 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_key=os.environ["TAOTOKEN_API_KEY"], base_url="https://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( model=MODEL, messages=[ {"role": "system", "content": "你是严谨的模型评测助手,回答尽量短。"}, {"role": "user", "content": prompt}, ], temperature=0.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", encoding="utf-8") as f: f.write(json.dumps(row, ensure_ascii=False) + "\n") return row if __name__ == "__main__": for i, p in enumerate([ "解释一下模型评测中的 pass@k。", "用一句话说明 token 用量为什么要按 prompt 和 completion 分开记。", "给出一个开源权重模型服务稳定性的检查项。", ]): row = ask(p, tag=f"deepseek_eval_{i}") print(row["model"], row["total_tokens"], row["elapsed_ms"], "ms")

运行后,你会得到一个 JSONL 文件,每行一条调用记录。接着用 Python 汇总成 CSV:

import 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", encoding="utf-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="", encoding="utf-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( model="deepseek-chat", messages=[{"role": "user", "content": "输出 50 字以内的接入建议"}], stream=True, 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_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="claude-sonnet-4-20250514"

这里要特别注意:ANTHROPIC_BASE_URLhttps://taotoken.net/api,不要带 UTM 参数。ANTHROPIC_AUTH_TOKEN填你在 TaoToken 创建的YOUR_API_KEYANTHROPIC_MODEL填你实际要用的模型名,具体以 TaoToken Claude Code 文档和模型页为准:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_doc 。如果你把ANTHROPIC_*写到 Codex 的配置里,就会出现工具读不到配置或鉴权失败的问题,下一节会单独说明 Codex 的正确做法。

配置完成后,建议新开一个终端窗口,再启动 Claude Code。可以用下面命令确认环境变量已经进入当前进程:

env | grep ANTHROPIC

输出中应该能看到ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_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_KEY="YOUR_API_KEY"

如果你在 Windows PowerShell 中,写法不同:

$env:TAOTOKEN_API_KEY="YOUR_API_KEY"

Codex 侧的关键点是env_key。它告诉 Codex 从哪个环境变量读取 Key。这里用TAOTOKEN_API_KEY是为了和 Claude Code 的ANTHROPIC_AUTH_TOKEN区分开。不要把 Claude Code 的ANTHROPIC_BASE_URLANTHROPIC_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 URL:https://taotoken.net/api API Key:YOUR_API_KEY 默认模型:deepseek-chat

如果 CC Switch 里区分 Claude 和 Codex,建议建两个配置项,而不是一个配置到处复用:

配置一:TaoToken-ClaudeCode Base URL:https://taotoken.net/api API Key:YOUR_API_KEY 模型:claude-sonnet-4-20250514 配置二:TaoToken-Codex Base URL:https://taotoken.net/api API Key:YOUR_API_KEY 模型:gpt-5-codex

这样切换时不会把 Claude Code 的模型名带到 Codex,也不会把 Codex 的model_provider逻辑套到 Claude Code。切换后一定要重启对应客户端或新开终端,因为很多工具只在启动时读取环境变量。验证方式很简单:在 Claude Code 中问一个短问题,看是否返回;在 Codex 中执行一个只读命令,看是否正常。两边都通过,再开始跑批量评测。

CC Switch 的另一个价值是保留多套供应商配置,方便做对比。例如你可以保留一个默认供应商,再保留一个 TaoToken 配置,用同一个评测脚本分别跑。但要注意,脚本侧不要依赖 CC Switch 的切换状态,最好在每次运行时显式打印当前base_urlmodel,写进 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_url="https://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_source=taotoken_aicg_blog_end&utm_content=model_chat_first 复制模型名,不要从旧文章里抄。模型名大小写、连字符、版本后缀都可能导致失败。

第五,usage 对不上。先区分prompt_tokenscompletion_tokenstotal_tokens。有些请求可能包含 system message,有些可能启用了流式,有些可能在客户端做了重试。每次请求都要记录request_id,并把本地记录和控制台用量按时间窗口对齐。如果使用流式,确认是否支持stream_options,不支持时改用非流式做基准。不要把缓存命中、重试请求、失败请求混入成功用量。

第六,日志脱敏。记录请求时只记录模型名、Base URL 主机、状态码、耗时和 usage,不要记录完整 Key。如果需要排查鉴权,可以记录 Key 的后四位或哈希,不要记录完整值。TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=troubleshoot 可以用于查看控制台状态和用量入口,但对外分享日志前一定要清理敏感字段。

8. 文末 CTA:先在模型对话试,再用 Coding Plan,最后创建 Key 与 Claude Code 文档

如果你准备把这套 DeepSeek 记账流程跑起来,建议按下面的高转化路径操作。第一步,先到模型对话页做一轮最小验证,确认模型名和返回格式:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat_first 。第二步,如果你要把模型接入日常开发流程,可以查看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan 。第三步,到 API Keys 页面创建或管理 Key,并把 Base URL 填为https://taotoken.net/api:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys 。第四步,如果你使用 Claude Code,直接对照 Claude Code 文档完成settings.jsonANTHROPIC_*配置:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_doc 。

最后再强调一次工程顺序:先用一个 prompt 验证Authorization: Bearer YOUR_API_KEYhttps://taotoken.net/api,再写脚本记录modelprompt_tokenscompletion_tokenstotal_tokens,最后扩展到 Claude Code、Codex 和 CC Switch。OpenRouter 周请求榜和开源权重模型热度会变化,但你本地这套请求头、配置文件和用量账本是可以复用的。把模型名、Base URL、Key、usage 四个字段管好,DeepSeek 一类模型的评测和接入就不会停留在“看起来热闹”,而是变成可追踪、可复盘、可对比的真实数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 4:29:33

猫抓 cat-catch 完整指南:浏览器资源嗅探与 M3U8 视频下载

猫抓 cat-catch 完整指南:浏览器资源嗅探与 M3U8 视频下载 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)是一款浏览器资源嗅探扩…

作者头像 李华
网站建设 2026/9/18 4:20:59

正则转义避坑指南:反斜杠三层、元字符与多引擎差异

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 4:19:12

神经网络数据集规模与模型性能:学习曲线实战指南

1. 神经网络和数据集的思考:先把"数据越多越好"这句话拆开看做神经网络这几年,我被问得最多的问题之一就是:"我这个模型效果不行,是不是训练数据太少了?再弄几万条是不是就好了?"问这话…

作者头像 李华
网站建设 2026/9/18 4:18:20

打造Hermes开发工作台:像oh-my-zsh一样管理工具链

先说个背景。我平时的工作流里有一大半时间泡在终端里,跟各种命令行工具打交道,这中间最让我省心也最让我上头的配置管理工具,就是oh-my-zsh。它把Zsh从一个普通的Shell变成了一个自带插件体系、主题系统、路径补全、快捷键增强的“终端利器”…

作者头像 李华
网站建设 2026/9/18 4:17:17

遥感影像绿地提取:场景分类优于语义分割的工程实践

简介:针对城市绿地信息提取中小样本分类困难、分类模型单一等问题,这份PDF完整给出基于卷积神经网络(CNN)的场景分类技术路线:利用WorldView-2高分辨率遥感影像建立影像库,通过LiSVM分类器完成像元二分类&a…

作者头像 李华
网站建设 2026/9/18 4:16:46

AI系统提示词泄露:四类典型场景与工程级防护实践

1. 项目概述:为什么“system_prompts_leaks”不是漏洞新闻,而是AI工程实践的照妖镜“system_prompts_leaks”这个词组乍看像一条安全通报,实则是一面映照当前大模型应用层真实水位的镜子。它不指向某个具体CVE编号,也不代表某家厂…

作者头像 李华