OpenAI API 参数 #
参数概览 #
Chat Completions API 提供了丰富的参数来控制模型的行为和输出。理解这些参数对于获得理想的输出结果至关重要。
text
┌─────────────────────────────────────────────────────────────┐
│ 参数分类 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 核心参数 │
│ ├── model 使用的模型 │
│ ├── messages 对话消息列表 │
│ └── stream 是否流式输出 │
│ │
│ 输出控制 │
│ ├── temperature 随机性控制 │
│ ├── top_p 核采样参数 │
│ ├── max_tokens 最大输出长度 │
│ ├── stop 停止序列 │
│ └── response_format 输出格式 │
│ │
│ 惩罚参数 │
│ ├── frequency_penalty 频率惩罚 │
│ └── presence_penalty 存在惩罚 │
│ │
│ 高级参数 │
│ ├── seed 随机种子 │
│ ├── logit_bias Token 偏置 │
│ ├── user 用户标识 │
│ └── n 生成数量 │
│ │
└─────────────────────────────────────────────────────────────┘
核心参数 #
model(模型选择) #
text
┌─────────────────────────────────────────────────────────────┐
│ model 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:指定要使用的模型 │
│ 类型:string │
│ 必填:是 │
│ │
│ 常用值: │
│ ───────────────────────────────────────────────────────── │
│ gpt-4o 最新旗舰,多模态,速度快 │
│ gpt-4o-mini 轻量级,成本低 │
│ gpt-4-turbo 强大推理能力 │
│ gpt-3.5-turbo 经济实惠 │
│ o1 深度推理 │
│ o1-mini 轻量推理 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "你好"}]
)
messages(消息列表) #
text
┌─────────────────────────────────────────────────────────────┐
│ messages 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:对话消息数组 │
│ 类型:array │
│ 必填:是 │
│ │
│ 消息格式: │
│ { │
│ "role": "system|user|assistant|tool", │
│ "content": "消息内容" │
│ } │
│ │
│ 角色说明: │
│ ───────────────────────────────────────────────────────── │
│ system 设置 AI 行为和角色 │
│ user 用户输入 │
│ assistant AI 回复 │
│ tool 工具返回结果 │
│ │
└─────────────────────────────────────────────────────────────┘
python
messages = [
{"role": "system", "content": "你是一个助手。"},
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!"},
{"role": "user", "content": "今天天气如何?"}
]
stream(流式输出) #
text
┌─────────────────────────────────────────────────────────────┐
│ stream 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:是否以流式方式返回响应 │
│ 类型:boolean │
│ 默认:false │
│ │
│ true 逐块返回,实时显示 │
│ false 完整返回,等待时间长 │
│ │
│ 适用场景: │
│ ───────────────────────────────────────────────────────── │
│ true 聊天界面、实时显示、长文本 │
│ false 批处理、API 调用、短文本 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "写一个故事"}],
stream=True
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
输出控制参数 #
temperature(温度) #
text
┌─────────────────────────────────────────────────────────────┐
│ temperature 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:控制输出的随机性 │
│ 类型:number │
│ 范围:0 - 2 │
│ 默认:1 │
│ │
│ 值的含义: │
│ ───────────────────────────────────────────────────────── │
│ 0 完全确定性,每次输出相同 │
│ 0.3 低随机性,更聚焦、更一致 │
│ 0.7 中等随机性,平衡创造性和一致性 │
│ 1.0 默认值,标准随机性 │
│ 1.5 高随机性,更有创意、更多样 │
│ 2.0 最高随机性,可能产生意外结果 │
│ │
└─────────────────────────────────────────────────────────────┘
低温度示例(确定性任务) #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "将以下英文翻译成中文:Hello World"}
],
temperature=0
)
print(response.choices[0].message.content)
高温度示例(创意任务) #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "写一个关于机器人的创意故事"}
],
temperature=1.5
)
print(response.choices[0].message.content)
温度对比 #
python
prompt = "用一个词描述春天"
for temp in [0, 0.5, 1.0, 1.5]:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=temp
)
print(f"temperature={temp}: {response.choices[0].message.content}")
top_p(核采样) #
text
┌─────────────────────────────────────────────────────────────┐
│ top_p 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:核采样参数,控制候选词的范围 │
│ 类型:number │
│ 范围:0 - 1 │
│ 默认:1 │
│ │
│ 原理: │
│ ───────────────────────────────────────────────────────── │
│ 模型按概率排序所有可能的下一个词 │
│ 只从累积概率达到 top_p 的词中选择 │
│ │
│ 值的含义: │
│ ───────────────────────────────────────────────────────── │
│ 0.1 只从概率最高的 10% 词中选择 │
│ 0.5 从概率最高的 50% 词中选择 │
│ 0.9 从概率最高的 90% 词中选择 │
│ 1.0 从所有词中选择(默认) │
│ │
│ 建议: │
│ ───────────────────────────────────────────────────────── │
│ 通常只调整 temperature 或 top_p 其中之一 │
│ 不要同时调整两个参数 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "写一首关于春天的诗"}
],
top_p=0.9
)
max_tokens(最大输出长度) #
text
┌─────────────────────────────────────────────────────────────┐
│ max_tokens 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:限制生成的最大 Token 数量 │
│ 类型:integer │
│ 范围:1 - 模型上下文限制 │
│ │
│ 注意事项: │
│ ───────────────────────────────────────────────────────── │
│ 这是输出 Token 的上限,不是输入 │
│ 输入 + 输出 不能超过模型上下文限制 │
│ 如果达到限制,finish_reason 会是 "length" │
│ │
│ 模型上下文限制: │
│ ───────────────────────────────────────────────────────── │
│ gpt-4o 128,000 tokens │
│ gpt-4o-mini 128,000 tokens │
│ gpt-4-turbo 128,000 tokens │
│ gpt-3.5-turbo 16,385 tokens │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "写一篇关于人工智能的长文"}
],
max_tokens=500
)
print(f"生成内容: {response.choices[0].message.content}")
print(f"结束原因: {response.choices[0].finish_reason}")
print(f"输出 Token: {response.usage.completion_tokens}")
stop(停止序列) #
text
┌─────────────────────────────────────────────────────────────┐
│ stop 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:遇到指定序列时停止生成 │
│ 类型:string 或 array │
│ 最多:4 个停止序列 │
│ │
│ 使用场景: │
│ ───────────────────────────────────────────────────────── │
│ 控制输出格式 │
│ 限制输出长度 │
│ 在特定标记处停止 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "列出三种水果,用逗号分隔"}
],
stop=["。", "\n"]
)
print(response.choices[0].message.content)
response_format(输出格式) #
text
┌─────────────────────────────────────────────────────────────┐
│ response_format 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:指定输出格式 │
│ 类型:object │
│ │
│ 可选值: │
│ ───────────────────────────────────────────────────────── │
│ {"type": "text"} 默认,普通文本 │
│ {"type": "json_object"} JSON 格式 │
│ {"type": "json_schema"} JSON Schema(结构化) │
│ │
│ 注意: │
│ ───────────────────────────────────────────────────────── │
│ 使用 json_object 时,系统提示中应要求 JSON 输出 │
│ json_schema 需要提供具体的 schema 定义 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "你是一个数据提取助手。以 JSON 格式返回结果。"
},
{
"role": "user",
"content": "提取:张三,28岁,北京"
}
],
response_format={"type": "json_object"}
)
import json
data = json.loads(response.choices[0].message.content)
print(json.dumps(data, indent=2, ensure_ascii=False))
惩罚参数 #
frequency_penalty(频率惩罚) #
text
┌─────────────────────────────────────────────────────────────┐
│ frequency_penalty 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:根据词在文本中的出现频率进行惩罚 │
│ 类型:number │
│ 范围:-2.0 - 2.0 │
│ 默认:0 │
│ │
│ 原理: │
│ ───────────────────────────────────────────────────────── │
│ 正值:降低重复词的概率 │
│ 负值:增加重复词的概率 │
│ 惩罚与词的出现次数成正比 │
│ │
│ 值的含义: │
│ ───────────────────────────────────────────────────────── │
│ -2.0 鼓励重复 │
│ 0 不惩罚(默认) │
│ 0.5 轻微惩罚重复 │
│ 1.0 中等惩罚重复 │
│ 2.0 强烈惩罚重复 │
│ │
│ 适用场景: │
│ ───────────────────────────────────────────────────────── │
│ 正值:减少重复内容,使输出更多样 │
│ 负值:需要强调某些内容时 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "写一篇关于人工智能的文章"}
],
frequency_penalty=0.8
)
presence_penalty(存在惩罚) #
text
┌─────────────────────────────────────────────────────────────┐
│ presence_penalty 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:根据词是否出现进行惩罚 │
│ 类型:number │
│ 范围:-2.0 - 2.0 │
│ 默认:0 │
│ │
│ 与 frequency_penalty 的区别: │
│ ───────────────────────────────────────────────────────── │
│ frequency_penalty:惩罚与出现次数成正比 │
│ presence_penalty:只要出现就惩罚,不关心次数 │
│ │
│ 值的含义: │
│ ───────────────────────────────────────────────────────── │
│ 正值:鼓励谈论新话题 │
│ 负值:鼓励重复已提及的内容 │
│ │
│ 适用场景: │
│ ───────────────────────────────────────────────────────── │
│ 正值:需要广泛覆盖话题时 │
│ 负值:需要深入讨论某话题时 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "讨论人工智能的各个方面"}
],
presence_penalty=0.6
)
惩罚参数组合使用 #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "写一篇关于机器学习的文章"}
],
frequency_penalty=0.5,
presence_penalty=0.5
)
高级参数 #
seed(随机种子) #
text
┌─────────────────────────────────────────────────────────────┐
│ seed 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:设置随机种子以获得可重复的输出 │
│ 类型:integer │
│ │
│ 用途: │
│ ───────────────────────────────────────────────────────── │
│ 调试和测试 │
│ 需要可重复结果的场景 │
│ │
│ 注意: │
│ ───────────────────────────────────────────────────────── │
│ 相同 seed + 相同输入 ≈ 相同输出 │
│ 但不保证完全相同(系统因素) │
│ │
└─────────────────────────────────────────────────────────────┘
python
for seed in [42, 42, 100]:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "生成一个随机数"}
],
seed=seed,
temperature=0
)
print(f"seed={seed}: {response.choices[0].message.content}")
logit_bias(Token 偏置) #
text
┌─────────────────────────────────────────────────────────────┐
│ logit_bias 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:调整特定 Token 的生成概率 │
│ 类型:object │
│ 格式:{token_id: bias_value} │
│ │
│ 偏置值范围:-100 到 100 │
│ ───────────────────────────────────────────────────────── │
│ -100 完全禁止该 Token │
│ 负值 降低该 Token 的概率 │
│ 0 无影响 │
│ 正值 增加该 Token 的概率 │
│ 100 强制选择该 Token │
│ │
│ 使用场景: │
│ ───────────────────────────────────────────────────────── │
│ 禁止某些词汇 │
│ 增加特定词汇的出现概率 │
│ │
└─────────────────────────────────────────────────────────────┘
python
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o-mini")
word = "AI"
token_id = enc.encode(word)[0]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "什么是人工智能?"}
],
logit_bias={token_id: 5}
)
n(生成数量) #
text
┌─────────────────────────────────────────────────────────────┐
│ n 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:生成多个回复选项 │
│ 类型:integer │
│ 默认:1 │
│ │
│ 注意: │
│ ───────────────────────────────────────────────────────── │
│ 会消耗更多的 Token │
│ 返回的 choices 数组会有多个元素 │
│ │
│ 使用场景: │
│ ───────────────────────────────────────────────────────── │
│ 需要多个选项供用户选择 │
│ A/B 测试 │
│ 创意生成 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "给一个科技公司起名"}
],
n=3,
temperature=1.0
)
for i, choice in enumerate(response.choices):
print(f"选项 {i+1}: {choice.message.content}")
user(用户标识) #
text
┌─────────────────────────────────────────────────────────────┐
│ user 参数 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 描述:标识最终用户,用于监控和检测滥用 │
│ 类型:string │
│ │
│ 用途: │
│ ───────────────────────────────────────────────────────── │
│ 追踪用户行为 │
│ 检测滥用行为 │
│ 分析使用模式 │
│ │
│ 建议: │
│ ───────────────────────────────────────────────────────── │
│ 使用用户 ID 或唯一标识符 │
│ 不要使用敏感信息 │
│ │
└─────────────────────────────────────────────────────────────┘
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "你好"}
],
user="user-12345"
)
参数组合示例 #
精确模式(翻译、分类) #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "将以下文本翻译成英文:你好世界"}
],
temperature=0,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
创意模式(写作、头脑风暴) #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "写一个科幻故事的开头"}
],
temperature=1.2,
top_p=0.9,
frequency_penalty=0.5,
presence_penalty=0.5
)
平衡模式(问答、解释) #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "解释什么是机器学习"}
],
temperature=0.7,
top_p=0.9,
frequency_penalty=0.2,
presence_penalty=0.2
)
结构化输出模式 #
python
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "提取信息并以 JSON 格式返回。"
},
{
"role": "user",
"content": "张三,28岁,软件工程师,北京"
}
],
temperature=0,
response_format={"type": "json_object"}
)
参数调优建议 #
根据任务类型选择参数 #
text
┌─────────────────────────────────────────────────────────────┐
│ 任务类型参数建议 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 翻译任务 │
│ ───────────────────────────────────────────────────────── │
│ temperature: 0 │
│ top_p: 1 │
│ frequency_penalty: 0 │
│ presence_penalty: 0 │
│ │
│ 代码生成 │
│ ───────────────────────────────────────────────────────── │
│ temperature: 0 - 0.3 │
│ top_p: 0.9 │
│ frequency_penalty: 0 │
│ presence_penalty: 0 │
│ │
│ 创意写作 │
│ ───────────────────────────────────────────────────────── │
│ temperature: 0.8 - 1.2 │
│ top_p: 0.9 │
│ frequency_penalty: 0.3 - 0.5 │
│ presence_penalty: 0.3 - 0.5 │
│ │
│ 问答/解释 │
│ ───────────────────────────────────────────────────────── │
│ temperature: 0.5 - 0.7 │
│ top_p: 0.9 │
│ frequency_penalty: 0.2 │
│ presence_penalty: 0.2 │
│ │
│ 头脑风暴 │
│ ───────────────────────────────────────────────────────── │
│ temperature: 1.0 - 1.5 │
│ top_p: 0.9 │
│ frequency_penalty: 0.5 - 0.8 │
│ presence_penalty: 0.5 - 0.8 │
│ │
└─────────────────────────────────────────────────────────────┘
下一步 #
现在你已经掌握了 OpenAI API 的各种参数,接下来学习 流式响应,了解如何实现实时输出的效果!
最后更新:2026-03-29