使用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訪問。該整合還支援函式呼叫、自動重連和多語言語音等高階功能,使開發者能夠專注於業務邏輯而非基礎設施。