星海智算开发文档
模型 API

完成首个模型调用

用发现请求确认鉴权,再从服务端完成一次文本调用。

1. 准备三个值

从 Portal 模型详情的“API 接入”取得 Base URL 和 模型别名,另在 API Key 页创建覆盖该模型的凭据。

JUSP_BASE_URL 包含末尾 /v1,没有末尾斜线。当前统一使用标准 HTTPS 443;不要沿用历史 :10443 地址。

export JUSP_BASE_URL='https://api.jusuanhub.com/v1'
export JUSP_API_KEY='<API_KEY>'
export JUSP_MODEL='<从模型详情复制的文本模型别名>'

这里的 Key 和模型值必须替换。避免 shell 调试回显,不在共享终端、录屏或日志中展示完整 Key。

2. 先检查可调用范围

curl --fail-with-body --max-time 30 "$JUSP_BASE_URL/models" \
  -H "Authorization: Bearer $JUSP_API_KEY"

这一步不会生成内容。失败时先处理鉴权或网络,不反复发起计费调用。服务发现见 GET /models 和 GET /services。

3. 发起文本请求

选择一个支持 Chat Completions 的模型。本例会调用真实模型,按当前服务规则计费;图片或视频模型请转到对应指南。

cURL

使用 jq 安全组装 JSON,不手动拼接用户文本。

jq -n --arg model "$JUSP_MODEL" \
  '{model:$model,messages:[{role:"user",content:"用一句话介绍成都"}]}' |
curl --fail-with-body --max-time 330 "$JUSP_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $JUSP_API_KEY" \
  -H 'Content-Type: application/json' --data-binary @-

Python(标准库,无需平台 SDK)

import json
import os
import urllib.request

base = os.environ["JUSP_BASE_URL"].rstrip("/")
payload = {"model": os.environ["JUSP_MODEL"],
           "messages": [{"role": "user", "content": "用一句话介绍成都"}]}
request = urllib.request.Request(
    base + "/chat/completions", data=json.dumps(payload).encode(),
    headers={"Authorization": "Bearer " + os.environ["JUSP_API_KEY"],
             "Content-Type": "application/json"}, method="POST")
with urllib.request.urlopen(request, timeout=330) as response:
    result = json.load(response)
print(result["choices"][0]["message"]["content"])

JavaScript(服务端)

const base = process.env.JUSP_BASE_URL.replace(/\/$/, '');
const response = await fetch(`${base}/chat/completions`, {
  method: 'POST', signal: AbortSignal.timeout(330_000),
  headers: { Authorization: `Bearer ${process.env.JUSP_API_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ model: process.env.JUSP_MODEL,
    messages: [{ role: 'user', content: '用一句话介绍成都' }] }),
});
if (!response.ok) throw new Error(`调用失败:HTTP ${response.status}`);
const result = await response.json();
console.log(result.choices[0].message.content);

这些超时值只是客户端等待预算,不扩大模型输出能力,也不会使服务端工作自动取消。模型输出上限、流式能力和更长调用期限应以目标服务公开合同为准。

本页 Python 示例只使用标准库。模型详情生成的媒体流程 Python 示例使用 requests,运行前在自己的虚拟环境安装该依赖;cURL 流程使用 jq,JavaScript 流程在支持内置 fetch 的 Node.js 服务端运行。它们都不是需要私有安装凭据的平台应用 SDK。

图片、视频和音频的生成类服务使用异步任务:创建成功后还必须鉴权查询 jobUrl、再鉴权下载 contentUrl。可直接复制 API Key 异步媒体完整调用 中的 cURL 或 Java 服务端示例。图片和视频的理解类服务(例如 Qwen3.8 识图)使用 /chat/completions,返回 JSON 或 SSE;图片输入与 WorkBuddy 配置见文本与视觉。

4. 判断是否完整

读取 choices[].finish_reason。长度限制结束不等于内容已经完整;检查目标模型允许的 max_tokens,必要时分段生成。流式调用还须正确消费 SSE,详见 文本与视觉。

请求失败或超时不能无条件重放,尤其已经开始返回内容时。参见 错误与恢复。

本页目录