# RP 竞技场 CLI 需要 Node.js 22 或更新版本。登录 https://benchmark.galbands.com,在“投稿 → CLI 上传 Token”生成并复制当前账号的 Token。 ```bash curl -fsS https://benchmark.galbands.com/rp-arena-assets/rp-arena.mjs -o rp-arena.mjs node rp-arena.mjs upload --token YOUR_TOKEN --file submissions.json ``` Token 只在生成时显示。重置和撤销立即使旧 Token 失效。Token 投稿归属生成它的账号,并进入审核;权限包括读取投稿资料、查看自己的投稿和上传图片,不包含管理、删除、审核或投票。 也可通过 `RP_ARENA_TOKEN` 环境变量传入 Token,环境变量优先于 `--token`。默认站点为 `https://benchmark.galbands.com`,可用 `--site` 或 `RP_ARENA_URL` 指定其他部署。CLI 不保存 Token。 ## 命令 ```bash node rp-arena.mjs doctor --token YOUR_TOKEN node rp-arena.mjs models claude node rp-arena.mjs cards --token YOUR_TOKEN node rp-arena.mjs prompts --token YOUR_TOKEN node rp-arena.mjs resolve prompt '卡名 / 提示词名' --token YOUR_TOKEN node rp-arena.mjs submissions --token YOUR_TOKEN node rp-arena.mjs upload --file submissions.json --dry-run node rp-arena.mjs image --file image.png --token YOUR_TOKEN node rp-arena.mjs request GET /api/categories --token YOUR_TOKEN ``` 列表可用 `--query` 筛选、`--limit` 限制数量。`submissions` 返回当前账号最近 100 份投稿。`request` 只支持 GET。 ## JSON 文件 单个对象表示一份投稿,对象数组表示批量投稿,也支持 `{"submissions": [...]}`。 现有提示词: ```json { "categoryId": "从 prompts 查询的提示词 ID", "outputs": [ { "modelId": "从 models 查询的模型 ID", "body": "模型输出的完整正文", "preset": "预设名,可省略", "note": "小说明,可省略" } ] } ``` 自创提示词: ```json { "card": "酒馆卡名称", "name": "提示词名称", "prompt_md": "提示词内容", "outputs": [ { "model": "模型库中的模型名称", "bodyFile": "./texts/output.txt" } ] } ``` 已有酒馆卡可传 `card_id`;新卡也可以传 `card: {"name":"卡名","introduction_md":"介绍","source_url":"https://example.com/card"}`。新卡与提示词在审核通过后创建。 模型使用 `modelId`、`model` 或 `proposedModel` 三选一。`model` 支持模型名称或 OpenRouter ID;找不到匹配项时会作为新模型申请随投稿审核。`bodyFile` 相对于 JSON 文件所在目录解析,与 `body` 二选一。`--file -` 从标准输入读 JSON,正文文件相对于当前目录解析。 每段正文最多 100,000 字符。现有提示词会按每批最多 30 段和每次请求最多 2 MiB 自动分批;新提示词每份投稿须在这两个限制内,更多正文可等提示词审核通过后使用它的 ID 上传。`--dry-run` 会检查整个文件并输出分批计划,不提交投稿。 普通账号通过 CLI 每天最多 50 份投稿,按账号累计;站长账号通过 CLI 投稿不限次数。每个批次算一份投稿。图片每小时最多 30 次、单张最多 8 MiB。 ## 输出和失败处理 所有业务命令默认输出 JSON,`--json` 也可显式传入。`--help` 和 `--version` 输出文本。 成功:`{"ok":true,"data":...}`。列表的 data 包含 `models`、`cards` 或 `prompts` 数组;解析名称返回对应对象;图片上传返回 `url` 和 `id`;投稿返回 `submissions` 数组,每项包含 `batch`、`source`、`id`、`status`。 失败:`{"ok":false,"error":{"code":"...","message":"...","status":400}}`,退出码为 1。批量上传中途失败还返回 `completed`、`failed_batch` 和 `remaining_batches`;CLI 不自动重试写入。网络中断时应先用 `submissions` 核对是否已收到该批次。 ## HTTP 接口 CLI 请求使用 `Authorization: Bearer YOUR_TOKEN`。不需要浏览器 Cookie、Origin 或 CSRF。 | 方法 | 路径 | 用途 | |---|---|---| | GET | `/api/token/me` | 当前 Token 所属账号 | | GET | `/api/models` | 模型列表 | | GET | `/api/categories` | 酒馆卡、提示词及 ID | | GET | `/api/submissions` | 本账号最近 100 份投稿 | | POST | `/api/submissions` | JSON 投稿,响应包含 `id`、`status` | | POST | `/api/uploads` | multipart 表单,文件字段 `image`;响应包含 `id`、`url` | Token 的生成、重置、撤销通过网页登录后操作 `/api/upload-token`,仍受 Cookie 与 CSRF 校验保护。 ## 本地安装 源码在 `cli/rp-arena.mjs`,无额外依赖。本机已安装的命令名为 `rp-arena`,可从任意目录运行。