API 参考
公开目录、账户接口与模型网关。
模型网关
以 https://api.asiorb.com:8443/v1 为接口前缀。先查询这把 Key 可用的模型,再选用对应协议发送请求。三种模型接口均按实际用量计费,请求查询本身不会再次调用模型。
| 方法与路径 | 用途 | 认证 / 费用 |
|---|---|---|
| GET /v1/models | 读取这把Key可调用的模型 | Bearer Key / 不产生模型推理费用 |
| POST /v1/chat/completions | 文字消息、SSE及已批准能力 | Bearer Key / 按实际用量计费 |
| POST /v1/responses | GPT / Codex:文字、SSE 与本机工具 | Bearer Key / 回传完整历史 |
| POST /v1/messages | Claude / Claude Code:Messages 与工具往返 | Bearer Key 或 x-api-key / 按实际用量计费 |
| GET /v1/requests/{id} | 查询原请求处理与结算状态 | 同一Key / 不重复调用模型 |
| GET /v1/requests?idempotency_key=… | 没有拿到请求编号时找回状态 | 同一Key / 不重复调用模型 |
请求查询
GET /v1/requests/{id} 查询本 Key 的请求;首次响应丢失时,GET /v1/requests?idempotency_key=原幂等键 可找回原状态。404 不能当成可以重新扣费的依据。查询不返回完整回答正文。
网站公开接口
GET /api/models 返回网页目录元数据,GET /api/prices 返回当前生效的人民币价格;它们不验证某一把 Key 的模型权限。程序获取授权模型应使用 GET /v1/models。
健康接口
GET /api/health 用于查询网站响应与功能状态,不代表所有上游模型的实时可用率。
请求限制
下方按协议列出本站请求限制。模型上下文、已批准参数、Key 预算及账户限流还会进一步约束请求;大上下文模型不代表可以绕过单次请求体或输出限制。
| 协议 | 请求体与历史 | 输出与工具 |
|---|---|---|
| Chat Completions | 最大 1 MiB;messages 为 1–128 条 | n=1;工具最多 32 个 |
| Responses | 最大 768 KiB;input 为文字或 1–512 个历史条目 | max_output_tokens 默认 8192;store:false,回传完整历史 |
| Messages | 最大 768 KiB;messages 为 1–128 条 | 必须提供 max_tokens;回传对话与工具结果 |
| 共同限制 | 还受实际模型上下文和 Key 权限约束 | 输出上限 1–32768,且不超过该模型批准上限;工具最多 32 个 |
Chat Completions 参数
支持文字消息、stream、stream_options、max_tokens 或 max_completion_tokens(不可同时传)、temperature、top_p、stop、seed、presence_penalty、frequency_penalty、tools、tool_choice、parallel_tool_calls、response_format、reasoning 或 reasoning_effort。能否使用由对应模型的已批准能力进一步限定;额外参数会拒绝。
| 字段 | 类型 / 默认 | 说明 |
|---|---|---|
| model | string / 必填 | 可用模型完整 ID |
| messages | array / 必填 | role 与 content;文字内容,最多128条 |
| stream | boolean / false | true 时返回 SSE |
| stream_options | object | 流式请求可设 include_usage:true |
| max_tokens | integer / 1024 | 与 max_completion_tokens 二选一;受模型批准上限约束 |
| temperature / top_p | number | 支持范围由模型决定 |
| tools / tool_choice | array / string或object | 由客户端执行工具,最多32个工具 |
| response_format | object | 支持的 JSON object 或 JSON schema |
| reasoning / reasoning_effort | object / string | 二选一;具体支持范围以批准模型为准 |
工具调用与多轮历史
工具由你的程序在权限范围内执行,ASIORB 不替你运行命令。保留模型返回的调用条目、调用 ID 和工具结果,按对应协议回传完整历史。每轮继续请求都是新的模型调用,使用新的幂等键;同一轮重查状态则沿用原键。
| 协议 | 模型提出调用 | 回传执行结果 |
|---|---|---|
| Chat Completions | assistant.tool_calls | 保留 assistant 消息,再追加 role:tool、tool_call_id 与 content |
| Responses | function_call / custom_tool_call | 在完整 input 历史中追加对应 function_call_output / custom_tool_call_output,保持 call_id 一致 |
| Messages | assistant.content[].tool_use | 追加 user 消息中的 tool_result,以 tool_use_id 对应工具调用 |
为文件、命令和外部操作设定权限,校验参数后再执行;不要把模型给出的命令直接视为用户授权。不同协议的工具结构不能混用,参数名和历史格式以对应教程及本站限制为准。
结构化与推理
JSON Schema 需要模型同时开放 response_format 与 structured_outputs;普通 JSON 支持不代表严格结构化输出支持,客户端仍需校验业务结构。reasoning 与 reasoning_effort 不能同时传入;reasoning.effort 与 reasoning.max_tokens 也只能选一种。参数、推理历史及相关用量必须在批准能力与输入上界内。
余额与输出上限
max_tokens 或 max_output_tokens 是期望的最高输出量。当前可用余额或 Key 预算不足时,服务端会降低本次输出上限,且不会扩大显式推理预算。响应头 X-ASIORB-Max-Output-Tokens 返回实际上限,X-ASIORB-Output-Limited: balance 表示额度导致缩短。若无法覆盖输入和最短回复,则返回 402;遇到 length 或不明结果,先查看消费记录,不自动重发。
推理与输出上限
max_tokens 同时限制推理 Token 与最终答案 Token。预算较小时可能全部用于推理,返回 finish_reason: length 和空的正文;这不表示未产生用量,仍按实际 usage 结算。推理 Token 已包含在输出 Token 中,不另计一遍。先查询原请求与消费记录;如需继续,应主动发起新的请求、使用新幂等键并提高输出上限,新增调用单独计费。不要将空正文自动重试,也不要假设所有模型都会公开推理正文。
完整能力示例(TypeScript)
只列出已开放且批准对应能力的模型。工具示例可能发起两次收费请求,需为两次请求分别预留余额。每一步异常时先按该步编号查询状态,不自动重发。
将 YOUR_MODEL_ID 替换为支持所选能力的可用模型 ID;请核对模型支持的参数。
// npm install openai
// 在服务端设置 ASIORB_API_KEY 和持久保存的 ASIORB_REQUEST_ID;每个逻辑调用单独计费。
import OpenAI from 'openai';
const key=process.env.ASIORB_API_KEY, id=process.env.ASIORB_REQUEST_ID;
if(!key||!id)throw new Error('缺少环境变量');
const client=new OpenAI({apiKey:key,baseURL:"https://api.asiorb.com:8443/v1",timeout:210000,maxRetries:0});
const model="YOUR_MODEL_ID";
const messages=JSON.parse('[{"role":"user","content":"请使用 add 工具计算 2 + 3。"}]');
const tools=JSON.parse('[{"type":"function","function":{"name":"add","description":"计算两个有限数字的和","parameters":{"type":"object","properties":{"a":{"type":"number"},"b":{"type":"number"}},"required":["a","b"],"additionalProperties":false}}}]');
const first=await client.chat.completions.create({model,messages,tools,max_tokens:1024},{headers:{'Idempotency-Key':id}});
console.log('第一次用量',first.usage);
const reply=JSON.parse(JSON.stringify(first.choices[0].message));
if(reply.tool_calls?.length){
// 只保留网关支持的消息字段;模型需要的推理历史一并保留。
messages.push({role:'assistant',content:reply.content,tool_calls:reply.tool_calls,...(reply.reasoning?{reasoning:reply.reasoning}:{}),...(reply.reasoning_details?{reasoning_details:reply.reasoning_details}:{})});
for(const call of reply.tool_calls){
if(call.type!=='function'||call.function.name!=='add')throw new Error('工具不在允许范围');
const args=JSON.parse(call.function.arguments);
if(!args||typeof args!=='object'||Object.keys(args).sort().join(',')!=='a,b'||![args.a,args.b].every(n=>typeof n==='number'&&Number.isFinite(n)&&Math.abs(n)<=1e6))throw new Error('工具参数无效');
// 工具在客户端执行;这里没有 eval、shell 或任意联网。
messages.push({role:'tool',tool_call_id:call.id,content:JSON.stringify({result:args.a+args.b})});
}
// 这是新一次模型调用,需单独持久化此编号、余额和预占。
const nextId=id+'-tool-result';
const second=await client.chat.completions.create({model,messages,tools,max_tokens:1024},{headers:{'Idempotency-Key':nextId}});
console.log(second.choices[0].message.content);
console.log('第二次用量',second.usage);
}else console.log(reply.content);
// 任何一步异常时,用该步的幂等键 GET /requests 查询,不自动重新 POST。