← 返回文档中心

BytePlus ModelArk API 接入指南

核对区域激活和Bearer认证,完成Chat流式调用与处理边界验收。

先确认区域、模型激活与认证路径

本指南使用BytePlus国际ModelArk的Chat API,通过OpenAI Python SDK调用普通文本模型。前提是已有获授权的账号、目标区域的API Key,以及在该区域激活的真实模型ID。先记录区域、账号/项目、模型版本、调用方式与计费安排;模型列表可见,不等于当前账号已经激活或有可用额度。

本例采用API Key的Bearer认证。AK/SK是另一种认证路径,相关调用还需按其文档核对推理接入点ID和签名要求;不能把AccessKey当成API Key塞入本例。使用自定义推理接入点时,也要核对其对应ID与区域。Coding Plan配置不能自动替代业务后端的正式调用凭据与计费方式。

区域端点不等于固定驻留保证

当前AP端点为 https://ark.ap-southeast.bytepluses.com/api/v3,官方区域标为Johor、ap-southeast-1;EU端点为 https://ark.eu-west.bytepluses.com/api/v3,区域标为Dublin、eu-west-1。不要因为AP域名包含southeast就写成新加坡模型托管。

API Key、模型激活和推理接入点有区域隔离,应在控制台切到目标区域再核对。区域文档同时说明请求通常优先本区域,但可能因调度溢出至其他区域,AP和EU之间存在此类路径。因此选择EU或AP域名本身,不能当作严格区域驻留保证;对处理边界有要求时,应先取得适用方案与条款确认,不通过默认回退绕开限制。

安装并设置占位值

python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade openai

由授权服务端环境安全注入 ARK_API_KEY。以下只展示AP接口形状,按你的实际区域替换,不能混用其他区域Key。确认所选模型支持Chat、普通文本与 max_tokens,再填写已激活的模型ID。

export ARK_BASE_URL='https://ark.ap-southeast.bytepluses.com/api/v3'
export ARK_MODEL='YOUR-ACTIVATED-TEXT-MODEL-ID'

最小非流式请求

保存为 modelark_chat.py,确认测试权限和费用后运行 python modelark_chat.py。SDK在Base URL后使用 /chat/completions,不是 /openai/v1;也不要改成控制面管理接口。128输出上限、30秒超时与0次自动重试为本地示例设置,不是服务容量或响应承诺。

import os
from openai import OpenAI

client = OpenAI(
    base_url=os.environ["ARK_BASE_URL"],
    api_key=os.environ["ARK_API_KEY"],
    timeout=30.0,
    max_retries=0,
)
request = {
    "model": os.environ["ARK_MODEL"],
    "messages": [{"role": "user", "content": "Reply with one short greeting."}],
    "max_tokens": 128,
}
answer = client.chat.completions.create(**request)
if not answer.choices:
    raise RuntimeError("No completion choice returned")
print(answer.choices[0].message.content or "")
print("finish_reason:", answer.choices[0].finish_reason)
print(answer.usage.model_dump() if answer.usage else "usage unavailable")

先核对返回模型、finish reason与usage,再判断答案是否满足测试任务。长度截断或内容过滤不是普通成功;仅有HTTP200不能证明质量、计费归属或区域约定已经通过验收。

流式解析:分别处理文本与状态

确认模型支持后,用下面代码替换非流式调用。Chat流基于SSE,文本来自 delta.content;推理内容可能在 reasoning_content,工具参数也有独立增量结构,不能一概拼入用户答案。Responses是另一协议,不能直接套用本解析器。

usage = None
finish_reason = None
with client.chat.completions.create(**request, stream=True) as events:
    for part in events:
        if part.usage is not None:
            usage = part.usage
        if not part.choices:
            continue
        choice = part.choices[0]
        if choice.delta.content:
            print(choice.delta.content, end="", flush=True)
        if choice.finish_reason is not None:
            finish_reason = choice.finish_reason
print()
print("finish_reason:", finish_reason)
print(usage.model_dump() if usage else "usage unavailable")

先检查choices再索引,usage如有返回则独立保存。某些响应不含流式usage,示例不假设统一的usage选项;需按当前模型接口确认。usage未取得不表示零费用,也不要在finish reason出现时忽略后续帧。中途断开要标记为不完整,并核对服务端状态后决定是否重试。

故障排查与上线检查

  • 认证/权限失败:检查Key来源、区域、项目权限和模型激活,不发送完整凭据或认证头。
  • 404或资源不存在:核对Base URL、模型ID或自定义接入点ID,避免跨区域引用。
  • 参数错误:从短文本最小请求开始,逐项核对模型支持的输出、推理和工具参数。
  • 限流/容量不足:检查配额、并发和账号状态,按服务错误与等待提示有限重试,不盲目切区。
  • 超时/5xx:保留脱敏请求编号、时间、已接收输出与结束状态,避免重复执行外部动作。

正式使用前确认实际数据保留、日志、跨区处理和删除安排,不能把SDK兼容等同于不留存或满足特定法域要求。费用按实际型号、输入输出、缓存与部署方式核对,并计入失败重试和附加服务。设置应用侧输出、并发与总任务时限,测试截断、中断、权限拒绝与用量缺失。

本文示例只完成离线语法与合成流检查,未读取Key、激活模型或调用真实服务;可用性、质量与账单由获授权环境验证。

官方依据

核验日期:2026-10-17。区域和流式正文已核对公开官方页面;使用前复核当前配置。