内容提要
在大语言模型推理输出中,流式响应已成为必备功能之一。流式响应可以缩短从请求到输出第一个Token的时间,提高用户体验。流式响应分为模型的流式推理和后端程序将响应输出到客户端。技术方案有长轮询、WebSocket和SSE。使用Python Flask搭建SSE Demo,通过SSE技术将模型的流式推理结果推送到客户端。使用AWS Lambda实现SSE Demo,Lambda是无服务器计算服务,具有弹性和成本效率。Lambda流式响应有大小限制和带宽限制。建议使用Http-SSE实现流式响应。
延伸解读
流式响应技术选型:为何SSE更合适
文章对比了长轮询、WebSocket和SSE三种方案。长轮询因反复建立连接,增加了往返时间和资源浪费;WebSocket虽支持全双工,但在Claude3单向流式输出场景中显得过于复杂。SSE基于HTTP协议,提供单向实时通信,更轻量且易于实现,因此文章建议采用HTTP-SSE。
Flask Demo的局限与Lambda的引入
使用Flask搭建SSE Demo虽然简单,但生产环境中存在可扩展性差、需管理服务器、成本效率低等问题。流量波动时,服务器可能闲置或过载。AWS Lambda作为无服务器计算服务,按执行付费,能自动扩展,更适合应对不定时或间歇性工作负载,因此文章转向Lambda实现流式响应。
Lambda流式响应的关键配置与限制
在Lambda中实现SSE需注意:默认支持Node.js Runtime,其他语言需自定义Runtime或使用Lambda Web适配器;需为角色添加Bedrock调用权限;调整超时时间以适应长响应。函数URL的Auth Type建议选NONE,避免客户端存储AWS凭证,可在Header中自行实现认证。此外,流式响应有20MB大小限制,前6MB带宽不受限,之后限速2MBps。
API Gateway集成的注意事项
文章指出,API Gateway的LAMBDA_PROXY集成不支持流式响应。若使用HTTP_PROXY集成,虽可连接Lambda函数URL,但会受API Gateway的10MB响应负载限制,且API Gateway不支持分块传输编码,无法实现流式响应的预期效果。因此,直接使用Lambda函数URL是更合适的方案。
Q&A
流式响应在大语言模型中的作用是什么?
流式响应可以缩短从请求到输出第一个Token的时间,提高用户体验。
Claude3是如何实现流式推理的?
Claude3采用Message API,支持多模态的数据输入,并通过Python代码实现流式推理。
流式响应的技术方案有哪些?
流式响应的技术方案包括长轮询、WebSocket和HTTP SSE。
为什么选择HTTP SSE而不是WebSocket?
HTTP SSE更轻量级且易于实现,适合单向实时通信,而WebSocket在Claude3场景中显得过于复杂。
AWS Lambda在流式响应中的优势是什么?
AWS Lambda是无服务器计算服务,具有成本效率和弹性,适合实现流式响应。
Lambda流式响应有哪些限制?
Lambda流式响应有大小限制(默认为20MB)和带宽限制,前6MB不受限制,之后最大2MBps。