#产品概览

HCAI 当前是一套统一的大模型调用与计费网关,项目主干能力覆盖用户认证、API Key 管理、充值支付、余额查询、用量统计、模型调用以及管理员后台控制。对外接口由 /api/v1、/v1 和 /admin 三组路由承载,能力边界与现网状态以项目 README 和实际路由注册为准。

对外接入可以分成两条主路径:一条是用户先通过控制台或 /api/v1 完成注册、登录、充值和 API Key 创建;另一条是客户端、脚本或 AI 工具直接使用 OpenAI 兼容的 /v1/models 与 /v1/chat/completions 发起调用。这样既保留了控制台的用户与计费闭环,也兼容已有 OpenAI 生态的接入方式。

当前对外入口
用户侧接口:/api/v1/auth/api/v1/keys/api/v1/payments/api/v1/balance/api/v1/usage/api/v1/models/api/v1/media
OpenAI 兼容接口:/v1/models/v1/chat/completions
公共模型与价格展示:/api/v1/public/models

适用人群

已有 OpenAI SDK 或工具链的团队

如果你已经在用 OpenAI SDK、curl 脚本或支持 OpenAI 协议的 IDE/终端工具,HCAI 当前开放的 /v1/models/v1/chat/completions 可以直接承接这类接入,只需要替换 base URL 与 API Key。

需要账号、充值和密钥管理的业务方

如果你的团队需要先完成注册登录、充值下单、余额管理,再发放 API Key 给应用使用,当前的 /api/v1/auth/api/v1/payments/api/v1/keys/api/v1/balance 路由已经覆盖这条闭环。

需要核对调用成本的运营或财务场景

如果你更关注每次调用的成本、余额变化和阶段性汇总,当前系统已经提供 /api/v1/usage/logs/api/v1/usage/statistics/api/v1/usage/summary 以及余额日志查询接口,适合做成本核对和用户对账。

需要统一维护模型与价格的后台运营

如果你的重点是统一维护模型、运行时价格和订单处理,当前管理员路由已经提供模型列表、价格更新、订单确认与退款等后台能力,适合平台化运营和人工介入处理。

核心能力

用户认证与控制台

注册、登录、找回密码和用户资料接口都挂在 /api/v1/auth/api/v1/user 下,前端控制台围绕这些接口完成用户态操作。

API Key 生命周期管理

当前平台支持创建、查询、轮换和停用 API Key,模型调用前的 OpenAI 兼容鉴权由 /v1 路由组上的 API Key 中间件统一处理。

充值、余额与订单流转

充值订单创建、订单查询、支付方式获取和支付回调都已经接入,用户侧还可以查询余额和余额流水,因此支付到账与消费扣减是同一条平台内链路。

模型调用与用量追踪

用户态模型调用使用 /api/v1/models,开放生态接入使用 /v1;调用完成后会通过计费服务写入 usage 和 balance 相关流水,供后续统计与对账使用。

当前能力边界

按现网口径写文档
当前正式口径只启用标准按量计费、阶梯定价、思考模式差异价格和上下文缓存计费。Batch、免费额度和 VIP 加价虽然在部分配置或结构里留有字段,但当前 README 和计费服务都明确不把它们作为现网对外能力或计费口径。

#快速开始

HCAI 当前可执行的接入路径是“注册与登录 - 充值 - 创建 API Key - 发起第一次 /v1 调用”。其中用户准备动作使用 /api/v1 路由组完成,真正的模型调用使用 OpenAI 兼容的 /v1 路由组完成,两类凭证分别是登录 token 和 API Key。

先分清两类认证
登录、充值、查看余额、创建 API Key 使用登录后的 Bearer token 访问 /api/v1;模型列表和模型调用使用 Bearer API Key 访问 /v1。这两类凭证在当前路由实现里由不同中间件校验,不能混用。

注册与登录

注册接口是 /api/v1/auth/register,当前服务端实际校验 usernamepasswordemail 三个字段,其中密码至少 8 位;登录接口是 /api/v1/auth/login,使用用户名和密码登录,成功后返回 token 以及用户基础信息。

1

提交注册信息

如果你走 API 方式接入,先向 /api/v1/auth/register 提交用户名、邮箱和密码。当前注册逻辑已经包含邮箱格式校验和密码强度校验,因此文档中的注册字段应以这三个必填项为准。

2

登录并拿到用户 token

注册完成后调用 /api/v1/auth/login 登录。登录成功返回的 token 用于访问后续的用户态接口,例如充值下单、创建 API Key、查看余额和查看订单。

3

确认当前用户态入口

登录后,用户资料、API Key、支付、余额和用量都在 /api/v1 这一组路由里完成;如果你使用网页控制台,本质上也是在调用同一组接口。

bash 注册与登录示例
curl https://你的域名/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "demo-user",
    "email": "demo@example.com",
    "password": "StrongPass123!"
  }'

curl https://你的域名/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "demo-user",
    "password": "StrongPass123!"
  }'

充值与创建 API Key

创建支付订单前,可以先通过 /api/v1/payments/methods 查看当前支付方式;正式下单使用 /api/v1/payments/orders,服务端实际要求 amountpayment_method。充值到账后,再通过 /api/v1/keys 创建 API Key,当前服务端统一生成 normal 类型密钥并返回完整 key 值。

1

确认支付方式并发起充值

先查看 /api/v1/payments/methods 返回的支付方式,再向 /api/v1/payments/orders 提交充值金额和支付方式。订单创建成功后,平台会返回订单号、支付链接和支付表单信息。

2

检查余额是否可用

支付成功后,可以通过 /api/v1/balance/users/:user_id/balance 查询余额。后续模型调用如果走预授权结算链路,平台会以这里的余额作为预扣和最终结算基础。

3

创建并保存 API Key

/api/v1/keys 发起创建请求后,响应中会返回新的 api_key。这个 key 用于访问 /v1/models/v1/chat/completions,建议立即保存到环境变量或密钥管理系统中。

bash 创建 API Key 示例
curl https://你的域名/api/v1/keys \
  -H "Authorization: Bearer <login-token>" \
  -H "Content-Type: application/json" \
  -d '{}'
安全提醒
API Key 泄露可能导致额度被盗用。如果怀疑密钥已泄露,请立即停用或轮换对应密钥。用户登录 token 和 API Key 分别服务于 /api/v1/v1,不要把登录 token 直接用于模型调用。

第一次调用

第一次正式调用前,建议先请求 /v1/models 确认可用模型,再使用新生成的 API Key 调用 /v1/chat/completions。如果你需要展示模型价格,可以额外读取公开的 /api/v1/public/models,但真正的模型执行入口仍然是 /v1

bash 查看模型列表
curl https://你的域名/v1/models \
  -H "Authorization: Bearer sk-xxx"

确认模型存在后,再发送第一条对话请求:

bash 第一次对话调用
curl https://你的域名/v1/chat/completions \
  -H "Authorization: Bearer sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-turbo",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ]
  }'

如果调用成功,你将收到类似以下的 JSON 响应:

json 响应示例
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "model": "qwen-turbo",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!我是 HCAI 平台的 AI 助手..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 28,
    "total_tokens": 40
  }
}

在当前实现里,非流式和流式请求都会在成功后按 usage 进入计费链路;如果接口返回了 usage,平台会据此做最终结算并写入用量与余额流水。因此第一次调用除了要看响应内容,也建议同步关注余额与使用统计页面是否正常更新。

#模型与价格

HCAI 当前的模型清单、分类、最大上下文、缓存开关和价格字段都来自服务端运行配置,并通过模型列表接口对外输出。面向公开文档、价格展示和控制台说明时,应优先参考 /api/v1/public/models/api/v1/models 返回的数据,而不能只看 OpenAI 兼容的 /v1/models,因为后者只返回模型 ID 列表。

模型相关接口
公开价格展示:/api/v1/public/models,无需登录,可直接用于官网价格表
用户态完整列表:/api/v1/models,需要登录 token,返回完整模型与价格字段
OpenAI 兼容列表:/v1/models,使用 API Key,只返回模型 ID 列表

模型列表与价格字段

当前模型列表接口会同时返回 display_namecategoryvendorcontext_lengthsupports_cacheprice_unit,以及文本模型使用的 input_price_per_millionoutput_price_per_million 和部分模型的 tiers。文本模型按“元/M tokens”展示;图片模型按张,视频模型按秒。

Chat 与通用对话

chat 类模型是当前配置中的主体,覆盖常规问答、长上下文、国内外主流模型映射以及兼容版本,适合大多数文本生成场景。

Reasoning 与推理

reasoning 类模型用于强化推理场景,但并不是所有推理模型都单独配置了思考模式差异价格,因此文档不能把“thinking 价格”写成所有推理模型的统一能力。

Vision / Coding / Multimodal

当前配置里还包含 vision、coding 和 multimodal 分类,所以“模型与价格”章节既要覆盖纯文本模型,也要覆盖视觉、编码和多模态模型的价格展示口径。

缓存支持按模型开启

supports_cache 是逐模型开关。是否支持缓存、是否有阶梯价格、是否有思考价格,都以单个模型配置和接口返回字段为准,而不是按模型大类统一推断。

统一价格与阶梯价格

没有 tiers 的模型按统一价格结算;配置了 tiers 的模型,会按请求命中的上下文档位选择对应价格。文本模型继续使用输入/输出 token 价格;媒体模型不按 token 计费,图片按张、视频按秒,其中视频模型在价格表里的两列分别对应 720P 和 1080P 档位,详细口径以 /api/v1/media/pricing 为准。

当前阶段能力范围
HCAI 当前只启用标准按量计费、阶梯定价、思考模式差异价格和缓存计费。Batch、免费额度、VIP 仅保留开发,当前版本未启用,也不作为对外计费口径。
模型 上下文区间 输入价格 输出价格 最大上下文
加载定价表...

思考模式价格

模型列表接口会同时暴露普通价格字段和 thinking_* 价格字段。实际计费时,服务端会在请求显式声明思考模式或上游 usage 显示存在 reasoning 时优先选择 thinking 价格;如果某个模型没有配置 thinking 价格字段,则仍按普通输入/输出价格计费。

当前文档应如何描述 thinking 价格

可以明确写:平台支持思考模式差异价格,是否生效取决于单模型配置 按配置生效
可以举例:qwen-turbo 当前已配置思考模式价格 输入 0.3 / 输出 3.0
不要写:所有 reasoning 模型都有单独 thinking 价格 当前不成立

缓存支持与折扣

缓存折扣只对 supports_cache=true 且上游 usage 返回了可计费缓存明细的模型生效。服务端会根据 usage 中的 cached_tokenscache_creation_input_tokens 对缓存模式进行归一化,客户端声明与上游 usage 不一致时,最终以服务端归一化结果结算。

隐式缓存 8 折

系统自动检测重复的上下文前缀并进行缓存,命中的输入 token 按 80% 计费(即 20% 折扣)。无需额外配置,自动生效。

显式缓存 - 命中 9 折

主动创建缓存后,命中的缓存输入 token 按 90% 计费(即 10% 折扣)。适合固定 system prompt 或知识库前缀等场景。

显式缓存 - 创建 1.25 倍

首次创建显式缓存时,输入 token 按 125% 计费。额外 25% 为缓存创建费用,后续命中缓存即可享受折扣,长周期使用更省钱。

缓存策略选择

如果你的 system prompt 固定且调用频繁,建议使用显式缓存;如果上下文变化较大,隐式缓存已足够。两种缓存不会叠加,同一 token 只享受一种折扣,不支持缓存的模型则不会进入这条计费路径。

计费示例

假设你使用 qwen3-max 模型,发送一次请求:输入 5000 token,输出 1500 token,上下文总长度 6500 token(≤32K 区间)。

标准调用计费

输入费用:5000 × 2.5 / 1,000,000 0.0125 元
输出费用:1500 × 10 / 1,000,000 0.0150 元
本次请求总费用 0.0275 元

隐式缓存命中 3000 token 的计费

缓存命中输入:3000 × 2.5 × 0.8 / 1,000,000 0.0060 元
未命中输入:2000 × 2.5 / 1,000,000 0.0050 元
输出费用:1500 × 10 / 1,000,000 0.0150 元
本次请求总费用(节省 0.0015 元) 0.0260 元
省钱建议
固定 system prompt 或知识库前缀推荐使用显式缓存,长文档反复调用推荐使用隐式缓存,两种方式都能显著降低调用成本。

#接入客户端

这一章只讨论“外部客户端如何调用 HCAI”。按照当前路由注册和鉴权实现,面向 SDK、脚本、CLI 和第三方工具的主协议边界是 /v1 路由组,也就是 /v1/models/v1/chat/completions 和当前作为别名存在的 /v1/completions。用户注册、充值、创建 API Key、查看公开价格等控制台能力不属于本章接入范围。

本章只覆盖的接口边界
API 基址:https://你的域名/v1
主调用接口:POST /v1/chat/completions
模型列表:GET /v1/models
兼容别名:POST /v1/completions,当前只是 chat handler 的别名,文档示例仍建议优先使用 /v1/chat/completions
认证方式:Authorization: Bearer sk-xxxX-API-Key: sk-xxx
Key 要求:必须是已启用且已绑定有效用户的 API Key
不要在客户端章节混用这些接口
/api/v1/models 是登录态用户接口,不是外部 SDK 的默认入口;/api/v1/public/models 主要用于官网或公开价格展示;/api/v1/models/chat/stream 是登录态辅助入口。对外部客户端来说,优先始终使用 /v1 这一组接口。

Python OpenAI SDK

Python OpenAI SDK 是当前最贴合现有接口边界的接入方式之一。只要把 base_url 指向你的 HCAI 域名下的 /v1,并使用通过控制台创建的 API Key,即可直接调用模型列表和对话接口。

bash 安装依赖
pip install openai
python 基础调用
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxx",
    base_url="https://你的域名/v1",
)

# 先看模型 ID 列表。这里返回的是 OpenAI 风格的 id/object/owned_by,
# 不是官网价格页使用的完整价格字段。
models = client.models.list()
print(models)

response = client.chat.completions.create(
    model="qwen3-max",
    messages=[
        {"role": "system", "content": "你是一个有帮助的AI助手。"},
        {"role": "user", "content": "请解释什么是大语言模型"},
    ],
    temperature=0.7,
    max_tokens=1024,
)

print(response.choices[0].message.content)
print(f"Token 用量: {response.usage}")

如果你需要流式输出,继续使用同一个 /v1/chat/completions 接口,并在请求体里设置 stream=True 即可,不需要切到 /api/v1/models/chat/stream

Node.js OpenAI SDK

Node.js 侧的接入边界与 Python 完全一致:模型列表和对话都走 /v1,认证使用 API Key,而不是登录 token。

bash 安装依赖
npm install openai
javascript 基础调用
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-xxx",
    baseURL: "https://你的域名/v1",
});

const models = await client.models.list();
console.log(models.data.map((item) => item.id));

const response = await client.chat.completions.create({
  model: "qwen3-max",
  messages: [
    { role: "system", content: "你是一个有帮助的AI助手。" },
    { role: "user", content: "请解释什么是大语言模型" },
  ],
  temperature: 0.7,
  max_tokens: 1024,
});

console.log(response.choices[0].message.content);
console.log("Token 用量:", response.usage);

当前 /v1/completions 虽然存在,但服务端实现上只是 Chat handler 的别名,因此文档示例仍建议统一写成 chat.completions 形式,避免让客户端误以为平台完整支持传统 completions 独立语义。

curl

curl 适合直接验证 API Key、模型名和网络连通性。建议的顺序是先请求 /v1/models,再用同一个 API Key 发起 /v1/chat/completions

bash 查看模型列表
curl https://你的域名/v1/models \
  -H "Authorization: Bearer sk-xxx"
bash 对话调用
curl https://你的域名/v1/chat/completions \
  -H "Authorization: Bearer sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-max",
    "messages": [
      {"role": "system", "content": "你是一个有帮助的AI助手。"},
      {"role": "user", "content": "请解释什么是大语言模型"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'
bash 使用 X-API-Key 调用
curl https://你的域名/v1/chat/completions \
  -H "X-API-Key: sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-turbo",
    "messages": [
      {"role": "user", "content": "你好"}
    ]
  }'

DashScope SDK (Python)

这一项需要谨慎写。当前平台对外明确注册的客户端协议边界是 OpenAI 兼容的 /v1 路由,而不是单独对外暴露 DashScope 原生协议路由。因此 DashScope SDK 不应作为与 OpenAI SDK 同等级的一等接入方式来描述。

bash 安装依赖
pip install dashscope
注意
如果你的项目必须使用 DashScope SDK,请先确认所用 SDK 版本是否允许自定义兼容基址,并在本地实际验证它是否能正确发起到 /v1/chat/completions 的请求。若版本不支持或行为不稳定,直接回到 OpenAI SDK 是当前最稳妥的接入方式。

#AI工具接入

HCAI 兼容 OpenAI API 协议,可以轻松接入各类 IDE 和编码工具,提升开发效率。以下是主流编码工具的接入方式。

安装说明边界
这些工具本身都属于第三方 CLI 或 IDE 扩展。本文档补充的是“完成工具官方安装之后,如何接入 HCAI”;具体安装包、平台差异、版本要求和发行渠道以各工具官方文档为准。最直接的安装完成标准,是本地终端可以直接执行对应命令。

OpenCode 接入

OpenCode 是一款开源的终端 AI 编码助手,通过配置环境变量即可接入 HCAI。

安装方式

先按 OpenCode 官方发布页或官方仓库完成 CLI 安装,并确认终端中可以直接执行 opencode。Windows、macOS 和 Linux 的安装命令可能不同,建议优先使用官方稳定版安装方式。

环境变量配置

bash OpenCode 配置
# 配置环境变量
export OPENAI_API_KEY=your-hcai-api-key
export OPENAI_BASE_URL=https://hc-ai.cn/v1

# 启动 OpenCode
opencode

启动示例

在 OpenCode 配置中,将模型设置为 HCAI 支持的任意模型,如 qwen3-maxdeepseek-r1

接入建议
安装完成后,建议先用 /v1/models 核对模型名称,再在 OpenCode 中填写目标模型,避免因为模型名不一致导致启动后首个请求失败。

OpenClaw 接入

OpenClaw 是一款 AI 驱动的编码工具,通过 OpenAI 兼容接口接入 HCAI。

安装方式

先按 OpenClaw 官方文档完成 CLI 安装,并确保本地终端可以直接执行 openclaw。由于不同版本的安装入口和参数可能变化,安装命令应以 OpenClaw 官方说明为准。

环境变量配置

bash OpenClaw 配置
# 配置 API endpoint
export OPENAI_API_KEY=your-hcai-api-key
export OPENAI_BASE_URL=https://hc-ai.cn/v1

# 启动 OpenClaw
openclaw --model qwen3-max

启动示例

OpenClaw 当前文档示例通过 --model 显式指定模型。实际接入时,建议把模型名和 HCAI 的模型列表接口保持一致,避免工具默认值和平台可用模型不一致。

注意
OpenClaw 的安装包、系统支持范围和更多 CLI 参数属于工具自身能力,HCAI 文档只负责说明接入后的环境变量和模型配置方式。

Claude Code 接入

Claude Code 是 Anthropic 推出的终端 AI 编码助手,可通过环境变量配置接入 HCAI。

安装方式

先按 Anthropic 官方文档完成 Claude Code CLI 安装,并确认终端中可以直接执行 claude。Claude Code 的安装方式和登录流程由 Anthropic 官方维护,本文不重复复制其安装命令。

环境变量配置

bash Claude Code 配置
# 通过 ANTHROPIC_API_KEY 和自定义 base URL 接入
# 设置环境变量
export ANTHROPIC_API_KEY=your-hcai-api-key
export ANTHROPIC_BASE_URL=https://hc-ai.cn/v1

# 启动 Claude Code
claude

启动示例

注意
Claude Code 使用 Anthropic API 格式。HCAI 当前主对外协议是 OpenAI 兼容接口,如果你使用的 Claude Code 版本对 Anthropic 自定义 base URL 支持不完整,应优先回到 OpenAI 兼容方式接入,而不要把 Anthropic 直连能力写成平台默认保障项。

Hermes 接入

Hermes 是一款轻量级 AI 编码助手,支持通过 OpenAI 兼容接口接入 HCAI。

安装方式

先按 Hermes 官方发布页完成 CLI 安装,并确认本地终端可以直接执行 hermes。如果官方同时提供多种安装渠道,优先选择与你当前系统和团队环境一致的官方稳定版。

环境变量配置

bash Hermes 配置
# 配置 Hermes 使用 HCAI endpoint
export OPENAI_API_KEY=your-hcai-api-key
export OPENAI_BASE_URL=https://hc-ai.cn/v1

# 启动 Hermes
hermes chat --model qwen3-max

启动示例

Hermes 当前示例使用 hermes chat --model qwen3-max 启动。接入前建议先确认本地已经成功安装 CLI,再检查环境变量和模型名是否与 HCAI 返回结果一致。

排障建议
如果工具已安装但无法调用,优先检查三项:本地命令是否存在、环境变量是否生效、模型名称是否来自 HCAI 的真实模型列表。

#进阶用法

当前公开接口里,能够明确按源码验证的进阶能力主要包括:基于 stream=true 的流式输出、部分模型返回的 reasoning 内容、以及缓存计费明细的识别与统计。本章只保留这些已经有现成 handler、请求结构或计费逻辑支撑的能力,不把尚未作为公开协议稳定承诺的字段或路由写进正式文档。

当前公开能力边界
目前外部客户端请求体里,文档只把 modelmessagesstreamtemperaturemax_tokens 作为明确接收并长期承诺的字段。toolstool_choicestream_optionstop_kseed 以及独立的 /v1/caches 路由,当前都不应写成现网默认开放能力。

Python 流式调用

Python OpenAI SDK 可以直接对接 /v1/chat/completions 的流式输出能力。当前建议只传最小必要字段,避免把未明确支持的扩展参数写入正式接入文档。

python Python 流式输出
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxx",
    base_url="https://你的域名/v1",
)

stream = client.chat.completions.create(
    model="qwen3-max",
    messages=[
        {"role": "system", "content": "你是一个有帮助的AI助手。"},
        {"role": "user", "content": "请写一首关于春天的短诗"},
    ],
    stream=True,
    temperature=0.7,
    max_tokens=1024,
)

for chunk in stream:
    delta = chunk.choices[0].delta if chunk.choices else None
    if delta and delta.content:
        print(delta.content, end="", flush=True)

print()

当前流式响应里是否携带完整 usage,需要以上游实际回包为准。平台内部在计费时已经对“流式成功但 usage 缺失”的情况做了本地估算兜底,所以文档不再把 stream_options.include_usage 写成默认开放参数。

Node.js 流式调用

Node.js 侧同样只建议围绕 /v1/chat/completions 的流式能力组织示例。下面保留错误处理和重试思路,但去掉未明确承诺的扩展参数。

javascript Node.js 流式输出
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-xxx",
    baseURL: "https://你的域名/v1",
});

async function streamChat() {
  try {
    const stream = await client.chat.completions.create({
      model: "qwen3-max",
      messages: [
        { role: "system", content: "你是一个有帮助的AI助手。" },
        { role: "user", content: "请详细解释 JavaScript 的 Promise 机制" },
      ],
      stream: true,
      temperature: 0.7,
      max_tokens: 2048,
    });

    let fullContent = "";
    for await (const chunk of stream) {
      const delta = chunk.choices[0]?.delta;
      if (delta?.content) {
        process.stdout.write(delta.content);
        fullContent += delta.content;
      }
    }

    return fullContent;
  } catch (error) {
    if (error.status === 401) {
      console.error("认证失败:请检查 API Key 是否正确");
    } else if (error.status === 429) {
      console.error("请求频率过高:请稍后重试");
    } else if (error.status >= 500) {
      console.error("服务端错误:请稍后重试");
    } else {
      console.error("请求失败:", error.message);
    }
    throw error;
  }
}

// 带重试的流式调用
async function streamChatWithRetry(maxRetries = 3) {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      return await streamChat();
    } catch (error) {
      if (attempt === maxRetries) throw error;
      const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);
      console.log(`第 ${attempt} 次重试,等待 ${delay}ms...`);
      await new Promise((resolve) => setTimeout(resolve, delay));
    }
  }
}

streamChatWithRetry();

curl 参数边界示例

当前公开文档建议把 curl 示例限制在当前 handler 明确接收的字段上,也就是 modelmessagesstreamtemperaturemax_tokens。像 toolstool_choicetop_kseed 这类字段,不再写成现网默认支持参数。

bash 非流式调用
curl https://你的域名/v1/chat/completions \
  -H "Authorization: Bearer sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-max",
    "messages": [
      {
        "role": "system",
        "content": "你是一个专业的技术顾问,擅长用简洁的语言解释复杂概念。"
      },
      {
        "role": "user",
        "content": "什么是微服务架构?它有哪些优缺点?"
      }
    ],
    "temperature": 0.7,
    "max_tokens": 2048,
    "stream": false
  }'

流式输出 curl 示例

bash 流式调用
curl https://你的域名/v1/chat/completions \
  -H "Authorization: Bearer sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-max",
    "messages": [
      {"role": "user", "content": "请写一段关于人工智能的短文"}
    ],
    "stream": true,
    "temperature": 0.8,
    "max_tokens": 1024
  }'

缓存计费观察

当前源码可以明确确认的平台能力是“缓存计费识别与统计”,而不是公开暴露独立缓存管理路由。也就是说,平台会识别上游 usage 里的缓存 token 明细,并结合请求头中的 X-Cache-Mode 进行计费归一化,但文档不再把 /v1/caches 写成当前公开可用的标准接口。

bash 声明缓存模式的调用示例
curl https://你的域名/v1/chat/completions \
  -H "Authorization: Bearer sk-xxx" \
  -H "X-Cache-Mode: implicit" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-max",
    "messages": [
      {"role": "system", "content": "这里放重复使用的长 system prompt 或知识库前缀"},
      {"role": "user", "content": "请总结以上内容的重点"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'
如何理解这一示例
平台是否真正进入缓存计费路径,最终取决于两个条件:一是模型本身配置了 supports_cache=true;二是上游回包 usage 里返回了可计费的缓存明细,例如 cached_tokenscache_creation_input_tokens。只有同时满足这些条件,请求才会按 8 折、9 折或 1.25 倍规则进入对应结算逻辑。
当前不要写成公开能力的内容
当前公开路由里没有注册独立的 /v1/caches 创建接口,因此本文档不再提供“显式缓存创建 API”示例。如果后续平台正式开放缓存管理路由,应单独补文档并以真实路由为准。

#媒体接口

HCAI 的视频生成能力走用户态 /api/v1/media 路由组,不走 /v1/chat/completions。这条链路使用登录后的 Bearer token 认证,提交视频任务后先拿到 task_id,再轮询任务状态直到任务成功或失败。

视频接口最短链路
1. POST /api/v1/media/videos/generate 提交视频任务
2. GET /api/v1/media/tasks/:taskId 轮询状态与结果
3. 任务完成后读取 output.video_urloutput.results[0].url

认证与流程

媒体接口和 OpenAI 兼容文本接口使用不同凭证。文本调用依赖 sk-xxx API Key,而视频生成、素材上传、模型列表、定价与费用预估都在 /api/v1/media 下,统一要求登录 token。不要把 API Key 直接拿去调用视频接口。

1

先登录拿到 token

使用 /api/v1/auth/login 获取登录 token。后续对 /api/v1/media 的所有请求都在请求头里带上 Authorization: Bearer <login-token>

2

提交视频生成任务

最常见的是文生视频:传入 modelinput.promptparameters.duration/resolution 即可。图生视频可以额外传 input.image_url,参考生视频可在 input.media 里传 reference_imagereference_video

3

轮询 task 状态

视频接口是异步任务。提交成功后响应中会返回 task_id,然后轮询 /api/v1/media/tasks/:taskId,直到 task_status 进入 SUCCEEDEDFAILEDCANCELED

提交视频生成任务

以下示例演示最常见的文生视频调用。若你需要图生视频,可在 input 中加上 image_url;如果是参考生视频或视频编辑场景,则补充 input.media 或其他模型要求的附加字段。

bash curl 提交视频任务
curl https://你的域名/api/v1/media/videos/generate \
  -H "Authorization: Bearer <login-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-t2v",
    "input": {
      "prompt": "一只橘猫在清晨的海边奔跑,电影感镜头,风吹起毛发"
    },
    "parameters": {
      "duration": 5,
      "resolution": "720P"
    }
  }'
javascript 前端 fetch 调用示例
const token = '你的登录 token';
const payload = {
  model: 'wan2.7-t2v',
  input: {
    prompt: '城市夜景中穿梭的无人机镜头,霓虹灯,节奏感强'
  },
  parameters: {
    duration: 5,
    resolution: '720P'
  }
};

const response = await fetch(window.location.origin + '/api/v1/media/videos/generate', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(payload)
});

const result = await response.json();
console.log(result.output.task_id);

任务轮询与结果读取

提交任务成功后,接口会立即返回预估费用与任务编号。轮询时建议把 modelresolutionduration 一并带上,和平台当前的计费链路保持一致。任务成功后可以直接读取视频链接并展示或下载。

bash curl 查询视频任务
curl "https://你的域名/api/v1/media/tasks/task-xxx?model=wan2.7-t2v&resolution=720P&duration=5" \
  -H "Authorization: Bearer <login-token>"
图生视频先上传素材
如果你手里是本地图片或视频文件,而不是公网 URL,需要先调用 /api/v1/media/upload 把素材上传成平台可访问的 URL,再把该 URL 填进 input.image_urlinput.video_urlinput.media

#API 在线调试

在此可以直接测试两类接口:OpenAI 兼容文本调用,以及用户态视频任务调用。文本测试走 /v1/chat/completions,视频测试走 /api/v1/media/videos/generate/api/v1/media/tasks/:taskId

安全提醒
文本测试使用 API Key,视频测试使用登录 token;两类凭证都只在浏览器本地使用,不会被页面额外上报。测试完成后请及时清除输入框。

Chat Completions 测试

就绪

视频生成任务测试

就绪

仅填提示词即可验证文生视频;填入 image_url 可验证图生视频;若要验证参考生视频,可在高级 JSON 中传入 reference_image / reference_video 列表。