mcpField
V
voice-agents

voice-agents

github.com/sarvamai開発72188 回インストール3 日前に更新
リポジトリ

voice-agents について

voice-agentsは、Sarvamのサービスで音声エージェントを構築するPython開発者向けのスキルです。LiveKitとPipecatの例に加え、音声やモデル、フレームワークの設定上の注意点を扱います。

主な機能

  1. 01LiveKit連携例
  2. 02Pipecat連携例
  3. 03音声認識、合成、LLMの説明
  4. 04プラグイン設定とモデル制限

活用シーン

  1. 01リアルタイム音声エージェントの構築
  2. 02Pipecatパイプラインで音声認識と合成を組み合わせる
  3. 03電話向け音声サンプルレートの設定

MCP 対応

READMEによると、チャット内の単発音声処理と吹き替えはsarvam-mcpの`sarvam_tools_voice`と`_dub`が担い、このスキルはLiveKit/Pipecatのエージェントコードを扱います。

インストール

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

$npx skills add https://github.com/sarvamai/skills --skill voice-agents

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

詳細

音声エージェント — Sarvam AI

チャット内で一度だけ実行する音声/吹き替え → sarvam-mcp(sarvam_tools_voice / _dub)。このスキルは LiveKit/Pipecat エージェントのコードです。

重要

認証:api-subscription-key ヘッダーを使用します。Authorization: Bearer ではありません。環境変数:SARVAM_API_KEY

LiveKit クイックスタート

pip install "livekit-agents[sarvam,silero]" python-dotenv
from livekit.agents import JobContext, WorkerOptions, cli
from livekit.agents.voice import Agent, AgentSession
from livekit.plugins import sarvam

class VoiceAgent(Agent):
    def __init__(self) -> None:
        super().__init__(
            instructions="You are a helpful voice assistant. Be friendly, concise, and conversational.",
            stt=sarvam.STT(
                language="unknown",   # auto-detect; or "hi-IN", "ta-IN", etc.
                model="saaras:v3",
                mode="transcribe",
                flush_signal=True     # emits speech start/end events for turn-taking
            ),
            llm=sarvam.LLM(model="sarvam-105b"),
            tts=sarvam.TTS(
                target_language_code="en-IN",
                model="bulbul:v4-flash",
                speaker="simran_en_customer",
            ),
        )

    async def on_enter(self):
        self.session.generate_reply()

async def entrypoint(ctx: JobContext):
    # Do NOT pass vad= — VAD is handled internally by the Sarvam plugin
    session = AgentSession(
        turn_detection="stt",       # let Sarvam STT handle turn detection
        min_endpointing_delay=0.07  # ~70ms matches Sarvam STT processing latency
    )
    await session.start(agent=VoiceAgent(), room=ctx.room)

if __name__ == "__main__":
    cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))

python agent.py dev で実行し、python agent.py console でテストします。

Pipecat クイックスタート

pip install "pipecat-ai[daily,sarvam]" python-dotenv loguru
import os
from pipecat.pipeline.pipeline import Pipeline
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
from pipecat.services.sarvam.stt import SarvamSTTService
from pipecat.services.sarvam.tts import SarvamTTSService
from pipecat.services.sarvam.llm import SarvamLLMService

stt = SarvamSTTService(
    api_key=os.getenv("SARVAM_API_KEY"),
    language="unknown",   # auto-detect; or "hi-IN", "ta-IN", etc.
    model="saaras:v3",
    mode="transcribe"     # or "translate" for speech-to-English
)
tts = SarvamTTSService(
    api_key=os.getenv("SARVAM_API_KEY"),
    settings=SarvamTTSService.Settings(
        model="bulbul:v4-flash",
        voice="simran_en_customer",  # persona ID — not a v3 short name
        language="en-IN",
        pace=1.0,
    ),
)
llm = SarvamLLMService(
    api_key=os.getenv("SARVAM_API_KEY"),
    settings=SarvamLLMService.Settings(model="sarvam-105b"),
)

messages = [{"role": "system", "content": "You are a friendly AI assistant. Keep responses brief."}]
context_aggregator = LLMContextAggregatorPair(LLMContext(messages))

pipeline = Pipeline([
    transport.input(),            # Daily or WebRTC transport
    stt,
    context_aggregator.user(),
    llm,
    tts,
    transport.output(),
    context_aggregator.assistant(),
])

JavaScript/TypeScript に関する注意

LiveKit と Pipecat のエージェントは Python 専用です。JS/TS の音声パイプラインでは、個々の SDK メソッドを直接使用してください。

import { SarvamAIClient } from "sarvamai";
const client = new SarvamAIClient({ apiSubscriptionKey: "YOUR_SARVAM_API_KEY" });

// STT: client.speechToText.transcribe({...})
// TTS: client.textToSpeech.convertStream({...})  // returns BinaryResponse
// LLM: client.chat.completions({...})

注意事項

注意事項詳細
LiveKit:vad= は使用しないでくださいAgentSession に vad= を渡さないでください。VAD は Sarvam プラグインが内部で処理します。代わりに turn_detection="stt" と min_endpointing_delay=0.07 を設定してください。
LiveKit:flush_signal=True音声の開始/終了イベントと適切なターンテイクに必要です。sarvam.STT に設定してください。
TTS の音声パラメーターはプラグインによって異なりますLiveKit(1.5.2 までの livekit-plugins-sarvam):target_language_code と speaker を使用します。sarvam.TTS() の language_code= は拒否されます。Pipecat(1.0):settings=SarvamTTSService.Settings(voice=..., language=..., model=...) を使用します。speaker ではなく voice を使い、コンストラクターにキーワード引数を直接渡さないでください。
v4 の話者はペルソナ ID ですmodel="bulbul:v4-flash" には voice_language_style(simran_en_customer、aparna_hi_customer)が必要です。短い名前(shubh、anand、priya)を指定すると 400 が返されます。モデルが v3 以外の場合、LiveKit は話者が指定されていないと anushka をデフォルトで使用します。必ず speaker を渡してください。ヒンディー語:aparna_hi_customer。タミル語:gokul_ta_narration。ml-IN/od-IN 用の v4 ペルソナはありません。その場合は bulbul:v3 を使用してください。
Pipecat のクラス名pipecat.services.sarvam.stt/.tts/.llm の SarvamSTTService/SarvamTTSService/SarvamLLMService を使用してください。SarvamSTT ではありません。LLM モデルは SarvamLLMService.Settings(model=...) に指定し、システムプロンプトは LLMContext のメッセージに指定します。
sarvam-30b は非推奨です。現在は API でエラーになります実環境で検証済みです。チャット API 経由で sarvam-30b を呼び出すと、現在は 400 と次のエラーが返されます:“Model 'sarvam-30b' has been deprecated. Please use one of the available models instead: sarvam-105b, sarvam-105b-conversations.” sarvam-30b を使用して構築した Pipecat パイプラインは(以下を参照)引き続き問題なく構築できますが、LLM のターンはすべて実行時に失敗し始めます。これは将来起こり得るリスクではなく、使用中であればすでに動作しません。
インストール済みの Pipecat の許可リストに sarvam-105b-conversations がまだ含まれていない場合がありますSarvam は sarvam-30b が担っていた枠に相当する、リアルタイムの対話/音声エージェント向けに特化して事後学習された 32K コンテキストのバリアント、sarvam-105b-conversations を提供しています。pipecat-ai==0.0.108 で実環境の検証を行ったところ、SarvamLLMService._SUPPORTED_MODELS は frozenset({"sarvam-105b", "sarvam-105b-32k", "sarvam-30b", "sarvam-30b-16k"}) であり、sarvam-105b-conversations はまだ含まれていません。また、SarvamLLMService(settings=SarvamLLMService.Settings(model="sarvam-105b-conversations")) を構築すると、直ちに ValueError: Unsupported Sarvam LLM model 'sarvam-105b-conversations'. Allowed values: sarvam-105b, sarvam-105b-32k, sarvam-30b, sarvam-30b-16k. が発生します。なお、この同じ許可リストでは API レベルですでに使用できない sarvam-30b/sarvam-30b-16k も、構築時には問題なく受け入れられます(上の行を参照)。構築に成功しても、モデルが動作するとは限りません。sarvam-105b-conversations に切り替える前に、インストール済みの pipecat-ai の許可リストを確認してください。まだ含まれていない場合は、通常の sarvam-105b を使用してください。
max_tokens の割り当てSarvam のモデルは内部で推論します。max_tokens を低く設定すると、content が None になります。省略するか、500 以上に設定するか、reasoning_effort=None で無効にしてください。
TTS のピッチ/音量bulbul:v4-flash では、pitch は −0.5~0.5、loudness は 0.1~2.5 です。Bulbul v3 でも現在はこれらを受け付けます(2026-10-06 に実環境で検証済み)。pace は 0.5~2.0 です。範囲外の値を指定すると 400 が返されます。
STT の WebSocket コーデックwav/pcm のみです。ストリーミングでは MP3/AAC/OGG を使用できません。
TTS 用 HTTP ストリームconvert_stream はバイナリーの音声を直接返します(base64 ではありません)。パイプラインに適しています。
テレフォニー電話エージェント(Exotel など)では、テレフォニーの音声に合わせて audio_in_sample_rate=8000 と audio_out_sample_rate=8000 を設定してください。

ドキュメント全文

以下から、フレームワークとの統合ガイド、環境設定、応用パターンを確認できます。

コメント