最近のアクセス:
プロバイダーからメッセージを送受信する方法

Message API を使用すると、プロバイダーとの間でメッセージを送受信できます。これにより、コンテキストを追跡したり、フローの実行をトリガーしたりすることができます。
また、エクスプレッションを分析し、そのエクスプレッションに対するプロバイダーの応答を取得するためのメソッドも用意されています。
これらは Chatbot モジュールのメソッドです。

1.メッセージの分析

プロバイダーでエクスプレッションを評価するには、Chatbot.Message.Analyze メソッドを使用します。
その署名は次のようになります:
parm(in:&Instance, in:&UserMessage, inout:&AnalyzeResponse, out:&Messages)
入力値の説明
  • &Instance は Conversational Flows オブジェクトの名前です。
  • &UserMessage はユーザーのメッセージを表す varchar(256) です。
  • &AnalyzeResponse はプロバイダーの応答を表す SDT です。これは入出力パラメーターです。つまり、前回の応答 (会話のコンテキストを含む) を渡して、ユーザーのメッセージとともにプロバイダーで評価できます。詳細については、このドキュメントで後述しています。
  • &Messages は Messages データタイプの出力パラメーターです。これを使用して、プロバイダーからスローされたエラーを取得できます。

&Instance = !"Citizen"
&UserMessage = !"Hello"
Chatbot.Message.Analyze(&Instance, &UserMessage, &AnalyzeResponse, &Messages)
&BotResponse  = &AnalyzeResponse.GXOutputCollection.toJson() (2)
&Intent       = &AnalyzeResponse.Intents.Item(1).Intent
&Confidence   = &AnalyzeResponse.Intents.Item(1).Confidence

2.メッセージの送信とフローの実行のトリガー

このメソッドの目的は、エクスプレッション (ユーザーのメッセージ) を分析し、さらに該当する Flow に定義されたビジネスロジックを実行することです。つまり、Flow に定義されたリダイレクション(1) を行い、ユーザー入力の検証を実行して、Conversational オブジェクトを呼び出します。
その署名は次のようになります:
parm(in:&Instance, in:&UserMessage, in:&Image, inout:&AnalyzeResponse, out:&Messages)
入力値の説明
  • &Instance は Conversational Flows オブジェクトの名前です。
  • &UserMessage はユーザーのメッセージを表す varchar(256) です。 
  • &Image は Image データタイプです。
  • &AnalyzeResponse はプロバイダーの応答を表す SDT です。
  • &Messages は Messages データタイプの出力パラメーターです。これを使用して、プロバイダーからスローされたエラーを取得できます。

1.Chatbot.Message.SendMessage メソッドを (間接的に) 呼び出すものの例として、Chatbot ジェネレーターのリソースである PanelChatWeb オブジェクトと PanelChatSD オブジェクトがあります。これらにより CommonChatbots.SendMessage プロシージャーが呼び出され、このプロシージャーにより Chatbot.Message.SendMessage が呼び出されます。 
2.この API のもう 1 つの用途として、Chatbot のテストケースの構築があります。プロバイダーに対するダイアログをバッチモードでプログラムし、応答を確認できます。Chatbot コンテキストは、(ほかの情報とともに) コンテキストを含む入出力パラメーター &AnalyzeResponse に基づいて追跡されます。
&Instance = !"Citizen"

&UserMessage = !"Hi"
do "ProcessMessageSend"
&UserMessage = !"I'd like to make a complaint"
do "ProcessMessageSend"
&UserMessage = !"About traffic"
do "ProcessMessageSend"
&UserMessage = !"There's a car parked in front of a garage"
do "ProcessMessageSend"

Sub "ProcessMessageSend"  
    msg(format(!"User: %1",&UserMessage), status)
   Chatbot.Message.SendMessage(&Instance,&UserMessage,&Image,&AnalyzeResponse,&Messages)
    msg(format(!"Bot: %1", &AnalyzeResponse.GXOutput), status)
   
    if &Messages.Count > 0
        msg(format(!"%1 (%2)",&Messages.Item(1).Description,&Messages.Item(1).Id), status)
    endif
EndSub
このテストプロシージャーを実行すると、次のように出力されます:
User: Hi
Bot:   Hello! I'm your Citizen Assistant!
UserI'd like to make a complaint
Bot:   What's the topic of your complaint? It can be about Lighting, Traffic, or Green Spaces
UserAbout traffic
Bot: Please describe the problem 
UserThere's a car parked in front of a garage
Bot: Thanks for your feedback.Your claim is 655. 

AnalyzeResponse 構造

イメージ:43205.png
Context: コンテキストの標準パラメーターの定義を含むサブ構造です。
CustomContext: Chatbot のモデルに固有のパラメーターを表すキー/値のコレクションです。
GXOutput: 最後の応答メッセージを表します。
Intents: 検出された意図とその確度を含むコレクションです。
GXOutputCollection: クエリに対する Chatbot の応答メッセージのコレクションです。

(1) ケースによって異なります。リダイレクションをサーバー側で実行する場合は、SendMessage メソッドを使用する必要があります (DialogFlow のケース)。リダイレクションをプロバイダー側で実行する場合は、Analyze メソッドを使用します (Watson のケース)。
(2) GXOutputCollection は、回答が複数存在する場合に役立ちます。GXOutput には最後のメッセージが格納されるのに対し、リダイレクションにおいて Chatbot の回答が 2 つ存在する場合などには、GXOutputCollection にその 2 つが格納されます。

使用可能バージョン

GeneXus 16 Upgrade 4 以降で利用できます。




サブページ
Created: 20/01/10 00:33 by Admin Last update: 21/11/11 17:55 by Admin
カテゴリ
Powered by GXwiki 3.0