本文目录
一句话:所有 AI 编程、所有 Agent,最底层都是「往 LLM 发一段 messages,拿回一段回复」。先把这一步亲手跑通,后面才不虚。
messages:对话就是一个数组
下面使用 Chat Completions 风格的接口,以一个 messages 列表传入对话。部分服务提供 OpenAI 兼容端点,但角色、模型、工具调用、流式字段和采样参数并非全部一致,切换服务时需要按它的文档核对。
system:设定身份和规则;本例把一条 system 消息放在前面。是否支持多个 system、developer 等角色及其优先级,由具体 API 决定。user:用户说的话assistant:模型之前说过的话(多轮对话时把历史接上)
准备环境
使用 Python 3.10+,在独立环境安装 SDK:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install openai
export LLM_API_KEY="替换为你的服务商 API key"
export LLM_BASE_URL="https://api.deepseek.com"
export LLM_MODEL="deepseek-flash"这里的模型名来自 2026-10-16 的 DeepSeek 官方示例。运行前核对账号当前可用模型;换服务时同时核对 base_url、模型与接口能力。真实调用需要联网、有效凭据,并按服务规则计费。
同步调用(最小示例)
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ["LLM_BASE_URL"],
api_key=os.environ["LLM_API_KEY"],
timeout=30.0,
max_retries=2,
)
MODEL = os.environ["LLM_MODEL"]
resp = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "你是一个简洁的助手,只用一句话回答。"},
{"role": "user", "content": "用一句话解释什么是 Token"},
],
)
print(resp.choices[0].message.content)跑通后,resp.choices[0].message.content 就是模型的回复。整段一次性返回——这是「同步」。
流式调用(打字机效果)
聊天产品里字是一个个蹦出来的,靠的是流式(SSE):服务端边生成边推,客户端边收边显示。改一个参数 stream=True,响应从「一个结果」变成「一串增量片段」:
stream = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": "写一首关于秋天的两行诗"}],
stream=True, # ← 开启流式
)
for chunk in stream: # 逐块到达
if not chunk.choices: # 某些服务的usage尾块没有choices
continue
delta = chunk.choices[0].delta.content # 这一块新增的文字(可能为 None)
if delta:
print(delta, end="", flush=True) # 拼接显示,立刻刷新每个 chunk 只带「这一小步新增的内容」(delta),你把它们拼起来就是完整回复。
同步 vs 流式,怎么选
| 同步 | 流式 | |
|---|---|---|
| 拿到结果 | 等全部生成完 | 边生成边到 |
| 体验 | 长回复要干等 | 首字快、像打字机 |
| 适合 | 后台批处理、要拿完整结果再处理 | 面向用户的对话 / 长输出 |
常见坑
- key 硬编码进代码:别把 API key 写死提交到仓库,用环境变量(
os.environ)读。 - 流式里
delta.content可能是 None:首块或工具调用块可能没有文本,取用前判空。 - 不处理超时 / 限流:线上要加超时、重试(指数退避),否则一波高峰就雪崩。
- 把采样参数当通用保证:先核对所选模型是否支持 temperature/top-p、在当前模式是否生效。低 temperature 通常减少采样随机性,但不保证事实正确,也不保证跨运行完全一致。
关联面试题
- 「流式输出(SSE)是怎么实现的?和同步调用有什么区别?」
- 「temperature、top-p 这些采样参数分别控制什么?」
👉 去 题库 搜 流式 / 采样参数 / 解码策略。
训练营延伸
往工业级走:高并发下的推理优化(KV Cache、continuous batching)、vLLM 部署、成本与延迟权衡——是训练营工程化那条线的内容。