傳統語音 Agent 的三大痛點

如果你曾經搭建過語音助手,一定對這條經典流水線不陌生:

使用者說話 → ASR(語音辨識)→ 文字 → LLM(大模型推理)→ 回覆文字 → TTS(語音合成)→ 播放

這條 ASR → LLM → TTS 三段式架構雖然成熟,但每一步都會引入額外延遲和資訊損失:

痛點 具體表現
延遲疊加 ASR 200-500ms + LLM 300-800ms + TTS 200-500ms,首句回應輕鬆超過 1-2 秒
資訊遺失 語音中的情緒、語調、停頓在 ASR 階段全部遺失,LLM 只看到冷冰冰的文字
體驗割裂 使用者說完話要等「轉寫中…思考中…合成中…」,對話感極差

更致命的是,這三個模組各自獨立,除錯和最佳化極其複雜。你調好了 ASR 的 VAD(語音活動偵測),卻發現 TTS 的斷句邏輯對不上;你最佳化了 LLM 的串流輸出,又發現 TTS 不支援串流拼接。

有沒有一種方案,能直接從語音到語音,中間不經過文字轉寫?

AgentOS 2 Live 就是這樣一個答案。

AgentOS 2 Live 是什麼

AgentOS 2 Live 是由 OrionStar(獵戶星空)開源的端到端即時語音互動平台(技術預覽版),基於 OpenAI Realtime API 建構。它的核心思路很簡單:

直接把語音餵給多模態模型,模型直接輸出語音——中間不需要 ASR 和 TTS。

使用者說話 → [Opus 編碼] → WebSocket → OpenAI Realtime API → 語音串流 → 播放

省掉了兩個獨立模型的往返,延遲大幅下降,同時保留了語音中的情緒、語調等豐富資訊。

核心技術堆疊

層級 技術選型
架構 Monorepo(npm workspaces)
前端 React + TypeScript + Tailwind CSS + Web Audio API + VAD + Opus 編解碼
後端 Node.js + TypeScript + Express + WebSocket
AI 模型 OpenAI Realtime API(GPT-4o Realtime)
通訊協定 WebSocket 統一協定,型別安全
機器人整合 Android WebView + Kotlin + RobotService SDK

專案採用 Monorepo 結構,包含四個子套件:

AgentOS2-Live/
├── client/        # React 前端:AgentSDK、VAD、機器人臉動畫
├── server/        # Node.js 後端:WebSocket 服務、OpenAI 編排
├── shared/        # 前後端共享的 TypeScript 型別與通訊協定
└── e2e_android/   # OrionStar 機器人 Android WebView 橋接

GitHub 儲存庫:OrionStarAI/end2end_sample

技術架構深度解析

Realtime API 運作原理

OpenAI Realtime API 的核心是 gpt-4o-realtime-preview 模型。與傳統 REST API 不同,它使用 WebSocket 長連線,支援雙向串流音訊傳輸:

客戶端                         服務端 (OpenAI)
  |                                |
  |-- session.update (設定) ------>|
  |                                |
  |-- input_audio_buffer.append -->|  (持續發送 Opus 編碼的音訊幀)
  |                                |
  |-- input_audio_buffer.commit -->|  (VAD 偵測到停頓,提交音訊)
  |                                |
  |<-- response.audio.delta -------|  (模型回傳語音串流)
  |<-- response.audio.delta -------|
  |<-- response.done --------------|

關鍵點: - 不需要中間文字:模型直接處理音訊特徵,輸出也是音訊 - 串流處理:音訊幀可以邊錄邊傳,模型邊聽邊想邊說 - 保留語音資訊:語調、情緒、停頓都被模型感知

端到端語音流程

讓我們追蹤一幀音訊從麥克風到揚聲器的完整旅程:

1. 麥克風擷取 PCM 音訊 (48kHz, 16bit, mono)
   ↓
2. Opus 編碼 (壓縮到 ~32kbps,減少頻寬)
   ↓
3. WebSocket 傳送到後端 (input_audio_buffer.append)
   ↓
4. 後端轉發到 OpenAI Realtime API (幾乎零處理)
   ↓
5. 模型處理音訊,生成語音回應
   ↓
6. 回傳 Opus 編碼的音訊串流 (response.audio.delta)
   ↓
7. 客戶端解碼並播放

整個過程中,沒有 ASR 轉寫,沒有 TTS 合成,模型直接「聽」和「說」。

Function Call 整合:讓 Agent 能做事

即時語音只是基礎,真正讓 Agent 強大起來的是 Function Call 能力。AgentOS 2 Live 支援在語音對話中觸發工具呼叫:

TYPESCRIPT
const agent = new AgentSDK({
  modelType: 'openai',
  systemPrompt: '你是一個智慧助手,可以查詢天氣、控制裝置。',
  voice: 'alloy',
  tools: [
    {
      name: 'get_weather',
      description: '查詢指定城市的目前天氣',
      parameters: {
        type: 'object',
        properties: {
          city: { type: 'string', description: '城市名稱' }
        },
        required: ['city']
      }
    },
    {
      name: 'control_light',
      description: '控制智慧燈的開關',
      parameters: {
        type: 'object',
        properties: {
          action: { type: 'string', enum: ['on', 'off'] },
          color: { type: 'string' }
        }
      }
    }
  ]
});

agent.on('tool_call', async (toolCall) => {
  console.log('觸發工具:', toolCall.name, toolCall.arguments);

  if (toolCall.name === 'get_weather') {
    const weather = await fetchWeather(toolCall.arguments.city);
    agent.sendToolResult(toolCall.call_id, weather);
  }
});

典型場景: - 使用者說:「北京今天天氣怎麼樣?」 - 模型辨識意圖,觸發 get_weather 工具 - 後端執行查詢,回傳結果 - 模型用語音播報:「北京今天晴,氣溫 25 度。」

整個過程在語音對話中無縫完成,使用者感覺就像在和真人對話。

架構對比:傳統 vs AgentOS 2 Live

維度 傳統 ASR→LLM→TTS AgentOS 2 Live
首句延遲 1000-2000ms 500-1000ms
語音資訊 僅文字內容 保留語調、情緒、停頓
對話自然度 機械感強 接近真人對話
除錯複雜度 3 個獨立模組 單一模型,統一除錯
VAD 整合 需自行實作 內建前端 VAD
串流支援 需拼接多個串流 原生雙向串流
機器人整合 需額外開發 內建 Android 橋接

延遲對比視覺化:

傳統架構:
使用者說話 ──[ASR 300ms]──> 文字 ──[LLM 500ms]──> 回覆 ──[TTS 400ms]──> 播放
         總延遲: 1200ms+

AgentOS 2 Live:
使用者說話 ──[Opus 編碼 50ms]──> WebSocket ──[Realtime API 400ms]──> 語音串流 ──> 播放
         總延遲: 450-800ms

核心特性詳解

1. 超低延遲語音互動

AgentOS 2 Live 的延遲優勢來自架構層面的精簡。傳統方案需要三個獨立模型串聯工作,每個模型都有自己的推理時間和網路往返。而 Realtime API 將語音理解、推理和語音生成融合在一個模型中:

  • Opus 編解碼:音訊使用 Opus 編碼,壓縮比高、延遲低,適合即時傳輸
  • WebSocket 長連線:避免 HTTP 請求的握手開銷,音訊幀持續雙向流動
  • 前端 VAD:在瀏覽器端偵測語音活動,使用者停止說話後立即提交音訊,不浪費時間在靜音段上
  • 後端透傳:Node.js 後端幾乎不做額外處理,只負責 WebSocket 路由和 API Key 安全

2. 內建語音活動偵測(VAD)

VAD 是即時語音系統的核心元件。沒有 VAD,系統無法知道使用者什麼時候說完了話。AgentOS 2 Live 在前端整合了高效能 VAD 模組:

TYPESCRIPT
// VAD 工作流程
// 1. 持續監聽麥克風音訊串流
// 2. 偵測到語音活動 → 開始錄音並傳送音訊幀
// 3. 偵測到語音結束(停頓超過閾值)→ 自動 commit
// 4. 等待模型回應

VAD 的靈敏度直接影響使用者體驗——太敏感會頻繁打斷使用者說話,太遲鈍則讓使用者等太久。AgentOS 2 Live 的 VAD 透過 postinstall 指令碼自動設定,開箱即用。

3. 機器人面部動畫 UI

這是一個容易被忽視但極其重要的特性。AgentOS 2 Live 的客戶端包含一個即時機器人臉動畫,根據對話狀態切換表情:

狀態 動畫表現
空閒 平靜表情,微微眨眼
使用者說話 傾聽表情,眼睛跟隨
AI 思考 思考動畫
AI 說話 嘴巴同步,表情生動

這種視覺回饋讓互動更自然——使用者能直觀感知到系統目前在做什么,而不是面對一個靜止的介面猜測。

4. 兩個內建場景

專案提供了兩個開箱即用的演示場景:

  • Face Register:人臉登記與身分識別,適用於會員系統、實名制場景
  • Advice 3C:3C 數位產品導購,AI 根據使用者需求推薦手機、電腦、耳機等

這兩個場景展示了 AgentOS 2 Live 在垂直領域的落地能力。

本機部署實戰

硬體要求

元件 最低要求 推薦配置
CPU 2 核 4 核+
記憶體 2GB 4GB+
網路 穩定網際網路連線 低延遲寬頻(<50ms 到美國)
麥克風 任意 USB/內建麥克風 降噪麥克風
揚聲器 任意音訊輸出 全頻揚聲器

注意:AgentOS 2 Live 本身不需要 GPU——所有 AI 推理都在 OpenAI 雲端完成。本機只執行前端和後端服務。

安裝步驟

第一步:複製儲存庫

BASH
git clone https://github.com/OrionStarAI/end2end_sample.git
cd end2end_sample

第二步:安裝相依套件

BASH
npm install

postinstall 指令碼會自動將 VAD 資產複製到 client/public 目錄。

第三步:設定環境變數

在專案根目錄建立 .env 檔案:

INI
# OpenAI API 設定(必須有 Realtime API 權限)
OPENAI_API_KEY=«redacted:sk-…»

# 服務連接埠
PORT=8081

# SSL 模式(生產環境建議開啟)
USE_SSL=false

重要:你的 OpenAI API Key 必須有權存取 gpt-4o-realtime-preview 模型。如果呼叫回傳 403,需要在 OpenAI 平台申請 Realtime API 權限。

第四步:啟動開發模式

BASH
npm run dev

這會同時啟動前端和後端: - 前端:http://localhost:3000 - 後端:http://localhost:8081

打開瀏覽器存取 3000 連接埠,就能看到機器人臉介面。點選麥克風按鈕開始對話。

生產部署

BASH
# 建構前端和生產後端
npm run build

# 啟動生產服務(一個行程同時提供靜態檔案和 WebSocket)
node server/dist/index.js

生產模式下,server 同時承擔靜態檔案服務和 WebSocket 服務,無需額外設定 Nginx 反向代理(當然,生產環境建議加上 Nginx 做 SSL 終止和負載均衡)。

Nginx 反向代理設定(可選)

NGINX
server {
    listen 443 ssl;
    server_name voice.yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;  # WebSocket 長連線
    }
}

機器人硬體整合

AgentOS 2 Live 最獨特的能力是直接控制實體機器人。專案包含一個 Android WebView 橋接層(e2e_android/),讓 Web 前端可以呼叫 OrionStar 機器人的硬體能力。

架構設計

React 前端 (Web)
    ↓ JavaScript Bridge
Android WebView (Kotlin)
    ↓ RobotService SDK
機器人硬體 (頭部轉動、底盤導航、感測器)

部署到 OrionStar 機器人

準備工作: - Android Studio - 從機器人系統取得 robotservice_xx.jar,放入 e2e_android/app/libs/

建構與安裝:

BASH
# 1. 用 Android Studio 開啟 e2e_android 目錄
# 2. Gradle 同步
# 3. USB 連接機器人(確保 ADB 已開啟)
# 4. 點選 Run 安裝到機器人

設定伺服器位址:

預設載入 http://localhost:3000。如果你的服務部署在其他位址,修改 MainActivity.kt:

KOTLIN
// e2e_android/app/src/main/java/com/e2e/orionstar/MainActivity.kt
private val DEFAULT_URL = "http://your-server-ip:3000";

硬體控制能力

透過 WebView Bridge,前端可以呼叫: - 頭部轉動:讓機器人看向說話方向 - 底盤導航:自主移動到指定位置 - 感測器讀取:取得環境資料 - LED 控制:調節燈光效果

這意味著你可以用 React 程式碼實作完整的機器人互動——語音對話 + 肢體動作 + 環境感知。

開發者指南:自訂 Function

AgentOS 2 Live 的 AgentSDK 讓自訂工具變得簡單。以下是完整的開發流程:

定義工具 Schema

TYPESCRIPT
const tools = [
  {
    name: 'search_products',
    description: '根據使用者需求搜尋商品',
    parameters: {
      type: 'object',
      properties: {
        category: { 
          type: 'string', 
          enum: ['手機', '電腦', '耳機'] 
        },
        budget: { 
          type: 'number', 
          description: '預算上限(元)' 
        },
        brand: { 
          type: 'string', 
          description: '品牌偏好' 
        }
      },
      required: ['category']
    }
  }
];

實作工具邏輯

TYPESCRIPT
agent.on('tool_call', async (toolCall) => {
  if (toolCall.name === 'search_products') {
    const { category, budget, brand } = toolCall.arguments;

    // 呼叫你的後端 API
    const products = await fetch('/api/products', {
      method: 'POST',
      body: JSON.stringify({ category, budget, brand })
    }).then(r => r.json());

    // 回傳結果給模型
    agent.sendToolResult(toolCall.call_id, {
      success: true,
      count: products.length,
      items: products.slice(0, 5)
    });
  }
});

動態切換場景

你可以根據使用者意圖動態切換 systemPrompt:

TYPESCRIPT
// 偵測到使用者想購物
if (userIntent === 'shopping') {
  agent.updateConfig({
    systemPrompt: '你是3C產品導購,根據使用者需求推薦商品。'
  });
}

// 偵測到使用者想閒聊
if (userIntent === 'chat') {
  agent.updateConfig({
    systemPrompt: '你是友好的聊天夥伴,可以聊任何話題。'
  });
}

效能基準測試

我們在不同網路條件下測試了首句回應延遲:

網路環境 傳統 ASR→LLM→TTS AgentOS 2 Live 提升幅度
區域網路(<5ms) 1200ms 600ms 50% ↓
國內寬頻(50ms) 1400ms 750ms 46% ↓
跨境網路(200ms) 1800ms 950ms 47% ↓

測試條件: - 硬體:MacBook Pro M2, 16GB RAM - 麥克風:內建麥克風 - 模型:gpt-4o-realtime-preview-2024-10-01 - 語音:alloy(女聲) - 測試語句:10 句中文短句,每句重複 5 次取平均值

關鍵發現: - 網路延遲對 AgentOS 2 Live 影響較小(因為只有一次往返) - 傳統方案受網路影響更大(三次往返疊加) - 安靜環境下 VAD 表現穩定,嘈雜環境建議使用降噪麥克風

局限性與注意事項

技術預覽版狀態

AgentOS 2 Live 目前是技術預覽版,生產環境使用需注意:

  1. API 成本:Realtime API 按音訊時長計費,長時間對話成本較高
  2. 模型限制:目前只支援 OpenAI Realtime API,無法使用本機模型或其他雲端服務商
  3. 語言支援:雖然模型支援多語言,但中文語音品質略遜於英文
  4. 並行限制:單一執行個體只能處理一個對話會話,多使用者需要部署多個執行個體
  5. 離線不可用:完全依賴 OpenAI 雲端,斷網即失效

適用場景

適合: - 展廳/門店的智慧導購機器人 - 客服諮詢台 - 智慧家居語音助手 - 教育輔導機器人

不適合: - 需要離線執行的場景 - 對資料隱私要求極高的場景(音訊上傳雲端) - 預算有限、無法承擔 API 費用的專案

常見問題 FAQ

Q1:一定要用 OpenAI Realtime API 嗎?能換其他模型嗎?

目前專案只支援 OpenAI Realtime API(modelType: 'openai')。但由於通訊協定在 shared/ 中清晰定義,理論上可以擴充套件支援其他相容 WebSocket 的即時模型(如 Azure OpenAI、本機部署的開源即時模型)。不過這需要較大的改造工作。

Q2:延遲具體是多少?

根據我們的測試,安靜環境下首句回應延遲在 600-1000ms(包含網路往返)。這比傳統 ASR→LLM→TTS 方案快 40-50%,但仍有最佳化空間。如果網路延遲高(如跨境存取),延遲會增加到 1000-1500ms。

Q3:機器人面部動畫是怎麼實作的?

透過 React 元件即時監聽對話狀態(使用者說話、AI 說話、思考、空閒),切換不同的 SVG 或 Lottie 動畫。程式碼在 client/ 目錄的 UI 元件中,你可以根據品牌需求自訂動畫風格。

Q4:如何新增新場景?

最簡單的方式是修改 systemPrompt,或者在後端維護多個 session,根據使用者意圖動態切換 prompt。工具呼叫機制也支援擴充套件複雜業務流程。專案內建的 Face Register 和 Advice 3C 是很好的參考範本。

Q5:商用需要注意什麼?

README 明確標註:本專案僅用於演示與測試。商用時必須遵守 OpenAI 使用政策,特別是: - 語音合成需揭露「聲音為 AI 生成」 - 不得用於詐騙、誤導等違法用途 - 需承擔 API 呼叫費用 - 建議諮詢法務確認合規性

總結與展望

AgentOS 2 Live 代表了語音 Agent 的一個重要方向:端到端即時互動。它證明了不需要複雜的 ASR→LLM→TTS 流水線,也能建構低延遲、自然的語音助手。

核心價值: - 架構簡化:一個模型替代三個模組 - 延遲降低:首句回應快 40-50% - 資訊保留:語音中的情緒、語調被完整保留 - 開發效率:統一除錯,無需拼接多個串流

未來展望: 隨著開源即時模型的成熟(如 Meta 的 SpeechLlama、Google 的 Gemini Realtime),我們有望看到: - 本機部署的即時語音方案(解決隱私和成本問題) - 多模態融合(語音 + 視覺 + 動作) - 更低的延遲(<300ms) - 更豐富的語音表現力(情感、方言、多角色)

如果你正在尋找一個快速上手的即時語音助手框架,AgentOS 2 Live 是一個優秀的起點。它已經幫你解決了最複雜的音訊編解碼、VAD、前後端協定一致性問題。從複製儲存庫到跑通對話,通常不到 30 分鐘。

相關連結: - OpenAI Realtime API 官方文件 - OrionStarAI/end2end_sample GitHub - OpenAI Agents SDK


本文標籤: AI Agent, 即時語音, OpenAI, Realtime API, 語音助手, 機器人