独自の生成 AI アシストを構築すると、テキスト生成ツールを作成して Agent Assist と統合できます。テキスト生成ツールは、Text Bison や Gemini などの高度な大規模言語モデル(LLM)を使用して候補を生成します。これらの候補を使用すると、カスタマー サービス会話の両端にいる参加者(人間のエージェントや人間のユーザーなど)を支援できます。生成ツールは、ほとんどの LLM タスク用に構成できる Agent Assist の組み込み LLM 呼び出しを使用できます。Agent Assist のジェネレータの詳細については、Vertex AI のドキュメントをご覧ください。
ジェネレータの入力
テキスト生成ツールには、次の入力が必要です。
指示: テキスト生成ツールに実行させたいタスクを説明するテキスト。Vertex AI では、この指示を「プロンプト」と呼びます。
モデル オプション: モデルの最適なパフォーマンスに必要なモデルの選択と設定(温度、出力トークン上限、TopK、TopP など)。生成ツールの出力は、これらの設定によって制限されます。[モデル オプション] をクリックしてジェネレータを作成するときに、モデルを選択してモデル オプションを設定するか、デフォルトの設定を使用できます。Vertex AI では、モデル オプションを「パラメータ値」と呼びます。
トリガー イベント: ジェネレータを開始するタイミングを示す次のいずれかのイベント。
END_OF_UTTERANCE
: 発話が入力されるたびにジェネレータをトリガーします。MANUAL_CALL
: 明示的に API 呼び出しを行ってジェネレータを呼び出す場合にのみ、ジェネレータをトリガーします。CUSTOMER_MESSAGE
: 各お客様のメッセージの後にのみジェネレータをトリガーします。AGENT_MESSAGE
: 各エージェント メッセージの後にのみジェネレータをトリガーします。
生成ツールの出力
テキスト ジェネレータに入力を指定すると、独自の生成 AI アシスト ジェネレータが、記事のリンク、適切な回答、プロモーション オファーに関するバックエンド情報などの候補を提示します。これらの候補はテキスト形式で提供され、生成された時点のカスタマー サービス会話のコンテキスト内で関連性があります。
ユースケース
このセクションでは、独自の生成 AI アシスト生成ツールを実装する方法の例として、3 つのユースケースを紹介します。モデルは、次の例とは異なる出力レスポンスを生成する場合があります。
プロフェッショナルな書き直し
次のように、顧客に返信する前に、人間エージェントの発言をプロフェッショナルで丁寧な共感的な言い回しに言い換えるようにジェネレータに指示できます。
- 生成ツールの名前: プロフェッショナルな書き換え
- トリガー イベント: エージェント メッセージ
手順:
# TASK DESCRIPTION: Output the agent's response under ## LAST UTTERANCE rewritten in a professional, polite and empathetic way in EXAMPLE 4. - DO NOT miss any information mentioned by the original text. - Only output rewritten response. - You're provided with EXAMPLE 1-3. Follow the format. # EXAMPLE 1 ## CONVERSATION: AGENT: Yo what's up it's Akshay. This is Amazon customer service. What do you want? ## LAST UTTERANCE: Yo what's up it's Akshay. This is Amazon customer service. What do you want? ## OUTPUT: Hi I'm Akshay. Thank you for choosing Amazon customer service. How can I assist you today? # EXAMPLE 2 ## CONVERSATION: CUSTOMER: Hi, I'm having some trouble with my Apple Music subscription. AGENT: Hey, I'm [name]. I can help, I guess. What's your name and account number? CUSTOMER: Sure, my name is [name] and my account number is [number]. AGENT: Alright. Checked that out. You are on Apple Music Individual plan, right? ## LAST UTTERANCE: Alright. Checked that out. You are on Apple Music Individual plan, right? ## OUTPUT: Thank you. I see that you're currently subscribed to the Apple Music Individual plan. Is that correct? # EXAMPLE 3 ## CONVERSATION: AGENT: What is your order number? CUSTOMER: 12345 AGENT: Hang on a sec. Looking. CUSTOMER: I'll wait. AGENT: Alright, it appears your order is not registered. Did you even submit the order? CUSTOMER: Let me double check. Shoot, someone canceled it. Must be the kids. AGENT: Yeah, watch your kids will you? CUSTOMER: I'm so sorry. AGENT: All good. Have a good one. ## LAST UTTERANCE: All good. Have a good one. ## OUTPUT: No problem. I'm glad I can help. Please have a good day! # EXAMPLE 4 ## CONVERSATION: ${parameter:transcript} ## LAST UTTERANCE: ${parameter:transcript_last_utterance} ## OUTPUT:
顧客維持
また、次の例のように、顧客維持のためのエージェントの回答(商品の割引、アップセルやクロスセル、問題の解決など)を提案するようにジェネレータに指示することもできます。生成ツールは、IngestContextReferences
API を使用して、割引や特典に関する情報にコンテキスト参照としてアクセスします。
- ジェネレータ名: 顧客の離反と維持
- トリガー イベント: お客様からのメッセージ
- コンテキスト リファレンス: オファー
- 1: 11% 割引
- Google Nest: 5% 割引
- 初回購入割引: 10%
手順:
# TASK DESCRIPTION: You are an Agent who is helping a customer resolve an issue with complete understanding of the same. - Make sure you wait to understand the concern or query before making any suggestions. - If the customer informs about the issue, you need to ask the exact reason. If the reason is valid, you can give appropriate credit from the OFFERS section. - If the customer is about to cancel an order or subscription, make sure you offer something from the OFFERS section and try to retain the customer. - If a customer is inquiring about a new product, offer some combo for upselling another product. Below are two examples for detecting churn and generating suggestions for mitigation. The output should be a single message suggested to the agent according to the context of the conversation. # EXAMPLE 1 Customer: Hello Agent: Welcome to Google. How may I help you? Customer: I want to cancel order. Agent: Sure Let me have an order ID. Customer: Its 123321 Agent: I could see that you placed an order for Google Nest. May I know the reason for cancellation? Customer: It's available at cheaper rate now. Agent: Ohh.! I see. Let me check the current price and adjust the order price. Is it okay ? Customer: Sure..! I can purchase the product as long as I can get it at the discounted price. I'd definitely go with it Agent: Google Nest costs $200 at present. I can see that you paid $230. Customer: Yeah. Can you request to refund $30. I can buy it at $200. Agent : Sure. I have updated. You will get $30 refund once your order is delivered. Customer: Thanks. Agent : Welcome # EXAMPLE 2 Customer: Hello Agent: Welcome to Google. How may I help you? Customer: I am having Google One Subscription. I think I may need some more space in future. Agent: Okay. May I have your customer Id: Customer: Its 123321 Agent: I could see that you have 100GB Plan at present. How much are you expecting to need in future? Customer: I think I may need 100GB or more. Agent: I could check that you are a loyal customer who had subscriptions since last 6 months. I can provide you 10% discount. Customer: Sure..! That would be great. Agent: 200GB Subscription costs $180 per annum which I can offer you at $162. Customer: That's cool. Thank you. Agent: Is there anything else I can help you with? Customer: No thanks. ## CONTEXT ${parameter:transcript} ## OFFERS ${parameter:offers}
生成ツールを作成する
次のサンプルは、独自の GenAI アシスト テキスト生成ツールを作成する方法を示しています。
コンソール
Agent Assist コンソールを使用してジェネレータを作成するには、次の操作を行います。
コンソールで、[Build-your-own-assist] ページに移動します。
[作成] をクリックします。
生成ツールの名前を入力します。
リストからトリガー イベントを選択します。
タスクを定義する手順を入力します。
[モデル オプション] をクリックし、リストからモデルを選択します。
パラメータを設定するか、デフォルトの設定を使用します。
[保存] をクリックし、もう一度 [保存] をクリックしてジェネレータを保存します。
REST
API を使用して生成ツールを作成するには、次の操作を行います。
- Generator リソースから
CreateGenerator
メソッドを呼び出します。 - [
description
] フィールドにジェネレータの名前を入力します。 - トリガー イベントを入力します。
- タスクを定義する手順を FreeFormContext.text に入力します。
- [
published_model
] フィールドにモデル名を入力するか、空のままにしてデフォルトのモデルを使用します。 - [
inference_parameter
] フィールドでモデル パラメータを指定するか、空のままにしてデフォルト値を使用します。
パラメータ
${parameter:<parameter_name>}
形式を使用して単語をパラメータとしてマークすることで、指示をコンテキストにできます。また、Data Ingestion API を使用して、会話で IngestContextReferences メソッドを呼び出すことで、パラメータの実際の値をインポートすることもできます。このメソッドを使用すると、実行時に命令のパラメータがその値に置き換えられます。
次の JSON の例は、IngestContextReferences を呼び出してパラメータの値をインポートする方法を示しています。
{ "contextReferences": { "glossary": { "contextContents": [ { "content": "east one", "contentFormat": "PLAIN_TEXT" } ] } } }
取り込む必要のない生成ツール パラメータもあります。組み込みパラメータは次のとおりです。
${parameter:transcript}
: ユーザーの最後の発話を含む、エージェントとユーザー間の会話。${parameter:transcript_last_utterance}
: 会話の最後の発話。
どの指示でも、少なくとも 1 つの組み込みパラメータを使用する必要があります。
組み込みか取り込みかに関係なく、ジェネレータ パラメータは、ジェネレータの作成時に設定されるモデル オプションとは異なります。これらの生成パラメータの値は、会話の文字起こしまたは取り込まれたデータから取得されます。一方、ジェネレータのモデル オプションの値は、ジェネレータ全体に対して設定します。
生成ツールをテストする
[独自の生成 AI アシストを構築] コンソールで、[ジェネレータをテスト] セクションでジェネレータをテストできます。
独自の GenAI アシスト コンソールでジェネレータをテストする手順は次のとおりです。
コンソール
- 会話の文字起こしを追加します。発話を手動で入力するか、[アップロード] をクリックして JSON 形式の文字起こしをアップロードできます。
- 取り込む必要のあるデータを追加するには、more_vert と note_add [挿入されたデータを追加] をクリックします。
独自の生成 AI アシスト コンソールには、生成されたレスポンスが生成ツールの名前とともに表示されます。
REST
API を使用してジェネレータをテストする手順は次のとおりです。
generatorName
フィールドにジェネレータ名を入力します。conversationContext
フィールドに会話を指定します。- パラメータ値がある場合は、
contextReferences
フィールドに入力します。 - 候補を生成するトリガーを
triggerEvents
フィールドに入力します。生成された候補はgeneratorSuggestion
フィールドで確認できます。
会話プロファイル
会話プロファイルは、会話中に提示される候補を制御する一連のパラメータを定義します。次の手順では、HumanAgentAssistantConfig
オブジェクトを使用して conversationProfile
リソースを作成します。
コンソール
- Agent Assist コンソールで、[会話プロファイル] ページに移動します。
- [+ 作成] をクリックします。
- 表示名を入力します。
- 候補のタイプ check_box [Build-your-own-assist] を選択します。
- ジェネレータの名前を入力するか、リストからジェネレータの名前を選択します。
REST
- 会話プロファイル リソースから
create
メソッドを呼び出します。 - 新しい会話プロファイルの名前を指定します。
- 言語コードを入力します。
- human_agent_suggestion_config に生成ツールの名前を入力します。
会話プロファイルの JSON の例を次に示します。
{ "displayName": "build-your-own-assist-test", "humanAgentAssistantConfig": { "humanAgentSuggestionConfig": { "generators": "projects/PROJECT_ID/locations/global/generators/GENERATOR_ID" } } }
シミュレータで確認する
会話プロファイルは、Agent Assist シミュレータで確認できます。シミュレータには、生成されたレスポンスが生成ツールの名前とともに表示されます。
プロンプトをテストする
[独自の GenAI アシストを構築] コンソールでは、会話プロファイルを確認するのと同じ方法で、シミュレータを使用してプロンプトをテストできます。次の画像に示す生成された出力は、freeform-tool-test1
ジェネレータがプロンプトの例にどの程度従ったかを示しています。
実行時の会話
会話は、人間のエージェントや仮想エージェントなどのエージェントと、サポートを利用する顧客またはエンドユーザーとの間のやり取りとして定義されます。実行時に、エンドユーザーと人間のエージェントとの会話が開始されると、会話が作成されます。候補を表示するには、エンドユーザーの参加者と人間のエージェントの参加者を両方とも作成して、会話に加える必要があります。
会話を作成する
会話を作成する手順は次のとおりです。
conversation resource
からcreate
メソッドを呼び出します。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- CONVERSATION_PROFILE_ID: 会話プロファイル ID
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations
リクエストの JSON 本文:
{ "conversationProfile": "projects/PROJECT_ID/conversationProfiles/CONVERSATION_PROFILE_ID", }
JSON レスポンス内の conversations
の後のパスセグメントには、新しい会話 ID が含まれます。JSON レスポンスは次のようになります。
{ "name": "projects/PROJECT_ID/conversations/CONVERSATION_ID", "lifecycleState": "IN_PROGRESS", "conversationProfile": "projects/PROJECT_ID/conversationProfiles/CONVERSATION_PROFILE_ID", "startTime": "2023-11-05T21:05:45.622Z" }
エンドユーザーの参加者を作成する
エンドユーザーの参加者を作成する手順は次のとおりです。
participants
リソースからcreate
メソッドを呼び出します。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- CONVERSATION_ID: 会話 ID
次のように、会話 ID とロール フィールドに「END_USER」を指定します。
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations/CONVERSATION_ID/participants
リクエストの JSON 本文:
{ "role": "END_USER", }
JSON レスポンス内で、participants
の後のパスセグメントには、新しいエンドユーザー参加者 ID が含まれます。JSON レスポンスは次のようになります。
{ "name": "projects/PROJECT_ID/conversations/CONVERSATION_ID/participants/USER_PARTICIPANT_ID", "role": "END_USER" }
人間のエージェントの参加者を作成する
人間のエージェントの参加者を作成する手順は次のとおりです。
participants
リソースからcreate
メソッドを呼び出します。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- CONVERSATION_ID: 会話 ID
フィールドに会話 ID と HUMAN_AGENT
ロールを次のように指定します。
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations/CONVERSATION_ID/participants
リクエストの JSON 本文:
{ "role": "HUMAN_AGENT", }
JSON レスポンス内の participants
の後のパスセグメントには、新しい人間のエージェントの参加者 ID が含まれます。レスポンスは次のようになります。
{ "name": "projects/PROJECT_ID/conversations/CONVERSATION_ID/participants/AGENT_PARTICIPANT_ID", "role": "HUMAN_AGENT" }
メッセージを分析する
ジェネレータは、会話内のメッセージを分析することもできます。会話中にメッセージを追加すると、ジェネレータは participants
リソースの analyzeContent
メソッドを使用して、人間のエージェントとエンドユーザーの両方のメッセージを分析できます。
人間のエージェントのメッセージを追加して分析する手順は次のとおりです。
analyzeContent
メソッドを呼び出します。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- CONVERSATION_ID: 会話 ID
- PARTICIPANT_ID: 人間のエージェントの参加者 ID
会話 ID と人間のエージェントの参加者 ID を指定します。リクエストには、次のような内容を含める必要があります。
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations/CONVERSATION_ID/participants/PARTICIPANT_ID:analyzeContent
リクエストの JSON 本文:
{ "textInput": { "text": "Bonjour, ici le service client d'ABC fishing, comment puis-je vous aider aujourd'hui ?", "languageCode": "en-US" } }
次のような JSON レスポンスが返されます。
{ "message": { "name": "projects/PROJECT_ID/conversations/CONVERSATION_ID/messages/MESSAGE_ID", "content": "Bonjour, ici le service client d'ABC fishing, comment puis-je vous aider aujourd'hui ?", "languageCode": "en-US", "participant": "PARTICIPANT_ID", "participantRole": "HUMAN_AGENT", "createTime": "2023-02-13T00:01:30.683Z" }, "humanAgentSuggestionResults": [{ "generateSuggestionsResponse": { "generatorSuggestionAnswers": [{ "generatorSuggestion": { "freeFormSuggestion": { "response": "Hello, this is ABC fishing customer service, how can I help you today?" } }, "sourceGenerator": "projects/PROJECT_ID/locations/global/generators/GENERATOR_ID", "answerRecord": "projects/PROJECT_ID/locations/global/answerRecords/ANSWER_RECORD_ID" }], "latestMessage": "projects/PROJECT_ID/locations/global/conversations/CONVERSATION_ID/messages/MESSAGE_ID" } }] }
エンドユーザー メッセージを追加して分析する
analyzeContent
メソッドを呼び出します。他のエージェント アシスト機能でメソッドが呼び出されている場合は、メソッドを重複して呼び出さないでください。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- CONVERSATION_ID: 会話 ID
- PARTICIPANT_ID: 人間のエージェントの参加者 ID
会話 ID と人間のエージェントの参加者 ID を指定します。リクエストには、次のような内容を含める必要があります。
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations/CONVERSATION_ID/participants/PARTICIPANT_ID:analyzeContent
リクエストの JSON 本文:
{ "textInput": { "text": "Hi", "languageCode": "en-US" } }
次のような JSON レスポンスが返されます。
{ "message": { "name": "projects/PROJECT_ID/conversations/CONVERSATION_ID/messages/MESSAGE_ID", "content": "Hi", "languageCode": "en-US", "participant": "PARTICIPANT_ID", "participantRole": "END_USER", "createTime": "2020-02-13T00:07:35.925Z" }, "humanAgentSuggestionResults": [{ "generateSuggestionsResponse": { "generatorSuggestionAnswers": [{ "generatorSuggestion": { "freeFormSuggestion": { "response": "Salut" } }, "sourceGenerator": "projects/PROJECT_ID/locations/global/generators/GENERATOR_ID", "answerRecord": "projects/PROJECT_ID/locations/global/answerRecords/ANSWER_RECORD_ID" }], "latestMessage": "projects/PROJECT_ID/locations/global/conversations/CONVERSATION_ID/messages/MESSAGE_ID" } }] }
会話が完了し、analyzeContent
が使用されなかった場合は、messages リソースの batchCreate
メソッドを使用して、会話の履歴メッセージをインポートして分析できます。
候補を取得する
また、会話のどの時点でも、メッセージに対する提案を提供します。デフォルトでは、いずれかの参加者からの最新のメッセージに対する候補が表示されます。候補を取得するメッセージを指定することもできます。デフォルトで候補を取得するか、次のいずれかのリソースを使用します。
提案を使用する
analyzeContent
のレスポンスには候補が含まれます。トリガーされた生成ツールは、これらの候補を生成します。JSON リクエストには、次のような内容を含める必要があります。
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations/CONVERSATION_ID/participants/PARTICIPANT_ID:analyzeContent
リクエストの JSON 本文:
{ "textInput": { "text": "I want to reserve a room.", "languageCode": "en-US" } }
suggestions
リソースを使用する
提案を取得する別の方法は、次の手順に沿って操作することです。
suggestions
リソースからgenerate
メソッドを呼び出します。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- CONVERSATION_ID: 会話 ID
- PARTICIPANT_ID: 人間のエージェントの参加者 ID
会話 ID、参加者の最新のメッセージ ID、トリガー イベントを指定します。メッセージ ID フィールドが設定されていない場合、デフォルトではいずれかの参加者からの最新のメッセージに基づいて候補が表示されます。トリガー イベントに関連付けられたジェネレータが開始されます。JSON リクエストには、次のような内容を含める必要があります。
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/conversations/CONVERSATION_IDsuggestions:generate
リクエストの JSON 本文:
{ "latestMessage": "projects/PROJECT_ID/conversations/CONVERSATION_IDmessages/Message_ID", "triggerEvents": [ "END_OF_UTTERANCE" ] }
statelessSuggestion
リソースを使用する
提案を取得するもう 1 つの方法は、次の手順に沿って操作することです。
statelessSuggestion
リソースからgenerate
メソッドを呼び出します。- リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- LOCATION_ID: ロケーション ID
ジェネレータ、会話のメッセージ、取り込まれたデータを含むコンテキスト参照を指定します。取り込まれたデータは、ジェネレータの指示のパラメータを置き換えます。JSON リクエストは次のようになります。
HTTP メソッドと URL:
https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/statelessSuggestion:generate
リクエストの本文(JSON):
{ "generator": { "description": "Translation", "triggerEvent": "END_OF_UTTERANCE", "freeFormContext": { "text": "Read the conversation between agent and customer, and the last utterance. Output the last utterance from customer by following these instructions: - If the last utterance from AGENT, output the utterance by translating it to English. - If the last utterance from CUSTOMER, output the utterance by translating it to French. - Specific brand names and technical terms specified under 'GLOSSARY' section, such as 'Google Home,' should remain unchanged as per the glossary guidelines. # GLOSSARY ${parameter:glossary} # CONVERSATION: ${parameter:transcript} # LAST UTTERANCE: ${parameter:transcript_last_utterance} # OUTPUT: " } }, "contextReferences": { "glossary": { "contextContents": { "content": "east one", "contentFormat": "PLAIN_TEXT" } } }, "conversationContext": { "messageEntries": [ { "text": "hi", "languageCode": "en-US", "role": "END_USER", "createTime": { "seconds": "1400000000", "nanos": "10000000" } }, { "text": "Bonjour, comment puis-je vous aider aujourd\\'hui ?", "languageCode": "en-US", "role": "HUMAN_AGENT", "createTime": { "seconds": "1400000010", "nanos": "10000000" } } ] }, "triggerEvents": [ "END_OF_UTTERANCE" ] }
割り当て上限
Agent Assist の割り当てと上限は、Dialogflow の割り当てページで確認できます。独自の生成 AI アシストの構築には、次の割り当て上限が含まれます。
名前 | 説明 | 上限 |
---|---|---|
1 分あたりのジェネレータ マネージャー オペレーション数(リージョンごと) | ジェネレータの作成、一覧表示、削除など、1 分間に実行できるジェネレータ マネージャー オペレーションの数に関する上限。 | 300 |
生成ツール(リージョンごと) | 1 つのプロジェクトで作成できるジェネレータの最大数に関する上限。 | 200 |
1 分あたりのモデルタイプごとの生成候補オペレーション数(リージョンごと) | モデルタイプごとに 1 分あたりに受信できる生成候補オペレーション リクエスト数の上限。 | 10 |