如何使用 RAG 和安全護欄建立語音代理程式

作者 NVIDIA Developer

建立代理程式不僅只是「呼叫 API」—它需要整合擷取、語音、安全性和推理元件,讓它們如完整系統般運作。每一層都有各自的介面、延遲限制和整合挑戰,一旦超越簡單的原型,就會開始感受到這些限制。

在本教學中,您將瞭解如何使用最新用於語音、RAG、安全性及推理的 NVIDIA Nemotron 模型,建構具有護欄且以語音驅動的 RAG 代理程式。最後,將擁有具備下列能力的代理程式:

  • 聆聽語音輸入
  • 利用多模態 RAG 讓自身以您的資料為基礎
  • 對長脈絡進行推理
  • 在回應前套用護欄
  • 以音訊回傳安全答案

您可以先在本機 GPU 上進行開發,然後在可擴充 NVIDIA 環境中部署相同的程式碼,無論是代管 GPU 服務、隨需雲端工作空間或可部署 API 執行階段,且不必變更工作流程。

影片 1,完整的端對端示範,從即時語音輸入到可靠、經過安全檢查的回應,以及如何在單一工作流程中部署代理程式。

先決條件

開始本教學前,您需要:

  • 雲端代管推理模型的 NVIDIA API 金鑰(免費取得
  • 本機部署需要:
    • 約 20GB 的磁碟空間
    • 至少具有 24GB VRAM 的 NVIDIA GPU
    • 具有 Bash 的作業系統 (Ubuntu、macOS 或 Windows Subsystem for Linux)
    • Python 3.10+ 環境
  • 一小時的空閒時間

您將建立

圖 1,利用 RAG 和安全護欄的端對端語音代理程式工作流程。

組件 模型 目的
ASR nemotron-speech-streaming-en-0.6b 超低延遲語音輸入
嵌入 llama-nemotron-embed-vl-1b-v2 對文字和影像進行語意搜尋
重新排序 llama-nemotron-rerank-vl-1b-v2 將擷取準確度提高 6-7%
安全性 llama-3.1-nemotron-safety-guard-8b-v3 多語內容審核
視覺語言 nemotron-nano-12b-v2-vl 描述脈絡中的影像
推理 nemotron-3-nano-30b-a3b 使用 100 萬個 token 進行高效率推理

表 1,在本教學中用來建立語音代理程式的 Nemotron 模型概覽,包括 ASR、嵌入、重新排序、視覺語言、長脈絡推理和內容安全的模型。

步驟 1:設定環境

若要建立語音代理程式,必須同時執行多個 NVIDIA Nemotron 模型 (如上所示) 。語音、嵌入、重新排序和安全模型透過 Transformers 和 NVIDIA NeMo 在近端執行,推理模型則使用 NVIDIA API。

uv sync --all-extras

配套 notebook 可處理所有環境配置。設定雲端代管推理模型的 NVIDIA API 金鑰,隨後即可開始。

步驟 2:利用多模態 RAG 為代理程式建立基礎

擷取是可靠代理程式的基礎。有了新的 Llama Nemotron 多模態嵌入和重新排序模型,即可嵌入文字、圖片 (包括掃描文件) 並將它們直接儲存在向量索引中,不需要額外的預處理。這會擷取推理模型將仰賴的基礎脈絡,確保代理程式參考真實企業資料,而非產生幻覺。

圖 2,具有離線索引和線上擷取的多模態 RAG 工作流程。

lama-nemotron-embed-vl-1b-v2 模型支援三種輸入模式:純文字、純影像及影像與文字組合,讓您為所有內容建立索引,從一般文件到投影片和技術圖表。在本教學中,我們嵌入結合影像與文字的範例。嵌入模型透過 Transformers 載入,並啟用快閃注意力:

from transformers import AutoModel
model = AutoModel.from_pretrained(
    "nvidia/llama-nemotron-embed-vl-1b-v2",
    trust_remote_code=True,
    device_map="auto"
).eval()
# Embed queries and documents
query_embedding = model.encode_queries(["How does AI improve robotics?"])
doc_embeddings = model.encode_documents(texts=documents)

在初始擷取後,llama-nemotron-rerank-vl-1b-v2 模型會利用文字和影像重新排序結果,以確保擷取後的準確度更高。在基準測試中,新增重新排序可將準確度提高約 6 至 7%,這在重視精度的情況下是意義重大的提升。

步驟 3:使用 Nemotron 語音 ASR 增加即時語音

奠定基礎後,下一步是透過語音實現自然互動。

圖 3,利用 NVIDIA Nemotron 語音 ASR 建立的語音 ASR 工作流程。

Nemotron Speech ASR 模型是串流模型,以 Granary 資料集和各種公開語音語料庫中數萬小時的英文音訊進行訓練,針對超低延遲、即時解碼進行最佳化。開發人員將音訊串流至 ASR 服務,接收文字結果,並將輸出直接饋入 RAG 工作流程。

import nemo.collections.asr as nemo_asr
model = nemo_asr.models.ASRModel.from_pretrained(
    "nvidia/nemotron-speech-streaming-en-0.6b"
)
transcription = model.transcribe(["audio.wav"])[0]

該模型具有可配置延遲設定,在最低延遲設定 80ms 下達到 8.53% 的平均 WER,在 1.1 秒延遲下提升至 7.16% WER,遠低於語音助理、現場工具和免動手工作流程所需的一秒閾值。

步驟 4:利用 Nemotron 內容安全與 PII 模型強化安全性

在不同地區以不同語言運作的 AI 代理程式不僅必須理解有害內容,還必須理解文化細微差異和脈絡相關意義。

圖 4,安全工作流程利用 NVIDIA Llama Nemotron Safety Guard 模型偵測安全或不安全內容。

llama-3.1-nemotron-safety-guard-8b-v3 模型以超過 20 種語言提供多語內容安全性,並在 23 種安全類別中進行即時 PII 偵測。

可透過 NVIDIA API 取得此模型,讓您輕鬆新增輸入和輸出過濾,而不必託管額外的基礎架構。它可區分根據語言、方言和文化脈絡而具有不同含義的相似詞組,這在處理嘈雜或非正式的即時 ASR 輸出時格外重要。

from langchain_nvidia_ai_endpoints import ChatNVIDIA
safety_guard = ChatNVIDIA(model="nvidia/llama-3.1-nemotron-safety-guard-8b-v3")
result = safety_guard.invoke([
    {"role": "user", "content": query},
    {"role": "assistant", "content": response}
])

步驟 5:使用 Nemotron 3 Nano 增加長脈絡推理

NVIDIA Nemotron 3 Nano 為代理程式提供推理能力,結合高效率專家混合模型 (mixture-of-experts,MoE) 和混合式 Mamba-Transformer 架構,以及 1M token 脈絡視窗。這可讓模型在單一推論要求中納入擷取文件、使用者紀錄和中間步驟。

圖 5,使用 NVIDIA Nemotron 3 Nano 的推理工作流程。

擷取文件包含影像時,代理程式先使用 Nemotron Nano VL 在脈絡中描述這些影像,然後將所有資訊傳遞至 Nemotron 3 Nano 以取得最終回應。該模型支援可選思考模式,以處理更複雜的推理任務:

completion = client.chat.completions.create(
    model="nvidia/nemotron-3-nano-30b-a3b",
    messages=[{"role": "user", "content": prompt}],
    extra_body={"chat_template_kwargs": {"enable_thinking": True}}
)

輸出在返回前會經過安全過濾器,將擷取擴增查詢轉變成具有完整推理能力的代理程式。

步驟 6:使用 LangGraph 整合所有內容

LangGraph 以有向圖的形式協調整個工作流程。每個節點處理一個階段—轉錄、擷取、影像描述、產生和安全檢查—在元件之間順利交接:

Voice Input → ASR → Retrieve → Rerank → Describe Images → Reason → Safety → Response

代理程式狀態在每個節點流動,並隨著進展累積脈絡資訊。此結構可讓您輕鬆新增條件式邏輯、重試失敗的步驟,或根據內容類型進行分支。配套 notebook 中的完整實作說明如何定義每個節點,並將其連接至可部署的工作流程。

步驟 7:部署代理程式 

一旦代理程式在機器上順利運作,即可將它部署在任何位置。需要分散式提取、嵌入產生或大規模批次向量索引時,請使用 NVIDIA DGX Spark。可對 Nemotron 模型進行最佳化、封裝並以 NVIDIA NIM (預建的 GPU 加速推論微服務集合,用於在 NVIDIA 基礎架構上部署 AI 模型) 形式執行,並且可直接從 Spark 呼叫模型以進行可擴充處理。如果需要隨需 GPU 工作區,讓 notebook 照常運作,不需要系統設定,並遠端存取 Spark 叢集以方便與團隊分享,請使用 NVIDIA Brev

如果想瞭解如何將相同的部署模式應用在實體機器人助理,請參考使用 Nemotron 和 DGX Spark 建立的 Reachy Mini 個人助理教學

兩種環境使用相同的程式碼路徑,因此只需要極少的變更,即可從實驗順利進入正式上線階段。

您建立的結果

您已建立 Nemotron 驅動代理程式的核心結構,具有四個核心元件:用於語音互動的語音 ASR、用於建立基礎的多模態 RAG、考量文化細微差異的多語內容安全過濾,以及用於長脈絡推理的 Nemotron 3 Nano。相同的程式碼可在本機開發環境和正式環境 GPU 叢集中運作,不需要變更。

組件 目的
多模態 RAG 讓回應以真實企業資料為基礎
語音 ASR 實現自然語音互動
安全性  識別不同語言和文化脈絡中的不安全內容
長脈絡 LLM 透過推理產生準確的回應

表 2,用來建構 Nemotron 驅動語音代理程式的四個元件 – 多模態 RAG、語音 ASR、多語內容安全和長脈絡推理。

本教學的各部分與 notebook 中的部分直接對應,讓您逐步實作並測試工作流程。端對端順利運作後,相同的程式碼即可擴充至正式部署。

準備好開始建構了嗎?開啟配套 notebook 並遵循逐步指示:

在 GitHub 上檢視 notebook →

如果想探索底層元件,以下是 Hugging Face 上提供的 Nemotron 模型集合,以及用來協調代理程式的工具:

訂閱 NVIDIA 新聞並在 LinkedInXDiscordYouTube 上關注 NVIDIA AI,隨時瞭解 NVIDIA Nemotron 的最新資訊。

瀏覽影片教學和直播,充分利用 NVIDIA Nemotron