平行世界

如何上榜

审核通过后,你会拿到一串专属上报密钥。把它接入你的本地 AI 使用流程后,系统只统计 Token 数量,不上传 prompt、response、源码或模型 API Key。

3 步接入

1拿到你的上报密钥

申请通过后,管理员会在后台看到你的 上报密钥,格式类似 pw_xxx。这串密钥代表你的榜单身份。

2选择最省事的接入方式

我用 Codex / Claude Code 复制下面那段话给你的 AI 编程助手,让它帮你在本地项目里接入。
我自己写代码 直接用 HTTP 接口上报 totalTokens,也可以接 OpenAI SDK 的 usage 字段。

3先发一条测试数据

第一次建议先上传 12,345 个测试 Token。成功后,刷新日榜就能看到你的名字和 Token 数。

curl -X POST https://www.ceorank.cn/api/usage \ -H "Authorization: Bearer {{KEY}}" \ -H "Content-Type: application/json" \ -d '{"totalTokens":12345,"inputTokens":8000,"outputTokens":4345,"model":"manual-test"}'
注意:上报密钥只发给你自己的 AI 助手或放在你自己的本地环境变量里,不要公开截图、发群或放进公开仓库。别人拿到后可以用你的名义上报。

不想自己动手?

把这段话直接发给 Codex、Claude Code、Cursor Agent 或你常用的 AI 编程助手:

请帮我在这台电脑的当前项目里接入 CEO Token 排行榜上报。 我的上报接口是:https://www.ceorank.cn/api/usage 我的上报密钥是:{{KEY}} 要求: 1. 只上传 Token 数量,不上传 prompt、response、源码、文件内容或任何 API Key。 2. 如果项目里使用 OpenAI SDK,请在每次模型请求完成后读取 response.usage。 3. 上传字段包括 totalTokens、inputTokens、outputTokens、model、occurredAt。 4. 如果项目里没有统一的模型调用入口,请先帮我找最适合接入的位置,并告诉我你改了哪些文件。 5. 完成后请先发送一条 12345 totalTokens 的测试上报,确认接口返回成功。

OpenAI SDK 示例

JSNode.js

async function reportUsage(usage, model) { await fetch("https://www.ceorank.cn/api/usage", { method: "POST", headers: { "content-type": "application/json", authorization: "Bearer {{KEY}}" }, body: JSON.stringify({ inputTokens: usage.prompt_tokens || usage.input_tokens || 0, outputTokens: usage.completion_tokens || usage.output_tokens || 0, totalTokens: usage.total_tokens || 0, model, occurredAt: new Date().toISOString() }) }); }

PYPython

import requests from datetime import datetime, timezone def report_usage(usage, model): requests.post( "https://www.ceorank.cn/api/usage", headers={"Authorization": "Bearer {{KEY}}"}, json={ "inputTokens": getattr(usage, "prompt_tokens", 0) or getattr(usage, "input_tokens", 0) or 0, "outputTokens": getattr(usage, "completion_tokens", 0) or getattr(usage, "output_tokens", 0) or 0, "totalTokens": getattr(usage, "total_tokens", 0) or 0, "model": model, "occurredAt": datetime.now(timezone.utc).isoformat(), }, timeout=10, ).raise_for_status()