API Reference · 附录
OpenAI Chat Completions API · Schema 完整参考
POST /v1/chat/completions 的完整 schema 参考——Chat Completions 是 OpenAI 调用其模型 API(Application Programming Interface,应用程序接口)的经典对话协议(2023 至今的事实标准)。以下内容从 platform.openai.com/docs/api-reference/chat 浓缩,每个字段都给出类型、是否必填、默认值、用途说明。 本附录适合"想确认一个字段到底是什么意思、能不能传、传了会怎样"时翻阅;教学讲义请看姊妹讲义 llm-api-schema-reference.html(卡片化讲解)。
概览
1
HTTP 端点
~25
请求字段
~12
响应字段
5
role 类型
| 项目 | 说明 |
|---|---|
| 本卡定位 | 附录页 · 字段全、说明全,适合查阅 |
| 覆盖范围 | OpenAI Chat Completions 协议(v2023-06 起稳定) |
| 权威来源 | platform.openai.com/docs/api-reference/chat(落地实现前请以官方文档为准) |
| 兼容端点 | Ollama / vLLM / DeepSeek / DashScope / Together / Groq 等所有"OpenAI 兼容"端点都支持,行为可能略有差异 |
| 教学版 | llm-api-schema-reference.html 第一篇(含 4 张教学卡片 + Schema 全景) |
1. 端点与认证
HTTP 调用
POST https://api.openai.com/v1/chat/completions Authorization: Bearer <OPENAI_API_KEY> Content-Type: application/json
端点说明
| 项目 | 说明 |
|---|---|
| 方法 | POST(仅支持 POST) |
| URL | /v1/chat/completions(v1 路径前缀) |
| 认证头 | Authorization: Bearer <api-key>(注意是 Bearer,不是 Anthropic 的 x-api-key) |
| 请求体 | application/json,UTF-8 编码 |
| 响应体 | application/json(非流式)/ text/event-stream(流式) |
| 流式 | 请求加 "stream": true,响应切到 text/event-stream(SSE,Server-Sent Events,服务器单向推送的流式传输) |
兼容端点注意:Ollama / vLLM 等兼容服务有自己的 base URL(如 http://localhost:11434/v1)和 API key 配置方式(如 Ollama 通常无需 key)。代码要参数化 base_url 和认证头,不要硬编码 api.openai.com。
2. 请求对象 ChatCompletionRequest
除 model 和 messages 外全部字段可选——这是 OpenAI 协议"宽松 schema"的典型形态。
完整 TypeScript 类型
type ChatCompletionRequest = {
// —— 必填 ——
model: string, // 模型 ID("gpt-4o" / "gpt-5" / "deepseek-chat" ...)
messages: MessageParam[], // 对话历史(无状态全量回放)
// —— 采样控制 ——
temperature?: number, // 默认 1.0;推理模型忽略
top_p?: number, // 默认 1.0(与 temperature 二选一)
n?: number, // 生成几条候选,默认 1
seed?: number, // 尽力而为的确定性
stop?: string | string[], // 最多 4 个停止序列
// —— 长度控制 ——
max_completion_tokens?: number, // 新字段(推理模型时代)
max_tokens?: number, // ⚠ deprecated,但兼容端点普遍只认它
// —— 工具 ——
tools?: ToolDefinition[],
tool_choice?: "none" | "auto" | "required"
| { type: "function", function: { name: string } },
parallel_tool_calls?: boolean, // 默认 true
// —— 结构化输出 ——
response_format?: { type: "text" }
| { type: "json_object" }
| { type: "json_schema", json_schema: {
name: string, schema: object, strict?: boolean } },
// —— 流式 ——
stream?: boolean,
stream_options?: { include_usage?: boolean },
// —— 惩罚与采样微调 ——
presence_penalty?: number, // -2.0 ~ 2.0
frequency_penalty?: number,
logit_bias?: Record<string, number>,
logprobs?: boolean,
top_logprobs?: number,
// —— 元信息 ——
user?: string, // 终端用户标识(OpenAI 滥用检测用)
store?: boolean, // 是否存储请求/响应(用于 eval)
metadata?: object, // 自定义键值对,16 个 key 限制
service_tier?: "auto" | "default" | "flex",
reasoning_effort?: "low" | "medium" | "high" // 推理模型专属(o1/o3 系列)
}
请求字段表(按重要度排序)
| 字段 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| model | ★ | string | — | 模型 ID。"gpt-4o" / "gpt-5" / "o1" / "o3-mini" / "gpt-4o-mini" / 兼容端点的 "deepseek-chat" / "qwen-plus" 等 |
| messages | ★ | MessageParam[] | — | 对话历史数组,按时间序。协议是无状态的,每次请求带全量 history |
| temperature | — | number [0, 2] | 1.0 | 采样温度,0 = 贪心(最确定),2 = 最发散。推理模型(o1/o3/gpt-5 reasoning)忽略此参数 |
| top_p | — | number (0, 1] | 1.0 | nucleus 采样阈值。与 temperature 二选一调,同时调可能行为不稳定 |
| n | — | number [1, ?) | 1 | 生成几条候选。注意每条独立计 token,成本 × n |
| seed | — | number | null | 尽力而为的确定性种子。不保证完全可复现(模型权重可能更新),仅"best effort" |
| stop | — | string | string[] | null | 停止序列。模型遇到该字符串就停。最多 4 个 |
| max_completion_tokens | — | number | infinity | 最大生成 token 数。新字段(推理模型时代引入,max_tokens 已 deprecated) |
| max_tokens | — | number | infinity | ⚠ deprecated,但 Ollama / vLLM / DeepSeek 等兼容端点普遍只认它。跨厂商代码要两个都发或按端点切换 |
| tools | — | ToolDefinition[] | null | 工具定义列表(声明"能做什么",不是"要做什么") |
| tool_choice | — | string | object | "auto" | "none"(禁用工具)/ "auto"(模型自决)/ "required"(必须调)/ {type:"function",function:{name}}(强制调指定函数) |
| parallel_tool_calls | — | boolean | true | 是否允许一轮里并行调多个工具。设为 false 则一次只能调一个 |
| response_format | — | object | {type:"text"} | 结构化输出。3 种 type:"text"(默认)/ "json_object"(JSON(JavaScript Object Notation,人类可读的文本数据格式)模式)/ "json_schema"(强约束 schema) |
| stream | — | boolean | false | 是否流式。true → 响应切到 SSE |
| stream_options | — | object | null | 流式配置:include_usage 决定是否在最后一个 chunk 附 usage |
| presence_penalty | — | number [-2, 2] | 0 | 对已出现的 token 施加惩罚。正值降低重复 |
| frequency_penalty | — | number [-2, 2] | 0 | 对出现频次施加惩罚。正值降低高频 token |
| logit_bias | — | Record<string, number> | null | 对特定 token 调整采样概率。key 是 token id(字符串),value 是 -100~100 的偏置 |
| logprobs | — | boolean | false | 是否在响应中返回所选 token 的对数概率 |
| top_logprobs | — | number [0, 20] | 0 | 返回 top N 个候选 token 的对数概率。需要 logprobs: true |
| user | — | string | null | 终端用户唯一标识。OpenAI 用于滥用检测和速率限制追踪。推荐传 |
| store | — | boolean | false | 是否存储请求/响应(用于 evals 和 dashboard) |
| metadata | — | object | null | 自定义键值对,最多 16 个 key,每个 key 长度 ≤ 64,value 长度 ≤ 512 |
| service_tier | — | enum | "auto" | 服务等级。"auto"(自动)/ "default"(标准)/ "flex"(低价慢速) |
| reasoning_effort | — | enum | "medium" | 推理强度。o1/o3/gpt-5 推理模型专属,其他模型忽略。"low" / "medium" / "high" |
字段族分组(一图看全)
flowchart TB
REQ["ChatCompletionRequest
除 model / messages 外全部可选"] REQ --> ID["身份与上下文
model ★ / messages ★"] REQ --> SM["采样控制
temperature / top_p / n / seed / stop
max_completion_tokens / penalties / logprobs"] REQ --> TL["工具
tools / tool_choice / parallel_tool_calls"] REQ --> SO["结构化输出
response_format
text / json_object / json_schema"] REQ --> ST["流式
stream / stream_options.include_usage"] REQ --> MT["元信息
user / store / metadata
service_tier / reasoning_effort"]
除 model / messages 外全部可选"] REQ --> ID["身份与上下文
model ★ / messages ★"] REQ --> SM["采样控制
temperature / top_p / n / seed / stop
max_completion_tokens / penalties / logprobs"] REQ --> TL["工具
tools / tool_choice / parallel_tool_calls"] REQ --> SO["结构化输出
response_format
text / json_object / json_schema"] REQ --> ST["流式
stream / stream_options.include_usage"] REQ --> MT["元信息
user / store / metadata
service_tier / reasoning_effort"]
3. 消息类型 MessageParam
5 种 role 各自有独立的字段约束——这是 Chat Completions 协议"扁平 message + role 判别"的典型形态。
5 种 role 一览
| role | 用途 | 必备字段 | 可选字段 | 来源 |
|---|---|---|---|---|
| system | 系统指令(旧版) | content | — | 开发者 |
| developer | 系统指令(2025+ 新增,更细粒度) | content | — | 开发者 |
| user | 用户输入 | content | — | 终端用户 |
| assistant | 模型回复(回放历史用) | — | content, tool_calls, refusal | 模型 |
| tool | 工具结果回填 | content, tool_call_id | — | 客户端执行 |
完整类型定义
type MessageParam =
// 系统指令(developer 是 2025 年新增的更细粒度角色)
| { role: "system" | "developer",
content: string | TextPart[] }
// 用户输入(content 支持 string 或多模态部件数组)
| { role: "user",
content: string | (TextPart | ImageUrlPart | AudioPart)[] }
// 模型回复(回放历史时用;tool_calls 是可选字段挂在同一层)
| { role: "assistant",
content?: string | null, // 发起工具调用时可为 null!
tool_calls?: ToolCall[],
refusal?: string | null }
// 工具结果(独立 role;tool_call_id 与 ToolCall.id 严格配对)
| { role: "tool",
content: string | TextPart[],
tool_call_id: string }
多模态内容部件(仅 user 消息支持)
| type | 字段 | 说明 |
|---|---|---|
| text | text: string | 纯文本 |
| image_url | image_url: { url: string, detail?: "auto"|"low"|"high" } | 图片 URL。url 可以是 https:// 或 data:image/...;base64,... 内嵌 |
| input_audio | input_audio: { data: string, format: "wav"|"mp3" } | 音频(gpt-4o-audio-preview 等多模态模型支持) |
schema 弱点(400 事故的结构根源):role 与字段的配对约束(tool 必带 tool_call_id、只有 assistant 可带 tool_calls)不体现在类型定义里,靠服务端运行时校验兜底。所以开发时容易写错(比如 user 消息带了 tool_calls),错误信息不直观。
4. 工具定义 ToolDefinition
完整类型定义
type ToolDefinition = {
type: "function", // 固定为 "function"(预留非 function 扩展位)
function: {
name: string, // ^[a-zA-Z0-9_-]{1,64}(最多 64 字符)
description?: string, // 工具描述(模型看这段决定调不调)
parameters?: JSONSchema, // 标准 JSON Schema 对象
strict?: boolean // true = 强约束模式(参数 100% 遵循 schema)
}
}
字段表
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| type | ★ | "function" | 工具类型。2026 年唯一合法值是 "function"(为未来非 function 工具预留) |
| function.name | ★ | string | 工具名。正则约束 ^[a-zA-Z0-9_-]{1,64},违反会 400 |
| function.description | — | string | 工具描述。模型靠这段文字判断调不调、怎么调,建议写清楚"何时用、传什么、返回什么" |
| function.parameters | — | JSONSchema | 参数 schema。标准 JSON Schema 格式:{type, properties, required, ...} |
| function.strict | — | boolean | true = 强约束模式。模型生成的参数必须 100% 遵循 schema。注意:strict:true 在某些兼容端点会被静默忽略(详见姊妹 case study) |
完整示例
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查指定城市的当前天气。返回温度、天气状况、湿度。",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名,如 '北京' / '上海'"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位"
}
},
"required": ["city"],
"additionalProperties": false
}
}
}
5. 响应对象 ChatCompletion
完整类型定义
type ChatCompletion = {
id: string, // "chatcmpl-...",每次请求唯一
object: "chat.completion",
created: number, // unix 秒
model: string, // 实际使用的快照版(与请求可能不同)
choices: [{
index: number, // n>1 时区分候选
message: {
role: "assistant",
content: string | null, // 工具调用时可为 null
tool_calls?: ToolCall[],
refusal?: string | null,
annotations?: Annotation[]
},
finish_reason: "stop" | "length" | "tool_calls"
| "content_filter" | "function_call", // 末项 legacy
logprobs?: object
}],
usage: {
prompt_tokens: number,
completion_tokens: number,
total_tokens: number,
prompt_tokens_details?: { cached_tokens?: number, audio_tokens?: number },
completion_tokens_details?: { reasoning_tokens?: number }
},
system_fingerprint?: string // 后端运行时指纹(用于追踪模型版本)
}
type ToolCall = {
id: string, // "call_...",回填配对用
type: "function",
function: {
name: string,
arguments: string // ⚠ JSON 字符串,不是对象!需 json.loads + 防御
}
}
顶层字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 响应 ID,每次请求都不同。不能当幂等键 |
| object | "chat.completion" | 对象类型标识(流式是 "chat.completion.chunk") |
| created | number | 响应创建的 unix 时间戳(秒) |
| model | string | 实际使用的模型快照版本,可能与请求时不同(如请求 "gpt-4o" 实际是 "gpt-4o-2024-08-06") |
| choices | Choice[] | 候选回复列表。默认 1 个,n>1 时多个 |
| usage | Usage | token 使用情况。流式模式下默认不返回,需 stream_options.include_usage: true |
| system_fingerprint | string | 后端运行时指纹。可以用它判断"模型是否静默切换到新版本"导致行为变化 |
Choice 字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| index | number | 候选索引(n>1 时 0/1/2...) |
| message | Message | assistant 消息,手写 Agent 唯一会读的对象 |
| finish_reason | enum | 循环分支唯一依据。5 个值:"stop"(自然结束)/ "length"(撞 max_tokens 截断)/ "tool_calls"(要调工具)/ "content_filter"(触安全策略)/ "function_call"(legacy) |
| logprobs | object | 所选 token 的对数概率。需要请求时 logprobs: true |
Message 字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| role | "assistant" | 固定为 "assistant" |
| content | string | null | 文本内容。工具调用时可为 null——别用 if message.content 判断循环结束 |
| tool_calls | ToolCall[] | 工具调用列表。空数组 / undefined = 不调工具 |
| refusal | string | null | 模型拒绝时的解释。出现时 content 通常为 null |
| annotations | Annotation[] | 引用 / citation 等富化信息(如 web search 工具的引用源) |
ToolCall 字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | "call_..." 配对键。回填到 role:"tool" 消息的 tool_call_id 字段,配错就 400 |
| type | "function" | 工具类型 |
| function.name | string | 工具名(与 tools[].function.name 对应) |
| function.arguments | string | ⚠ JSON 字符串,不是对象!需 json.loads() + try/except 防御 |
Usage 字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| prompt_tokens | number | 输入 token 数 |
| completion_tokens | number | 输出 token 数 |
| total_tokens | number | 合计(prompt + completion) |
| prompt_tokens_details.cached_tokens | number | prompt 中命中缓存的 token 数(用于成本面板) |
| prompt_tokens_details.audio_tokens | number | prompt 中音频 token 数 |
| completion_tokens_details.reasoning_tokens | number | 推理 token 数(o1/o3 系列专属,单独计费) |
finish_reason 5 个值详解
| 值 | 含义 | Agent 主循环如何处理 |
|---|---|---|
| "stop" | 自然结束(遇到 stop token 或 stop 序列) | 收尾、提交答案、退出循环 |
| "length" | 撞 max_tokens / max_completion_tokens 被截断 | 扩预算或续写,不要盲目重试(同样输入大概率同样截断) |
| "tool_calls" | 模型要求调工具 | 执行工具 → role:"tool" 回填 → 再次请求(核心循环) |
| "content_filter" | 触发安全策略 | 降级 / 改写 / 上报 / 终止 |
| "function_call" | legacy 值(OpenAI 老版本"function calling"机制) | 当 tool_calls 处理,不推荐新代码依赖 |
6. 流式 chunk ChatCompletionChunk
请求加 "stream": true 时,服务端返回 SSE 流。增量在 delta 而非 message。
完整类型定义
type ChatCompletionChunk = {
id: string, // 与非流式响应同一 id
object: "chat.completion.chunk", // 与非流式响应 object 不同!
created: number,
model: string,
choices: [{
index: number,
delta: { // 增量在 delta(与 message 平级对应)
role?: "assistant", // 首个 chunk 携带
content?: string | null, // 文本分片
tool_calls?: [{ // 工具调用分片
index: number, // ★ 聚合键:按 index 拼 name/arguments
id?: string, // 仅首个分片携带
type?: "function",
function?: { name?: string, arguments?: string }
}],
refusal?: string | null
},
finish_reason?: string | null // 仅最后一个 chunk 携带
}]
}
// 终止哨兵:data: [DONE](SSE 流的最后一条)
流式字段聚合规则
- delta.content:每个 chunk 的 content 顺序拼接 = 完整文本
- delta.tool_calls:必须按 index 聚合——同一个 tool_call 可能分多个 chunk 到达;先拼 name,再拼 arguments
- arguments 是 JSON 字符串,拼接完整后再一次性 json.loads,中途解析必然失败
- [DONE] 是终止哨兵,收到即关闭连接,不解析它
- finish_reason 出现在最后一个 chunk的 delta 旁——不是单独的字段
- 想拿 usage:请求加 stream_options: {include_usage: true},最后一个 chunk 会有 usage 字段(choices 为空数组)
7. 完整往返示例(工具调用最小环)
4 段 JSON 展示从"用户提问"到"模型完成工具调用"的全过程。
① 请求:用户问"跑一下测试",声明 run_tests 工具
{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "跑一下测试"}
],
"tools": [{
"type": "function",
"function": {
"name": "run_tests",
"parameters": {
"type": "object",
"properties": {"suite": {"type": "string"}},
"required": ["suite"]
}
}
}]
}
② 响应:模型要求调工具(finish_reason = tool_calls)
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1725273600,
"model": "gpt-4o-2024-08-06",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc",
"type": "function",
"function": {
"name": "run_tests",
"arguments": "{\"suite\":\"all\"}"
}
}]
},
"finish_reason": "tool_calls"
}],
"usage": {
"prompt_tokens": 88,
"completion_tokens": 12,
"total_tokens": 100
}
}
③ 回填请求:append 两条消息(assistant 原样 + tool 结果)
{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "跑一下测试"},
{"role": "assistant", "content": null, "tool_calls": [
{"id": "call_abc", "type": "function",
"function": {"name": "run_tests", "arguments": "{\"suite\":\"all\"}"}}
]},
{"role": "tool", "tool_call_id": "call_abc", "content": "42 passed"}
],
"tools": [
{"type": "function", "function": {
"name": "run_tests",
"parameters": {"type": "object",
"properties": {"suite": {"type": "string"}},
"required": ["suite"]}
}}
]
}
④ 最终响应:模型总结(finish_reason = stop)
{
"id": "chatcmpl-def456",
"object": "chat.completion",
"created": 1725273610,
"model": "gpt-4o-2024-08-06",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "测试全部通过。"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 142,
"completion_tokens": 8,
"total_tokens": 150
}
}
8. 错误码与异常
两层错误:HTTP 层(传输)+ finish_reason 层(协议)。两层正交,必须分别处理。
HTTP 错误(4xx / 5xx)
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| 400 | 请求格式错误 | JSON 解析失败 / 必填字段缺失 / role 配字段错(如 user 带 tool_calls)/ tool_call_id 配不上 |
| 401 | 认证失败 | API key 错 / 过期 |
| 403 | 权限不足 | API key 没权访问该模型 / region 限制 |
| 404 | 端点不存在 | URL 拼错 / 模型 ID 不存在 |
| 429 | 速率限制 | TPM / RPM 超限。读 Retry-After 头 |
| 500 | 服务端错误 | OpenAI 内部问题。指数退避重试 |
| 503 | 服务不可用 | 维护中或过载。指数退避重试 |
协议层错误(HTTP 200 + finish_reason 表示)
| finish_reason | 含义 | Agent 主循环如何处理 |
|---|---|---|
| "content_filter" | 内容被安全策略拦截 | message.refusal 有原因;降级 / 改写 / 上报 |
| "length" | 撞 max_tokens 截断 | 扩 max_completion_tokens 续写,不要盲重试 |
关键认知:HTTP 200 + finish_reason: "length" 是"传输成功但协议失败"——只看 HTTP 状态码会误以为成功。永远查 finish_reason。
9. 字段速查表(按字段名字母序)
| 字段 | 位置 | 必填 | 类型 | 一句话 |
|---|---|---|---|---|
| annotations | 响应 message | — | Annotation[] | 引用 / citation 等富化 |
| arguments | 响应 tool_calls[].function | ★ | string | JSON 字符串,需 json.loads |
| cache_control | — | — | — | OpenAI 无此字段(Anthropic 有) |
| cached_tokens | 响应 usage.prompt_tokens_details | — | number | 命中缓存的 prompt token 数 |
| choices | 响应顶层 | ★ | Choice[] | 候选回复列表 |
| completion_tokens | 响应 usage | — | number | 输出 token 数 |
| completion_tokens_details | 响应 usage | — | object | 含 reasoning_tokens(推理模型) |
| content | 请求 messages[].* / 响应 message / 流式 delta | ★(user/system/tool) | string | Part[] | 消息内容。assistant 工具调用时为 null |
| created | 响应顶层 | — | number | unix 时间戳(秒) |
| description | 请求 tools[].function | — | string | 工具描述,模型看这段决定调不调 |
| detail | 请求 image_url | — | "auto"|"low"|"high" | 图片处理精度(影响 token 数) |
| frequency_penalty | 请求顶层 | — | number | 对出现频次施加惩罚 |
| finish_reason | 响应 choices[] | — | enum | 循环分支唯一依据 |
| function | 请求 tools[] / 响应 tool_calls[] | ★ | object | 工具函数描述或调用 |
| id | 响应顶层 / 响应 tool_calls[] | — | string | 响应 ID / 工具调用配对键 |
| include_usage | 请求 stream_options | — | boolean | 流式最后一个 chunk 是否带 usage |
| index | 响应 choices[] / 流式 delta.tool_calls[] | — | number | 候选索引 / 工具分片聚合键 |
| logit_bias | 请求顶层 | — | Record | 特定 token 概率偏置 |
| logprobs | 请求顶层 / 响应 choices[] | — | boolean | object | 返回 token 对数概率 |
| max_completion_tokens | 请求顶层 | — | number | 最大生成 token 数(新字段) |
| max_tokens | 请求顶层 | — | number | 最大生成 token 数(旧字段,兼容端点) |
| message | 响应 choices[] | — | object | assistant 消息 |
| messages | 请求顶层 | ★ | MessageParam[] | 对话历史(全量回放) |
| metadata | 请求顶层 | — | object | 自定义键值对,最多 16 个 key |
| model | 请求顶层 / 响应顶层 | ★ | string | 模型 ID |
| n | 请求顶层 | — | number | 生成几条候选 |
| name | 请求 tools[].function / 响应 tool_calls[].function | ★ | string | 工具名 |
| object | 响应顶层 | — | "chat.completion" | 对象类型标识 |
| parallel_tool_calls | 请求顶层 | — | boolean | 是否允许一轮并行调多个工具 |
| parameters | 请求 tools[].function | — | JSONSchema | 工具参数 schema |
| presence_penalty | 请求顶层 | — | number | 对已出现 token 施加惩罚 |
| prompt_tokens | 响应 usage | — | number | 输入 token 数 |
| prompt_tokens_details | 响应 usage | — | object | 含 cached_tokens / audio_tokens |
| reasoning_effort | 请求顶层 | — | enum | 推理强度(推理模型专属) |
| reasoning_tokens | 响应 usage.completion_tokens_details | — | number | 推理 token 数(单独计费) |
| refusal | 响应 message | — | string | null | 模型拒绝原因 |
| response_format | 请求顶层 | — | object | 结构化输出 |
| role | 请求 messages[] / 响应 message | ★ | enum | 消息身份(5 种) |
| seed | 请求顶层 | — | number | 尽力而为的确定性种子 |
| service_tier | 请求顶层 | — | enum | 服务等级 |
| stop | 请求顶层 | — | string | string[] | 停止序列(最多 4 个) |
| store | 请求顶层 | — | boolean | 是否存储请求/响应 |
| stream | 请求顶层 | — | boolean | 是否流式(SSE) |
| stream_options | 请求顶层 | — | object | 流式配置 |
| strict | 请求 tools[].function | — | boolean | 强约束模式(部分端点静默忽略) |
| system_fingerprint | 响应顶层 | — | string | 后端运行时指纹 |
| temperature | 请求顶层 | — | number | 采样温度 [0, 2] |
| tool_call_id | 请求 messages[role="tool"] | ★ | string | 与 tool_calls[].id 严格配对 |
| tool_calls | 请求 messages[role="assistant"] / 响应 message | — | ToolCall[] | 工具调用列表 |
| tool_choice | 请求顶层 | — | string | object | 工具选择策略 |
| tools | 请求顶层 | — | ToolDefinition[] | 工具定义列表 |
| top_logprobs | 请求顶层 | — | number | 返回 top N 候选 token 对数概率 |
| top_p | 请求顶层 | — | number | nucleus 采样阈值 |
| total_tokens | 响应 usage | — | number | 合计 token 数 |
| type | 请求 tools[] / 响应 tool_calls[] | ★ | "function" | 工具类型 |
| usage | 响应顶层 | — | object | token 使用情况 |
| user | 请求顶层 | — | string | 终端用户标识(滥用检测) |
10. 引用与配套资料
| 来源 | 链接 / 路径 | 说明 |
|---|---|---|
| OpenAI Chat Completions API 文档(权威) | platform.openai.com/docs/api-reference/chat | 官方权威源。落地实现前请以此为准 |
| OpenAI Function Calling 指南 | platform.openai.com/docs/guides/function-calling | 工具调用最佳实践 |
| OpenAI Chat → Responses 迁移指南 | platform.openai.com/docs/guides/migrate-to-responses | 从 Chat Completions 迁到 Responses API |
| 教学讲义(卡片化讲解) | llm-api-schema-reference.html | 第一篇 · OpenAI Chat Completions(含 4 张教学卡 + Schema 全景) |
| 协议讲义(怎么用) | llm-chat-protocol-guide.html | 7 篇协议讲义,附手写 Agent Checklist |
| 姊妹:OpenAI Responses Schema | openai-responses-schema.html | OpenAI 新一代(2025+)协议的完整 schema |
| 姊妹:Anthropic Messages Schema | anthropic-messages-schema.html | Anthropic Claude 的完整 schema |
| 三协议翻译表 | llm-api-schema-reference.html#part-mapping | 跨协议字段名对照 |
| 兼容方言陷阱(姊妹 case study) | ollama-tool-call-substitute.html | Ollama 兼容端点的实际行为差异 |