跳至正文
文档目录

调用文本模型

使用 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;部分模型由模型服务校验并返回参数错误。错误处理见错误说明。

认证错误

状态码含义检查项
401API Key 缺失、格式错误、无效或已过期检查 Authorization 请求头和完整的 API Key
403请求被模型权限或余额/透支策略拒绝检查模型名称、API Key 的模型权限和可用额度

修正认证和权限后再重试。其他状态码和重试方式见错误处理与重试。

保存与轮换 API Key

在服务端或受控本地环境中通过密钥管理系统加载 API Key,不将密钥放入 URL、客户端包、Git 或日志。排障记录使用 Key 前缀或 API Key ID。

轮换时创建新 API Key,更新应用并发送一个最小请求。确认所有应用实例均使用新 Key 后,再停用旧 Key。

继续接入

供开发工具与 AI 读取

文档索引列出可直接读取的 Markdown 页面;完整指南包含公开正文。模型调用 OpenAPI和管理 API OpenAPI提供机器可读的参数、响应和错误定义。需登录的内容不进入这些公开导出。