接口文档

通过简洁统一的接口,将 onomeo 的 AI 模型接入你的应用,
开始构建出色的作品。


快速开始

几分钟内即可发出你的第一个接口请求。你需要一把密钥,可使用任意 HTTP 客户端或兼容 OpenAI 的 SDK。

POST/v1/chat/completions

调用 onomeo 的任一模型,生成一次对话回复。

本页各项功能均有可直接运行的示例,按 Python、Node、命令行分别提供,代码位于 GitHub 仓库

认证

Authorization 请求头中携带密钥。请妥善保管密钥,切勿将其写入客户端代码。

Authorization: Bearer YOUR_API_KEY

额度保存在账号中,密钥丢失后可重新登录,在控制台创建新密钥。但密钥本身仍属于敏感信息:不要提交到代码仓库,也不要对外分享。同一密钥在多处同时使用将被直接停用。

密钥泄露

当你的某把密钥出现在 GitHub 的公开仓库中时,GitHub 会在数秒内通知本站,该密钥随即被停用,并向账号绑定的邮箱发送邮件,说明是哪一把密钥、在何处被发现。

被停用的密钥立即失效,仍携带该密钥的请求一律返回 401 未授权。账号、余额及其余密钥不受影响。

后续处理

  1. 控制台新建一把密钥,替换应用中正在使用的那一把。
  2. 从代码中移除旧密钥。仅删除该行并不足够:密钥仍留存于仓库的历史记录中,需重写历史记录,或将该密钥视为已永久公开。
  3. 不要将密钥写入源代码。请从环境变量或密钥管理服务中读取,并将存放密钥的文件写入 .gitignore。

自行发现泄露时

可在控制台自行停用该密钥,停用立即生效,随后新建一把替换。若怀疑该密钥已被他人使用,请联系我们,本站可与你一同核对该密钥的调用记录。

对话接口

向模型发送一组消息,获取生成的回复。这是对话类 AI 的核心接口,请求与返回结构与 OpenAI 保持一致。

返回结构

返回示例
{
  "model": "MODEL_ID",
  "choices": [{
    "message": { "role": "assistant",
                 "content": "..." }
  }],
  "usage": { "total_tokens": 150 }
}

usage 中的数值即从余额扣除的数量。只计可见文字:你发送的内容加上模型回复的内容;模型作答前的推理不计费。

请求参数

调用 /v1/chat/completions 时常用的参数如下。

参数类型说明
modelstring模型页面当前列出的模型 ID,需完全一致。
messagesarray由 role 与 content 组成的消息对象数组。
temperaturenumber控制随机性。设为 0.0 可获得确定性输出。
max_tokensinteger选填。数值过小会被自动提升至下限,以免返回空白。
streamboolean是否以流式返回(默认 false)。
import requests

response = requests.post(
    "/v1/chat/completions",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"model": "MODEL_ID", "messages": [
        {"role": "user", "content": "Hello!"}
    ]}
)
print(response.json())

流式返回

stream 设为 true 即可边生成边返回(server-sent events),格式与 OpenAI 接口一致,各家官方客户端均直接支持。

流式请求(Python)
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="/v1")
stream = client.chat.completions.create(
    model="MODEL_ID",
    messages=[{"role": "user", "content": "Hello!"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

流式请求的计费方式相同:最后一个数据块携带用量数值,按你发送与收到的文字计算,并按该数值扣除。

图片输入

可识别图片的模型支持在用户消息中附带图片:将文字与每张图片分别作为 content 数组中的一项,图片使用 base64 编码的 data URL。

带图片的请求
{
  "model": "MODEL_ID",
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "What is in this picture?" },
      { "type": "image_url",
        "image_url": { "url": "data:image/jpeg;base64,/9j/4AAQ..." } }
    ]
  }]
}

当前可识别图片的模型: 正在加载模型列表…

除文字外,每个请求中的每张图片另外消耗 300 额度。一次请求最多携带 8 张图片,格式须为 PNG、JPEG、WebP 或 GIF,单张不超过 3 MB。向无法识别图片的模型发送图片时,会返回 model_no_vision 错误,且不扣除额度。图片仅转交模型服务商用于生成回答,本站不保存。

可用模型

以下为当前可调用的模型。花费一列为实测数据,并非承诺:取单次回答在 30 天内的平均花费,回答较长时花费更多,较短时更少。

模型单次回答大致花费
正在加载模型列表…

同一份列表(含各模型的服务商,以及一天的签到能用多久)也可在模型页面查看。如需在代码中获取列表,使用密钥调用模型列表接口:

获取模型列表
curl "/v1/models" \
  -H "Authorization: Bearer YOUR_API_KEY"

额度与上限

额度按 token 计量,1 额度对应 1 token。每天签到一次即可领取,连续签到领取的数量逐日递增;在控制台完成问卷可在此基础上叠加,邀请好友双方另有奖励。

限制项数值
正在加载上限数据…

余额可随时在控制台查看,也可在代码中查询:

查询余额
curl "/api/me" \
  -H "Authorization: Bearer YOUR_API_KEY"

错误码

所有失败均返回 JSON,其中含固定的 code 字段。请以 code 作为判断依据,不要依赖 message 字段,后者面向阅读,措辞可能调整。

错误返回示例
{
  "error": {
    "code": "not_enough_credit",
    "balance": 120,
    "need": 1500,
    "message": "..."
  }
}
错误码HTTP 状态码含义
bad_key401密钥无效,或该密钥已失效。
not_enough_credit402余额不足以完成本次请求。返回中包含当前余额与本次请求所需的数量。
key_expired401该密钥已过到期日。可在控制台延长有效期或换用其他密钥。
key_limit_reached402该密钥累计用量已达其自身上限,账户余额不受影响。返回中含上限、已用与本次预估。
model_not_allowed400该模型不在开放列表中。返回中附有可用模型名。
model_paused400该模型已被暂停提供,恢复后会重新出现在模型列表中。返回中附有当前可用模型名。
model_no_vision400请求中含有图片,但该模型无法识别图片。请换用可识别图片的模型,或去掉图片。
too_many_images400请求携带的图片超过上限(8 张)。
bad_image400有图片不是 PNG、JPEG、WebP 或 GIF 格式的 data URL,或超过 3 MB。
request_too_large413请求体超过 8 MB。
ip_limit429当前网络今日新建的账号数已达上限,在登录时返回。
too_fast429该账号请求过于频繁。响应体中的 retryAfter 为建议等待的秒数,Retry-After 响应头为同一数值。
account_quota429该账号在本时段内的调用次数已达上限,账号下所有密钥共用此上限。响应体中的 retryAfter 为建议等待的秒数,Retry-After 响应头为同一数值。
network_quota429当前网络在本时段内的调用次数已达上限。响应体中的 retryAfter 为建议等待的秒数,Retry-After 响应头为同一数值。
site_busy429整个服务当前已达模型服务商的配额上限。请在 retryAfter 指定的秒数后重试。
upstream_failed502模型服务商未响应。此情况不扣除额度。
upstream_unconfigured503服务当前未接入任何模型服务商。

常见问题

可以用于正式项目吗?

不建议。这是免费公测版本,不承诺可用性,适合用于试验、原型与非关键任务。

密钥丢失后怎么办?

余额不会丢失。重新登录后在控制台创建新密钥即可,新密钥属于同一账号,余额保持不变。若怀疑旧密钥已被他人获取,可在控制台将其删除。

可以创建多把密钥吗?

可以。每个账号最多持有 10 把密钥,它们共用账号的余额与调用次数上限,增加密钥并不会增加可用的调用次数。

会保存我发送的内容吗?

通过接口(/v1/chat/completions)发起的请求不保存提问与回答内容,仅记录消耗的额度,用于扣费。对话页中的对话会随账号保存(最多 50 条,可随时删除)。无论采用哪种方式,消息都会转发给第三方模型服务商,部分服务商(尤其是免费套餐)可能保留提交的内容或将其用于改进服务。onomeo 不会将这些内容用于模型训练。

为什么返回的回答是空的?

通常是 max_tokens 设置过小。这些模型作答前会先进行一段推理,推理与回答共用同一上限。最稳妥的做法是不填该字段。