使用Stream Vision Agents和Amazon Nova 2 Sonic構建實時語音代理
本文介紹瞭如何結合Stream的開源框架Vision Agents、Amazon Bedrock和Amazon Nova 2 Sonic,快速構建生產級實時語音代理。涵蓋了架構原理、代碼示例、函數調用、自動重連和多語言語音支持等高級功能。
構建自然流暢的生產級語音代理是一個複雜的工程挑戰,需要協調語音到語音模型、管理低延遲音頻流、處理連接生命週期,並在Web、移動和桌面應用上提供一致的體驗。本文介紹如何結合Stream的Vision Agents開源框架、Amazon Bedrock和Amazon Nova 2 Sonic,在幾分鐘內構建可投入生產的實時語音代理。
挑戰在於集成多個複雜系統:實時音頻流基礎設施、語音識別、語言模型和文本轉語音服務,每個都有其延遲特徵和故障模式。典型交互需在幾百毫秒內完成,否則會破壞對話流暢性。此外,還需處理網絡不穩定、瀏覽器兼容性、會話超時和服務降級等現實問題。Vision Agents通過抽象基礎設施複雜性並提供靈活的AI體驗定製來解決這些挑戰。
該解決方案整合了三個關鍵組件:Amazon Nova 2 Sonic(通過Amazon Bedrock提供的語音到語音基礎模型,支持實時雙向音頻流、原生話輪檢測和函數調用)、Stream的Vision Agents(開源Python框架,提供插件式架構、25+集成和客户端SDK)、以及Stream的全球邊緣網絡(提供低於500ms的加入時間和低於30ms的音頻延遲)。它們共同構成完整技術棧:Stream處理實時媒體傳輸和客户端體驗,Amazon Nova 2 Sonic提供AI智能,Vision Agents作為膠水代碼連接兩者。
架構上,系統採用清晰的責任分離:Stream的邊緣網絡作為媒體代理,處理用户設備與Vision Agent工作進程之間的音頻傳輸。用户語音通過WebRTC傳輸到最近的Stream SFU,SFU終止連接並轉發音頻給Vision Agent工作進程。工作進程解碼音頻為原始PCM,通過Bedrock實時API流式傳輸到Amazon Nova Sonic,響應音頻再通過相同路徑返回給用户。端到端延遲通常在500毫秒以下。語音活動檢測(VAD)在工作進程中運行,回聲消除在瀏覽器端防止自身輸出觸發VAD循環。
代碼實現非常簡潔:只需創建一個項目目錄,安裝Vision Agents並配置AWS和Stream憑證,然後編寫一個包含代理創建和加入通話邏輯的main.py文件。如下示例展示了一個基本代理:
async def create_agent(**kwargs) -> Agent:
agent = Agent(
edge=getstream.Edge(),
agent_user=User(name="Helpful Assistant", id="agent"),
instructions="You are a helpful voice assistant. Be concise and friendly.",
llm=aws.Realtime(
model="amazon.nova-2-sonic-v1:0",
region_name="us-east-1",
voice_id="matthew",
),
)
return agent
async def join_call(agent: Agent, call_type: str, call_id: str, **kwargs) -> None:
call = await agent.create_call(call_type, call_id)
async with agent.join(call):
await asyncio.sleep(2)
await agent.llm.simple_response(
text="Greet the user warmly and ask how you can help."
)
await agent.finish()在不到30行代碼中,即可創建一個由Amazon Nova Sonic驅動的實時語音代理,並通過Stream客户端SDK訪問。該集成還支持函數調用、自動重連和多語言語音等高級功能,使開發者能夠專注於業務邏輯而非基礎設施。