API 参考
兼容 OpenAI
当你希望以最快路径投入生产,或者你的应用已经支持 OpenAI Chat Completions 格式时,请使用此路由。
当你希望以最快路径投入生产,或者你的应用已经支持 OpenAI Chat Completions 格式时,请使用此路由。
基础 URL
https://api.anyint.ai/openai/v1
已发布路由
POST /chat/completions
完整 URL:
https://api.anyint.ai/openai/v1/chat/completions身份验证
Authorization: Bearer <ANYINT_API_KEY>
Content-Type: application/json何时使用此路由
- 你已经在使用 OpenAI Python 或 JavaScript SDK
- 你希望为多个模型系列使用一个稳定的聊天入口
- 你希望以最少的集成工作实现 SSE 流式传输
如果你需要 Gemini 原生请求体或 Anthropic 特定功能(例如 token 计数),请直接使用对应提供方兼容页面。
核心请求结构
| 字段 | 类型 | 必填 | 含义 | 示例 |
|---|---|---|---|---|
model | 字符串 | 是 | 本次请求使用的模型 ID。请从 Models API 获取,不要猜测。 | claude-sonnet-4-6 |
messages | 数组 | 是 | OpenAI Chat Completions 格式的有序对话轮次。 | [{"role":"user","content":"Hello"}] |
stream | 布尔值 | 否 | 设置 true 接收 SSE 分块;省略或设为 false 返回单个 JSON 响应。 | true |
max_tokens | 整数 | 否 | 模型最多生成的输出 token 数。 | 512 |
temperature | 数字 | 否 | 控制随机性。值越低越确定,值越高越发散。 | 0.7 |
top_p | 数字 | 否 | nucleus sampling 控制项。优先只调 temperature 或 top_p 之一。 | 1 |
stop | 字符串或数组 | 否 | 让生成提前停止的停止序列。 | ["\nUser:"] |
tools | 数组 | 否 | 所选模型支持时的 OpenAI 兼容工具定义。 | [{"type":"function",...}] |
tool_choice | 字符串或对象 | 否 | 控制模型是否可以调用工具、必须调用特定工具,或不调用工具。 | "auto" |
presence_penalty | 数字 | 否 | 根据 token 是否已出现来惩罚新 token。 | 0 |
frequency_penalty | 数字 | 否 | 根据 token 出现频率惩罚重复。 | 0 |
user | 字符串 | 否 | 你自己的终端用户标识,用于滥用监控或请求追踪。不要发送未获授权的隐私数据。 | user_123 |
当前已发布的 schema 只说明了让补全工作所需的最小请求体。如果你的客户端已经使用了其他 OpenAI 兼容字段,请先针对目标模型进行验证,再在生产环境中依赖它们。
消息字段
| 字段 | 类型 | 必填 | 含义 | 示例 |
|---|---|---|---|---|
role | 字符串 | 是 | 消息作者。常见值包括 system、user、assistant 和 tool。 | user |
content | 字符串或数组 | 通常必填 | 文本内容,或在所选模型支持时使用多模态内容块。 | 用一句话解释 AnyInt。 |
name | 字符串 | 否 | 某些 OpenAI 兼容客户端使用的可选参与者名称。 | planner |
tool_call_id | 字符串 | 仅工具响应 | 将工具响应关联到之前的工具调用。 | call_123 |
多模态消息块
对于支持图像的聊天模型,请用 OpenAI 兼容内容块在 messages[].content[] 中传入图片。当你希望使用统一 AnyInt 聊天入口,同时需要带参考图时,这是推荐格式。
本页文档化的是 OpenAI 兼容聊天路由的图片输入。如果你需要视频或文件理解,请使用 Gemini 兼容 API 页面中的 Gemini 原生 fileData.fileUri 结构,不要自行猜测 OpenAI 风格的 video_url 或文件内容块。
| 字段 | 类型 | 必填 | 含义 | 示例 |
|---|---|---|---|---|
messages[].content[] | 数组 | 是 | 同一条消息中的有序内容块。可同时包含文本指令和一张或多张图片。 | [{"type":"text",...},{"type":"image_url",...}] |
content[].type | 字符串 | 是 | 内容块类型。文本指令用 text,图片输入用 image_url。 | image_url |
content[].text | 字符串 | text 块必填 | 文本提示词或指令。 | 描述这张参考图。 |
content[].image_url.url | 字符串 | image_url 块必填 | 公网 HTTPS 图片 URL,或 data:image/...;base64,... data URL。生产环境优先用公网 URL;本地文件可转成 data URL。 | https://your-domain.com/reference.png |
curl https://api.anyint.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $ANYINT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "使用这张参考图,用一句话描述产品风格。"
},
{
"type": "image_url",
"image_url": {
"url": "https://your-domain.com/reference.png"
}
}
]
}
]
}'请使用上游提供方可以抓取的 URL。某些提供方会拒绝被 robots.txt 阻止、需要 Cookie、经私有 CDN 跳转,或不是有效图片字节的地址。
如果图片在本地,不要传文件路径。请先编码图片,再传 data URL:
IMAGE_DATA="$(base64 -i ./reference.png | tr -d '\n')"然后把 image_url.url 设置为:
data:image/png;base64,$IMAGE_DATA当图片来自本地文件且你不想先上传时,可以使用这种格式。非常大的图片通常更适合先上传到对象存储或 CDN,再传公网 HTTPS URL。
响应字段
| 字段 | 含义 |
|---|---|
id | 兼容 API 路径返回的响应标识符 |
object | 响应对象类型,例如 chat.completion 或 chat.completion.chunk |
created | 响应创建的 Unix 时间戳 |
model | 处理请求的模型 |
choices[] | 生成的消息或流式 delta 选项 |
choices[].message.content | 非流式响应中的生成文本 |
choices[].delta.content | 流式响应中的增量文本 |
usage.prompt_tokens | 提供方返回时的输入 token 数 |
usage.completion_tokens | 提供方返回时的输出 token 数 |
usage.total_tokens | 提供方返回时的总 token 数 |
cURL 示例
curl https://api.anyint.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $ANYINT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"stream": true,
"messages": [
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain AnyInt in one sentence."}
]
}'Python 示例
from openai import OpenAI
client = OpenAI(
base_url="https://api.anyint.ai/openai/v1",
api_key="your-anyint-api-key",
)
response = client.chat.completions.create(
model="claude-sonnet-4-6",
stream=True,
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain AnyInt in one sentence."},
],
)
for chunk in response:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="")JavaScript 示例
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.anyint.ai/openai/v1",
apiKey: process.env.ANYINT_API_KEY,
});
const stream = await client.chat.completions.create({
model: "claude-sonnet-4-6",
stream: true,
messages: [
{ role: "system", content: "You are a concise assistant." },
{ role: "user", content: "Explain AnyInt in one sentence." },
],
});
for await (const chunk of stream) {
const delta = chunk.choices?.[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}响应行为
- 当
stream: true时,该路由返回 SSE 分块 - 已发布的 schema 使用
chat.completion.chunk样式对象 - 每个分块都可以包含
choices[0].delta.content - 流在以下内容处结束
[DONE] - 最终使用情况数据可能会在流接近结束时到达
常见错误
- 使用
x-api-key而不是Authorization: Bearer - 在检查 Models API 之前硬编码模型 ID
- 将部分流分块当作最终答案
- 发送
/tmp/image.png这样的本地文件路径,而不是公网图片 URL 或 data URL - 通过未文档化的 OpenAI 风格内容块类型发送视频文件,而不是使用 Gemini 原生
fileData.fileUri - 在未经验证的情况下将提供方原生请求字段混入 OpenAI 负载中
- 只传裸 base64,而不是带
data:image/...;base64,前缀的 data URL