Skip to content

大模型API调用面试总结

更新: 9/1/2026 字数: 0 字 时长: 0 分钟

同步与流式

对于传统的后端项目,多以HTTP同步返回为主,所谓同步返回,就是在前端发起一次请求后,后端一次性返回所有请求的内容

但是对于大模型,由于现实算力等因素,大模型想要一次返回所有内容有些困难,因此我们想要采取逐字返回的方式

SSE

SSE是现在主流的Agent流式返回方案,即客户端向服务端发起一次请求,服务端可以多次向客户端返回内容,直到服务端认为内容已经返回完成

除了SSE外,想要实现流式返回还有Websocket和HTTP chunked,不选择这两者的原因也很简单:

  • WebSocket:服务端和客户端长连接都可互相发消息,但我们没有客户端在服务端发消息的时候接受客户端消息的需求(即大模型的对话不会被中途打断)
  • HttpChunk过于底层,想要实现需要自定义太多的东西

SSE的媒体类型是text/event-stream,消息格式是一份UTF-8文本事件流。每个事件由若干行字段组成,事件之间用空行分隔;实际换行可以是 \n 或 \r\n,所以事件分隔常见写法是\n\n 或 \r\n\r\n

Nginx

有时候Nginx开启了响应缓冲区会导致SSE积攒,这时候我们需要对Nginx的内容进行改动,保证我们的SSE可以正常使用

conf
location /api/ {
    proxy_pass http://backend;
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 300s;
    proxy_set_header Connection "";
    add_header Cache-Control no-cache;
}

中断处理

流式调用一般会有几种中断的情况:用户取消,超时,连接中断,客户端重连。对于不同的中断情况我们有不同的关注点和处理方式

用户取消

该中断不属于错误,因此前端不应该有错误警告,同时后端应该及时中断对供应商的请求以减少对Token的消耗

超时

超时区分为:

  • 连接超时:连不上供应商
  • TTFT超时:连接上供应商但是获取不到第一个事件
  • 总时长超时:一直输出,超过了业务可接受的时间

对于超时我们应该进行重试

断流

客户端错误的将半截内容当成成功,这里应该给用户一个错误提示,并且让用户手动重试(继续)

重连

SSE实际上是有自动重连的功能的,但大模型的输出不是传统后端业务,大多服务商基本不支持该功能

常见的错误类型

类型示例是否建议重试处理方式
网络瞬断连接重置、DNS 抖动、读超时可以指数退避 + 抖动,限制最大次数
供应商 5xx500、502、503、504可以短暂重试,超过阈值切换模型或降级
供应商过载Anthropic 529、类似 overloaded 错误可以慢重试,必要时熔断该供应商
429 限流RPM、TPM、RPD、并发限制超出谨慎优先看 Retry-After 和限流头,排队或降级
流式中断未收到正常结束事件视场景用户可见任务不自动重试,后台任务可幂等重试
400 参数错误Schema 不合法、字段缺失、上下文超限不建议修请求,不要重试同一 payload
401/403 鉴权错误API Key 无效、权限不足不建议告警并停用对应 Key
安全拒答内容策略拒绝不建议进入业务拒答流程
解析失败JSON 不完整、字段类型错误可有限重试带失败原因二次修复,最多 1-2 次

重试方案

对于重试,我们应当使用指数退避+抖动的方式,即随着重试的次数越多,重试的时间也越长,且为了防止同一时间大量请求打入请求服务器,在重试事件后加一个随机值

另一方面,为了防止用户疯狂点击重试,我们要设计幂等key,服务端应作出一下反馈:

  • 如果重试已经成功,直接返回历史结果。
  • 如果重试正在生成,告知用户正在重试。
  • 如果失败且允许重试,创建新的重试,但仍然挂在同一个业务消息下。
  • 如果失败但不可重试,直接返回失败原因。
本站访客数 人次      本站总访问量