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 應用的合規性。