LLM 流式传输会在生成模型响应时,逐个 token 实时递增发送该响应。输出流式传输功能已从一项很好的功能发展为现代 LLM 应用的重要组件。
传统方法是等待几秒钟才能获得完整的 LLM 响应,这会造成延迟,尤其是在需要多次模型调用的复杂应用中。在流式传输中,time to first token (TTFT)——从查询提交到第一个生成的token——成为用户感知的延迟至关重要。
流式传输架构可在提示处理后立即启动部分响应,从而显著减少 TTFT,这通常会缩短初始等待时间。与此同时,令牌间延迟 (ITL) 基本保持不变,因为它反映了模型生成的固有速度。这种将初始响应能力 (TTFT) 与稳定状态吞吐量 (ITL) 分离的做法可加快用户反馈速度,而无需从根本上更改令牌生成机制。
通过实施流式传输功能,开发者可以创造更流畅的用户体验,模拟自然对话的流程,而不是等待完整响应的脱节体验。
随着企业越来越多地在生成式 AI 应用中采用流架构,保护实时交互的挑战也在呈指数级增长。传统的护栏解决方案通常难以满足流式传输的独特需求:平衡低延迟响应与全面的内容验证,同时管理持续安全检查的计算开销。这些挑战可能会导致基础设施成本过高、用户体验支离破碎,以及更容易受到提示注入或数据泄露等新兴威胁的影响。
NVIDIA NeMo Guardrails 解决了这些痛点,为 LLM 流式传输架构提供简化的集成路径,同时以更低的延迟实现更高的合规性。通过将策略驱动的安全控制与模块化验证流程相结合,开发者能够在不牺牲响应速度的情况下使用 NVIDIA NeMo Guardrails。
本博文探讨了 NeMo Guardrails 如何简化实时 AI 安全的复杂性,同时通过无缝的上下文感知保护来提高用户信任度。
使用 NeMo Guardrails 进行流式传输:优化延迟和响应速度
NeMo Guardrails 中的串流模式的工作原理
启用流式传输后,输出轨道将转为增量验证:
- 分块处理 LLM 响应被分割成多个块 (可通过`config.yml` 中的`chunk_size` 进行配置) 。 每个数据块都根据轻量级规则进行验证 (例如,PII 检查、使用 Safety NIM 进行安全检查) 。除此之外,验证还包括上下文感知审核,以防止提示注入尝试分散在多个数据块中。选择合适的数据块大小需要权衡取舍:较大的数据块 ( 200-256 个 token) 可为幻觉检测等轨道提供更好的环境,而较小的数据块 ( 128 个 token) 可降低延迟,但可能会漏掉交叉数据块的违规情况。在本文的其余部分,我们将使用术语“护栏服务”来指代 NeMo Guardrails 工具包和 NeMo Guardrails 微服务。
- 使用缓冲区进行上下文感知审核 如前所述,验证使用由近期令牌组成的滑动窗口缓冲区 (可通过 `context_size` 进行配置) (默认为 50 个令牌) ,在足够的上下文中评估响应,而无需等待完整响应。Guardrails 服务仅在缓冲区达到配置的 chunk size 时才开始分析内容。这样可以检测跨多个 chunk 的违规情况 (例如,多部分内容审核) 。
- 检测被屏蔽的内容 Guardrails 服务会检查从 LLM 流式传输的已处理 token 块。如果某个 token 块不安全并被输出 rails 阻塞,Guardrails 服务将返回 JSON 格式的响应。下一节中对此进行了详细说明。
使用 NeMo Guardrails 简化生成式 AI 输出
我们来看看适用于 RAG 的 NVIDIA AI Blueprint 中的护栏配置,并了解如何通过 NeMo Guardrails 增强的流式传输功能来提高生成式 AI (GenAI) 响应速度。我们首先了解配置的细微差别。
流实现:配置和代码
我们将查看 guardrails 配置实现的详细信息,如下所示。
- 启用串流模式
- 选择兼容流式传输的 LLM (例如,HuggingFace、OpenAI、NIM for LLMs)
- 将
streaming: True
添加到护栏配置的config.yml
中:
models:
- type: "content_safety"
engine: nim
model: nvidia/llama-3.1-nemoguard-8b-content-safety
- type: "topic_control"
engine: nim
model: nvidia/llama-3.1-nemoguard-8b-topic-control
rails:
input:
flows:
- content safety check input $model=content_safety
- topic safety check input $model=topic_control
output:
flows:
- content safety check output $model=content_safety
streaming:
enabled: True
stream_first: True
chunk_size: 200
context_size: 50
streaming: True
我们将此配置剖析为小型、易于遵循的步骤。
- 模型配置 安全模型
- 使用 NVIDIA llama-3.1-nemoguard-8b-content-safety 和 llama-3.1-nemoguard-8b-topic-control NIM 微服务分析有害内容的输入/ 输出和主题跟踪功能。
models:
- type: "content_safety"
engine: nim
model: nvidia/llama-3.1-nemoguard-8b-content-safety
- type: "topic_control"
engine: nim
model: nvidia/llama-3.1-nemoguard-8b-topic-control
- 输入 rails
- 根据安全 NIM 验证用户输入,并拒绝违反任何安全或局部指南的输入
rails:
input:
flows:
- content safety check input $model=content_safety
- topic safety check input $model=topic_control
- 输出滑轨
- 使用相同的
nemoguard-8b-content-safety
NIM 过滤 LLM 响应,以防止有害输出并确保合规性。
- 使用相同的
- 流配置:
enabled: True
支持响应流式传输,而stream_first: True
可确保初始令牌在生成开始后立即从 LLM 发送到 Guardrails 服务,从而改善 TTFT
rails:
output:
flows:
- content safety check output $model=content_safety
streaming:
enabled: True
stream_first: True # Send tokens immediately
chunk_size: 200 # Adjust based on latency/context needs
context_size: 50 # Preserve context between chunks
使用 stream_first: True
时,来自 LLM 的 token 在生成时立即流式传输给用户,并同时进行缓冲 (用于审核) 。当缓冲区达到 chunk_size
时,系统会应用 Guardrails。
无论使用哪种 stream_first: True
,如果一条 rail 被触发,并且响应违反了特定策略,那么 Guardrail 服务会生成如下 JSON 错误对象,但可能已经向用户发送了令人不快的文本。调用方有责任管理此情况,并根据应用的具体情况对响应采取行动。流中发送的此 JSON 错误对象符合 Guardrail 服务处理此类事件的常见做法。
{
"error": {
"message": "Blocked by <output_rail>.",
"type": "guardrails_violation_type",
"param": "<output_rail>",
"code": "content_blocked"
}
}
生成式 AI 响应速度的主要串流优势
使用 `enabled: False`
使用 NeMo Guardrails 禁用流式传输会优先考虑简便性而非响应速度。启用 Streaming 功能可通过以下方式提升 LLM 性能和用户体验:
- 降低可感知的延迟 Streaming 以增量方式向客户端发送令牌,以便用户在继续生成时看到部分响应。这消除了等待完全完成的“死气”效应。NeMo Guardrails 的逐块验证可确保部分输出不会暴露不安全的内容。例如,通过使用 RAG 2.0 蓝图,用户可以构建响应用户查询的代理式工作流。启用流式传输后,用户可以看到响应逐字逐句地形成,从而产生即时交互的感觉,而如果不进行流式传输,则会在整个响应出现之前暂停。
- 优化吞吐量在聊天机器人或虚拟助手等实时应用中,交互性至关重要。流式传输第一个token使用户能够在完全生成响应之前开始读取或处理响应。对后续数据块应用全面的安全检查和内容安全NIM,在不影响响应速度的情况下确保安全。
- 高效提供资源串流支持在客户端应用 (例如 Web UI) 中进行渐进式渲染,与缓冲完整响应相比,可减少内存开销。NeMo Guardrails 与实时安全 NIM 集成,可在流式传输工作流中高效运行。
通过启用流式传输,Gen AI 应用从整体响应模型(生成和交付整个输出作为一个单元)转变为动态、增量交互流(在实时自适应块中处理和显示信息)。下面详细分解了这对系统行为和用户体验的影响:
Feature | Streaming Disabled (False) | Streaming Enabled (True) |
Time-to-First-Token* | High | Low |
Memory Usage | Client-side buffering | Progressive rendering |
Error Handling | End-of-response validation | Pre-chunk validation |
Safety Risk | Delayed detection of issues | 早期检测不安全的 chunks |
对于延迟敏感型企业生成式 AI 应用 (例如,客户支持代理) ,建议启用流式传输,尽管实施十分复杂。NeMo Guardrails 可确保企业智能体通过其检索轨道集成 RAG 工作流 (从检索的数据块中过滤敏感数据) ,并通过输出轨道在交付前验证响应,从而实时提供安全、合规的响应。
例如,金融机构可以将 NVIDIA RAG 2.0 蓝图与 NeMo Guardrails 串流模式搭配使用,以提升性能。这意味着访问实时交易数据并阻止未经授权的建议或帐户披露。此外,我们还以递增方式提供响应,从而提高速度和用户体验。
结论
NeMo Guardrails 中的流式传输能够以增量方式提供输出、降低感知延迟并提高用户参与度,从而加快响应速度。但是,实时 token 流式传输可能会在完全验证之前暴露不安全的内容。
为了解决这一问题,开发者必须使用轻量级护栏 (例如,NeMo Guardrails 和适用于 AI 护栏的 NVIDIA NIM 微服务) 来平衡速度与安全性,以便进行每块审核。流式传输还可以通过渐进式渲染提高资源效率,在保持对话流的同时最大限度地减少内存开销。NeMo Guardrails 通过集成输出轨道验证来实现更安全的流式传输。对于生产,流式传输与异步检查配对可确保延迟敏感型企业生成式 AI 应用的合规性。