外观
API脚本 接入教程
下面示例覆盖三类文本接口。复制后把 YOUR_API_KEY 替换为你的密钥即可运行。
提示
API Key 请在 密钥管理 获取。GPT 系列模型走 OpenAI 接口,Claude 系列模型走 Anthropic 接口(也兼容 OpenAI 接口)。
OpenAI Responses
新一代 OpenAI 接口,适合文本对话和流式输出。POST /v1/responses
python
import json
import urllib.request
API_URL = "https://api.omniapexroute.com/v1/responses"
API_KEY = "YOUR_API_KEY"
body = {
"model": "gpt-5.6-sol",
"stream": True,
"input": "用中文简单介绍一下 OmniApexRoute。",
}
def iter_sse(response):
buffer = ""
while chunk := response.read(4096):
buffer += chunk.decode("utf-8", errors="replace")
frames = buffer.split("\n\n")
buffer = frames.pop()
for frame in frames:
data = "\n".join(line[5:].strip() for line in frame.splitlines() if line.startswith("data:")).strip()
if data and data != "[DONE]":
yield data
request = urllib.request.Request(
API_URL,
data=json.dumps(body).encode("utf-8"),
method="POST",
headers={"Authorization": "Bearer " + API_KEY, "Content-Type": "application/json", "Accept": "text/event-stream"},
)
with urllib.request.urlopen(request, timeout=900) as response:
for data in iter_sse(response):
event = json.loads(data)
if event.get("type") == "response.output_text.delta":
print(event.get("delta", ""), end="", flush=True)
if event.get("type") in ("response.completed", "response.done"):
break
print()js
const API_URL = "https://api.omniapexroute.com/v1/responses";
const API_KEY = "YOUR_API_KEY";
const response = await fetch(API_URL, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
Accept: "text/event-stream",
},
body: JSON.stringify({
model: "gpt-5.6-sol",
stream: true,
input: "用中文简单介绍一下 OmniApexRoute。",
}),
});
const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of response.body) {
buffer += decoder.decode(chunk, { stream: true });
const frames = buffer.split("\n\n");
buffer = frames.pop();
for (const frame of frames) {
const data = frame
.split("\n")
.filter((line) => line.startsWith("data:"))
.map((line) => line.slice(5).trim())
.join("\n");
if (!data || data === "[DONE]") continue;
const event = JSON.parse(data);
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta ?? "");
}
}
}
console.log();OpenAI Chat Completions
兼容传统 OpenAI Chat 格式,适合已有客户端平滑迁移。POST /v1/chat/completions
python
import json
import urllib.request
API_URL = "https://api.omniapexroute.com/v1/chat/completions"
API_KEY = "YOUR_API_KEY"
body = {
"model": "gpt-5.6-sol",
"stream": True,
"messages": [{"role": "user", "content": "用中文简单介绍一下 OmniApexRoute。"}],
}
def iter_sse(response):
buffer = ""
while chunk := response.read(4096):
buffer += chunk.decode("utf-8", errors="replace")
frames = buffer.split("\n\n")
buffer = frames.pop()
for frame in frames:
data = "\n".join(line[5:].strip() for line in frame.splitlines() if line.startswith("data:")).strip()
if data and data != "[DONE]":
yield data
request = urllib.request.Request(
API_URL,
data=json.dumps(body).encode("utf-8"),
method="POST",
headers={"Authorization": "Bearer " + API_KEY, "Content-Type": "application/json", "Accept": "text/event-stream"},
)
with urllib.request.urlopen(request, timeout=900) as response:
for data in iter_sse(response):
chunk = json.loads(data)
for choice in chunk.get("choices") or []:
print((choice.get("delta") or {}).get("content", ""), end="", flush=True)
print()js
const API_URL = "https://api.omniapexroute.com/v1/chat/completions";
const API_KEY = "YOUR_API_KEY";
const response = await fetch(API_URL, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
Accept: "text/event-stream",
},
body: JSON.stringify({
model: "gpt-5.6-sol",
stream: true,
messages: [{ role: "user", content: "用中文简单介绍一下 OmniApexRoute。" }],
}),
});
const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of response.body) {
buffer += decoder.decode(chunk, { stream: true });
const frames = buffer.split("\n\n");
buffer = frames.pop();
for (const frame of frames) {
const data = frame
.split("\n")
.filter((line) => line.startsWith("data:"))
.map((line) => line.slice(5).trim())
.join("\n");
if (!data || data === "[DONE]") continue;
const event = JSON.parse(data);
for (const choice of event.choices ?? []) {
process.stdout.write(choice.delta?.content ?? "");
}
}
}
console.log();Anthropic Messages
Claude / Anthropic Messages 格式,适合 Claude 系列模型。POST /v1/messages
python
import json
import urllib.request
API_URL = "https://api.omniapexroute.com/v1/messages"
API_KEY = "YOUR_API_KEY"
body = {
"model": "claude-sonnet-5",
"max_tokens": 64000,
"stream": True,
"messages": [{"role": "user", "content": "用中文简单介绍一下 OmniApexRoute。"}],
}
def iter_sse(response):
buffer = ""
while chunk := response.read(4096):
buffer += chunk.decode("utf-8", errors="replace")
frames = buffer.split("\n\n")
buffer = frames.pop()
for frame in frames:
data = "\n".join(line[5:].strip() for line in frame.splitlines() if line.startswith("data:")).strip()
if data and data != "[DONE]":
yield data
request = urllib.request.Request(
API_URL,
data=json.dumps(body).encode("utf-8"),
method="POST",
headers={"Authorization": "Bearer " + API_KEY, "Content-Type": "application/json", "Accept": "text/event-stream"},
)
with urllib.request.urlopen(request, timeout=900) as response:
for data in iter_sse(response):
event = json.loads(data)
if event.get("type") == "content_block_delta":
print((event.get("delta") or {}).get("text", ""), end="", flush=True)
if event.get("type") == "message_stop":
break
print()js
const API_URL = "https://api.omniapexroute.com/v1/messages";
const API_KEY = "YOUR_API_KEY";
const response = await fetch(API_URL, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
Accept: "text/event-stream",
},
body: JSON.stringify({
model: "claude-sonnet-5",
max_tokens: 64000,
stream: true,
messages: [{ role: "user", content: "用中文简单介绍一下 OmniApexRoute。" }],
}),
});
const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of response.body) {
buffer += decoder.decode(chunk, { stream: true });
const frames = buffer.split("\n\n");
buffer = frames.pop();
for (const frame of frames) {
const data = frame
.split("\n")
.filter((line) => line.startsWith("data:"))
.map((line) => line.slice(5).trim())
.join("\n");
if (!data || data === "[DONE]") continue;
const event = JSON.parse(data);
if (event.type === "content_block_delta") {
process.stdout.write(event.delta?.text ?? "");
}
}
}
console.log();