HiAPI
博客

教程

如何通过 hiapi API 使用 glm-5.3:curl、Python 与一个可运行的请求

2026年11月3日
如何通过 hiapi API 使用 glm-5.3:curl、Python 与一个可运行的请求

你将构建的内容

一个可运行的集成,通过 hiapi 的 OpenAI 兼容 Chat Completions API 调用 glm-5.3——单次请求即可返回真实补全结果,并说明使用该模型时实际最容易踩的坑:它的推理 token 会占用你的 max_tokens 预算。

前提条件:一个 hiapi API key。请从 dashboard 获取——它就是一个 sk-... 字符串,同一个 key 可用于你的账户中所有已启用的模型,而不仅限于此模型。

以下每个请求和响应都是在撰写本文时对线上 API 实际运行得到的。

最小可运行示例

glm-5.3 是标准 Chat Completions 端点上的文本模型——不是 hiapi 用于图像/视频/音频模型的异步 /v1/tasks 流程。一次请求,一次响应,无需轮询。

curl https://api.hiapi.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-<your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.3",
    "messages": [
      {"role": "user", "content": "Reply with exactly: OK"}
    ],
    "max_tokens": 200
  }'

响应(已裁剪):

{
  "id": "8be5f07603f0407c90734e8b4c2f02f0",
  "object": "chat.completion",
  "model": "glm-5.3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "OK",
        "reasoning_content": "The user wants me to reply with exactly \"OK\" ..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 17,
    "completion_tokens": 35,
    "total_tokens": 52,
    "completion_tokens_details": { "reasoning_tokens": 32 }
  }
}

用 Python 发起同样的调用,仅使用 requests:

import requests

resp = requests.post(
    "https://api.hiapi.ai/v1/chat/completions",
    headers={"Authorization": "Bearer sk-<your-api-key>"},
    json={
        "model": "glm-5.3",
        "messages": [
            {"role": "user", "content": "Reply with exactly: OK"}
        ],
        "max_tokens": 200,
    },
    timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["choices"][0]["message"]["content"])
print(data["usage"])

由于结构兼容 OpenAI,这段代码无需修改也能与官方 openai Python/JS SDK 配合使用——只需将 base_url 指向 https://api.hiapi.ai/v1 并传入你的 hiapi key。

生产环境模式

推理 token 会吃掉偏低的 max_tokens 预算

glm-5.3 在回答前总是先思考——每个响应都在 content 旁携带 reasoning_content 字段,且没有请求标志可以关闭它。该推理内容先于可见答案计入 max_tokens。将预算设得太低,你会得到 content: null 和 finish_reason: "length",因为模型把全部配额都花在了思考上,从未走到撰写回复这一步:

{
  "choices": [{
    "message": { "content": null, "reasoning_content": "The user has given a very simple instruction: \"" },
    "finish_reason": "length"
  }],
  "usage": { "completion_tokens": 10, "completion_tokens_details": { "reasoning_tokens": 9 } }
}

即使提示词很简单,也要给足余量(200+ token 是安全下限),并在信任 content 之前始终检查 finish_reason——"length" 表示答案被截断,甚至可能还没开始就已被截断。

流式输出

设置 "stream": true 并读取 Server-Sent Events。推理内容和答案文本作为独立的 delta 字段到达——先是 delta.reasoning_content 块,然后当模型开始实际回复时是 delta.content——流在最后一个块上以 finish_reason: "stop" 结束:

curl https://api.hiapi.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-<your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.3",
    "messages": [{"role": "user", "content": "Count to 3."}],
    "max_tokens": 200,
    "stream": true
  }'
data: {"choices":[{"delta":{"role":"assistant","content":"","reasoning_content":null},"finish_reason":null}]}

data: {"choices":[{"delta":{"content":null,"reasoning_content":"The"},"finish_reason":null}]}

data: {"choices":[{"delta":{"content":"1, ","reasoning_content":null},"finish_reason":null}]}

data: {"choices":[{"delta":{"content":"2, 3.","reasoning_content":null},"finish_reason":null}]}

data: {"choices":[{"delta":{},"finish_reason":"stop"}]}

如果你要流式输出到 UI,请将 reasoning_content 和 content 路由到不同的面板,而不是将它们拼接起来——它们不是同一段文本流。

工具调用

函数调用遵循标准 OpenAI 结构。声明 tools,当模型决定调用某个工具时,finish_reason 会以 "tool_calls" 返回,并带有已填充的 tool_calls 数组(它仍然会先推理,因此 reasoning_content 也会出现):

{
  "message": {
    "role": "assistant",
    "content": null,
    "reasoning_content": "The user wants to know the weather in Paris. I have a tool available for that. Let me call it.",
    "tool_calls": [{
      "id": "call_12e21fe488f046bc9edb4488",
      "type": "function",
      "function": { "name": "get_weather", "arguments": "{\"city\": \"Paris\"}" }
    }]
  },
  "finish_reason": "tool_calls"
}

在下一轮中回放助手的 tool_calls 消息,以及一条 role: "tool" 的结果消息,与任何 OpenAI 兼容集成相同。

错误处理

无效或缺失的 key 会返回 HTTP 401,并带有一致的错误结构——在解析 choices 之前先检查状态码:

{
  "error": {
    "code": "permission_denied",
    "message": "This API key is invalid. Check that it is correct or use another API key and try again.",
    "type": "hiapi_error"
  }
}

相关资源

常见问题

glm-5.3 支持流式输出吗? 支持——设置 "stream": true 并读取 SSE 块。推理内容和答案内容作为独立的 delta 字段流式传输。

为什么我的响应中 content 是 null? 几乎总是因为 max_tokens 预算太小,无法同时覆盖推理和答案。检查 finish_reason:"length" 表示响应在真实答案之前(或期间)被截断。请提高 max_tokens。

我可以禁用推理步骤吗? 不能通过请求参数禁用——glm-5.3 在每次响应前都会推理,且 reasoning_content 始终会被填充。请为它预留预算,而不是试图关闭它。

glm-5.3 支持函数/工具调用吗? 支持,使用标准 OpenAI tools / tool_calls 结构,已针对线上端点验证。

我可以使用官方 OpenAI SDK 而不是原始 HTTP 吗? 可以。将 SDK 的 base_url 指向 https://api.hiapi.ai/v1,并使用你的 hiapi sk-... key 作为 API key——无需其他更改。

glm-5.3 如何计费? 按 token 计费,与其他 hiapi 文本模型一样。请查看定价获取当前费率,而不是依赖本文中的某个数字。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档