教程
如何使用 grok-4.6 API:cURL、Python 与一个可用的请求
在 hiapi 兼容 OpenAI 的聊天补全端点上使用流式输出、工具调用与 JSON 模式
grok-4.6 是一个经过推理调优的聊天模型,可通过 hiapi API 使用。与 hiapi 的图像和视频模型不同,它不使用异步的 /v1/tasks 管道——它是一个同步的、兼容 OpenAI 的聊天补全接口,因此你会直接得到一个普通的 HTTP 响应(或一条 SSE 流),无需轮询。本文先介绍一个最小可用的请求,然后讲解你在生产环境中真正需要的部分:流式输出、工具调用、JSON 模式以及错误处理。
你需要准备什么
- 一个 hiapi API 密钥。如果你还没有,请从控制台获取一个——下面每个请求都需要将它放在
Authorization: Bearer sk-...请求头中。 - 任意 HTTP 客户端。示例使用
curl和 Python 的requests;无论使用哪种语言,JSON 结构都是一样的。 - 不需要 SDK。grok-4.6 的请求/响应格式非常贴近 OpenAI 聊天补全的约定,因此兼容 OpenAI 的工具通常都能用,但 hiapi 提供的是自己的聊天补全端点,而不是专有端点——把客户端指向
https://api.hiapi.ai/v1/chat/completions,并使用裸模型 IDgrok-4.6。
最小可用请求
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.6",
"messages": [
{"role": "user", "content": "用一句话解释卡尔曼滤波器的作用。"}
]
}'
成功响应如下所示:
{
"id": "b6c018d3-218e-9b06-aa12-5afc02e21b5c",
"object": "chat.completion",
"model": "grok-4.6",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "卡尔曼滤波器通过将带噪声的测量值与预测模型相结合,并按各自的不确定性加权,来估计系统随时间变化的真实状态。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 31,
"total_tokens": 55
}
}
答案文本位于 choices[0].message.content,与任何 OpenAI 风格的聊天 API 一样。
下面是使用 requests 的同一调用在 Python 中的写法:
import os
import requests
resp = requests.post(
"https://api.hiapi.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "grok-4.6",
"messages": [
{"role": "user", "content": "用一句话解释卡尔曼滤波器的作用。"}
],
},
timeout=60,
)
resp.raise_for_status()
print(resp.json()["choices"][0]["message"]["content"])
grok-4.6 的推理调节项
grok-4.6 是一个推理模型:在写出最终答案之前,它会花费额外 token 进行“思考”,这些推理 token 会按输出 token 计费(当前费率见定价)。你可以通过 reasoning_effort 控制思考量,取值为 low、medium、high 或 xhigh 之一(如果省略,API 默认为 high):
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.6",
"messages": [{"role": "user", "content": "用五个词打个招呼。"}],
"reasoning_effort": "low"
}'
非流式响应会在 message.reasoning_content 中提供模型的推理轨迹,与最终的 message.content 分开。对于简短、低延迟的任务,可降至 low 或 medium;对于多步问题,high 或 xhigh 会以延迟和 token 换取更好的答案。
流式响应
设置 "stream": true,以 Server-Sent Events 形式读取响应,而不是等待完整补全:
curl -N https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.6",
"messages": [{"role": "user", "content": "从 1 数到 5。"}],
"stream": true
}'
每一行都是一个 data: {...} 数据块。推理 token 通过 choices[0].delta.reasoning_content 流式传输,然后答案 token 通过 choices[0].delta.content 流式传输,流以字面量 data: [DONE] 结束:
data: {"id":"...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"列出"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"1, 2"},"finish_reason":null}]}
data: {"id":"...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
在 Python 中,requests 可以逐行迭代流:
import json
import requests
with requests.post(
"https://api.hiapi.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "grok-4.6",
"messages": [{"role": "user", "content": "从 1 数到 5。"}],
"stream": True,
},
stream=True,
timeout=60,
) as resp:
for line in resp.iter_lines():
if not line or not line.startswith(b"data: "):
continue
payload = line[len(b"data: "):]
if payload == b"[DONE]":
break
chunk = json.loads(payload)
delta = chunk["choices"][0]["delta"]
if "content" in delta:
print(delta["content"], end="", flush=True)
工具调用
grok-4.6 支持 OpenAI 风格的函数调用:传入 tools 数组,并通过 tool_choice: "auto" 让模型自行决定何时调用某个工具。
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.6",
"messages": [{"role": "user", "content": "东京的天气怎么样?"}],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取某个城市的当前天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}
],
"tool_choice": "auto"
}'
当模型决定调用该工具时,finish_reason 会返回 "tool_calls",参数会以 JSON 字符串形式到达,需要你自己解析:
{
"choices": [
{
"message": {
"role": "assistant",
"tool_calls": [
{
"id": "call_...",
"type": "function",
"function": {"name": "get_weather", "arguments": "{\"city\":\"Tokyo\"}"}
}
]
},
"finish_reason": "tool_calls"
}
]
}
运行你的函数,然后将一条 role: "tool" 的消息(包含运行结果和匹配的 tool_call_id)追加到 messages,再把对话发回,以获得最终的自然语言回答。
JSON 模式
如果你希望无需工具调用往返就能解析响应,可以设置 response_format:
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.6",
"messages": [
{"role": "system", "content": "请用一个包含 \"city\" 和 \"country\" 两个键的 JSON 对象来回答。"},
{"role": "user", "content": "埃菲尔铁塔在哪里?"}
],
"response_format": {"type": "json_object"}
}'
message.content 会以 JSON 字符串形式返回(仍然位于普通的聊天补全信封中),你在自己这边用 json.loads(...) 解析即可。请务必在提示词中指示模型实际生成 JSON——response_format 会约束输出格式,但不会替你构造 schema。
生产环境实践
- 处理已记录的錯誤码。 密钥错误或缺失会返回
HTTP 401,响应体为{"error":{"code":"permission_denied","message":"...","request_id":"...","type":"hiapi_error"}}。余额不足返回402;模型 ID 无效或参数格式错误返回400。先检查状态码,并记录错误响应体中的request_id——如果你需要报告问题,这正是你会用到的信息。 - 对
429和503采用退避重试。 hiapi 会按账户执行速率限制;429表示你已超限,503表示模型暂时不可用。两者都适合使用有上限的指数退避重试(例如 1 秒、2 秒、4 秒,尝试若干次后放弃),而不是紧密循环。 - 设置请求超时。 在
high或xhigh推理强度下,耗时明显长于low;请根据所用强度级别设置客户端超时,而不是使用单一的全局常量。 - 任何面向用户的场景都优先使用流式输出。 非流式调用会阻塞,直到完整响应(包括所有推理 token)就绪;流式输出可以立即将首批 token 送到你的 UI,并让你在
reasoning_content增量先于最终答案到达时展示“思考中”状态。 - 不要硬编码密钥。 从环境变量或密钥管理器加载,切勿从源代码管理中读取——上面的示例正是出于这个原因从
$HIAPI_API_KEY/os.environ["HIAPI_API_KEY"]读取。
完整的参数参考(包括 grok-4.6 接受的每个字段)请参见模型页面和 grok-4.6 文档。
常见问题
hiapi 上的 grok-4.6 兼容 OpenAI SDK 吗?
请求和响应结构遵循 OpenAI 聊天补全的约定(messages、choices[0].message.content、流式增量、工具调用),因此大多数允许覆盖基础 URL 和模型 ID 的兼容 OpenAI 的工具应该都能用。将基础 URL 指向 https://api.hiapi.ai/v1,并使用 grok-4.6 作为模型 ID。
为什么我的响应比其他模型慢?
grok-4.6 在回答前会花费 token 进行一次内部推理,这些 token 按输出 token 计费。对于延迟敏感的调用,将 reasoning_effort 降至 low 或 medium,或改用流式输出,这样就不必一次性等待整个响应。
reasoning_content 是什么意思,我可以对用户隐藏它吗?
它是模型的中间推理轨迹,与 content 分开返回(流式传输时则以 delta.reasoning_content 形式返回)。你完全可以在 UI 中不渲染它——只有 content 才是最终答案。
我收到了 401 和 permission_denied——哪里出了问题?
你的 Authorization 请求头缺失、格式错误,或者密钥无效/已被撤销。请重新检查你是否发送了 Authorization: Bearer sk-...,并且使用的是控制台中有效的密钥。
我可以在同一个请求中同时使用 grok-4.6 的函数调用和 JSON 模式吗?
tools/tool_choice 与 response_format 是相互独立的参数,可以同时设置,但如果模型决定调用工具,该轮的 finish_reason 会是 "tool_calls",且 message.content 可能为空——请先处理工具调用,然后在后续轮次中请求最终的 JSON 格式答案。
如何控制成本?
推理 token 计入输出 token,因此成本会随 reasoning_effort 和响应长度而变化。在运行高负载任务之前,请查看定价页面上的当前每 token 费率。