API 接入与多协议支持
统一说明 OpenAI、Anthropic 和 Embeddings 调用方式,含 JEV 决策模型,含 Wan 3.0 视频生成。
接口概览
| 能力 | 接口 |
|---|---|
| 模型列表 | GET /v1/models |
| OpenAI 对话 | POST /v1/chat/completions |
| Anthropic 对话 | POST /v1/messages |
| 向量嵌入 | POST /v1/embeddings |
| Wan 3.0 视频生成 | POST /v1/videos/generations;接入说明 |
| JEV 决策(灰度) | POST /v1/decision、POST /v1/systemone;接入说明 |
统一基础地址:https://tokenrhythm.studio/v1。
鉴权与安全
所有请求均通过 HTTPS 发送,并在请求头携带 Authorization: Bearer sk_xxx。API Key 仅在创建成功时完整展示一次,不要写入公开代码、浏览器脚本或日志。
OpenAI Chat Completions
cURL
curl https://tokenrhythm.studio/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_xxx" \
-d '{
"model": "deepseek-v4-flash",
"messages": [{ "role": "user", "content": "你好" }],
"stream": false
}'Python
from openai import OpenAI
client = OpenAI(
api_key="sk_xxx",
base_url="https://tokenrhythm.studio/v1",
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好"}],
)
print(response.choices[0].message.content)Node.js
const response = await fetch("https://tokenrhythm.studio/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer sk_xxx"
},
body: JSON.stringify({
model: "deepseek-v4-flash",
messages: [{ role: "user", content: "你好" }]
})
});
console.log(await response.json());Anthropic Messages
Anthropic 原生协议需要 anthropic-version: 2023-06-01,并且必须传入 max_tokens。
cURL
curl https://tokenrhythm.studio/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_xxx" \
-H "anthropic-version: 2023-06-01" \
-d '{"model":"deepseek-v4-flash","max_tokens":512,"messages":[{"role":"user","content":"你好"}]}'Python
import requests
response = requests.post(
"https://tokenrhythm.studio/v1/messages",
headers={
"Authorization": "Bearer sk_xxx",
"anthropic-version": "2023-06-01",
},
json={
"model": "deepseek-v4-flash",
"max_tokens": 512,
"messages": [{"role": "user", "content": "你好"}],
},
)
print(response.json())Node.js
const response = await fetch("https://tokenrhythm.studio/v1/messages", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer sk_xxx",
"anthropic-version": "2023-06-01"
},
body: JSON.stringify({
model: "deepseek-v4-flash",
max_tokens: 512,
messages: [{ role: "user", content: "你好" }]
})
});
console.log(await response.json());Embeddings
向量模型以模型接口返回的当前可用模型为准。
cURL
curl https://tokenrhythm.studio/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_xxx" \
-d '{"model":"embedding-model-id","input":"需要向量化的文本"}'Python
from openai import OpenAI
client = OpenAI(api_key="sk_xxx", base_url="https://tokenrhythm.studio/v1")
response = client.embeddings.create(
model="embedding-model-id",
input="需要向量化的文本",
)
print(response.data[0].embedding)Node.js
const response = await fetch("https://tokenrhythm.studio/v1/embeddings", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer sk_xxx"
},
body: JSON.stringify({
model: "embedding-model-id",
input: "需要向量化的文本"
})
});
console.log(await response.json());流式响应
OpenAI 协议传入 stream: true 后按 SSE 返回,正文增量位于 choices[0].delta.content。Anthropic 协议按原生 Messages 流式事件返回;两种协议不要混用解析器。
工具调用
平台支持 OpenAI 新版 tools、tool_choice、tool_calls 字段。DeepSeek 的 tool_choice 使用 none、auto 或 required,不要传对象形式。
排查错误
请求失败时先记录响应中的 traceId,再对照错误码检查鉴权、余额、模型能力、输出长度和限流状态。
JEV 决策模型 API
以下接口和示例使用当前站点域名;请在对应环境中调用。
JEV 是结构化决策模型,不是聊天模型。当前仅对指定账号灰度开放,灰度试用阶段暂不计费。调用次数及上游可确认的 Token 用量会出现在用户中心和调用日志,费用为 0。
Token 口径:/v1/decision 优先记录打包输入 input_tokens,未提供时使用 input_details.expanded_tokens(多题展开输入);两者不相加。/v1/systemone 记录 usage.input_tokens 和 usage.output_tokens,后者是答案序列化长度,不代表生成 Token。上游未上报的 Token 会在调用明细中标为未知。
接口与鉴权
- 推荐:
POST https://tokenrhythm.studio/v1/decision。 - System One 兼容格式:
POST https://tokenrhythm.studio/v1/systemone。 - 使用平台 API Key:
Authorization: Bearer sk_你的平台密钥;请求头Content-Type: application/json。 - 两个接口均为非流式 JSON;模型 ID 固定为
NeoHorse-Jev-4B。API Key 的模型权限和账号灰度名单同时生效。
最小请求
{
"model": "NeoHorse-Jev-4B",
"state": "路口信号灯为红色,前方有行人。",
"questions": {
"stop": {
"type": "noul",
"instructions": "现在是否应停车?"
}
}
}state 是背景或待判断内容,建议使用字符串,也可传结构化 JSON;questions 的键由调用方自行定义,读取答案时按相同的问题 ID 查找。noul 返回 0~1 的成立概率,业务上的“是/否”阈值由调用方决定。
题型与限制
| 题型 | criteria | 结果 |
|---|---|---|
choice | 选项名到描述的对象,1~255 项;保持选项顺序 | choice 和 probabilities |
noul | 可省略;也可提供 false/true 两个描述 | noul 成立概率 |
score | 从低到高的等级描述数组,2~10 档 | score 为从 0 编号的等级期望 |
纯文本每次 1~16 题,JSON 请求体不超过 1 MiB。图片放在顶层 image 字段,格式为一张 PNG 的 Base64 Data URL;带图时只能有一道题,完整 JSON 不超过 8 MiB,移除 image 后仍不超过 1 MiB。上游还有编码后的输入 token 上限,超出会返回 422。不会静默截断输入。
返回与错误
成功时直接返回含 model、answers 的结构化 JSON,不套聊天消息格式。/v1/systemone 使用同一请求体,返回可另含 usage、extensions;Choice/Score 可含 confidence,Noul 请读取 noul 字段。概率和 confidence 不能当作经校准的正确率。
平台错误统一返回 code、message、traceId。常见状态:401 平台密钥无效,403 未获灰度权限,413 请求体超限,422 参数或上游输入限制不满足,429 容量限流,502/503/504 上游或依赖故障。请保留 traceId 供排障;已发送的超时请求不要无条件重试。
JEV 不通过 /v1/chat/completions 或网页聊天 Playground 调用。
Wan 3.0 视频生成 API
以下接口和示例使用当前站点域名;请在对应环境中调用。
wan3.0-video 是异步视频生成模型。请先在模型页确认当前可用性和 480P、720P、1080P 的平台价格;目前没有网页创作入口。
创建任务
使用平台 API Key 请求 POST /v1/videos/generations。以下是纯文本生成的最小示例:
curl https://tokenrhythm.studio/v1/videos/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_xxx" \
-d '{"model":"wan3.0-video","content":[{"type":"text","text":"海边日出,镜头缓慢推进"}],"resolution":"720P","duration":5,"ratio":"16:9"}'创建成功返回 HTTP 202,响应中的 id 是平台任务 ID,status 初始为 queued,estimated_output_cost_cny 只是创建时估算,billing_pending 表示尚未完成结算。
查询任务
使用 GET /v1/videos/{id} 查询单个任务,或使用 GET /v1/videos?page=1&pageSize=20 查询自己的任务列表。任务成功后从 result.url 获取视频;保存文件时请及时下载。usage 和 billing.total_cost_cny 以完成后的响应为准,失败任务不扣费。
输入与价格
resolution 支持 480P、720P、1080P;duration 支持 2–30 秒,传 -1 表示智能时长。content 可包含文本、图片、视频、音频、文件或网页链接;媒体 URL 必须是公网 HTTPS 地址。图片使用 image_url 和 first_frame、last_frame 或 reference_image 角色;文件和网页链接分别使用 file_url、link_url,并启用 prompt_extend。首尾帧不能与参考素材混用;其他数量和组合限制以接口参数校验为准。
有输入视频时,输入与输出视频的总时长不得超过 30 秒。Wan 3.0 标准版按所选清晰度对输入视频与输出视频的实际时长计费,三档平台价以模型页当前展示为准。
请求失败时保留响应中的 traceId,便于查询任务和排障。