https://a.storyblok.com/f/270183/1368x665/62443164d6/text-to-speech_asp-net_ai-studio-integration_deepgram.png

Vonage AI StudioとDeepgramによるカスタム音声合成の統合

最終更新日 August 14, 2024

所要時間:1 分

イントロ

AI Studioは、さまざまな音声合成(TTS)を提供します。 言語と音声スタイルが統合されています。によって強化されています。 音声合成マークアップ言語(SSML)によって強化されています。TTSのオプションは他にもたくさんあります。AI Studioでは、アクセス可能なREST APIエンドポイントを持つサードパーティと柔軟に接続できます。この記事では、AI StudioとDeepgramを接続する方法を紹介します。

魅力的で人間的なTTSエクスペリエンスは、自然で親近感のあるインタラクションを促進し、ユーザーに理解され評価されていると感じさせるため、ボイスエージェントにとって非常に重要です。このレベルのエンゲージメントは、フラストレーションを軽減し、コミュニケーション効率を向上させるため、全体的な顧客満足度とロイヤルティを高めます。

このブログでは 静的に生成された音声ファイル スピーチまたは 入力ノードの一部として静的に生成された音声ファイルです。 次回のブログ記事では 動的に生成される音声ファイル エージェント <> 人間のインタラクションを完全にカスタマイズするための.

プロジェクト概要

このブログポストでは、Vonage AI Studioをサードパーティの音声合成プロバイダと組み合わせて使用する方法を、おもちゃの電子カルテ(EHR)アプリケーションを使って説明します。 患者から医師のオフィスへの着信コールをデモします。 Studioアプリケーションは、着信ユーザーのCLID(Calling Line ID)、つまり電話番号からユーザーに関する情報を収集するように構築されています。 Studio エージェントは Webhook を使用して、患者の姓名、患者識別番号、予約の有無など、患者に関する情報を収集します。 ユーザは ディープグラム オーラTTSモデルを使用します。

前提条件

Voiceエージェントの作り方

ステップ1:エージェントの作成

ダッシュボードから AI StudioダッシュボードからCreate Agentを選択します。音声のユースケースなので、"Telephony "を選択します。

ai-studio_agent_typeSelect Agent Type

ステップ 2: エージェントの設定

エージェントのコンフィギュレーションは、必要な最初のステップです。 私たちのケースでは、ローカライズ、特定の API キーまたはサブアカウントへのエージェントの割り当て、およびエージェントの言語を含む、いくつかの基本的なエージェントの構成を提供しています。

ai_studio_agent_detailsAgent DetailsVoice/Telephonyエージェントは、以下の点にご注意ください。 にはご注意ください。が必要であることに注意してください。 ただし、サードパーティ(Deepgram)のVoiceを使用するため、この設定構成は適切ではありません。 この場合、ここに記載されている方法を使用している限り、アカウントにVonage TTSの使用料金が請求されることはありません。

ステップ3:テンプレートの選択

選択 発信者番号通知」テンプレートを選択します。. 私たちは、カスタマイズされた挨拶を提供するために、発信者の着信通話回線ID(CLID)を使用します。このテンプレートは素晴らしい出発点となります。

Choose a TemplateChoose a Templateステップ4:インバウンドコールを選択する

を選択します。 インバウンドコール オプションを選択します。当社のボイスエージェントは着信コールに応答しますが、これはエージェントをインバウンドコールのみに拘束するものではありません。例えば、エージェントとの契約が完了した後、フォローアップメールを送信したい場合、これは インバウンドコールフローの一部として実現できます。AI Studioの詳細はこちら 会話イベント.

Choose Inbound CallChoose Inbound Call

これで、DeepgramのカスタマイズされたVoiceを使用して、Voiceエージェントを構築する準備が整いました。さあ、始めましょう!

AI Studioと音声合成音声ファイルを統合する方法

テレフォニーエージェントでは、カスタマイズされたTTSのために2つのノードを使用できることを理解することが重要です。 詳しくは スピーク ノードと 入力を収集ノードの詳細はリンク先をご覧ください。 ここでは Collect Inputノードに焦点を当てます。 私のエージェントでは、説明したように、呼び出し元が操作するいくつかのノードが存在します。 入力を収集ノードを叩く前に、呼び出し元が対話するノードがいくつか存在します。下記を参照してください:

Basic Flow InitiationBasic Flow Initiation

呼び出し元が操作する以下のノードを見ることができる。

  1. について スタートノード

  2. その patient_webhookノードはEHRのバックエンドデータベースから呼び出し元の情報を収集するために使用されます。

  3. という条件ノードがある。 という条件ノードがある。という条件ノードが、ユーザーを次にどのフローに送るかを決定するために使用されます。 この場合、Webhook ノードが着信発信者を既存の患者にマッチさせるので ( caller_phone_number定義済みパラメーターを介して)、呼び出し元は、予約の作成、更新、キャンセルのためのセルフサービス自動化、およびセルフサービス処方リフィルリクエストを提供するフローにプッシュされます。

  4. 既存の患者 入力の収集ノードは、Deepgram から取得した定義済みの挨拶を再生するために使用されます。

このアプローチを使用すると、会話デザイナーは、任意のプロバイダのAPIエンドポイントで音声ファイルを作成し、返されたファイルを 入力を収集ノードで使用することができます。

Deepgramでカスタム音声合成ファイルを作成する方法

TTSプロバイダーのAPI(Deepgramなど)を使用するか、ユーザー・インターフェースを介して、合成音声をプログラムで生成します。 合成された音声はバイナリ・ストリームとしてアプリケーションに返され、ストリームを .mp3 ファイル拡張子としてエンコードできます。 以下は、Deepgram の オーラエンドポイントを介してオーディオ・ファイルを作成するために使用できるサンプル・アプリケーションです。

Deepgramの DeepgramのAura音声合成API.

インポート・リクエスト
import os
from os.path import join, dirname
from dotenv import load_dotenv
from speech_patterns import SPEECH_PATTERNS


dotenv_path = join(dirname(__file__), ".env")
load_dotenv(dotenv_path)

deepgram_password = os.environ.get('deepgram_password')
deepgram_url = "https://api.deepgram.com/v1/speak?model=aura-asteria-en"
ヘッダー = {
    "Content-Type":"application/json"、
    "Authorization": f "トークン{deepgram_password}"  }

def deepgram_tts():
    print("プロセスの開始")
    '''
    音声合成のためにテキスト文字列を Deepgram に送信し、返された MP3 ファイルを保存します。
    '''

    for key, text in SPEECH_PATTERNS.items():
        print(f "Processing key: {key}")
        payload = {"text": text}.
        response = requests.post(deepgram_url, headers=headers, json=payload)
        print(response.headers)

        if response.status_code == 200:
            ファイル名 = f"{key}.mp3"
            # バイナリコンテンツには必ず `response.content` を使ってください!
            with open(filename, 'wb') as file:
                file.write(response.content)
            print(f "File saved successfully as {filename}.")
        else:
            print(f "エラー: {response.status_code} - {response.text}")


if __name__ == "__main__":
    deepgram_tts()

注意 - 上記のコードでは、インポート から speech_patterns インポート speech_patternsは、Deepgram に送信するすべての音声パターンをこの形式で持つ関連ファイルへの参照です:

speech_patterns = { {スピーチパターン
    "system_greeting":「こんにちは、ストーンブリッジ皮膚科・美容外科へようこそ、
    "patient_query":「今日は何をなさいますか?
    "repeat_query":もう一度必要なことをおっしゃっていただくか、携帯電話で適切な桁数を入力してください", "repeat_query": "もう一度お願いします", "repeat_query": "もう一度お願いします", "repeat_query": "もう一度お願いします"、
    "type_of_appointment":「いいですね!  どのような予約をご希望ですか?  医師の場合は、医師または医者、あるいはあなたが心配していることを述べてください。  例えば、皮膚がんなどです。  エステティシャンの場合は、エステティシャンかコンサルタント、またはあなたが考えている治療法の名前を言ってください、
    "request_for_date":"了解しました。ご希望のお日にちはありますか?", "request_for_date": "ご希望のお日にちをお知らせください、
    "appointment_time":"では、ご都合の良い予約時間を教えてください。", "appointment_time": "わかりました、
    "appointment_coordination":"かしこまりました!  システムが空いているか確認しますので、しばらくお待ちください。", "appointment_coordination": "ありがとうございます、
    "appointment_confirmation":「完璧です。  新しい予約時間がわかりました。  折り返しメールにてご案内いたします。  ご予約の時間にお会いできることを楽しみにしております。  さて、他に何かお手伝いできることはありますか?"
}

上記のアプリケーションを実行すると、AI Studioにアップロードするための.mp3ファイルが作成されます。

AI Studioにオーディオファイルを追加する方法

ステップ1:ユーザーの入力をパラメータに保存する

Collect Inputノードに移動します。医師や専門医の患者が予約を作成および変更するためのセルフサービスエージェントを構築したので、このノードのタイトルを"(既存の患者)適切に: 予約日時の設定" このノードは予約を設定するために必要なユーザ情報を収集します。具体的には、ユーザーがアポイントメントに希望する日時を収集し、それを パラメータと呼ばれる APPT_DATE.このパラメータはフローのさらに下流で使用されます。

Collect Input NodeCollect Input Node

ステップ2:オーディオファイルのアップロード

Audio "ラジオボタンを選択する。音声プロンプトメニューに切り替わります。

Select “Recording” for PromptSelect “Recording” for Promptプロンプトセクションで「録音」を選択します。 ここで、ローカルストレージからAI Studioの統合ファイルストレージにファイルを追加するか、すでにAI Studioに保存されている既存のオーディオファイルを使用します。私の場合、すでにアップロードしたファイルがいくつかありますが、その場合は +録音を追加ボタンを使って新しい録音を追加することができます。

Prompt designation - Select Recording

このステップを完了すると、モーダルには以下のようにユーザーに再生する録音を選択したことが表示されます。さらに、この便利な機能として、ファイルの実際の書き起こしを見ることができます(Vonage AIが提供)。この UI 視覚化により、音声ファイルをフローノードに適切にマッピングすることができます。

Recording SelectedRecording Selected

ステップ 3: 他のノードの設定

その後、このノードの他の機能を通常と同じように使うことができる。 例えば

  1. リトライ回数(録音を再生する回数)の設定

  2. リトライプロンプトを設定する(例えば、セカンダリプロンプトとして、エージェントに "I'm sorry, I didn't hear that "と発音させたい場合)。

  3. 発信者応答入力: 音声応答、DTMF応答、またはその両方を指定できます。

  4. さらに、あなたのカスタマイズしたユースケースコンテキストキーワードなどでエージェントが「トレーニング」されるように、あなたが追加したい自然言語の洗練があります。

必ず "Save & Exit "ボタンを押してください、で完了です! これで、あなたのエージェントをさらにパーソナライズするためのカスタマイズされたTTSができました。

結論

今日では、多くのTTSプロバイダーが音声合成パイプラインにLLMを組み込んでおり、より自然で表現力豊かな音声を実現しています。以前は、TTSは主に、事前に録音された音声スニペットをつなぎ合わせる連結合成や、隠れマルコフモデル(HMM)のような統計モデルを使用するパラメトリック合成のような手法で行われていました。このような初期の手法では、ロボット的でニュアンスの乏しい音声になることが多かった。

LLMは、膨大な量のデータと高度なニューラルネットワークアーキテクチャを活用することで、音声合成を強化し、人間のような音声パターンを理解・生成します。LLMは、文脈、感情、自然な音声リズムについてテキストを分析し、生成される音声により正確なイントネーション、ストレス、感情を与えます。その結果、より明瞭で聞き心地が良いだけでなく、微妙な感情や自然な会話のダイナミクスを伝えることができる音声が生成され、全体的なユーザー体験が大幅に向上します。

このブログでは、AI Studioと組み合わせてサードパーティの音声合成(TTS)プロバイダーを利用し、ユーザー体験を完全にカスタマイズする方法を紹介します。 私たちはコミュニティの参加を常に歓迎しています。 お気軽に GitHub および VonageコミュニティSlack.

シェア:

https://a.storyblok.com/f/270183/398x436/1c09fedd7d/tim-dentry.jpg
Tim Dentryヘルスケアカスタマーソリューションアーキテクト

ヘルスケアカスタマーソリューションアーキテクトであり、AI/ML、特に自然言語処理/理解、ナレッジグラフの分野に熱心。 仕事以外では、世界旅行、AI研究、社交ダンスを楽しんでいます。