mcpField
V
voice-agents

voice-agents

github.com/sickn33エージェントワークフロー48.7k892 回インストール今日更新
リポジトリ

voice-agents について

音声エージェントの設計・実装を支援するスキルです。音声間の直接処理とSTT→LLM→TTSを扱い、ターン管理、遅延測定、音声の安全な取り扱いに重点を置きます。

主な機能

  1. 01音声間処理とパイプライン構成
  2. 02音声アクティビティ検出方式
  3. 03ストリーミングと遅延の指針
  4. 04ターンと音声のキャンセル対策
  5. 05音声のプライバシーと認可

活用シーン

  1. 01音声エージェント構成の検討
  2. 02応答タイミングとターン管理の改善
  3. 03音声保持とツール安全性の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill voice-agents

インストール後、Claude Code で/voice-agentsを入力して読み込まれたか確認します。

同梱ファイルreferences/detailed-guide.md

詳細

音声エージェント

音声エージェントは、AI とのやり取りの最前線を担います。人間が AI システムと自然に会話する領域です。課題は音声認識と音声合成だけではありません。割り込み、バックグラウンドノイズ、感情のニュアンスに対応しながら、800 ミリ秒未満の低レイテンシで自然な会話の流れを実現することです。

このスキルでは、2 つのアーキテクチャを扱います。音声から音声への方式(OpenAI Realtime API を使う低レイテンシアーキテクチャの選択肢の 1 つ)と、パイプライン方式(STT→LLM→TTS。より細かく制御でき、デバッグも容易)です。重要なポイントは、レイテンシが制約になることです。人間は 500 ミリ秒以内の応答を期待します。1 ミリ秒も無駄にできません。

このスキルでは、市場での採用状況を示す統計値も、普遍的なレイテンシのベンチマークも確立されていません。

詳細ガイド

このスキルを実行する前に、詳細ガイドをお読みください。完全な手順と参考資料が記載されています。安全性、前提条件、検証要件は必須事項として扱ってください。特定の作業に取り組む場合は関連するセクションを読み、最初から最後まで作業する場合はガイド全体をお読みください。

従来のパイプラインの概要(本番環境向けの実装ではありません)

import { Deepgram } from '@deepgram/sdk';
import { ElevenLabsClient } from 'elevenlabs';
import OpenAI from 'openai';

// Initialize clients
const deepgram = new Deepgram(process.env.DEEPGRAM_API_KEY);
const elevenlabs = new ElevenLabsClient();
const openai = new OpenAI();

async function processVoiceInput(audioStream) {
  // 1. Speech-to-Text (Deepgram Nova-3)
  const transcription = await deepgram.transcription.live({
    model: 'nova-3',
    punctuate: true,
    endpointing: 300,  // ms of silence before end
  });

  transcription.on('transcript', async (data) => {
    if (data.is_final && data.speech_final) {
      const userText = data.channel.alternatives[0].transcript;
      // Do not log raw private transcripts by default.

      // 2. LLM Processing
      const completion = await openai.chat.completions.create({
        model: 'gpt-4o-mini',
        messages: [
          { role: 'system', content: 'You are a concise voice assistant.' },
          { role: 'user', content: userText }
        ],
        max_tokens: 150,  // Keep responses short for voice
      });

      const agentText = completion.choices[0].message.content;
      // Log only authorized redacted operational metadata.

      // 3. Text-to-Speech (ElevenLabs)
      const audioStream = await elevenlabs.textToSpeech.stream({
        voice_id: 'voice_id_here',
        text: agentText,
        model_id: 'eleven_flash_v2_5',  // Lowest latency
      });

      // Stream to user
      playAudioStream(audioStream);
    }
  });

  // Pipe audio to transcription
  audioStream.pipe(transcription);
}
最適化のヒント:
  • LLM の生成中に TTS を開始します(ストリーミング)。
  • ユーザーが話している間に、最初の応答セグメントを事前計算します。
  • レイテンシを抑えるには、Flash/turbo モデルを使います。
音声アクティビティ検出のパターン

ユーザーが話し始めたときと話し終えたときを検出します。

使用する場面:すべての音声エージェントでは、ターンテイキングに VAD が必要です。

音声アクティビティ検出(VAD):

VAD Types:
1. Energy-based: Simple, fast, noise-sensitive
2. Model-based: Silero VAD, more accurate
3. Semantic VAD: Understands meaning, best for conversation

使用する場面

  • ユーザーが音声エージェントについて言及、またはそれを示唆している場合
  • ユーザーが音声テキスト変換について言及、またはそれを示唆している場合
  • ユーザーがテキスト音声変換について言及、またはそれを示唆している場合
  • ユーザーが whisper について言及、またはそれを示唆している場合
  • ユーザーが elevenlabs について言及、またはそれを示唆している場合
  • ユーザーが deepgram について言及、またはそれを示唆している場合
  • ユーザーが realtime api について言及、またはそれを示唆している場合
  • ユーザーが音声アシスタントについて言及、またはそれを示唆している場合
  • ユーザーが音声 AI について言及、またはそれを示唆している場合
  • ユーザーが会話型 AI について言及、またはそれを示唆している場合
  • ユーザーが TTS について言及、またはそれを示唆している場合
  • ユーザーが STT について言及、またはそれを示唆している場合
  • ユーザーが ASR について言及、またはそれを示唆している場合

制限事項

  • 上記で説明した範囲にタスクが明確に当てはまる場合にのみ、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代替として扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

バージョン、プライバシー、実装上の境界

これらの異なるバージョンが混在する SDK のスケッチは概念的なものであり、実行されていません。Deepgram のコンストラクター/transcription.live、ElevenLabs のストリームシグネチャ、ベータ版 Realtime クライアント、名前が挙げられている Silero の JavaScript パッケージについては、使用前にインストール済みの公式 SDK で確認してください。不足しているパッケージやランタイムの利用可能性を推測しないでください。smart_format はテキストを整形するもので、ノイズ除去ではありません。モデルの keyword/keyterm フラグは異なる場合があります。校正済みの対応付けなしに、生の振幅からモデルの VAD 確率しきい値を設定することはできません。信頼度スコアやレイテンシの数値は、普遍的に比較できるものではありません。

ユーザーターンの終了から最初の音声出力までを定義し、代表的なデバイス、ネットワーク、言語で p50/p95 を測定してください。STT の最初の部分結果、LLM の最初のトークン、TTS の最初の音声の各時間を単純に足しても、エンドツーエンドの保証にはなりません。取り消しできないツールに、部分的または古くなった仮説を送信しないでください。ターンを直列化し、最終文字起こしを重複排除し、TTS で安全に使える完全なセグメントをバッファーし、履歴を維持し、古くなった生成や音声をキャンセルまたは破棄してください。割り込みが発生した場合は、ローカル再生を停止するだけでなく、サーバー側の履歴から、まだ聞かれていないアシスタントの内容を切り詰めてください。チェックポイントだけでは不十分です。

クライアントには、長期間有効な API キーではなく、適切な有効期間の短い認証情報/セッション認証情報が必要です。マイク、録音、音声、宛先のスコープについて適切な許可を取得し、音声や文字起こしの保持および外部プロバイダーへの転送を最小限に抑え、権利を持たずに音声をクローンしたり、なりすましに使用したりしないでください。ソケット、再試行、キュー、コストに上限を設け、切断時にはリスナーやストリームをクリーンアップしてください。話された名前や数字、申告された本人確認情報は、認証にはなりません。テナント、宛先、アクションを検証し、必要に応じてトランザクションごとの確認を取得してください。テキストのクリーンアップでは、小数、通貨、URL、コードの意味を保持してください。SSML には対応するエンジンとエスケープ処理が必要です。音声のプロンプトは、ツールの認可境界にはなりません。通話、録音、プロバイダーへのリクエストは行われていません。

コメント