多言語エージェントは、すべてのコンテンツを 1 つのエージェントに保持しながら、さまざまな言語で顧客と通信します。 多くの場合、エージェント ユーザーの Web ブラウザー設定に基づいて目的の言語を自動的に検出し、同じ言語で応答し、顧客にパーソナライズされた魅力的なエクスペリエンスを提供します。
エージェントを作成するときは、そのプライマリ言語を指定します。
セカンダリ言語をエージェントに追加した後は、作成するトピックのメッセージの翻訳を提供する必要があります。 生成オーケストレーションを使用するエージェントの場合、生成されたメッセージは自動的に変換されます。
顧客が公開されたエージェントとのセッションを開始すると、エージェントは、顧客のクライアントまたはブラウザーで指定された言語に一致する言語の 1 つを選択します。 エージェントがクライアントまたはブラウザーの言語を検出できない場合、または検出された言語がエージェントに指定した言語の 1 つでない場合、エージェントは既定でプライマリ言語に設定されます。
会話中に使用する言語を変更するようにエージェントを設計できます ( 「エージェントを別の言語に切り替える」を参照)。 また、 生成オーケストレーション を使用して言語を動的に切り替えて、現在の会話ターンで使用されている言語に従うエージェントを設定することもできます (「 動的言語切り替え用のエージェントの設定」を参照)。
サポートする言語の一覧については、サポートされている言語を参照してください。
ヒント
従来のチャットボットでは、1 つの言語のみがサポートされます。 クラシック チャットボットをエージェントに変換する方法の詳細については、Copilot Studio 統合作成へのアップグレード を参照してください。
エージェントに言語を追加する
エージェントの [設定] ページに移動し、[言語] を選択 します。
[ 言語の追加] を選択します。
[ 言語の追加 ] パネルで、エージェントに追加する言語を選択し、[ 追加] を選択します。
言語の一覧を確認し、[ 設定] ページを閉じます。
多言語エージェントのローカライズを管理する
Copilot Studio では、エージェントのプライマリ言語ですべてのトピックとコンテンツの編集を実行します。 このセクションでは、エージェントから文字列をダウンロードし、それらをエージェントのセカンダリ言語に変換する方法について説明します。 翻訳された文字列をアップロードしたら、 テスト パネルで言語を切り替え 、セカンダリ言語の会話も期待どおりに流れるかどうかを確認できます。
ローカライズされたコンテンツを準備する
第 2 言語のローカライズ ファイルを最初にダウンロードすると、すべての文字列がエージェントのプライマリ言語になります。 ローカライゼーション ファイルをダウンロードしたら、好みのローカライズ プロセスで使用します。
エージェントの [設定] ページに移動し、[言語] を選択 します。
[ 言語 ] ページのセカンダリ言語の一覧で、更新する言語の [アップロード ] を選択します。
[ ローカライズの更新 ] パネルで、JSON 形式または ResX 形式のいずれかを選択して、その言語の現在のローカライズ ファイルをダウンロードします。
ヒント
ダウンロードしたファイルには、エージェントの最新のローカリゼーション コンテンツが含まれています。 以前のバージョンのローカリゼーション ファイルをダウンロードする必要がある場合 は、エージェントのソリューションを開きます。
ダウンロードしたファイルを開き、プライマリ言語の文字列を適切な翻訳されたテキストに置き換えます。
[ローカライズの 更新 ] パネルに戻り、[ 参照] を選択して、翻訳されたファイルをアップロードします。
[ ローカライズの更新 ] パネルと [設定] ページを閉じます。
ローカライズされたコンテンツを更新する
第 1 言語文字列を変更する場合は、第 2 言語のコンテンツも更新する必要があります。 このプロセスには、新しいコンテンツと変更されたコンテンツの両方が含まれます。 増分の変更は自動的には翻訳されません。 セカンダリ言語の JSON または ResX ファイルをダウンロードし、希望するローカライズ プロセスを使用して未翻訳の文字列を更新する必要があります。
次のシナリオは、翻訳されたコンテンツの一般的なワークフローです。 以前にプライマリ言語 (en-US) をセカンダリ言語 (fr-FR) に翻訳し、プライマリ言語でコンテンツを追加、変更しました。 第 2 言語のローカライズ ファイルをダウンロードすると、すべての新しいコンテンツがプライマリ言語 (en-US) になります。 ただし、変更されたコンテンツは引き続きセカンダリ言語で表示されます。 変更されたコンテンツは同じ ID を使用するため、新しいファイルを以前にアップロードしたファイルと比較する必要があります。
アダプティブ カードの動的コンテンツをローカライズに使用できるようにする
ローカライズ ファイルには、アダプティブ カードの混合型文字列は含まれません。 文字列に静的テキストと変数 (動的コンテンツ) の両方を含めることができるアダプティブ カードをローカライズする必要がある場合は、次の回避策を使用します。 この手順では、[ テキスト変数の設定 ] ノードを使用して、静的テキストと変数を含む文字列全体を中間変数に格納する方法を示します。 その後、アダプティブ カードでその中間変数のみを参照します。 エージェントのローカライズ ファイルをダウンロードすると、静的テキストと変数参照を含む中間変数の値が、 setVariable アクションの一部としてローカライズに使用できます。
アダプティブ カードの動的コンテンツをローカライズ可能にするには:
アダプティブ カードの前に [変数値の設定] ノードを追加します。 この手順では、コード エディターを使用してノードを Set テキスト変数 ノードに変換することで更新できる YAML 表現を作成します。 オーサリングキャンバスから直接テキスト変数ノードを作成することはできません。
[ 変数値の設定 ] ノードで、新しい変数を作成しますが、値はまだ設定しません。
トピックのコード エディターを開きます。
コード エディターで、[ 変数値の設定 ] ノードを表すパーツを見つけ、
kind: SetVariableをkind: SetTextVariableに置き換えます。 この変更により、[ 変数値の設定 ] ノードが [テキスト変数の設定 ] ノードに変換されます。コード エディターを閉じます。
[ テキスト変数の設定 ] ノードの一番下のフィールドを選択し、アダプティブ カードに表示する静的テキストと変数を含む文字列全体を入力します。 メッセージに変数を挿入するのと同じ方法 で変数を挿入します。
この新しい変数への参照を使用してアダプティブ カードを更新します。
トピックを保存します。 ローカライズ ファイルをダウンロードし、アダプティブ カードの動的コンテンツが含まれていることを確認できるようになりました。
多言語エージェントをテストする
テスト パネルを開きます。
テスト パネルの上部にある [ その他 ] アイコン (...) を選択し、目的の言語を選択します。 テスト パネルは、選択した言語を使用して、それ自体を再読み込みします。 オーサリング キャンバスはプライマリ言語のままであり、トピックに加えた変更は、プライマリ言語に戻るまで保存できません。
エージェントをテストするには、選択した言語でメッセージを入力します。
ブラウザーの言語をエージェントのいずれかの言語に設定し、 事前構築済みのデモ Web サイトに移動することもできます。 デモ Web サイトは指定された言語で開き、エージェントはその言語でチャットします。
エージェントを別の言語に切り替える
作成時に、会話の途中で別の言語に切り替えるエージェントを構成できます。 ロジックは、エージェント内の任意のトピックに存在できます。 しかし、ベスト プラクティスは質問ノードの直後に言語を切り替えることで、次の質問ノードまで続くメッセージがすべて同じ言語になります。
エージェントの現在の言語を変更するには、 User.Languagesystem 変数 をエージェントのセカンダリ言語のいずれかに設定します。 この選択により、エージェントが話す言語がすぐに変更されます。
動的言語切り替え用のエージェントを設定する
ヒント
この機能は、生成オーケストレーションが有効になっているエージェントでのみ使用できます。
顧客が使用する言語を検出し、同じ言語で応答するようにエージェントを構成できます。 この構成では、エージェントは 1 つの会話の過程で言語を複数回切り替えることができます。 次のシナリオでは、オランダ語と英語を切り替えるエージェントを設定する方法を示します。 エージェントがサポートする言語の任意の組み合わせに対して拡張できます。
このシナリオでは、メッセージ受信のトピック トリガーを持つトピックを使用します。 このトピック トリガーを使用すると、エージェントは受信したすべてのメッセージを調べることができます。 このトピックでは、カスタム プロンプトを使用して言語を検出し、条件を使用してエージェント言語システム変数を設定します。
トピックの既定のトリガーの種類をメッセージを受信したときに置き換えます。
トピックにプロンプトを追加します。
[トリガー] ノードの下
[ノードの追加] アイコンを選択します。[ツールの追加] を選択します>新しいプロンプト。
プロンプト エディターで、プロンプトの代表名 ("言語の検出" など) を入力します。
[ 手順 ] ウィンドウで、「このメッセージが書き込まれる言語を決定する: 」と入力します。
[手順] ウィンドウの下部にある [コンテンツの追加] を選択し、[テキスト] を選択します。 名前とサンプル メッセージを入力するように招待するウィンドウが表示されます。
[名前] に「Message」と入力します。[サンプル データ] に「ユーザーからのメッセージ」と入力し、[閉じる] を選択します。
[ モデルの応答 ] ウィンドウで、 出力 形式を JSON に切り替えます。
[ テスト] を選択します。 プロンプトに JSON リテラルが表示され、言語が英語として識別される 1 つのプロパティが表示されます。
保存 を選択します。 プロンプト ノードが キャンバスに表示されます。
プロンプト ノードを構成します。
-
[入力] で、システム変数
Activity.Text(受信メッセージのテキスト) を選択します。 -
[出力] には、という
DetectedLanguageします。
-
[入力] で、システム変数
検出された言語に基づいてロジックを分岐します。
[プロンプト] ノードの下に条件を追加します。
条件は、検出された言語の名前を保持するカスタム変数
DetectedLanguage.structuredOutput.languageに基づいて行います。検出する必要がある言語ごとに条件分岐を追加します。
各分岐の下に、 変数値の設定 ノードを追加して、それに応じて
User.Languageシステム変数を設定します。 次の図は、オランダ語と英語を切り替える条件を持つトピックを示しています。
多言語エージェントのトラブルシューティング
このセクションでは、予期しない多言語エージェントの動作を理解するためのヒントを提供します。
構成されていない言語での多言語エージェントの動作
エージェント用に構成していない言語に対してユーザーがブラウザーを構成した場合、エージェントはプライマリ言語にフォールバックします。
エージェントの作成時に、エージェントのプライマリ言語 を指定します。 作成後にプライマリ言語を変更することはできませんが、複数のリージョンが使用可能な場合は、エージェントのプライマリ言語のリージョンを 変更 できます。
翻訳が欠落している場合の多言語エージェントの動作
プライマリ言語でエージェントにメッセージを追加しても、新しいメッセージの 翻訳をアップロード しない場合、エージェントには、翻訳されていない変更がプライマリ言語で表示されます。 エージェントに変更を加えた後は、必ず翻訳が最新であることを確認してください。
ローカライズ ファイルには、アダプティブ カードの混合型文字列は含まれません。 文字列に静的テキストと変数 (動的コンテンツ) の両方を含めることができるアダプティブ カードをローカライズする必要がある場合は、回避策を使用する必要があります。 アダプティブ カードで使用する前に 、混合型の文字列をテキスト変数に格納 する方法について説明します。
多言語エージェントの公開時のエラー
多言語エージェントを発行しようとすると、未加工の応答エラー コード ( SynonymsNotUnique) で "ボットの検証に失敗しました" というエラー メッセージが表示された場合、ローカライズ ファイルには、重複するシノニムまたは DisplayName 値と一致するシノニムが含まれます。 通常、このエラーは、ノードに次のいずれかのシナリオが発生した Entity.Definition.'closedListItem' が含まれている場合に発生します。
-
Synonyms要素の 1 つが一意ではありません。 -
Synonyms要素の 1 つはDisplayName要素と同じ値です。
同じエンティティの Synonyms はすべて一意でなければならず、DisplayName 要素とは異なる名前を持つ必要があります。
エラーを修正するには、セカンダリ言語の JSON または ResX ファイルを確認し、この条件が存在する可能性があるインスタンスを特定します。