交互响应
同步响应
同步响应就是最简单的,给模型一个输入,然后一直在那里等,等到有答案了一股脑全部返回。
SSE 流式输出
SSE 流式输出是大模型会生成很多个字,每生成一个就推送给前端,看上去就好像在打字一样。
异步输出
异步就有点像事件循环了,一个任务正在等待的过程中可以去做别的,等到做好了再来拿。有点像 async await。

Prompt 版本管理
Prompt 在最开始的情况下可以是一个字符串,但是在需要版本改动,跑测试的时候就很麻烦。成熟的做法是把 Prompt 抽出来,做成独立的模板配置。模板支持变量替换、版本管理、灰度发布。
重试策略:模型 API 挂了怎么办
在 API 挂了的时候应该注意是哪种情况,有的情况比如说网络抖动,或者 HTTP 429 被限流了,那么就应该用指数退避加随机抖动。如果是HTTP 400 格式错误或 HTTP 401 认证失败,那么重试反而没有必要。
大模型的生成很慢,可能要等15-30秒才能生成完整的回答,如果超时时间只设置成5秒,那么超时是很正常的。但是像 TCP 连接这种就不需要这么长的时间,因此应该分层设置超时事件。
限流与降级
当 token 超额时不应该只让用户看到空白页面,应该要有降级措施,比如用便宜模型或者预设一个回答。
幂等性:相同请求不要重复计费
网络抖动导致客户端没收到响应,于是重发了一次请求。如果没有幂等保护,同一个请求可能被执行两次------两倍的 token 消耗、两倍的费用、甚至可能给用户返回两条重复的消息。实现思路很简单:客户端在每个请求上带一个唯一的请求 ID,服务端在处理前先检查这个 ID 有没有被处理过