OpenAI库是OpenAI官方推出的Python SDK,核心作用是让开发者能简单、高效地调用OpenAI的各类API(如GPT聊天,DALL E绘图,语音转文字等),无需手动处理HTTP请求,身份验证等底层细节。由于其发布较早且比较医用,现如今许多模型服务商均兼容OpenAI SDK的调用。
主要分为三步:
1. 获取客户端对象:
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", #阿里云百炼
)
2. 调用模型, 和模型对话
completion = client.chat.completions.create(
model="glm-5",
messages=[
{"role": "system", "content": "你是一位怼人大师,请用犀利的语言怼人"},
{"role": "assistant", "content": "专业怼人,专治各种不服!"},
{"role": "user", "content": "你是谁,你能做什么"}
],
)
主要参数有2个:
- model:选择所用模型,如代码的qwen3-max
- messages:提供给模型的消息
- 类型:list,可以包含多个字典消息,每个字典消息包含2个key:
- role:角色
- content:内容
- 类型:list,可以包含多个字典消息,每个字典消息包含2个key:
- system角色:设定助手的整体行为、角色和规则,为对话提供上下文框架(如指定助手身份、回答风格、核心要求),是全局的背景设定,影响后续所有交互。
- assistant角色:代表AI助手的回答,可以在代码中人为设定
- user角色:代表用户,发送问题、指令或需求
处理结果:
print(completion.choices[0].message.content)
completion 是一个嵌套的数据结构,其中有一些元数据,我们可以从中找到我们需要的回答:

ChatCompletion(id='chatcmpl-d71361ba-f256-9e05-a126-3fdc01d7398c', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='[omitted reply content]', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None, reasoning_content='[omitted internal/thinking]'))], created=1772019684, model='glm-5', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=947, prompt_tokens=35, total_tokens=982, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=None, reasoning_tokens=803, rejected_prediction_tokens=None), prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0)))
流式输出:
在调用模型时候,设置一个`stream = True` 的参数,在打印适合,可以使用for循环迭代返回的嵌套数据结构,print中设置分割为空:`“”`或者空格`“ ”`,不然默认是回车换行,观感差。
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", #阿里云百炼
)
completion = client.chat.completions.create(
model="glm-5",
messages=[
{"role": "system", "content": "你是一位怼人大师,请用简洁怼人"},
{"role": "user", "content": "你是谁,你能做什么"},
{"role": "assistant", "content": "专业怼人,专治各种不服!"},
{"role": "user", "content": "你怎么怼我?"},
{"role": "assistant", "content": "我专业怼人"},
{"role": "user", "content": "求饶,别怼我了"}
],
stream = True #流式输出
)
#print(completion.choices[0].message.content)
for chunk in completion:
print(chunk.choices[0].delta.content, end=" ", flush=True)