生产环境最佳实践
集成开始承载实际流量前,需要做好哪些准备。
可靠性
- 仅针对适当的状态码重试。
429,500,502,503,529采用指数退避并加入随机抖动。切勿盲目重试400,401,402或403. - 设置超时。 长时间生成可能确实需要几分钟;套接字挂起不应拖垮工作进程。对于非流式调用,120 秒是合理的超时上限。
- 限制并发 使用信号量,而不是一次性发出所有请求,再重试被拒绝的请求。
- 准备备用模型。 如果主模型过载,降级到较小的模型比返回错误更好。
成本
- 设置
max_tokens在每次调用中设置。它是支出上限,而不是建议值。 - 按任务路由 — 请参阅 费用控制.
- 启用 提示词缓存 了解稳定前缀。
- 记录
usage为每个请求附上任务标签,以便日后归因支出。
安全
- 密钥应存放在环境变量或密钥管理器中 — 绝不能放入代码仓库,也不能放入客户端打包文件。
- 每个服务使用独立密钥,以便精确撤销。
- 切勿通过字符串拼接将不可信的用户输入与指令组合成提示词;应将用户内容放在
user消息中,将指令放在system. - 将模型输出视为不可信内容。不要
eval它,也不要使用具有写入权限的角色执行生成的 SQL。
可观测性
- 记录模型、延迟、
usage,stop_reason以及每次调用对应的自定义任务类型。 - 针对以下指标设置告警:
stop_reason: max_tokens的发生率 — 上升意味着回答正在被截断。 - 按任务类型跟踪成本,而不只是查看总额。总额会掩盖成本恶化的具体工作负载。
最有价值的告警针对的是截断,而不是错误。被截断的回答会返回 HTTP 200,在监控中看似正常,但对用户而言却是错误的。