一篇讲完四种写法。 装好 SDK 后,从最简单的对话到流式输出,都是同一套接口。 整理日期:2026-10-18 | 相关:按任务选模型 · 配置三要素
建议用近两年的版本。太老的版本可能不认自定义 base_url。
⚠️ base_url必须带/v1。少了会 404。
| 用途 | 模型 ID |
|---|---|
| 通用主力 | claude-sonnet-5-5 |
| 复杂推理 | claude-opus-5-5 |
| 便宜快 | deepseek-v4-flash |
| 看图片 | gemini-3.8-flash |
填官网名(如 GPT-6 Astra)会报「模型不存在」。完整清单见按任务选模型。
| 点 | 说明 |
|---|---|
| 历史会无限增长 | 聊久了 prompt 越来越长、越来越贵。生产环境要截断或做摘要 |
system 只放第一条 | 放在中间不影响,但规范上是开头一条 |
messages[0](system),截掉中间的对话。flush=True 很重要——不加的话某些终端会攒着不输出,看着像卡住。| 坑 | 表现 | 解决 |
|---|---|---|
requests.post 没加 stream=True | 一次性返回全部,看着"不流式" | 必须加 |
没处理 data: [DONE] | 最后解析报 JSON 错 | 见到就 break |
| 现象 | 原因 | 解决 |
|---|---|---|
openai.APIConnectionError | 网络或代理 | 关代理重试 |
401 | 密钥错 / 带空格 | 重新复制 |
404 | base_url 漏 /v1 | 补上 |
model not found | 填了官网名 | 用网关 ID |
TypeError: Client.__init__() got an unexpected keyword argument 'api_base' | 用了旧版 SDK 的参数名 | 改成 base_url,并升级 SDK |
| 流式没反应 | 没加 stream=True 或没 flush | 都加上 |
| 上下文超限 | 历史太长 | 按第三节截断 |
| 项 | 说明 |
|---|---|
| 计费方式 | 按输入 + 输出 token 结算 |
| 成本大头 | 多轮对话的输入——每轮都重发全部历史,聊得越久单轮越贵 |
| 省钱做法 | 长对话做摘要压缩;日常任务用 deepseek-v4-flash 这类便宜模型 |
实际单价以价格页为准。
| 日期 | 改了什么 |
|---|---|
| 2026-10-18 | 由原「Python 基础对话」「连续对话」「库流式输出」「request 流式 demo」四篇合并;模型 ID 更新为当前在架型号,补上下文截断与裸 HTTP 的两个坑 |