调用文本模型
使用 Chat Completions 或 Responses 生成文本,支持流式输出与连续对话。
API Key 认证
在 API Key 页面获取完整 API Key,替换示例中的 API_KEY。请求头使用 Authorization: Bearer API_KEY;Key 前缀、API Key ID 和 Management Token 不能作为模型调用凭据。
发送请求
在下方选择模型,复制并运行 cURL。若示例包含 YOUR_MODEL,将它替换为模型目录中支持 Chat Completions 的模型名称。
正在读取服务信息…
HTTP 200 表示请求成功;模型输出位于 choices[0].message.content。请求字段与响应结构见API 参考。
下面是响应结构示例,仅展示读取回复需要的字段,文本内容以实际返回为准:
{
"choices": [{
"index": 0,
"message": {"role": "assistant", "content": "Hello! How can I help you?"},
"finish_reason": "stop"
}]
}游客的模型目录只展示名称以 creative-reasoning 开头且已上架的系列模型;其他模型需登录后按账号权限查看。目录可见不代表 API Key 有调用权限。程序可通过模型发现接口查询当前 API Key 可访问的文本模型及已知上下文上限。
流式输出
需要逐段显示回复时,使用 stream: true。cURL 的 -N 让终端及时显示收到的数据:
curl -N -X POST 'https://api.creative-reasoning.com/unified/v1/chat/completions' \
-H 'Authorization: Bearer API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "YOUR_MODEL",
"messages": [{"role": "user", "content": "Hello"}],
"stream": true
}'响应使用 SSE。逐条解析 data: 中的 JSON。data: [DONE] 表示响应结束,不是 JSON。
下面是只保留相关字段的事件结构示例。事件之间由空行分隔,一次网络读取可能只包含半个事件,也可能包含多个事件:
data: {"choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]按 choices[].index 分别累加 delta.content,上例得到 Hello!。流式文本使用 delta.content;message.content 用于非流式响应。角色事件、空 delta、仅包含用量的事件可能没有文本,应跳过文本追加,继续处理事件中的其他字段。工具调用增量见工具调用。
finish_reason: "stop" 表示该条回复正常结束;length 表示输出达到限制,应将内容视为截断;tool_calls 表示需要处理工具请求;content_filter 表示内容被过滤。收到 [DONE] 后结束读取。出现 error 事件或连接在结束标记前断开时,将已收片段视为不完整结果,按流式错误处理恢复,不要把 HTTP 200 或连接关闭本身当作成功完成。
工具调用
Chat Completions 使用 tools 声明工具。选择支持工具调用的模型,将 YOUR_MODEL 替换为其名称:
curl -X POST 'https://api.creative-reasoning.com/unified/v1/chat/completions' \
-H 'Authorization: Bearer API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "YOUR_MODEL",
"messages": [{"role": "user", "content": "What is the weather in Singapore?"}],
"tools": [{"type": "function", "function": {
"name": "lookup_weather",
"description": "Read a weather summary for a city.",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}
}}]
}'模型直接回复时读取 message.content;请求工具时读取 choices[].message.tool_calls。应用解析并校验 function.arguments 中的 JSON 字符串,执行后保留完整 assistant 消息,再为每项调用追加一条 role: "tool" 消息。以下是需要追加的结果结构,将 TOOL_CALL_ID_FROM_RESPONSE 替换为该项的 tool_calls[].id,content 替换为实际工具结果字符串:
{"role":"tool","tool_call_id":"TOOL_CALL_ID_FROM_RESPONSE","content":"{\"city\":\"Singapore\",\"summary\":\"Warm with light rain\"}"}使用相同的 model、tools 和补全后的 messages 再次请求,直到返回最终文本或达到应用设置的轮数与时间上限。流式调用按 choices[].index 和 delta.tool_calls[].index 累积参数片段;收到完整参数并确认该轮正常结束后才解析和执行,连接中断时不执行半截参数。工具由应用执行;有副作用的操作由应用负责授权与去重。字段定义见 Chat Completions API。
使用 Responses 继续对话
选择支持 Responses 的模型,将它的名称用于 YOUR_MODEL。Responses 通过响应 ID 继续对话,认证仍使用本页的 API Key。
创建第一个响应
正在读取服务信息…
成功响应中的 id 用于继续对话。文本回复位于 output 数组中 type: "message" 的条目内,再读取其 content 中 type: "output_text" 的 text。以下为响应结构示例,仅展示相关字段:
{
"id": "resp_example",
"output": [{
"type": "message",
"role": "assistant",
"content": [{"type": "output_text", "text": "Hello! How can I help you?"}]
}]
}使用响应 ID 继续对话
将 RESPONSE_ID_FROM_PREVIOUS_CALL 替换为上一条真实响应的 id,使用相同模型继续对话。上面的 resp_example 仅用于说明结构,不能用于请求。
curl "https://api.creative-reasoning.com/unified/v1/responses" \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"YOUR_MODEL","previous_response_id":"RESPONSE_ID_FROM_PREVIOUS_CALL","input":"Summarize the previous answer in one sentence."}'previous_response_id 只能与创建该响应的 API Key 一起使用。换用其他 API Key 会返回 404。
处理过期状态
收到 404 时,先检查模型、previous_response_id 和 API Key。如果状态已过期,使用应用保存的历史重新构建输入,不要继续重试该 ID。
统一推理参数
Chat Completions 使用顶层 reasoning_effort:
{
"model": "YOUR_MODEL",
"messages": [{"role": "user", "content": "你好"}],
"reasoning_effort": "low"
}Responses 使用 reasoning.effort:
{
"model": "YOUR_MODEL",
"input": "你好",
"reasoning": {"effort": "low"}
}CR 接受 none、minimal、low、medium、high、xhigh 和 max。它们是强度档位,不是跨模型统一的 token 数;模型可能只支持其中一部分。none 表示请求关闭推理,省略字段则保留模型默认行为。
新接入按所用接口选择上面的一种写法。low 不代表固定 token 数,也不保证固定响应时间。输入长度、模型负载和实际生成量都会影响耗时。
非法档位或类型返回 400 invalid_reasoning_parameters。已确认不支持的档位返回 400 unsupported_reasoning_parameters;部分模型由模型服务校验并返回参数错误。错误处理见错误说明。
认证错误
| 状态码 | 含义 | 检查项 |
|---|---|---|
401 | API Key 缺失、格式错误、无效或已过期 | 检查 Authorization 请求头和完整的 API Key |
403 | 请求被模型权限或余额/透支策略拒绝 | 检查模型名称、API Key 的模型权限和可用额度 |
修正认证和权限后再重试。其他状态码和重试方式见错误处理与重试。
保存与轮换 API Key
在服务端或受控本地环境中通过密钥管理系统加载 API Key,不将密钥放入 URL、客户端包、Git 或日志。排障记录使用 Key 前缀或 API Key ID。
轮换时创建新 API Key,更新应用并发送一个最小请求。确认所有应用实例均使用新 Key 后,再停用旧 Key。
继续接入
- 需要配置客户端,查看 Codex、Claude Code 和 SDK 接入。
- 需要核对单价或费用,查看调用账单与有效价格。
- 请求失败时,按错误处理与重试处理。
供开发工具与 AI 读取
文档索引列出可直接读取的 Markdown 页面;完整指南包含公开正文。模型调用 OpenAPI和管理 API OpenAPI提供机器可读的参数、响应和错误定义。需登录的内容不进入这些公开导出。