【AI大模型第7集】大模型调用OpenAI client.chat.completions.create核心参数详解_chatcompletioncreateparams.responseformat
文章目录
- 一、必填参数
 - 
- 1. `model`
 - 2. `messages`
 
 - 二、常用可选参数
 - 
- 1. `temperature`
 - 2. `top_p`
 - 3. `max_tokens`
 - 4. `n`
 - 5. `stop`
 - 6. `stream`
 - 7. `presence_penalty` / `frequency_penalty`
 
 - 三、高级参数
 - 
- 1. `logit_bias`
 - 2. `tool_calls` / `tool_choice`
 - 3. `response_format`
 - 4. `user`
 - 5. `seed`
 - 6. `image_url` 嵌套参数(图像分析)
 
 - 四、参数 `messages` 详细介绍
 - 
- 1. `messages` 的基本结构
 - 2. 角色 (`role`) 的作用
 - 3. `content` 的高级用法
 - 4. `messages` 的构建规则
 - 5. `messages` 的内部处理机制
 - 6. `messages` 的常见错误与解决方案
 
 - 五、核心参数使用建议
 - 六、示例代码
 - 
- 1. 基础调用
 - 2. 流式输出
 - 3. 图像分析
 - 4. 工具调用
 
 - 七、总结
 
OpenAI API 是由 OpenAI 公司开发,为 LLM 开发人员提供的一个简单接口。通过此 API 能在应用程序中方便地调用 OpenAI 提供的大模型基础能力。 OpenAI 的API协议已成为 LLM 领域的标准。
Python 是 OpenAI 的官方主要语言,OpenAI 官方提供了 Python SDK 的五大核心接口:ChatCompletion(多轮对话)、Completion(单轮文本补全)、Embedding(文本向量化)、Audio(语音识别与翻译)和 Image(图像生成与编辑)。
ChatCompletion 接口用于生成“多轮对话”的 AI 回复,是构建聊天机器人、智能助理等对话系统的核心。与传统的 Completion 接口不同,ChatCompletion 接口支持消息列表(包含角色和内容),能够保持对话上下文,多轮交互时模型可以“记住”之前的对话内容。例如,我们可以用它实现类似 ChatGPT 的聊天,或者让模型扮演某个角色进行问答。开发者可以通过设定系统消息来规定 AI 的行为,通过多轮 user/assistant 消息实现上下文相关的对话。在 SDK v1.5.0 中,通过 client.chat.completions.create() 方法调用该接口。
以下是 OpenAI client.chat.completions.create() 方法核心参数的详细介绍:
一、必填参数
1. model
- 作用:指定使用的模型名称(如 
qwen-plus、gpt-4、gpt-4o等)。 - 类型:字符串。
 - 示例:
model=\"qwen-plus\" - 说明:
- 模型选择需根据任务需求(如对话、图像理解、工具调用等)。
 - 新模型(如 
gpt-4o)支持更复杂的任务(如图像分析)。 
 
2. messages
- 作用:对话历史及角色定义。
 - 类型:字典列表,每个字典包含:
role:角色类型(system、user、assistant、tool)。content:消息内容(或工具调用的tool_call_id)。name(可选):参与者名称。tool_calls(可选):模型请求调用工具时使用。
 - 示例:
messages = [ {\"role\": \"system\", \"content\": \"你是一个翻译官\"}, {\"role\": \"user\", \"content\": \"我喜欢学习人工智能\"}, {\"role\": \"assistant\", \"content\": \"I like studying AI.\"}] - 说明:
system消息用于定义模型行为(如角色设定,后面会详细介绍)。- 支持多轮对话,需包含完整历史。
 - 图像分析需嵌套 
image_url字典(见下方高级参数)。 
 
二、常用可选参数
1. temperature
- 作用:控制输出的随机性,取值范围: [0, 2)(默认值 1)。
 - 示例:
temperature=0.7 # 适度随机temperature=0.2 # 高确定性(事实性问题)temperature=1.5 # 高创造性(故事生成) - 说明:
- 值越高,输出的更随机多样;值越低,输出的更确定。
 - 与 
top_p二选一,避免同时设置。 
 
2. top_p
- 作用:核采样概率(Nucleus Sampling),控制模型输出的多样性,取值范围:(0,1.0](默认值 1)。
 - 示例:
top_p=0.9 # 仅考虑前90%概率的 token - 说明:
- 值越高,输出的更随机多样;值越低,输出的更确定。
 - 与 
temperature功能类似,但基于概率质量。 
 
3. max_tokens
- 作用:限制生成内容的最大 token 数(默认无限制)。
 - 示例:
max_tokens=100 # 最多生成100个 token - 说明:
- 受模型上下文长度限制(如 
gpt-3.5-turbo最大 4096 tokens)。 - 超出模型限制会导致错误。
 
 - 受模型上下文长度限制(如 
 
4. n
- 作用:生成多个结果的数量(默认值 1)。
 - 示例:
n=3 # 生成3个不同的结果 - 说明:
- 会增加 token 消耗,需谨慎使用。
 
 
5. stop
- 作用:设置停止词,遇到即终止生成。
 - 示例:
stop=[\"。\", \"?\"] # 遇到句号或问号时停止stop=[\"\\n\\n\"] # 遇到两行空格时停止 - 说明:
- 使用stop参数后,当模型生成的文本即将包含指定的字符串或token_id时,将自动停止生成。
 - stop为array类型时,不可以将token_id和字符串同时作为元素输入,比如不可以指定stop为[“你好”,104307]。
 
 
6. stream
- 作用:是否启用流式传输(逐步返回结果,默认 
False)。 - 示例:
stream=True # 流式返回 - 说明:
- false:模型生成完所有内容后一次性返回结果。
 - true:边生成边输出,即每生成一部分内容就立即输出一个片段(chunk)。您需要实时地逐个读取这些片段以获得完整的结果。
 - 适合实时应用(如聊天机器人)、需处理流式响应的逐块数据。
 
 
7. presence_penalty / frequency_penalty
- 作用:惩罚重复内容,用来控制模型输出的内容重复度,取值范围:[-2.0, 2.0]。
 - 示例:
presence_penalty=1.0 # 减少重复主题frequency_penalty=0.5 # 减少重复 token - 说明:
presence_penalty:惩罚新主题的重复。frequency_penalty:惩罚 token 的频率。- 正数会减少重复度,负数会增加重复度。如果参数值是正数,模型将对目前文本中已存在的Token施加一个惩罚值(惩罚值与文本出现的次数无关),减少这些Token重复出现的几率,从而减少内容重复度,增加用词多样性。
 
 
三、高级参数
1. logit_bias
- 作用:调整特定 token 的生成概率(字典形式)。
 - 示例:
logit_bias={1234: 2.0} # 增加 token ID 1234 的权重 
2. tool_calls / tool_choice
- 作用:调用外部工具或函数。
 - 示例:
tool_calls=[{ \"name\": \"get_weather\", \"parameters\": {\"city\": \"string\"}, \"description\": \"获取天气信息\"}]tool_choice=\"auto\" # 默认值为 \"auto\",表示由大模型自动决定是否调用工具。值为 \"null\" 时,则强制大模型不调用工具。 
3. response_format
- 作用:强制返回特定格式(如 JSON)。
 - 示例:
response_format={\"type\": \"json_object\"} - 说明:
- 可选值:{“type”: “text”}或{“type”: “json_object”}。设置为{“type”: “json_object”}时会输出标准格式的JSON字符串。
 - 如果指定该参数为{“type”: “json_object”},您需要在 System Message 或 User Message 中指引模型输出 JSON 格式,如:“请按照json格式输出。”
 
 
4. user
- 作用:终端用户标识符(用于监测滥用行为)。
 - 示例:
user=\"user_12345\" 
5. seed
- 作用:固定随机种子(确保相同输入输出一致),取值范围:0~231−1。。
 - 示例:
seed=42 - 说明:
- 设置seed参数会使文本生成过程更具有确定性,通常用于使模型每次运行的结果一致。
 - 在每次模型调用时传入相同的seed值(由您指定),并保持其他参数不变,模型将尽可能返回相同的结果。
 
 
6. image_url 嵌套参数(图像分析)
- 作用:支持图像输入(需模型支持,如 
gpt-4o)。 - 示例:
messages = [ { \"role\": \"user\", \"content\": [ {\"type\": \"text\", \"text\": \"这是第一张图片:\"}, { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://example.com/image1.jpg\", \"detail\": \"high\" # 可选属性,控制图像清晰度 } }, {\"type\": \"text\", \"text\": \"请解析这张图。\"} ] }] 
四、参数 messages 详细介绍
1. messages 的基本结构
messages 是一个字典列表(List[Dict]),每个字典表示一条消息,包含以下字段:
rolesystem(系统指令)user(用户输入)assistant(模型回复)tool(工具调用)tool_call(调用工具时的请求)tool_response(调用工具后的响应)content{\"type\": \"image_url\", \"image_url\": {...}})。nametool_calltool_response2. 角色 (role) 的作用
- 
system- 作用:定义模型的行为或角色(如助手职责、语言风格、约束条件)。
 - 示例:
{\"role\": \"system\", \"content\": \"你是一个幽默的助手,需要用俏皮话回答用户问题。\"} - 适用场景:设定模型的初始行为、限制输出范围(如禁止敏感内容)、强制格式(如 JSON 输出)。
 
 - 
user- 作用:用户输入的内容。
 - 示例:
{\"role\": \"user\", \"content\": \"帮我写一首关于秋天的诗。\"} - 适用场景:用户提问、指令或上下文补充。
 
 - 
assistant- 作用:模型的回复内容。
 - 示例:
{\"role\": \"assistant\", \"content\": \"秋风送爽叶纷飞,金桂飘香满园醉。\"} - 适用场景:记录模型的输出,用于后续对话的上下文。
 
 - 
tool/tool_call/tool_response- 作用:支持模型调用外部工具(如数据库查询、天气 API)。
 - 示例:
# 模型请求调用工具{\"role\": \"assistant\", \"tool_call\": { \"name\": \"get_weather\", \"parameters\": {\"city\": \"北京\"}}}# 工具返回结果{\"role\": \"tool\", \"content\": {\"temperature\": \"20°C\", \"condition\": \"晴\"}} 
 
3. content 的高级用法
- 
文本内容
- 直接传字符串:
{\"role\": \"user\", \"content\": \"你好!\"} 
 - 直接传字符串:
 - 
多模态内容(图像、音频)
- 需使用列表嵌套字典,指定模态类型:
messages = [ { \"role\": \"user\", \"content\": [ {\"type\": \"text\", \"text\": \"这是第一张图片:\"}, { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://example.com/image.jpg\", \"detail\": \"high\" # 控制图像解析质量(low/high) } }, {\"type\": \"text\", \"text\": \"请解析这张图。\"} ] }] - 要求:模型需支持多模态功能(如 
gpt-4o)。 
 - 需使用列表嵌套字典,指定模态类型:
 - 
工具调用的参数
- 若 
role为assistant,且需要调用工具,需在tool_call中传参数:{\"role\": \"assistant\", \"tool_call\": { \"name\": \"search_wikipedia\", \"parameters\": {\"query\": \"量子力学\"}}} 
 - 若 
 
4. messages 的构建规则
- 
顺序要求
- 对话历史必须按时间顺序排列(先 
system,再user和assistant交替)。 - 示例:
messages = [ {\"role\": \"system\", \"content\": \"你是一个翻译官\"}, {\"role\": \"user\", \"content\": \"Hello, how are you?\"}, {\"role\": \"assistant\", \"content\": \"你好,最近怎么样?\"}, {\"role\": \"user\", \"content\": \"I\'m fine, thanks!\"}] 
 - 对话历史必须按时间顺序排列(先 
 - 
上下文长度限制
- 总 token 数不能超过模型的最大上下文长度(如 
gpt-3.5-turbo最大 4096 tokens)。 - 建议保留关键历史信息,避免冗余。
 
 - 总 token 数不能超过模型的最大上下文长度(如 
 - 
系统消息的特殊作用
system消息会直接影响模型的行为,建议在对话开始时设置。- 示例:强制输出 JSON 格式:
{\"role\": \"system\", \"content\": \"请以 JSON 格式输出结果。\"} 
 
5. messages 的内部处理机制
当 messages 列表传递给大模型时,OpenAI 的API会做如下处理:
- 逐条解释每条消息:每条消息由 role 和 content 组成,API会跟进 role 的类型赋予不同的权重或作用。例如:system 定义模型行为,user 是用户的输入,assistant 是模型的响应。
 - 生成一段内部结构化数据:这些数据被编码为 token(模型可以理解的格式),并跟进顺序被输入到模型中。
 - 保留层次化信息:比如 role 信息不会被简单的丢失,而是作为上下文的提示存在,影响生成过程。
 
- 实际上 OpenAI API 会为每条消息标记 role 和 content,例如:
- system 的内容被视为对整个对话的指导信息,模型优先根据他定义的规则回应。
 - user 的内容会触发生成逻辑,模型会跟进前面的上下文回答。
 - assistant 的内容用于帮助模型了解之前的对话背景,让响应更加符合用户期望。
 
 
6. messages 的常见错误与解决方案
- 
错误:缺少
role或content- 原因:未正确构造字典。
 - 解决:确保每条消息都包含 
role和content。 
 - 
错误:
tool_call参数缺失- 原因:模型请求调用工具时未提供 
tool_call。 - 解决:在 
assistant消息中添加tool_call字段。 
 - 原因:模型请求调用工具时未提供 
 - 
错误:多模态内容格式错误
- 原因:未按规范嵌套字典。
 - 解决:参考多模态示例的结构。
 
 
五、核心参数使用建议
- 
控制成本:
- 优先使用低价模型(如 
gpt-3.5-turbo)。 - 限制 
max_tokens和n。 
 - 优先使用低价模型(如 
 - 
优化质量:
- 事实性问题:
temperature=0.2。 - 创意生成:
temperature=0.8。 - 多样性需求:
top_p=0.9。 
 - 事实性问题:
 - 
流式响应:
- 实时场景启用 
stream=True。 
 - 实时场景启用 
 - 
避免重复:
- 使用 
presence_penalty和frequency_penalty。 
 - 使用 
 - 
图像分析:
- 使用 
image_url参数嵌套图像链接(需模型支持)。 
 - 使用 
 
六、示例代码
1. 基础调用
import osfrom openai import OpenAIclient = OpenAI( # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key=\"sk-xxx\", api_key=os.getenv(\"DASHSCOPE_API_KEY\"), base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",)completion = client.chat.completions.create( # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models model=\"qwen-plus\", messages=[ {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}, {\"role\": \"user\", \"content\": \"你是谁?\"}, ], # Qwen3模型通过enable_thinking参数控制思考过程(开源版默认True,商业版默认False) # 使用Qwen3开源版模型时,若未启用流式输出,请将下行取消注释,否则会报错 # extra_body={\"enable_thinking\": False},)print(completion.model_dump_json())
2. 流式输出
import osfrom openai import OpenAIclient = OpenAI( # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key=\"sk-xxx\", api_key=os.getenv(\"DASHSCOPE_API_KEY\"), base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",)completion = client.chat.completions.create( model=\"qwen-plus\", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models messages=[{\'role\': \'system\', \'content\': \'You are a helpful assistant.\'}, {\'role\': \'user\', \'content\': \'你是谁?\'}], stream=True, stream_options={\"include_usage\": True} )for chunk in completion: print(chunk.model_dump_json())
3. 图像分析
import osfrom openai import OpenAIclient = OpenAI( # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key=\"sk-xxx\", api_key=os.getenv(\"DASHSCOPE_API_KEY\"), base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",)completion = client.chat.completions.create( model=\"qwen-vl-plus\", # 此处以qwen-vl-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models messages=[{\"role\": \"user\",\"content\": [{\"type\": \"image_url\",\"image_url\": {\"url\": \"https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg\"}},{\"type\": \"text\",\"text\": \"这是什么\"}]}] )print(completion.model_dump_json())
4. 工具调用
import osfrom openai import OpenAIclient = OpenAI( # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key=\"sk-xxx\", api_key=os.getenv(\"DASHSCOPE_API_KEY\"), base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\", # 填写DashScope SDK的base_url)tools = [ # 工具1 获取当前时刻的时间 { \"type\": \"function\", \"function\": { \"name\": \"get_current_time\", \"description\": \"当你想知道现在的时间时非常有用。\", \"parameters\": {} # 因为获取当前时间无需输入参数,因此parameters为空字典 } }, # 工具2 获取指定城市的天气 { \"type\": \"function\", \"function\": { \"name\": \"get_current_weather\", \"description\": \"当你想查询指定城市的天气时非常有用。\", \"parameters\": {  \"type\": \"object\", \"properties\": {  # 查询天气时需要提供位置,因此参数设置为location  \"location\": { \"type\": \"string\", \"description\": \"城市或县区,比如北京市、杭州市、余杭区等。\"  } }, \"required\": [\"location\"] } } }]messages = [{\"role\": \"user\", \"content\": \"杭州天气怎么样\"}]completion = client.chat.completions.create( model=\"qwen-plus\", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models messages=messages, tools=tools)print(completion.model_dump_json())
七、总结
在实际项目中,无论你是在开发客服助手、文案生成系统、知识库搜索引擎,还是构建多模态 Agent,理解并掌握这些参数的调优技巧,是将大模型从“能跑”到“好用”的关键一步。


