OpenAI模型API调用参数完全解析(中) OpenAI模型API调用参数完全解析中2.6 presence_penalty frequency_penalty抵制重复这是最容易搞混的两个参数。参数presence_penalty 类型float范围 [-2.0, 2.0] 默认值0 含义根据token是否已出现过来施加惩罚。惩罚力度与是否出现过有关 与出现了多少次无关。正值鼓励模型谈新话题负值允许模型围绕同一话题。 参数frequency_penalty 类型float范围 [-2.0, 2.0] 默认值0 含义根据token出现的频率来施加惩罚。出现次数越多惩罚越重。 正值降低逐字重复负值允许高频复用同一表述。一句话区分presence_penalty → 这个词说过没说过就罚。管话题多样性 frequency_penalty → 这个词说了几次按次数罚。管用词多样性直观对比场景presence_penaltyfrequency_penaltyAI反复提到Python如果设置presence_penalty0.5AI会更主动引入新语言/工具几乎不影响因为只是话题名称重复AI连续说非常非常好几乎不影响非常是一个高频通用词不算新话题如果设置frequency_penalty0.5非常会被大幅抑制AI在每一段都提效率presence_penalty会让AI在后续段落不再提取决于效率说了多少次推荐配置创意写作 / 头脑风暴希望内容丰富多样 presence_penalty0.3, frequency_penalty0.3 代码生成公式化重复是正常的 presence_penalty0, frequency_penalty0 长篇文档希望避免词汇重复 presence_penalty0.1, frequency_penalty0.2 严格问答重复术语可以接受 presence_penalty0, frequency_penalty0注意两个参数设为负值会加剧重复——AI可能会卡住一直说同一个词。除非你有明确的特殊需求否则不要设负值。2.7 seed让输出可复现参数seed 类型int 默认值null 含义指定随机种子配合temperature固定值让模型在相同输入下产生近似相同的输出。 不是100%精确复现但在大多数场景下结果高度一致。使用方式response client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 用50字介绍AI}], temperature0, seed42 ) # 每次调用输出基本一致关键洞察seed必须配合temperature0使用否则随机采样会覆盖种子的作用。此外即使设置了seed跨模型版本的输出可能仍然不同——它不是跨版本的快照。适用场景自动化测试——需要确定性输出做断言 A/B实验——控制变量只对比prompt变化的影响 缓存优化——相同请求返回已缓存的响应 不适用于需要多样性的创意场景2.8 stream一个字一个字往外蹦参数stream 类型boolean 默认值false 含义是否启用流式输出。启用后模型以SSE形式逐token返回结果 用户体验类似ChatGPT的打字效果。# 流式调用 stream client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 讲个笑话}], streamTrue ) for chunk in stream: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end)streamfalsestreamtrue等全部生成完后一次性返回逐token返回用户体验loading转圈用户体验打字机效果适合后端批处理、离线任务适合用户交互、聊天UI首token延迟 全量延迟首token延迟极低用户感知更快2.9 response_format让AI输出结构化数据参数response_format 类型object 默认值{type: text} 含义指定输出格式。支持text默认、json_object、json_schema三种模式。三种模式对比模式用法适用场景text{type: text}日常对话、文章生成json_object{type: json_object}要求输出合法JSON但不约束字段json_schema{type: json_schema, json_schema: {...}}严格约束JSON的字段名、类型、必填项json_object示例response client.chat.completions.create( modelgpt-4o, messages[ {role: system, content: 你输出一个JSON对象。}, {role: user, content: 分析这句话的情感这个产品太棒了} ], response_format{type: json_object} ) # 输出{sentiment: positive, confidence: 0.95, keywords: [产品, 棒]} # 但字段名不受控制——每次可能不一样json_schema示例Structured Outputsresponse client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 分析这个产品太棒了}], response_format{ type: json_schema, json_schema: { name: sentiment_analysis, strict: True, schema: { type: object, properties: { sentiment: {type: string, enum: [positive, negative, neutral]}, confidence: {type: number}, reason: {type: string} }, required: [sentiment, confidence, reason], additionalProperties: False } } } ) # 输出严格按照schema字段名和类型100%确定关键洞察如果你需要把AI输出写入数据库或传给下游系统务必使用json_schema模式。json_object只保证是合法JSON但不保证字段名对。Structured Outputs的strict模式还保证additionalProperties: false——不会多出任何你没收到的字段。2.10 tools tool_choice让模型调用函数参数tools 类型array of objects 默认值null 含义定义模型可以调用的函数列表。模型会根据对话上下文决定是否调用某个函数。 参数tool_choice 类型string 或 object 默认值auto 含义控制模型如何选择工具。auto让模型自己决定 none禁止调用工具required强制调用工具。 也可以指定必须调用某个特定函数。完整示例response client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 北京今天天气怎么样}], tools[{ type: function, function: { name: get_weather, description: 获取指定城市的实时天气信息, parameters: { type: object, properties: { city: { type: string, description: 城市名称如北京、上海 } }, required: [city] } } }], tool_choiceauto ) # 模型会返回一个function_call而不是直接回答 # tool_calls[0].function.name get_weather # tool_calls[0].function.arguments {city: 北京}tool_choice的四种策略值行为适用场景auto默认模型自己决定大部分场景none不调用任何工具只想聊天不想让模型调用函数required必须调用至少一个工具你的系统走全部由函数驱动的模式{type: function, function: {name: xxx}}强制调用指定函数路由分发场景延伸思考SKILL框架也是用同样的tools机制实现的如果你用过Claude Code的SKILL系统会发现它的底层也是通过tools参数来注册和调度的本质上SKILL就是被包装成tools的高级函数。只是SKILL多了一层——它除了函数签名还绑定了references文档、scripts执行脚本等资源。但从模型视角看它面对的就是一堆注册好的tools然后根据tool_choice策略选择调用哪个。理解了OpenAI的tools参数你就同时理解了Agent框架和SKILL框架的底层调用机制。2.11 其他值得了解的参数参数速查表 n 类型int默认1 含义一次请求生成多个候选回复从中挑选 logprobs 类型boolean默认false 含义返回每个输出token的对数概率用于分析模型确定程度 top_logprobs 类型int范围[0, 20] 含义返回每个位置最可能的几个token及其概率 parallel_tool_calls 类型boolean默认true 含义是否允许并行调用多个工具 提示依赖顺序的工具调用应设为false store 类型boolean默认false 含义是否将输出存储到OpenAI平台用于后续查阅 metadata 类型map 含义给请求打标签最多16个键值对用于追踪和分析 reasoning_efforto系列模型专用 类型stringlow/medium/high 默认medium 含义控制推理模型思考的深度。high质量最高但时间最长 modalities 类型array[text] 或 [text, audio] 含义输出模态gpt-4o-audio等模型支持语音输出 prediction 类型object 含义Predicted Outputs——预填已知输出内容降低延迟 典型场景只修改一个小文件其余不变