API 参考
Responses 接口
POST /v1/responses 的请求头、参数、请求与响应示例和流式事件。格式与 OpenAI Responses API 一致,部分模型只支持这种格式,本站按原格式转发请求。
POST /v1/responses 是 OpenAI 较新的接口格式:用 input 代替 messages,系统指令单独放在 instructions 里,推理强度、结构化输出和工具的写法也和 Chat Completions 不同。目录里有一部分模型只支持这种格式。本站把请求按原格式转发给模型服务,参数是否生效以对应模型的官方说明为准。
POST
https://open.tutujin.com/v1/responses请求头
| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer sk-...,控制台创建的 API Key |
Content-Type | 是 | application/json |
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型名,例如 gpt-6.1-sol |
input | string 或 array | 是 | 输入内容。可以是一段文本,也可以是消息数组,多轮对话和图文输入用数组,结构见下文 |
instructions | string | 否 | 系统指令,相当于 Chat Completions 里的 system 消息 |
max_output_tokens | integer | 否 | 本次最多生成多少 tokens,包含推理模型的思考部分 |
temperature | number | 否 | 采样温度,越高越发散。推理模型通常不支持 |
top_p | number | 否 | 核采样,和 temperature 一般只调一个 |
stream | boolean | 否 | 设为 true 时以 SSE 事件流返回,默认 false |
reasoning | object | 否 | 推理配置,例如 {"effort": "low"},常见取值 low、medium、high,仅推理模型支持 |
text | object | 否 | 输出格式,例如 {"format": {"type": "json_object"}} 要求输出 JSON;部分模型支持 json_schema 严格结构化输出 |
tools | array | 否 | 可供模型调用的工具,例如函数定义。内置工具能否使用取决于模型 |
tool_choice | string 或 object | 否 | auto、none、required,或指定某个工具 |
store | boolean | 否 | 是否在服务端保存本次响应。本站没有实测依赖服务端存储的功能,建议设为 false |
previous_response_id | string | 否 | 引用上一轮响应来延续对话。它依赖服务端保存的响应,本站未实测,建议在 input 里自己带上历史消息 |
metadata | object | 否 | 自定义键值对,方便你这边对账和排查 |
input 结构
最简单的写法是直接传一段字符串。多轮对话或图文输入时传数组,每项是一条消息:
JSON
[
{ "role": "user", "content": "这张发票的金额是多少?" },
{
"role": "user",
"content": [
{ "type": "input_text", "text": "只回答金额和币种。" },
{ "type": "input_image", "image_url": "https://example.com/invoice.png" }
]
}
]role 可以是 user、assistant、system 或 developer。图片也可以用 data:image/png;base64,... 的形式直接放进 image_url。
请求示例
curl https://open.tutujin.com/v1/responses \
-H "Authorization: Bearer $TUTUJIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"instructions": "你是财务助理,回答简洁,金额保留两位小数。",
"input": "差旅费 1280 元,餐补每天 80 元共 3 天,合计报销多少?"
}'import os
from openai import OpenAI
client = OpenAI(base_url="https://open.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
resp = client.responses.create(
model="gpt-6.1-sol",
instructions="你是财务助理,回答简洁,金额保留两位小数。",
input="差旅费 1280 元,餐补每天 80 元共 3 天,合计报销多少?",
)
print(resp.output_text)
print(resp.usage)import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://open.tutujin.com/v1', apiKey: process.env.TUTUJIN_API_KEY })
const resp = await client.responses.create({
model: 'gpt-6.1-sol',
instructions: '你是财务助理,回答简洁,金额保留两位小数。',
input: '差旅费 1280 元,餐补每天 80 元共 3 天,合计报销多少?',
})
console.log(resp.output_text)
console.log(resp.usage)响应示例
JSON
{
"id": "resp_...",
"object": "response",
"created_at": 1794000000,
"status": "completed",
"model": "gpt-6.1-sol",
"output": [
{
"type": "message",
"id": "msg_...",
"status": "completed",
"role": "assistant",
"content": [
{ "type": "output_text", "text": "合计报销 1520.00 元。", "annotations": [] }
]
}
],
"usage": {
"input_tokens": 48,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 15,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 63
}
}| 字段 | 说明 |
|---|---|
status | completed 表示正常完成;incomplete 通常是达到 max_output_tokens 被截断 |
output | 输出项数组,可能包含 message(回答)、reasoning(推理摘要)、function_call(需要你执行的函数调用) |
output[].content[].text | 回答文本。官方 SDK 提供 output_text 属性,直接拼好了全部文本 |
usage.input_tokens | 输入 tokens,按输入单价计费 |
usage.input_tokens_details.cached_tokens | 命中上下文缓存的输入 tokens,按缓存读取价计费 |
usage.output_tokens | 输出 tokens,按输出单价计费,其中 reasoning_tokens 是思考部分 |
流式输出
设置 "stream": true 后,服务端按 Server-Sent Events 逐个推送事件。每个事件有 event: 名称,文本增量在 response.output_text.delta 事件的 delta 字段里,response.completed 事件带有完整响应和用量:
Text
event: response.created
data: {"type":"response.created","response":{"id":"resp_...","status":"in_progress"}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"合计"}
event: response.output_text.done
data: {"type":"response.output_text.done","output_index":0,"content_index":0,"text":"合计报销 1520.00 元。"}
event: response.completed
data: {"type":"response.completed","response":{"id":"resp_...","status":"completed","usage":{"input_tokens":48,"output_tokens":15,"total_tokens":63}}}用 SDK 时按事件类型取文本:
stream = client.responses.create(
model="gpt-6.1-sol",
input="写一段 100 字的产品介绍",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.completed":
print("\n", event.response.usage)const stream = await client.responses.create({
model: 'gpt-6.1-sol',
input: '写一段 100 字的产品介绍',
stream: true,
})
for await (const event of stream) {
if (event.type === 'response.output_text.delta') process.stdout.write(event.delta)
if (event.type === 'response.completed') console.log('\n', event.response.usage)
}注意事项
- 这个接口是原样转发,没有在本站单独实测。接入新模型时先用小流量验证参数和返回结构。
- 多轮对话请在
input里带上完整的历史消息,不要依赖previous_response_id和store。 - 推理模型的思考 tokens 计入输出,费用可能明显高于普通模型,可以用
max_output_tokens和reasoning.effort控制。 - 联网搜索等内置工具是否可用、是否另行计费都取决于模型,以控制台「用量明细」为准。
- 如果模型同时支持 Chat Completions,又不需要 Responses 的专有功能,用 Chat Completions 更省事,切换其他厂商的模型也只需改
model。
支持此接口的模型
| 模型 | 厂商 | 最低价分组 | 输入 ¥/百万 | 输出 ¥/百万 | 按次 ¥/次 |
|---|---|---|---|---|---|
| GPT-6.1 Sol | OpenAI | 标准 | ¥4 | ¥20 | — |
| GPT-6 Luna | OpenAI | 标准 | ¥0.2 | ¥1 | — |
| GPT-6 Sol | OpenAI | 标准 | ¥20 | ¥100 | — |
| gpt-6-astra | OpenAI | 标准 | ¥20 | ¥100 | — |
| muse-wonder-1.0 | 其他 | 标准 | ¥56 | ¥280 | — |
价格为人民币,取各模型最低价分组;价格更新于 2026年11月12日 20:17。
没找到答案?加客服微信 JsnonoChat,发送报错信息里的 request id,我们帮你排查。