长任务、维护与生产证据
超时以后究竟重试什么
连接建立前失败通常没有收到结果;读取超时则可能发生在服务端已生成甚至工具已执行之后。生成重试可能重复计费,工具重试可能重复付款。因此模型调用、只读工具、业务写操作各自制定重试策略。429 要服从重试提示并受任务 deadline 约束;401/403 先解决密钥与权限;400 先修请求,不用退避掩盖参数错。
SDK 自带重试与应用重试叠加会放大尝试次数。前两章显式设为 0,使教学中一次循环就是一次模型尝试;生产可选择 SDK 有限重试,并记录总尝试数。记录 response ID、请求耗时、输入输出 usage 与终态,不把提示内容和密钥完整写日志。
可查询长任务
对支持后台模式的模型,下面展示真实 API 操作,沿用安装与环境。后台存储和数据保留条件需与组织策略相容;background=True 不能未经确认与零数据保留要求混用。
import os, time
from openai import OpenAI
client = OpenAI(timeout=30,max_retries=0)
r = client.responses.create(model=os.environ['OPENAI_MODEL'],
input='比较三种数据库索引适用条件,给出结构化小结。',background=True)
response_id = r.id
end = time.monotonic() + 60
while r.status in {'queued','in_progress'} and time.monotonic() < end:
time.sleep(2)
r = client.responses.retrieve(response_id)
if r.status in {'queued','in_progress'}:
r = client.responses.cancel(response_id)
print(r.id,r.status)
if r.status == 'completed':
print(r.output_text)这里的 60 秒是应用轮询预算,单次 retrieve 最多还可消耗网络超时。取消返回后仍检查终态,不能假定取消总能抢在完成前发生。生产应保存 response ID,使重连执行 retrieve 而不是重新 create;需要严格墙钟 deadline 时把每次网络超时限制到剩余时间。
维护 Chat Completions
旧业务仍可以独立使用 Chat Completions;下面是最小旧入口,不需要先迁移 Responses 才能修复它。
import os
from openai import OpenAI
c = OpenAI(timeout=30,max_retries=0)
r = c.chat.completions.create(model=os.environ['OPENAI_MODEL'],
messages=[{'role':'user','content':'只回答 OK'}])
print(r.choices[0].finish_reason)
print(r.choices[0].message.content)迁移不能只换方法名:旧消息工具结果通常以 role=tool 和 tool_call_id 表达,Responses 使用独立输入项;旧流的 choices/delta 与 Responses 类型化事件不同。维护旧代码时先保留 message/tool_calls 顺序与 finish_reason 判断,再建立适配器测试。Assistants 的 thread/run 对象也不能当成 Responses ID 直接传入;生命周期和存储要单独设计迁移。
发布一个可比较的版本
固定 20 个业务输入,覆盖正常、缺字段、拒绝、截断、多工具与未知库存。逐条比较解析成功、业务正确、越权执行次数、平均与 P95 延迟、token 用量。只把解析成功率提高不能说明回答更真实。小流量上线时记录 SDK、模型、提示和 schema 版本,回滚要能同时切回这四项。
离线可先核验评估聚合。保存 metrics.py 并运行:
rows = [{'ok':True,'ms':100,'tokens':20},{'ok':False,'ms':900,'tokens':10}]
assert sum(r['ok'] for r in rows)/len(rows) == 0.5
assert sum(r['tokens'] for r in rows) == 30
print('quality',0.5,'tokens',30)成本需要按实际价格区分输入、缓存输入和输出;不在正文固化现行单价。模型、上下文限制和后台能力应从账户可用模型与官方能力说明确认。本章 API 路径静态核对,未执行计费请求。
参阅 后台模式 与 迁移 Responses。
练习
评估增加第三条 {ok: True, ms: 300, tokens: 40}。计算成功率和成功请求 token 总数;说明为什么只统计成功 token 会低估账单。
先记录自己的输出与解释,再核对本章答案。