arrow_back

仮想エージェント フルフィルメントの構築

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

仮想エージェント フルフィルメントの構築

ラボ 1時間 30分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

GSP792

Google Cloud セルフペース ラボ

概要

このラボでは、引き続き「エージェント向けの会話フローの設計」ラボで作成した Pigeon Travel 仮想エージェントを使用します。コンテキストを追加し、フルフィルメントを設定して、Firestore で予約エントリを検索したり保存したりできるようにします。

注: このラボを続行するには、「エージェント向けの会話フローの設計」ラボでエクスポートされた、エージェントの ZIP ファイルが必要となります。エージェント ZIP ファイルがない場合は、このラボの手順に進む前に「エージェント向けの会話フローの設計」ラボでインテントとエンティティをすべてゼロから構築する必要があります。

学習内容

このラボでは、次のタスクを行います。

  • Firestore コレクションを作成する
  • フルフィルメントをエージェントの Cloud Functions コードとして設定し、予約の名前を検索して変更できるようにする。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでも [ユーザー名] を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでも [パスワード] を確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。ナビゲーション メニュー アイコン

タスク 1. API を有効にする

  1. Cloud コンソールで、ナビゲーション メニューナビゲーション メニュー アイコン) > [API とサービス] > [有効な API とサービス] に移動します。

  2. [+ API とサービスを有効にする] をクリックします。

  3. Dialogflow を検索します。

  4. [Dialogflow API] タイルをクリックします。この API が有効になっていない場合は、[有効にする] をクリックします。

  5. Cloud function を検索します。

  6. [Cloud Functions API] をクリックし、すでに有効になっている場合は [管理] をクリックします。

  7. [API を無効にする] をクリックします。

    確認を求められたら、[無効にする] をクリックします。

  8. [有効にする] をクリックします。

    API が再度有効になると、ページに無効にするオプションが表示されます。

IAM 権限を設定する

  1. ナビゲーション メニューナビゲーション メニュー アイコン)で、[IAM と管理] > [IAM] に移動します。

  2. IAM リストで Google Cloud Functions サービス エージェントを見つけ、鉛筆アイコンを選択して権限を編集します。サービス アカウントのドメインは @gcf-admin-robot.iam.gserviceaccount.com になります。

  3. サービス アカウントが表示されない場合は、[Google 提供のロール付与を含める] チェックボックスをオンにします。

  4. ダイアログで [別のロールを追加] をクリックし、[Artifact Registry] > [Artifact Registry 読み取り] のロールを選択します。

  5. [保存] をクリックします。

タスク 2. Dialogflow エージェントを作成する

エージェントに「pigeon-travel」という名前を付けます。

  1. Dialogflow コンソールに移動します。

  2. [Sign-in with Google] ボタンをクリックし、このラボにログインしたときの認証情報を選択します。[Allow] をクリックします。

  3. メール設定をオフにし、利用規約を確認します。[Accept] をクリックします。

  4. 左側のメニューの [Create agent] をクリックします。

  5. 下のスクリーンショットに表示されているとおりに、エージェント情報を追加します。

  • Agent Name: pigeon-travel
  • Default Time Zone: America/Denver
  • Google Project: ラボのプロジェクト ID を使用
  1. [Create(作成)] をクリックします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Dialogflow エージェントを作成する

タスク 3. Dialogflow エージェントをインポートする

前のラボでは、作成した Dialogflow エージェントをエクスポートしました。今回は、そのエージェントをインポートして、作成作業を続けます。

これにより、新しい仮想エージェント プロジェクトが作成されます。ここで、既存の構成をインポートする必要があります。

  • 使用するエクスポート ファイルがない場合は、次のファイルを使用してください。
https://storage.cloud.google.com/qwiklabs-resources-ccai-quest/pigeon-travel-gsp-792.zip
  • ファイルをローカル ワークステーションにダウンロードします。
  1. エージェント名の横にある設定(歯車)アイコン 設定の歯車アイコン をクリックします。

  2. [Export and Import] タブを選択します。

[Export and Import] タブページ

  1. [IMPORT FROM ZIP] をクリックします。

  2. [SELECT FILE] をクリックして、仮想エージェントの構成が含まれる zip ファイルに移動します。または、ファイルをドラッグ&ドロップして指定することもできます。

  3. 「IMPORT」という単語をすべて大文字で入力してインポート ボタンを有効にし、[IMPORT] をクリックします。

[Upload agent] ページ

  1. インポートが完了したら、[DONE] をクリックしてアップロード ウィンドウを閉じます。

既存の構成が新しいエージェント プロジェクトにインポートされました。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Dialogflow エージェントをインポートする

タスク 4. Cloud Functions を使用してフルフィルメントを設定し、Firestore で予約を検索できるようにする

これまでのところ、エージェントはユーザーと適切なコミュニケーションをとり、予約番号などの情報を取得しています。しかし、収集された情報の確認や記録が行われていないため、これ以上の操作を行うことはできません。このセクションでは、Node.js コードを追加してフルフィルメントを設定します。また、それを Cloud Functions としてデプロイし、エージェントが現在の予約を検索して変更を加えられるようにします。

Firestore を設定する

  1. コンソールで、ナビゲーション メニュー > [データベース] > [Firestore] に移動します。

  2. [データベースを作成] をクリックします。

  3. [Firestore モードの選択] で [ネイティブ モード(推奨)] を選択し、[続行] をクリックします。

  4. ロケーションとして [マルチリージョン] を選択し、マルチリージョンとして [nam5 (United States)] を選択します。

  5. [データベースを作成] をクリックします。完了すると、新しいコレクションを作成できるようになります。

  6. [コレクションを開始] をクリックします。

  7. 次のように詳細を入力し、[保存] をクリックします。

  • コレクション ID: reservations

  • ドキュメント ID: 100

  • フィールド名: fname

  • フィールド タイプ: string

  • フィールド値: Isabel

  1. [フィールドを追加 (+)] ボタンをクリックして、別のフィールドを追加します。
  • フィールド名: lname
  • フィールド タイプ: string
  • フィールド値: Costa
  1. [フィールドを追加 (+)] ボタンをクリックして、別のフィールドを追加します。
  • フィールド名: newname
  • フィールド タイプ: string
  • フィールド値:

Firestore コレクションに最初のドキュメントを追加しました。

Firestore ドキュメント ID のベストプラクティス

  • ドキュメント ID に「.」と「...」は使用しないでください。

  • ドキュメント ID に 「/」(スラッシュ)は使用しないでください。

  • 次のように、単調に増加するドキュメント ID を使用しないでください。

    • Customer1、Customer2、Customer3、...
    • Product 1、Product 2、Product 3、...

    このように連続した ID を使用すると、レイテンシに影響を与えるホットスポットが生じる可能性があります。

Dialogflow のフルフィルメント

  1. Dialogflow コンソールに移動し、左側のメニューで [Fulfillment] をクリックします。リソースがプロビジョニングされるまで数分かかることがあります。

  2. [Inline Editor] オプションの横にあるスライダーを右に動かして、[Enabled] が表示されるようにします。これにより、Dialogflow エージェント内で Cloud Functions エディタが使用可能になります。

: エラー メッセージが表示された場合は、ページを更新してから再度スライダーを有効に設定してください。
  1. 有効になると、index.js にデフォルトのテンプレートが表示されます。

  2. 右下にある [Deploy] ボタンをクリックします。これには数分かかることがあります。

  3. デプロイが成功したら、Google Cloud コンソールの左側のメニューから [Cloud Functions] に移動し、関数がデプロイされたことを確認します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Function を使用してフルフィルメントを設定する

  1. Dialogflow コンソールの [Fulfillment] セクションに戻り、[index.js] タブをクリックします。

  2. デフォルトのウェルカム インテントとフォールバック インテントを処理するための関数を含む、スターター コードがすでに存在します。最初に、次の行を追加して、Firestore で作業が行えるようにします。

process.env.DEBUG = 'dialogflow:debug'; の行の上に、次のコードを追加します。

const admin = require('firebase-admin');

process.env.DEBUG = 'dialogflow:debug'; の行の下に、次のコードブロックを追加します。

admin.initializeApp(); admin.firestore().settings( { timestampsInSnapshots: true }); const db = admin.firestore();
  1. ウェルカム インテントとフォールバック インテントのハンドラ関数の後に、処理または予約のための次のコードを追加します。

次の行の下に、以下のコードブロックを追加します。

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {:

function reservation(agent) { let id = agent.parameters.reservationnumber.toString(); let collectionRef = db.collection('reservations'); let userDoc = collectionRef.doc(id); return userDoc.get() .then(doc => { if (!doc.exists) { agent.add('予約が見つかりません'); } else { db.collection('reservations').doc(id).update({ newname: agent.parameters.newname }).catch(error => { console.log('トランザクションが失敗しました:', error); return Promise.reject(); }); agent.add('予約名を変更しました'); } return Promise.resolve(); }).catch(() => { agent.add('Firestore データベースからのエントリ読み取りでエラーが発生しています'); }); }
  1. intentMap を次のように修正し、先ほど追加した関数への name.reservation-getname マッピングを処理するエントリが含まれるようにします。
intentMap.set('name.reservation-getname', reservation);

次のようなコードブロックが表示されます。

let intentMap = new Map(); intentMap.set('name.reservation-getname', reservation); intentMap.set('Default Welcome Intent', welcome); intentMap.set('Default Fallback Intent', fallback); agent.handleRequest(intentMap);
  1. [package.json] タブで、firebase-admin"^5.13.1" に設定されていることを確認します。
"firebase-admin": "^5.13.1"
  1. [Deploy] ボタンをクリックし、コードを保存してデプロイします。

  2. 左側のメニューで [Intents] をクリックし、[name.reservation] インテント内の [name.reservation-getname] に移動して、[Fulfillment] まで下に移動し、[Enable the webhook call for this intent] の切り替えスイッチをクリックして有効にします。インテントを保存します。

  3. シミュレータで「予約の名前を変更したい」という質問を入力します。

承知いたしました。予約の名前の変更をお手伝いします。お客様のお名前を教えてください。」といったデフォルトのレスポンスが表示されます。

  1. 任意のユーザー名を入力します。

  2. 予約番号を求めるデフォルトのレスポンスが表示されたら、「100」と入力します。

  3. 予約するときに使用する新しい名前を入力します(例: 「Kelly」)。

  4. 正常に完了すると、「dylan 様、ありがとうございます。予約番号 100 の名前を kelly 様に変更しました。」といったデフォルトのレスポンスが表示されます。

  5. 詳細を確認する場合は、Cloud Console の左側のメニューで [Firestore] > [データ] に移動します。

名前の変更のエントリが表示されます。また、新しい Key-Value ペアが追加されたことにより、元の名前と新しい名前を確認できます。

新しい Key-Value ペア。fname: "Isabel"、lname: "costa"、newname: "kelly"

  1. Dialogflow コンソールでログを調べて、コードエラーを確認します。[Fulfillment] セクションの左下にある [View execution logs in the Google Cloud console] をクリックしてログを表示します。

  2. ナビゲーション メニュー > [オペレーション] > [ロギング] をクリックし、ログを調べて、エラーがないことを確認します。

  3. [ログ エクスプローラ] で [Cloud Functions] > [dialogflowFirebaseFulfillment] を選択すると、すべての関連ログを確認できます。

代わりに、ナビゲーション メニュー > [Cloud Functions] に移動することもできます。作成した関数内の [ログ] をクリックすると、ログが表示されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Dialogflow シミュレータを使用してエージェントをテストする

タスク 5. (オプション)コードをエクスポートする

作業内容をエクスポートして、次のラボで使えるようにします。[Cloud Functions] の下の [ソース] タブをクリックして下にスクロールすると、[ZIP をダウンロード] ボタンが表示されます。

エージェントをエクスポートする

エージェントを zip 形式のファイルにエクスポートし、次のラボを開始するときにインポートできるようにします。これにより、これまでに構成したインテントとエンティティを再利用することができるようになります。

  1. 左側のメニューでエージェント名の横にある設定(歯車)アイコン ⚙ をクリックします。

  2. 設定ページが開いたら、[Export and Import] タブに移動します。

  3. [EXPORT AS ZIP] をクリックします。エージェントがローカル ZIP ファイルにダウンロードされます。

お疲れさまでした

仮想エージェントにコンテキストを追加し、フルフィルメントを設定して、Firestore で予約エントリを検索したり保存したりできるようにしました。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 7 月 19 日

マニュアルの最終テスト日: 2024 年 7 月 19 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします