Responses
POST /v1/responses — OpenAI Responses 协议,支持有状态多轮对话、工具调用与推理控制
/v1/responsesOpenAI Responses API,用于创建模型响应。与对话补全相比,它支持通过 previous_response_id 串联有状态多轮对话、更细粒度的推理控制,并采用不同的输出与计量结构。
这个接口是做什么的:和 Chat Completions 的核心区别是「谁来记住对话历史」。Chat Completions 要求你每次把完整对话原样发一遍;Responses 允许你只传 previous_response_id(上一轮响应的 ID),服务端会记住上下文并自动接续,不需要你自己攒历史消息数组。适合需要多轮持续对话、或者要用到 Responses 独有工具生态(如内置的网页搜索、代码执行等)的场景;如果只是简单问答或已经有一套基于 messages 的成熟代码,用 Chat Completions 通常更省心。
鉴权:在请求头携带 Authorization: Bearer <令牌>,详见鉴权与令牌。
与 Chat Completions 的差异
| 维度 | /v1/responses | /v1/chat/completions |
|---|---|---|
| 输入 | input(字符串或 typed 数组)+ instructions | messages 数组 |
| 多轮 | 可用 previous_response_id 引用上一轮响应,无需重传历史 | 每次重传完整 messages |
| 输出 | output 数组(含 message、工具调用等多种 item 类型) | choices[].message |
| 计量 | usage.input_tokens / output_tokens(权威) | usage.prompt_tokens / completion_tokens(权威) |
| 流式 | 语义化事件流(response.output_text.delta 等) | 增量 chunk(delta.content) |
| 推理控制 | reasoning.effort / reasoning.summary | reasoning_effort |
适用场景:需要服务端串联对话状态、使用 Responses 原生工具生态,或对接只支持 Responses 协议的模型。其余场景用 Chat Completions 即可。两个端点的字段不可混用(如 messages 不能发给本端点)。
请求参数
modelstring必填要调用的模型 ID
inputstring | array必填输入内容。纯文本直接传字符串;结构化输入传数组,项类型支持 input_text、input_image(image_url 支持 URL 或 base64)、input_file(file_url),也可传带 role + content 的消息对象组成多轮历史
instructionsstring系统级指令,相当于 Chat 中的 system 消息
previous_response_idstring上一轮响应的 id(resp_ 前缀),传入后服务端自动接续对话上下文
max_output_tokensinteger最大输出 token 数(含推理 token)
reasoningobject推理控制。官方明文标注仅 gpt-5 系列与 o 系列模型支持,向其他模型传入会被忽略或报错
streamboolean为 true 时以 SSE 语义化事件流返回,见下文「流式事件」
默认值: falsetemperaturenumber控制生成的随机性,取值 0~2。数值越低输出越确定,适合抽取、分类等需要稳定结果的场景;数值在 1 左右适合对话;调高更有创意但也更容易跑偏
top_pnumber核采样阈值,取值 0~1,是 temperature 之外另一种控制随机性的方式,一般二选一调整即可
toolsarray工具定义数组(Responses 格式,函数工具为 {"type":"function","name":...,"parameters":...})
tool_choicestring | object工具选择策略
parallel_tool_callsboolean是否允许并行工具调用
max_tool_callsinteger单次响应允许的最大工具调用次数
truncationstring上下文超长时的截断策略,如 "auto"、"disabled"。官方已标注废弃,未提供替代字段
textobject文本输出配置,如 format(text / json_object / json_schema)与 verbosity
includearray指定在响应中附加返回的数据项,上游支持时生效
prompt_cache_keystring提示词缓存键,用于提升相似请求的缓存命中率,上游支持时生效
prompt_cache_retentionstring提示词缓存保留时长。官方已标注废弃,被 prompt_cache_options.ttl 取代(上游支持时生效)
prompt_cache_optionsobject提示词缓存的当前推荐配置方式,取代已废弃的 prompt_cache_retention。mode 控制缓存策略,ttl 控制缓存最短保留时间(当前仅支持 "30m"),上游支持时生效
metadataobject附加元数据键值对
storeboolean是否存储响应供后续引用。注意:该字段默认被平台过滤,透传行为以平台配置为准
userstring终端用户标识。官方已标注废弃,被 safety_identifier(滥用追踪)与 prompt_cache_key(缓存优化)两个字段拆分取代
思考档位说明
reasoning.effort 的档位、默认值与支持范围因模型供应商而异。本文档所列的档位语义来源于 OpenAI 官方协议规范,并非适配所有供应商;不同供应商对同一档位名的解释或支持的档位子集可能不同。本端点对思考参数做透传,原样发给上游模型——请以你实际调用的模型的官方参考文档为准,不要跨供应商照抄档位设置。各档含义与选择建议见对话补全的 reasoning_effort 参数说明。
请求示例
curl https://api.jimu.chat/v1/responses \
-H "Authorization: Bearer $JIMU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"input": "你好",
"instructions": "你是一个简洁的助手",
"max_output_tokens": 1024
}'
响应结构
{
"id": "resp_0f9583835d5e5762016a68bef03a1c8199a90d35cdc6336b8a",
"object": "response",
"created_at": 1785249520,
"status": "completed",
"model": "gpt-5.5",
"output": [
{
"id": "msg_0f9583835d5e5762016a68bef137ec81998de27f2fbe177b2a",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{ "type": "output_text", "text": "Hi! How can I help you today?", "annotations": [] }
]
}
],
"reasoning": { "effort": "medium", "summary": null },
"tool_choice": "auto",
"tools": [],
"usage": {
"input_tokens": 7,
"input_tokens_details": { "cache_write_tokens": 0, "cached_tokens": 0 },
"output_tokens": 13,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 20
}
}
关键字段说明:
status:响应状态,如completed、incomplete、failed。incomplete时incomplete_details给出原因(如达到max_output_tokens)。output:输出项数组。文本回复是type: "message"的项,其content内含output_text片段;工具调用等其他 item 类型(如function_call)也会出现在此数组中。usage:token 计量。权威字段为input_tokens/output_tokens/total_tokens。
input_tokens / output_tokens,与 Chat Completions 的 prompt_tokens / completion_tokens 是两套命名,details 结构也不同(本端点 input_tokens_details 含 cache_write_tokens、cached_tokens,不含 text/audio/image 拆分)。跨端点写计量代码时不要假设字段名一致。流式事件
设置 "stream": true 后,响应为 SSE 事件流。与 Chat 的 chunk 模式不同,本端点每个事件带 event: 行标明语义类型,典型序列(实测):
event: response.created
event: response.in_progress
event: response.output_item.added
event: response.content_part.added
event: response.output_text.delta ← 增量文本,可能多次
event: response.output_text.done
event: response.content_part.done
event: response.output_item.done
event: response.completed
以上是纯文本生成的典型序列。平台透传全部事件流,工具调用、联网搜索等场景还会出现相应的其他事件类型;客户端应忽略未识别的事件类型,不要当作错误处理。
- 增量文本在
response.output_text.delta事件中:解析事件dataJSON 后读取顶层.delta字段,拼接即为完整输出。 response.completed是终态事件,其data是一个信封对象:{"type":"response.completed","response":{完整响应对象},"sequence_number":N}——完整响应(含output、usage)位于data.response下,不是data顶层,注意解析路径。- 本端点的流不以
data: [DONE]收尾——收到response.completed即表示结束。这与 Chat Completions 流式末尾的[DONE]标志不同,复用同一套 SSE 解析代码时不要依赖[DONE]作为唯一结束条件。
压缩长对话
对话变长后,可用 POST /v1/responses/compact 对历史做压缩(compaction),降低后续请求的上下文占用。