OpenAI API:chat.completions 与流式传输
OpenAI 客户端、消息列表、system/user/assistant 角色,以及使用 stream=True 进行流式传输。
OpenAI API:chat.completions 与流式传输 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
认识 OpenAI Python SDK
openai Python 软件包是调用 GPT-4o 等 OpenAI 模型的官方方式。使用 pip install openai 安装后,您会获得一个 OpenAI 客户端类,它会为您处理身份验证、重试和请求构建。
您发出的每次调用都会经过这个客户端,因此创建一次并重复使用它是标准模式。
pip install openai
from openai import OpenAI创建客户端
使用 OpenAI() 实例化客户端。默认情况下,它会从 OPENAI_API_KEY 环境变量读取您的密钥,从而避免将密钥暴露在源代码中。
您也可以显式传入密钥,但对于生产应用,环境变量是推荐方式。
from openai import OpenAI
# Reads OPENAI_API_KEY from the environment
client = OpenAI()
# Or pass it explicitly (not recommended)
client = OpenAI(api_key="sk-...")messages 列表
聊天模型由消息列表驱动。每条消息都是包含 role 和 content 的字典。三个核心角色是 system(指令)、user(用户)和 assistant(模型)。
这个列表就是模型在每次调用时看到的完整对话上下文。
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"}
]首次补全
请使用 model 和您的 messages 调用 client.chat.completions.create()。回复文本位于 response.choices[0].message.content。
API 会返回一个选项列表,但在通常情况下,您只需读取第一个选项。
response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
print(response.choices[0].message.content)使用参数控制输出
两个参数会影响回复:temperature(0 表示确定性输出,值越高,创造性越强)和 max_tokens(限制回复长度)。较低的温度适合事实性任务,较高的温度适合头脑风暴。
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
temperature=0.2,
max_tokens=300
)为什么要流式传输回复
不使用流式传输时,您必须等待完整回复生成后才能看到内容。使用流式传输时,令牌会在生成后立即到达,因此用户界面可以像 ChatGPT 一样实时显示文本。
您可以通过 stream=True 启用此功能,这会将返回值从单个对象变为迭代器。
启用流式传输
将 stream=True 传递给 create()。此时您获得的不再是完整回复,而是一个生成器;模型每生成一部分内容,它就会产生一个分块。
stream = client.chat.completions.create(
model="gpt-4o",
messages=messages,
stream=True
)遍历分块
请遍历这个流。每个分块都会在 chunk.choices[0].delta.content 中携带一小段文本。开头和结尾的分块在该位置可能为 None,因此打印前请先进行判断。
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta is not None:
print(delta, end="", flush=True)理解 delta 与 message
在普通回复中,您读取 message.content(完整回复)。在流中,您读取 delta.content(仅新增的部分)。delta 一词表示自上一个分块以来的“变化”。
将所有 delta 连接起来,就可以还原完整消息。
full_text = ""
for chunk in stream:
piece = chunk.choices[0].delta.content or ""
full_text += piece
print("\nFinal:", full_text)多轮对话
要继续进行对话,请将助手的回复 append 回 messages,然后添加下一条用户消息。模型没有状态,因此由 YOU 维护历史记录。
messages.append({"role": "assistant", "content": response.choices[0].message.content})
messages.append({"role": "user", "content": "And its population?"})
follow_up = client.chat.completions.create(model="gpt-4o", messages=messages)查看令牌用量
非流式回复包含一个 usage 对象,其中有 prompt_tokens、completion_tokens 和 total_tokens。由于计费按令牌计算,您可以通过这些数据跟踪并规划 API 成本。
print(response.usage.prompt_tokens)
print(response.usage.completion_tokens)
print(response.usage.total_tokens)快速检查
测试您对流式传输的理解。
回顾:聊天补全与流式传输
您已经学会了创建 OpenAI 客户端,构建包含系统、用户和助手角色的 messages 列表,并调用 chat.completions.create()。您可以从 choices[0].message.content 读取普通回复。
使用 stream=True 时,您可以遍历分块并读取 delta.content 来获得实时输出,通过追加回复来维护历史记录,并通过 usage 对象跟踪成本。
常见问题解答
「OpenAI API:chat.completions 与流式传输」课时是免费的吗?
是的 — 「OpenAI API:chat.completions 与流式传输」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「OpenAI API:chat.completions 与流式传输」这节课中我会学到什么?
OpenAI 客户端、消息列表、system/user/assistant 角色,以及使用 stream=True 进行流式传输。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「OpenAI API:chat.completions 与流式传输」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- OpenAI API:chat.completions 与流式传输
- 在 Python 中使用 Anthropic Claude API
- 使用 LLM 进行函数调用与工具使用
- 面向生产环境 LLM 应用的提示词工程