EMOXIA AI API
VIP 与 GGVIP · 2026 年 9 月 23 日版

EMOXIA AI API 接入与模型调用手册

适用平台:EMOXIA AI API

服务地址:https://emoxia.meta-api.vip/v1

在线文档:https://emoxia-ai-agent.cn/docs/emoxia-api/

适用分组:VIP 和 GGVIP

文档日期:2026 年 9 月 23 日

本手册面向接入 EMOXIA 的开发者及客户端配置人员,覆盖模型查询、文本对话、图像生成、专用语音合成、流式处理和常见故障排查。示例使用 EMOXIA 普通 API Key,不需要管理员权限。

模型能力依据 2026 年 9 月 22 日两组最小请求验收,共 23 个模型 ID、46 项组合;2026 年 9 月 23 日复核渠道目录一致。后续模型权限、价格或可用性可能调整,请结合当前令牌可见列表、控制台和实际请求结果使用。

1 快速开始

1 1 获取 API Key

登录 https://emoxia.meta-api.vip/console/token,创建或选择用于模型调用的普通 API Key。确认令牌启用、未过期、额度足够,且分组及模型限制符合需要。账户余额与令牌额度是两个检查项。

VIP 的接口分组标识为 vip,GGVIP 为 GGVIP。分组由平台上的账户及令牌设置决定;在请求 JSON 中增加 group,不能替代分组权限。不要把系统管理访问令牌当成模型调用 Key。

Key 属于访问凭据,应放在应用后端或安全存储中。不要提交到代码仓库、放进公开网页 JavaScript、写进错误截图或发给他人排查。以下示例统一从环境变量 EMOXIA_API_KEY 读取。

1 2 填写地址和协议

配置项使用值或要求
控制台与令牌管理https://emoxia.meta-api.vip/console/token
OpenAI 兼容 Base URLhttps://emoxia.meta-api.vip/v1
Anthropic SDK Base URL通常填 https://emoxia.meta-api.vip
普通接口鉴权Authorization: Bearer <EMOXIA_API_KEY>
请求内容类型Content-Type: application/json
模型名称使用本手册中的精确 ID,不加空格或自行改名

客户端有时自动补 /v1,有时需要完整接口地址。配置后检查最终 URL:GPT 文本请求应到 /v1/responses,Claude 请求应到 /v1/messages,不要出现 /v1/v1/。不要仅因客户端界面写着“OpenAI 兼容”就把所有模型强制走同一个接口。

1 3 在 Bash 中准备环境

以下命令适用于 Linux、macOS 或 Bash 终端。Key 输入不会回显;环境变量仅供当前终端及其子进程使用。Windows PowerShell 方式见第 9 节。

bash
export EMOXIA_BASE_URL='https://emoxia.meta-api.vip/v1'
read -r -s -p 'EMOXIA API Key: ' EMOXIA_API_KEY
printf '\n'
export EMOXIA_API_KEY

curl 示例使用 --fail-with-body,使 HTTP 错误返回非零退出码并保留响应正文;需要较新的 curl。如本机不支持该选项,请先升级 curl。流式 API 在 HTTP 200 后仍可能报告错误,因此还要检查流中的事件。

1 4 查询当前 Key 可见模型

bash
curl --fail-with-body -sS --max-time 30 \
  "$EMOXIA_BASE_URL/models" \
  -H "Authorization: Bearer $EMOXIA_API_KEY"

正常响应是模型列表,模型 ID 通常在 data[].id。它反映当前 Key 的可见权限,不代表每个模型此刻都完成了实际调用,也不返回完整余额和所有令牌限制。余额、到期时间、IP 限制、白名单和分组请在控制台核对。

首次联调按“查模型 → 选择匹配协议 → 发送最小请求 → 检查实际输出和结束标志 → 查看使用日志”的顺序执行。先单并发,不开启自动重试,便于定位问题。

2 模型与接口对应关系

2 1 五类接口

模型类别请求路径本轮验收方式正常完成依据
GPT 文本POST /v1/responses流式文本有正文且出现 response.completed
Claude 文本POST /v1/messages原生 Messages 流式有正文且出现 message_stop
DeepSeek 和 Gemini 文本POST /v1/chat/completions流式文本有正文且出现 [DONE]
GPT ImagePOST /v1/images/generations非流式图片响应图片数据完整且可解码
EMOXIA 专用语音POST /v1/audio/speech非流式 MP3返回的音频完整且可解码

本表列出已实际验收的路径,不能据此推断同一模型的所有兼容接口均已通过。例如 Claude 的原生 Messages 通过,不等于全部 Claude ID 经 Chat Completions 转换也已通过。

2 2 当前模型清单

下列 23 个精确 ID 在 VIP 与 GGVIP 中的清单相同,启用渠道集合一致。客户端仍需以自己的 Key 实际可见列表为准。

精确模型 ID接口类别已验收能力与说明
gpt-6-astraResponses文本流式输出和正常结束
gpt-5.6-solResponses文本流式输出和正常结束
gpt-5.6-lunaResponses文本流式输出和正常结束
gpt-5.6-terraResponses文本流式输出和正常结束
gpt-5.5Responses文本流式输出和正常结束
claude-fable-5Messages原生文本流式输出和正常结束
claude-haiku-4-5-20251001Messages原生文本流式输出和正常结束
claude-opus-4-6Messages原生文本流式输出和正常结束
claude-opus-4-7Messages原生文本流式输出和正常结束
claude-opus-4-8Messages原生文本流式输出和正常结束
claude-opus-5Messages原生文本流式输出和正常结束
claude-sonnet-4-6Messages原生文本流式输出和正常结束
claude-sonnet-5Messages原生文本流式输出和正常结束
deepseek-v4-flashChat Completions文本流式输出和正常结束
deepseek-v4-flash-vision-expChat Completions仅验收文本,视觉输入尚未验收
deepseek-v4-proChat Completions文本流式输出和正常结束
gemini-3-flashChat Completions文本流式输出和正常结束
gemini-3.5-flashChat Completions文本流式输出和正常结束
gpt-image-1.5Images兼容别名,实际转到 gpt-image-2
gpt-image-2Images单张 1024×1024 图片,可完整解码
gpt-image-2.5-flareImages单张 1024×1024 图片,可完整解码
gpt-image-2.5-sunburstImages单张 1024×1024 图片,可完整解码
tts-1专用 Speechemo-xiaoning 音色的 MP3 合成

23 是模型 ID 数,包含既有兼容别名,并不等于 23 个独立原生后端。模型 ID 是平台提供的路由标识,不构成对底层厂商官方型号的认证。

2 3 能力边界

文本部分验收的是简短文本生成及流式正常结束;没有覆盖全部工具调用、多模态、超长上下文、并发压力或客户端会话恢复。请保留用户选择的模型和推理强度,不要通过静默换模型或降低推理强度来掩盖错误。

两款 Gemini 当前列出的已验收能力是文本对话,不包含生图;deepseek-v4-flash-vision-exp 名称中的 vision 也不能代替视觉输入验收。图片编辑、多图生成、其他尺寸、Responses 图片工具及其他音色,需要另行测试后再向用户开放。

本手册不列未通过或尚未验收的模型作为推荐可调用项。若控制台后来出现新模型,应先核对权限、价格及协议,再做最小调用测试,不能只凭列表中出现名称就认定功能可用。

3 GPT 文本调用

3 1 Responses 最小流式请求

下例使用 gpt-6-astra,可将 model 替换为清单中其他 Responses 类别的精确 ID。

bash
curl --fail-with-body -N --max-time 180 \
  "$EMOXIA_BASE_URL/responses" \
  -H "Authorization: Bearer $EMOXIA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "model": "gpt-6-astra",
    "input": "请用一句话介绍你能提供的帮助。",
    "max_output_tokens": 1024,
    "stream": true
  }'
参数本例含义
model精确模型 ID
input本例使用字符串输入
max_output_tokens输出 token 上限,本例为 1024
streamtrue 表示接收 SSE 流

max_output_tokens 是上限,不保证输出会达到该长度。不要给所有模型统一追加 temperature、推理预算或其他可选参数;不同模型对这些参数的兼容性可能不同。扩展参数应逐模型验证。

3 2 处理 Responses 事件

常见正文增量事件为 response.output_text.delta,正文位于 delta。response.completed 表示响应完成;response.failed、response.incomplete、error 或带有错误对象的事件应作为失败或未完整完成处理。

以下是事件结构示意,不是可直接提交的请求,也不是完整响应:

text
event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":"你好"}

event: response.completed
data: {"type":"response.completed","response":{...}}

连接关闭但没有完成事件时,不要把已经显示的一段文字误标为“完整成功”。保留部分内容并向调用方报告中断;是否重试由业务判断,避免重复扣费或重复执行工具。

4 Claude 文本调用

4 1 原生 Messages 请求

以下示例采用本轮实测的请求头组合:Bearer 与 x-api-key 填同一个 EMOXIA 普通 Key,同时指定 anthropic-version。

bash
curl --fail-with-body -N --max-time 180 \
  "$EMOXIA_BASE_URL/messages" \
  -H "Authorization: Bearer $EMOXIA_API_KEY" \
  -H "x-api-key: $EMOXIA_API_KEY" \
  -H 'anthropic-version: 2023-06-01' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "model": "claude-opus-4-8",
    "max_tokens": 256,
    "messages": [
      {"role": "user", "content": "请用一句话介绍你能提供的帮助。"}
    ],
    "stream": true
  }'

可替换为清单中的其他 Messages 类别 ID。这里的输出限制字段是 max_tokens,不要直接照搬 Responses 的 max_output_tokens。

4 2 正常结束与内容处理

文本增量通常来自 content_block_delta,当 delta.type 为 text_delta 时读取 delta.text。等待 message_stop,并检查流内是否有错误。

message_delta 中的 stop_reason 也需要记录。例如达到输出长度限制虽然可以正常结束传输,内容仍可能未达到业务期望。后续如接入工具,应完整处理工具请求和结果,不能仅拼接文本;该能力不在本轮最小验收范围内。

使用 Anthropic SDK 时通常将 base URL 设置为 https://emoxia.meta-api.vip,由 SDK 拼接 /v1/messages。不同 SDK 或封装行为可能不同,应以最终请求 URL 为准。

5 DeepSeek 和 Gemini 文本调用

5 1 Chat Completions 请求

bash
curl --fail-with-body -N --max-time 180 \
  "$EMOXIA_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $EMOXIA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "user", "content": "请用一句话介绍你能提供的帮助。"}
    ],
    "max_tokens": 1024,
    "stream": true
  }'

可将 model 替换为 deepseek-v4-pro、deepseek-v4-flash-vision-exp、gemini-3-flash 或 gemini-3.5-flash,保持本例为纯文本输入。

5 2 读取流式正文

通常从 choices[].delta.content 读取正文增量,收到 data: [DONE] 后完成流式接收。首个 chunk 可能只有角色信息,不能因为没有正文就当成报错。finish_reason 若为 length,应提示可能达到输出上限。

Gemini 原生 generateContent、图片输入及 DeepSeek 工具链没有在本次逐模型验收中验证。若应用需要这些能力,应另行联调,不能把 Chat 文本通过直接扩大为全能力通过。

6 Python 文本流式示例

以下完整示例使用 requests,通过一个入口分别选择三类文本协议。它处理 SSE 空行分帧、多行 data、显式错误、连接中断和缺少结束事件;不会把 HTTP 200 自动当成成功。它只拼接文本,不是工具调用执行器。

先在自己的项目环境中安装依赖:

bash
python -m pip install requests

将下列代码保存为 emoxia_text.py,在已设置 EMOXIA_API_KEY 的终端运行。需要切换协议时修改 PROTOCOL 与 MODEL;三个组合示例均来自已验收清单。

python
import json
import os
import requests

BASE = "https://emoxia.meta-api.vip/v1"
KEY = os.environ["EMOXIA_API_KEY"]
PROTOCOL = "responses"
MODEL = "gpt-6-astra"
# 其他组合:messages / claude-opus-4-8
# 其他组合:chat / deepseek-v4-flash
PROMPT = "请用一句话介绍你能提供的帮助。"


def sse_frames(response):
    event, lines = "", []
    for line in response.iter_lines(decode_unicode=True):
        if line == "":
            if lines:
                yield event, "\n".join(lines)
            event, lines = "", []
        elif line.startswith("event:"):
            event = line[6:].lstrip(" ")
        elif line.startswith("data:"):
            lines.append(line[5:].lstrip(" "))
        # 注释心跳以及其他 SSE 字段不当成正文。
    if lines:
        yield event, "\n".join(lines)


headers = {
    "Authorization": "Bearer " + KEY,
    "Content-Type": "application/json",
    "Accept": "text/event-stream",
}
if PROTOCOL == "responses":
    path = "/responses"
    body = dict(model=MODEL, input=PROMPT,
                max_output_tokens=1024, stream=True)
elif PROTOCOL == "messages":
    path = "/messages"
    headers.update({"x-api-key": KEY,
                    "anthropic-version": "2023-06-01"})
    body = dict(model=MODEL, max_tokens=256, stream=True,
                messages=[dict(role="user", content=PROMPT)])
elif PROTOCOL == "chat":
    path = "/chat/completions"
    body = dict(model=MODEL, max_tokens=1024, stream=True,
                messages=[dict(role="user", content=PROMPT)])
else:
    raise ValueError("PROTOCOL 必须是 responses、messages 或 chat")

completed, text_seen = False, False
with requests.post(BASE + path, headers=headers, json=body,
                   stream=True, timeout=(10, 180)) as response:
    response.raise_for_status()
    content_type = response.headers.get("Content-Type", "")
    if "text/event-stream" not in content_type.lower():
        raise RuntimeError("预期 SSE,实际收到 " + content_type)
    response.encoding = "utf-8"
    for event, data in sse_frames(response):
        if data == "[DONE]":
            if PROTOCOL != "chat":
                raise RuntimeError("收到与所选协议不匹配的结束标志")
            completed = True
            break
        obj = json.loads(data)
        kind = obj.get("type") or event
        if obj.get("error") or kind in {
            "error", "response.failed", "response.incomplete"
        }:
            raise RuntimeError("流式响应失败或未完成:" + str(kind))
        terminal = {
            "responses": "response.completed",
            "messages": "message_stop",
        }.get(PROTOCOL)
        if terminal and kind == terminal:
            completed = True
            break
        delta = ""
        if kind == "response.output_text.delta":
            delta = obj.get("delta", "")
        elif kind == "content_block_delta":
            block = obj.get("delta", {})
            if block.get("type") == "text_delta":
                delta = block.get("text", "")
        elif PROTOCOL == "chat":
            for choice in obj.get("choices", []):
                value = choice.get("delta", {}).get("content")
                if isinstance(value, str):
                    delta += value
        if isinstance(delta, str) and delta:
            text_seen = True
            print(delta, end="", flush=True)
if not completed:
    raise RuntimeError("流已关闭,但未收到协议完成标志")
if not text_seen:
    raise RuntimeError("流已结束,但该文本测试没有收到正文")
print()

timeout=(10, 180) 分别表示连接超时和读取等待超时,不是整个请求严格限制为 180 秒。curl 示例中的 --max-time 180 才是请求总时限。生产应用应分别设置连接、首包、流式空闲和总时限,并根据实际业务调整。

本例故意不自动重试。流已输出部分正文后发生异常,业务应保留“未完整完成”的状态;不要直接捕获异常后返回成功,也不要不加判断地重发整段请求。

7 图像生成

7 1 最小请求

图片接口使用非流式 JSON 响应,本轮验证了 n=1、size=1024x1024。以下示例中的模型可替换为图像清单中的其他精确 ID。

bash
curl --fail-with-body -sS --max-time 360 \
  "$EMOXIA_BASE_URL/images/generations" \
  -H "Authorization: Bearer $EMOXIA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "model": "gpt-image-2.5-flare",
    "prompt": "A blue circle on a plain white background.",
    "n": 1,
    "size": "1024x1024"
  }'

本轮四个图像 ID 均返回 data[0].b64_json。不要把 base64 字符串直接当作 URL,也不要将图片 JSON 当成文本 SSE 解析。

7 2 Python 保存图片

以下代码校验 HTTP 状态、JSON 错误、base64 和图片解码,再保存为 PNG。除 requests 外需安装 Pillow。

bash
python -m pip install requests pillow
python
import base64
import io
import os
import uuid
from pathlib import Path
import requests
from PIL import Image

url = "https://emoxia.meta-api.vip/v1/images/generations"
headers = {"Authorization": "Bearer " +
           os.environ["EMOXIA_API_KEY"]}
body = {
    "model": "gpt-image-2.5-flare",
    "prompt": "A blue circle on a plain white background.",
    "n": 1,
    "size": "1024x1024",
}
response = requests.post(url, headers=headers, json=body,
                         timeout=(10, 360))
response.raise_for_status()
result = response.json()
if result.get("error"):
    raise RuntimeError("图像接口返回错误")
items = result.get("data", [])
if not items or not items[0].get("b64_json"):
    raise RuntimeError("未收到本示例要求的 b64_json 图片数据")
raw = base64.b64decode(items[0]["b64_json"], validate=True)
with Image.open(io.BytesIO(raw)) as picture:
    picture.load()
    output = Path("emoxia-" + uuid.uuid4().hex[:12] + ".png")
    picture.save(output, format="PNG")
    print("已保存", output, "尺寸", picture.size)

如果后续某条路线返回临时图片 URL,应使用受信任的下载路径,检查下载状态、内容类型和文件解码,并及时保存;上例遇到非 base64 响应会明确报错,不会悄悄保存错误页面。

本轮图片完整请求观察值约为 21–63 秒,不是首字延迟或时限保证。5 秒总超时通常不足以覆盖生成过程。360 秒只是初始联调上限,不能用延长超时替代排查上游失败。

7 3 图像参数范围

已验收:文字提示词、单张输出、1024×1024、上述四个模型 ID。未逐项验收:编辑接口、输入参考图、多张输出、其他尺寸、其他质量参数以及在 Responses 中调用图片工具。需要这些能力时先做专项测试。

gpt-image-1.5 目前是兼容别名,实际转到 gpt-image-2;新接入可直接使用期望的明确模型 ID,避免把别名当成独立原生版本。

8 EMOXIA 专用语音合成

8 1 专用请求契约

tts-1 采用 EMOXIA 专用参数约定,不是任意标准 OpenAI Speech 请求都能直接使用。已验收音色为 emo-xiaoning,输出为 MP3 二进制。

字段必须遵守的要求
modeltts-1
input1–150 字,首次联调用短文本
voice使用本轮已验收的 emo-xiaoning
response_formatmp3
metadata.emoxia_request_id每个逻辑请求唯一的 64 位小写十六进制字符串
metadata 的其他字段不添加;只允许 emoxia_request_id
speed省略或设为 1
stream 及无关 body 字段不发送
Idempotency-Key 请求头若发送,必须与上述请求 ID 完全相同

同一个逻辑请求因网络问题重试时,复用原请求 ID 和请求内容;新的逻辑请求生成新 ID。不要每次重试都生成新 ID,也不要把一个固定 ID 复用于所有用户请求。本轮实测同时发送了 metadata 与相同的 Idempotency-Key。

不要改用 alloy、echo 等标准音色。缺少专用 metadata 或使用不支持的音色可能返回 400;不能因此直接判断整个语音服务故障。

8 2 Python 完整示例

将下例保存为独立 Python 文件,在已设置 EMOXIA_API_KEY 的终端执行。secrets.token_hex(32) 生成符合要求的 64 位小写十六进制 ID。

python
import os
import secrets
from pathlib import Path
import requests

url = "https://emoxia.meta-api.vip/v1/audio/speech"
request_id = secrets.token_hex(32)
headers = {
    "Authorization": "Bearer " + os.environ["EMOXIA_API_KEY"],
    "Content-Type": "application/json",
    "Idempotency-Key": request_id,
}
body = {
    "model": "tts-1",
    "input": "欢迎使用 EMOXIA。",
    "voice": "emo-xiaoning",
    "response_format": "mp3",
    "metadata": {"emoxia_request_id": request_id},
}
response = requests.post(url, headers=headers, json=body,
                         timeout=(10, 180))
response.raise_for_status()
content_type = response.headers.get("Content-Type", "").lower()
mime = content_type.split(";", 1)[0].strip()
if mime not in {"audio/mpeg", "audio/mp3"} or not response.content:
    raise RuntimeError("预期非空 MP3 音频,实际响应不符合要求")
output = Path("emoxia-" + request_id[:12] + ".mp3")
output.write_bytes(response.content)
print("已保存", output)

代码完成基本 HTTP 与音频响应检查,保存后还应确认能够播放或被音频解码器完整解码,不能只看扩展名。2026 年 9 月 22 日验收中的两组 MP3 均已完整解码为 PCM。

其他 EMOXIA 音色未在本轮逐一验证。不能实现这组专用参数的客户端,应暂不开放该客户端内的 tts-1 选项,避免将它描述为无需适配的标准语音接口。

9 Windows PowerShell 接入

9 1 安全输入 Key 并查询模型

以下示例适用于 Windows PowerShell 5.1 及更新版本。显式使用 curl.exe,避免旧版 PowerShell 将 curl 解释为其他命令。

powershell
$secret = Read-Host 'EMOXIA API Key' -AsSecureString
$credential = New-Object System.Net.NetworkCredential('', $secret)
$env:EMOXIA_API_KEY = $credential.Password
$credential = $null
$secret = $null
$env:EMOXIA_BASE_URL = 'https://emoxia.meta-api.vip/v1'

curl.exe --fail-with-body -sS --max-time 30 `
  "$env:EMOXIA_BASE_URL/models" `
  -H "Authorization: Bearer $env:EMOXIA_API_KEY"
if ($LASTEXITCODE -ne 0) { throw '模型列表请求失败' }

Key 不会在输入时显示,但应用使用时仍需在当前进程中读取它。不要执行输出环境变量、打印全部请求头等命令;共享排错日志前先脱敏。

9 2 使用 UTF8 JSON 文件发送中文请求

PowerShell 5.1 的默认文件编码及跨进程引号处理容易影响中文 JSON。下面先写入 UTF8 无 BOM 临时文件,再用 --data-binary @文件 发送,避免直接在命令行嵌套 JSON 双引号。

powershell
$body = @'
{
  "model": "gpt-6-astra",
  "input": "请回复一句中文问候。",
  "max_output_tokens": 1024,
  "stream": true
}
'@
$filename = 'emoxia-' + [guid]::NewGuid().ToString('N') + '.json'
$jsonFile = Join-Path $env:TEMP $filename
$utf8 = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($jsonFile, $body, $utf8)
try {
  curl.exe --fail-with-body -N --max-time 180 `
    "$env:EMOXIA_BASE_URL/responses" `
    -H "Authorization: Bearer $env:EMOXIA_API_KEY" `
    -H 'Content-Type: application/json' `
    --data-binary "@$jsonFile"
  if ($LASTEXITCODE -ne 0) { throw '请求失败或达到 curl 时限' }
} finally {
  Remove-Item -LiteralPath $jsonFile -ErrorAction SilentlyContinue
}

PowerShell 续行符是反引号,必须位于行末,后面不能有空格。Bash 示例的反斜杠续行不能原样复制到 PowerShell。以上 curl 退出码只能识别 HTTP 或传输级错误,仍需检查 SSE 内容和完成事件。

结束联调后,可以清除当前进程的 Key 环境变量:

powershell
Remove-Item Env:EMOXIA_API_KEY -ErrorAction SilentlyContinue

10 流式连接与稳定性设置

10 1 正确处理 SSE

SSE 是持续返回的一系列事件,不能把每次网络读取都当成一条完整 JSON。按空行分隔事件,合并同一事件的多行 data:;忽略注释心跳,但保留流内错误。UTF8 字符也可能跨网络分块,应用应使用正常的流式文本解码器。

需要分别判断“已经收到 HTTP 头”“已经收到首段有效正文”“收到正常结束标志”。这三件事不是同一个成功条件。心跳表示连接仍在活动,不代表模型已经产出回答。

接口正文位置完成标志失败或未完成处理
Responsesresponse.output_text.delta 的 deltaresponse.completed错误事件或缺少完成事件均应报告
Messagescontent_block_delta 的 delta.textmessage_stop检查错误及 stop_reason
Chat Completionschoices[].delta.content[DONE]检查错误及 finish_reason

此表用于本手册的文本测试。工具输出和多模态可能使用其他事件,不能用只读文本的解析器来宣称其完整支持。

10 2 超时和代理设置

首次联调可将文本总时限设为 180 秒、图片总时限设为 360 秒,再根据真实延迟分布调整。连接超时、首包超时、SSE 空闲超时、总时限应分开设置。客户端、应用服务、反向代理和托管平台任意一层采用 5 秒总超时,都可能提前终止正常生成。

如果应用经过自己的服务端代理,确认该层支持 SSE 转发、及时刷新缓冲、不会把完整回答缓存后才一次发出。流式空闲超时要与实际最长事件间隔匹配,业务总时限保持有上限。开启 stream=true 本身不能修复上游过载或断流。

idle timeout waiting for SSE 表示等待流事件期间超时;stream closed before response.completed 表示 Responses 流在完成前关闭。它们可能来自网络、代理、上游生成或客户端超时,需要结合请求 ID 与日志定位,不能仅凭错误文字判定全部是用户端问题。

10 3 有限重试原则

对临时性 429、502、503、504,可在尚未收到业务内容且确认适合重试时,使用有上限的指数退避并加入少量随机等待;优先遵守 Retry-After。例如最多重试两次,初始等待约 2 秒、下一次约 4 秒,业务总时限仍应限制整个流程。

429 也可能涉及额度或长期限制;503 也可能明确表示“没有可用渠道”。这类配置或权限问题不能靠无休止重试解决。先根据错误正文分类。

网络断开或超时并不能证明服务端没有处理请求。收到部分内容、产生工具调用或图片音频可能已经生成时,不要自动盲重放。除本手册 TTS 专用契约外,不承诺其他接口具有相同的幂等去重语义。

401、403、格式错误、余额不足、模型 ID 不存在应先修正配置。不要通过轮换大量 Key、提高并发或静默降低模型能力来处理这些错误。

11 价格与缓存说明

11 1 分组倍率

2026 年 9 月 22 日两组验收的实际使用日志显示:VIP 分组倍率为 0.45,GGVIP 为 0.9。两组当时的模型清单和启用渠道集合一致,GGVIP 的分组系数是 VIP 的两倍。

这些数值是带日期的已核实记录,不是永久价格承诺。调用前查看平台当前模型价格,调用后以使用日志中的实际计费字段为准。公开目录中的 X1 或 X2 展示不能独立替代具体请求的账单。

两次请求的输入、输出、缓存用量可能不同,所以不能只比较最终金额,就认定实际分组倍率错误;也不能因为系数相差两倍,就要求不同 token 用量的两次请求金额恰好两倍。

11 2 输入输出与缓存价格

不同模型可能分别设置输入、输出、缓存读取、缓存创建或按次价格。不要把某一个模型“输出是输入的若干倍”的规则直接应用到全部模型,也不要把控制台的内部倍率字段直接解释成每百万 token 的美元单价。

核账时对齐模型 ID、时间、分组、计费单位、输入与输出用量、缓存读写用量及实际计费方式。按量与按次模型分别查看;对缓存 token 是否包含在总输入中的口径,应按该协议和账单字段解释,避免重复累加。

11 3 缓存命中率

缓存读取是否产生,通常与模型及供应路线、重复提示词前缀、上下文长度、请求间隔等条件相关。不能通过把缓存读取单价调低,就提高实际命中率;也不能承诺所有模型或全平台始终达到 90%。

如接口提供缓存字段,可用于排查:Responses 常见 usage.input_tokens_details.cached_tokens;Chat Completions 常见 usage.prompt_tokens_details.cached_tokens;Messages 常见 usage.cache_read_input_tokens 和 usage.cache_creation_input_tokens。不同路线可能返回不同字段,缺失字段不能直接当成零命中,需结合实际使用日志。

应用可将稳定的系统指令、工具定义和固定前缀保持一致,把本轮变化的内容放在合适位置,避免无意义地在固定前缀中插入时间戳或随机值;同时保持用户之间的数据隔离。不要为了缓存跨用户混用私密上下文,也不要默认所有模型都支持同一套 cache_control 参数。

12 常见错误与处理

现象或错误优先检查建议动作
401 无效的令牌Key 是否正确、启用、未过期;域名是否匹配在原平台核对普通 Key,检查前后空格及 Bearer 格式,不循环重试
403 无权访问分组账户及令牌分组、模型白名单核对 vip 或 GGVIP 权限;请求 body 增加 group 无效
模型列表缺项Key 白名单、分组、客户端缓存重新 GET 模型列表,核对控制台并刷新客户端模型目录
400 参数错误协议与 body、精确模型 ID、字段类型用本手册最小请求复现,移除未经验证的可选参数
tool choice required 缺少 tools是否强制要求工具但没有工具定义无工具时不发送 required;需要工具时按对应协议提供有效 tools 并单独验收
invalid tts metadataTTS metadata、64 位 ID、额外字段按第 8 节发送专用请求,检查两个幂等 ID 是否一致
429 限流或额度问题错误正文、余额、并发和速率降低并发,遵守 Retry After;额度问题先处理额度
503 No available channel模型 ID、分组权限、当前渠道状态核对可见清单并提交请求 ID;不能靠修改客户端提示词修复
overloaded 或暂时过载上游负载与当前请求状态未收到业务内容时有限退避;持续出现则提交时间与请求 ID
502 或 504网关、上游、客户端总时限记录响应状态和正文摘要,结合日志定位;避免无上限重试
idle timeout waiting for SSE各层空闲时限、代理缓冲、上游事件检查第 10 节设置并保留最后事件,不直接认定生成成功
stream closed before response completed是否出现真正的完成事件标为未完整完成,保留部分内容并提供请求 ID
socket hang up 或 Connection error网络、代理、服务端断开与证书用相同最小请求定位发生层,不能仅据此判断余额或模型权限
HTTP 200 但没有正文是否仅收到心跳、错误事件或非文本输出检查协议事件及完成条件,不把 HTTP 200 当成内容成功
图片或音频无法打开是否把 JSON 错误页保存成文件检查 HTTP 状态、内容类型及完整解码,不只修改扩展名

错误正文可能包含比 HTTP 状态更准确的原因。提交支持信息时请保留原始错误文字和请求 ID,但不要携带完整 Key、完整请求头、用户私密提示词或图片 base64。

如果同一账号在不同客户端表现不同,分别记录最终请求路径、模型、流式参数、超时设置和错误时间。客户端独有的会话状态错误不一定来自模型 API;应先确认服务端实际是否收到对应请求。

13 接入验收清单

13 1 上线前逐项核对

本手册中的 46 项通过,指 2026 年 9 月 22 日两组最小请求的点时验证,不是每条历史备用渠道、满负载场景或未来可用性的保证。应用应持续监控成功率、首正文耗时、完成耗时和错误类型。

13 2 支持信息模板

出现问题时,可复制下面的模板给平台支持;不要把 Key 放进去。

text
发生时间及所在时区:
客户端或程序名称与版本:
分组 VIP 或 GGVIP:
精确模型 ID:
请求路径:
是否流式:
HTTP 状态码:
完整错误文字或脱敏截图:
请求 ID:
是否收到正文及最后一个事件名:
首正文等待时间与总耗时:
单并发最小请求是否也能复现:
是否自动重试以及重试次数:

通过请求 ID、准确时间与协议完成状态,才能区分令牌权限、请求格式、模型路由、临时过载、网络中断和客户端解析问题。请始终以当前 Key 的实际权限、平台实时价格及具体请求结果为准。