Responses
OpenAI Responses API 接口。Sakrylle 网关把它当作 OpenAI 平台原生入口。
协议边界
这是 OpenAI Responses 格式。Anthropic 上游分组可能通过网关转换接入,但如果你需要 Anthropic 原生工具或内容块语义,优先使用 /v1/messages。
兼容性提示
Sakrylle 平台默认通过此端点调度 OpenAI 通道;当 API Key 所在分组被管理员标记为「仅限 Claude Code」时,访问 /v1/responses 会被拒绝。常规用法仍推荐使用 /v1/chat/completions,参数集更熟悉。
Endpoint
POST https://api.sakrylle.com/v1/responses请求头
| 名称 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer sk-xxxxxxxxxxxxxxxx |
Content-Type | 是 | application/json |
Accept | 否 | 流式可写 text/event-stream |
请求体参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | OpenAI 模型 ID,例如 gpt-5.6-sol |
input | string | array | 是 | 用户输入,可为字符串或消息/内容数组 |
instructions | string | 否 | 系统级指令,等价于 chat 的 system |
stream | boolean | 否 | 默认 false;为 true 时返回 SSE 事件流 |
temperature | number | 否 | 0–2 |
top_p | number | 否 | 核采样概率 |
max_output_tokens | integer | 否 | 最大输出 token 数 |
tools | array | 否 | 工具/函数定义 |
tool_choice | string | object | 否 | auto / none / 指定工具 |
metadata | object | 否 | 任意 KV,回写到响应中 |
previous_response_id | string | 否 | 续接历史 response |
网关只校验
model必填、JSON 合法,其余字段透传。
请求体示例
json
{
"model": "gpt-5.6-sol",
"instructions": "你是一个简洁的中文助手。",
"input": "自我介绍一下。"
}响应示例
json
{
"id": "resp_xxxxxxxxxxxxxxxx",
"object": "response",
"created_at": 1716350400,
"model": "gpt-5.6-sol",
"status": "completed",
"output": [
{
"id": "msg_xxxxxxxxxxxxxxxx",
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "我是 gpt-5.6-sol,有什么可以帮您?"
}
]
}
],
"usage": {
"input_tokens": 22,
"output_tokens": 14,
"total_tokens": 36
}
}流式响应示例
stream: true 后返回 SSE,事件类型例如 response.created、response.output_text.delta、response.completed:
event: response.created
data: {"type":"response.created","response":{"id":"resp_xxx","model":"gpt-5.6-sol","status":"in_progress"}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":"Sakrylle"}
event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":" API"}
event: response.completed
data: {"type":"response.completed","response":{"id":"resp_xxx","status":"completed","usage":{"input_tokens":22,"output_tokens":14,"total_tokens":36}}}错误
400 invalid_request_error— 缺model或请求体非 JSON401 authentication_error— API Key 无效403 permission_error— 分组被限制为「仅限 Claude Code」时拒绝/v1/responses403 billing_error— 余额或订阅限额不足429 rate_limit_error— 并发或速率限制502 upstream_error/server_error— 上游连续失败,请稍后重试
更多错误码见 错误处理。
代码示例
bash
curl https://api.sakrylle.com/v1/responses \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"input": "Hello!"
}'python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxx",
base_url="https://api.sakrylle.com/v1",
)
resp = client.responses.create(
model="gpt-5.6-sol",
input="Hello!",
)
print(resp.output_text)javascript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-xxxxxxxxxxxxxxxx",
baseURL: "https://api.sakrylle.com/v1",
});
const resp = await client.responses.create({
model: "gpt-5.6-sol",
input: "Hello!",
});
console.log(resp.output_text);go
package main
import (
"bytes"
"io"
"net/http"
"fmt"
)
func main() {
body := []byte(`{"model":"gpt-5.6-sol","input":"Hello!"}`)
req, _ := http.NewRequest("POST",
"https://api.sakrylle.com/v1/responses",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer sk-xxxxxxxxxxxxxxxx")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}rust
use reqwest::Client;
use serde_json::json;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = Client::new();
let resp: serde_json::Value = client
.post("https://api.sakrylle.com/v1/responses")
.bearer_auth("sk-xxxxxxxxxxxxxxxx")
.json(&json!({
"model": "gpt-5.6-sol",
"input": "Hello!"
}))
.send()
.await?
.json()
.await?;
println!("{resp:#}");
Ok(())
}java
import java.net.URI;
import java.net.http.*;
public class Responses {
public static void main(String[] args) throws Exception {
String body = """
{"model":"gpt-5.6-sol","input":"Hello!"}
""";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.sakrylle.com/v1/responses"))
.header("Authorization", "Bearer sk-xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> resp = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
}
}csharp
using System.Net.Http.Headers;
using System.Text;
var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "sk-xxxxxxxxxxxxxxxx");
var payload = """
{"model":"gpt-5.6-sol","input":"Hello!"}
""";
var resp = await http.PostAsync(
"https://api.sakrylle.com/v1/responses",
new StringContent(payload, Encoding.UTF8, "application/json"));
Console.WriteLine(await resp.Content.ReadAsStringAsync());