星海智算开发文档
模型 API

完成首个模型调用

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

1. 准备三个值

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

JUSP_BASE_URL 包含末尾 /v1,没有末尾斜线。保留页面给出的协议、域名和端口;Portal 和文档使用 443,不表示模型 API 也取消了 10443。

export JUSP_BASE_URL='https://api.jusuanhub.com:10443/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 /modelsGET /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。

4. 判断是否完整

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

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

本页目录