【セッションNo．1】

IBM Watson AI と連携！
Delphi/400からのAPI呼び出しと実装テクニック
株式会社ミガロ．
RAD事業部

尾崎

営業・営業推進課

浩司

第22回 Delphi/400 テクニカルセミナー

1-

はじめに

第22回 Delphi/400 テクニカルセミナー

1- コグニティブ技術の発達• 「コグニティブ」とは？
• 日本語で「認知」のこと。
• ある事象についてコンピュータが自ら考え、学習し、自らの答えを導き出すシステム• 近年

コグニティブやAI技術の発達が凄まじい• 身近な機器も進化• iPhone Siri
• スマートスピーカー• 検索サイトも進化

音声を使用して色々な操作が可能• Google画像検索

撮影した写真写真をアップロード

画像を分析し、「姫路城」を特定

第22回 Delphi/400 テクニカルセミナー

1- コグニティブ技術の発達• 従来のシステムとの違いは？
• 本質的な違いとして、従来システムの定型データに加え、音声・
画像・文章などの非定型データも処理できること。

DB2 /400

定型データ

非定型データ

技術をミックスすれば、人の作業を補助し、より便利なシステム構築が可能に！

第22回 Delphi/400 テクニカルセミナー

1-【アジェンダ】
1. Watson とは？
2. Watson APIを使った開発方法
3. 音声を使ったWatson APIの活用
4. Watson APIを活用したチャットボット
5. まとめ・補足資料
 自動翻訳機アプリ ソースコード
 物件紹介チャットアプリ ソースコード
第22回 Delphi/400 テクニカルセミナー

1-１．Watson とは？

第22回 Delphi/400 テクニカルセミナー

1- Watson 概要• IBMが開発した質問応答システム・
意思決定支援システム• 人工知能ではなく、自然言語を理解・学習し人間の意思決定を支援する『コグニティブ・コンピューティング・システム（Cognitive Computing System）』と定義• IBMのクラウドサービス（IBM Cloud）
上のAPIとして提供されており、誰でも利用可能！

第22回 Delphi/400 テクニカルセミナー

1- IBM Cloud ライト・アカウント• IBM Cloudの各種サービスを無料で使用できるアカウント• 利用期間の制限もなく、商用に使用してもOK• クレジットカード登録も不要• ただし下記制限あり

ここから、
アカウント登録可能。

• 上位版でないと提供されない
サービスあり• サービス毎に無料で使用できる上限あり• 各サービスの中でも一部使えない
機能あり• 一定期間未使用で、サービスが自動削除
https://www.ibm.com/cloud-computing/jp/ja/bluemix/lite-account/
第22回 Delphi/400 テクニカルセミナー

1- IBM Cloud上のWatson API• 日本環境で使用できる主なWatson API• 一部APIを除き、ライト・アカウントでも使用可能
分類

API種類

機能

ライト

照会応答系

Assistant（照会応答）

自然言語で対話可能なアプリケーションを、シンプルな開発ツールで迅速に構築

対応

言語系

Language Translator（言語変換）

コンテンツのテキストを、ある言語から別の言語にリアル
タイムで翻訳対応

Natural Language
Classifier(自然言語分類)

自然言語テキストの背後にある意図を解釈し、関連度合い
を信頼度レベル付けして分類

未対応

心理系

Personality Insights（性格分析）

テキストから筆者のパーソナリティ（ビッグ・ファイブ、価値、ニーズ）の3つの特徴を推測

対応

音声系

Speech to Text(音声認識)

ディープ・ラーニングを活用して、音声からテキストを書
き起こす

対応

Text to Speech(音声合成)

テキストから自然な音声を合成

対応

Discovery(検索)

大量のデータを検索するとともに、適切な意思決定を支援

対応

Knowledge Studio

業界や分野ごとの知識だけでなく、各分野の言葉の使われ方の微妙な違いをWatsonに教えることができるツール

対応

Visual Recognition(画像認識)

ディープ・ラーニングを使用して、画像に写った物体・情景・顔など様々なものを分析・認識対応

第22回 Delphi/400 テクニカルセミナー

1-

知識探索系

画像系

 Watson API

活用例• 色々な分野での活用が始まっている• チャットボットを使用した
カスタマーサービス （Assistant）• 迷惑メールの分類（Natural Language Classifier）• 製造ラインでの画像検査による不良品判定（Visual Recognition）• コールセンターでの自動テキスト
作成（Speech To Text）• 目の不自由な方への音声案内（Text To Speech）• IBM HP内に活用例ページあり
https://www.ibm.com/watson/jp-ja/use-cases/
第22回 Delphi/400 テクニカルセミナー

1-２．Watson APIを使った開発方法

第22回 Delphi/400 テクニカルセミナー

1- Watson API

アクセス方式• Watsonの各サービスは、Web APIとして提供• Web API
• コンピュータプログラムの提供する機能を外部の別のプログラムから呼び出して、利用するための手順・規約。HTTPなどWebの技術を使用して構築されたもの。

• Watson APIで使用されるアクセス方式• REST ＋ JSON方式• Web APIで現在最も利用されている方式を採用。
REST + JSON はDelphi/400のコンポーネントで使用できる為、Watson APIとの連携が容易に行える！
第22回 Delphi/400 テクニカルセミナー

1- Watson API

アクセス方式• RESTサービス（REpresentational State Transfer）• Webサービスの設計モデル• ネットワーク上のデータ（リソース）を一意なURIで表す• サービスのURIにHTTPメソッドでアクセスすることでデータの送受信を行うJSON例{• パラメータを指定して特定のURIに“result":[
アクセスするとJSON(またはXML)で{応答される“subject":“english",“score": 80,“state":“good"• JSON (JavaScript Object Notation)• 軽量のデータ交換フォーマット
• キーと値のペアでデータを管理({“key”:”Value”})• 配列の使用もできる。（[ ]で表現）},{“subject":“math",“score": 70,“state":”normal"}]｝

第22回 Delphi/400 テクニカルセミナー

1- Watson API

使用方法• Language Translatorサービス• 言語変換サービス （日本語→英語、英語→日本語など）• 一般的なWEB翻訳サービスと違い、専門用語等を個別に登録することや、機械学習によるカスタム翻訳モデルを作成することが可能で、高精度の翻訳が可能。
＜活用例＞• 海外担当者とのメールのやりとりに活用• システムの多言語対応で、DB上に日本語でしか保持していない情報を翻訳して、画面に出力（デモサイト）https://language-translator-demo.ng.bluemix.net/

第22回 Delphi/400 テクニカルセミナー

1- Watson API

使用方法• Watson APIを使用するために• Watsonの各サービスは、事前にインスタンスの作成が必要• インスタンス作成手順
IBMクラウドにログインして行う。 https://console.bluemix.net/

IBM Cloudにログイン。

新規リソースの作成。

第22回 Delphi/400 テクニカルセミナー

1- Watson API

使用方法• インスタンス作成手順
サービスの概要、インスタンス
情報が表示。

作成したいサービスを選択。

価格プランが表示。ライトの場合は、月当たりの使用可能量が確認できる。

実行すると、インスタンスが作成される。

第22回 Delphi/400 テクニカルセミナー

1- Watson API

使用方法• インスタンス作成手順• インスタンス作成後、APIを使用するのに必要な資格情報を取得※ ここから、「チュートリアル」や「APIのリファレンス」も参照可能

作成されたインスタンスをクリック。

「表示」クリックで、ユーザー
パスワードが表示【資格情報】
サービスを使用する為のURL、
ユーザー名、パスワードが表示。

●●●●●●

資格情報：プログラムからAPIを使用する際に必要なURLおよび認証情報（使用するWatson API インスタンス単位に必要）
第22回 Delphi/400 テクニカルセミナー

1- Watson API

使用方法• Language TranslatorサービスのAPI仕様
リクエスト※API仕様の詳細は、APIリファレンスを参照

GET /v2/translate
パラメータ

タイプ

内容

text

URL パラメータ

翻訳したい元のテキストを指定

sourceURL パラメータ

元テキストの言語を指定 (ja,en...)target

URL パラメータ

翻訳後の言語を指定 (ja,en...)

レスポンス例

パラメータ

内容

{

translations:[translation]

翻訳結果のテキスト

word_count元テキストの単語数

character_count元テキストの文字数"translations" : [ {"translation" : "Hi,"} ],"word_count" : 1,"character_count" : 5}

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成• Delphi RESTコンポーネント• 4つのコンポーネントを使用
TRESTClient
Web サービスへのリクエストを実行。
サービスに対する HTTP 接続を管理し、HTTP ヘッダーおよびプロキシ サーバーを処理し、応答データを受け取る。
THTTPBasicAuthenticator
HTTP 基本認証を実装したもの。
（Watsonは、HTTP基本認証使用）※他に、OAuth1.0a認証、
OAuth2 認証 に対応したコンポーネントもある

TRESTRequest
Web サービスに対する実際の HTTP
リクエストを形成するパラメータや設定をすべて保持。

TRESTResponse
Web サービスからのすべての戻りデータを保持。

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成

RESTClient1: TRESTClient• 日本語↔英語翻訳ツール
資格情報のユーザーとパスワード

資格情報のURLHTTPBasicAuthenticator1:
THTTPBasicAuthenticator●●●●●●

RESTResponse1:
TRESTResponse

RESTRequest1: TRESTRequest

HTTPメソッド (GET)cbxLangSource: TComboBox
MemoSource: TMemo

ButtonTransrate: TButton

RESTリソース（パラメータ）

cbxLangTarget: TComboBox
MemoTarget: TMemo

source = 元の言語
target = 変換後の言語

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成

AddItem パラメータをセット• コード例

pkURLSEGMENT：パラメータをURL セグメントの値として使用。
リソース中の { } 部分を置換。
pkGETorPOST：パラメータを、URL
パラメータ（GET リクエストの場合）
または本体のパラメータ（POST
リクエストの場合）として、送信。

HTTP 要求を実行

応答内容を表す文字列

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成• 実行結果

１．日本語文字列を入力

２．ボタンクリック

３．レスポンスとして、JSONデータが返却

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成• JSONデータの取り扱い•

Delphi/400には、JSONデータを取り扱うためのRTLとして、[System.JSON]ユニットが用意されている。

•

TJSONObject： JSON オブジェクトを実装したクラス（メソッド）ParseJSONValue： 解析したデータに対応する JSON 値を返す。
TJSONValue ： 文字列、数値、オブジェクト、配列、true/falseの型を持つ
すべての JSON クラスの上位クラス（メソッド）GetValue＜T>： 指定したパスの値をT型として取得•

変数sRet の値{“result":[{“subject":“english",“score": 80,“state":“good"},{“subject":“math",“score": 70,“state":”normal"
}
]
｝

実行結果

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成• 修正コード例

パースした結果を文字列変数にセット

第22回 Delphi/400 テクニカルセミナー1- 簡単なサンプルの作成• 実行結果

翻訳結果のみが表示

第22回 Delphi/400 テクニカルセミナー

1-３．音声を使ったWatson APIの活用

第22回 Delphi/400 テクニカルセミナー

1-

 検討するアプリ• 自動翻訳機• 日本語でしゃべった内容を英語に変換し、音声出力する。
おはよう
Speech To Text
(音声認識)「おはよう」
LanguageTranslator(言語変換)

Good Morning
Text To Speech(音声合成)“Good Morning”
第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成• Speech To Textサービス• 音声をテキスト文字列に変換するサービス• カスタマイズ辞書を登録することで、専門用語等も正確に変換することが可能• サポート言語：ブラジル・ポルトガル語、フランス語、日本語、
中国語（標準）、アラビア語、スペイン語、イギリス英語、
アメリカ英語＜活用例＞• アプリケーションの音声操作• コールセンターにおける通話内容の自動テキスト化• 会議のリアルタイム議事録作成（デモサイト）https://speech-to-text-demo.ng.bluemix.net/
第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成• Speech To TextサービスのAPI仕様
リクエスト※API仕様の詳細は、APIリファレンスを参照

POST /v1/recognize
パラメータ

タイプ

内容

Content-Type

リクエストの HTTP ヘッダー

音声データのフォーマット（MIME type)model

URL パラメータ

言語と帯域のモデルを指定（日本語狭帯域：ja-JP_NarrowbandModel)

audio

リクエストの本体

音声データ（ストリーム）

レスポンス例{ "results": [{"alternatives": [{"confidence": 1.0,
"transcript": "おはよう"}],"final": true} ],"result_index": 0
}

パラメータ

内容

confidence

変換の信頼度（0-1）

transcript

変換結果

final

変換の終了を示す

result_index

結果のインデックス

第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成• マイクから録音する方法• MediaPlayerコンポーネント• 動画の再生や、音声の録音/再生が可能.wav(音声ファイル）形式で録音を開始

Shape1: TShape
マウスを押すと録音開始
マウスを離すと録音終了

ファイル名の指定[プロジェクト名].wav

録音した内容を.wavファイル
に保存

第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成

RESTClient1: TRESTClient• 設計画面

資格情報のURL• RESTコンポーネントの配置
MediaPlayer1
Visible = False (非表示）

RESTResponse1:
TRESTResponse

HTTPBasicAuthenticator1:
THTTPBasicAuthenticator

RESTRequest1: TRESTRequest

HTTPメソッド (POST)

資格情報のユーザーとパスワード
RESTリソース（パラメータ）●●●●●●

model :言語と帯域のモデル
ja-JP_NarrowbandModel(日本語)

第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成• 音声ファイルを元に変換を実施
ソース（1/2)
AddItem パラメータをセットメモリ上にストリームデータを保持するオブジェクト変数

pkHTTPHEADER：パラメータをリクエストの HTTP ヘッダーとして使用
pkREQUESTBODY：パラメータを、
リクエストの本体として使用【録音結果のファイル作成部分は割愛】
音声ファイルの取得

ストリームデータ
パラメータのコンテンツ タイプ

第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成• 音声ファイルを元に変換を実施
ソース（2/2)

JSONより変換結果の文字列を取得

第22回 Delphi/400 テクニカルセミナー

1- 音声認識の作成• 実行結果今日は、テクニカルセミナーを実施します。

１. 丸い部分をマウスで押しながら、話す

２．音声認識された
結果の文字列が出力

第22回 Delphi/400 テクニカルセミナー

1- 音声合成の作成• Text To Speechサービス••••

テキスト文字列を元に音声読み上げを行うサービス
話速・声の高さ・ポーズの位置などを自由に設定可能
カスタマイズ機能により独自の単語も登録可能
サポート言語：ドイツ語、英語、スペイン語、フランス語、
イタリア語、日本語、ブラジル・ポルトガル語＜活用例＞• 電話の自動応答システムで、音声案内を実施• 業務システムにおける文字データの音声読み上げ• 外国語文章の読み上げによる英語学習（デモサイト）https://text-to-speech-demo.ng.bluemix.net/

第22回 Delphi/400 テクニカルセミナー

1- 音声合成の作成• Text To SpeechサービスのAPI仕様
リクエスト※API仕様の詳細は、APIリファレンスを参照

GET /v1/synthesize
パラメータ

タイプ

内容

Accept

URL パラメータ

要求する音声データのフォーマット（MIME type)voice

URL パラメータ

音声合成に使用される声（日本語：ja-JP_EmiVoice)text

URL パラメータ

変換対象テキスト

レスポンス
要求したフォーマットの音声データ

第22回 Delphi/400 テクニカルセミナー

1- 音声合成の作成

RESTClient1: TRESTClient• 設計画面•

資格情報のURL

RESTコンポーネント
RESTResponse1:
TRESTResponse

RESTRequest1: TRESTRequest
MediaPlayer1
Visible = False (非表示）

HTTPメソッド (GET)
資格情報のユーザーとパスワード

RESTリソース（パラメータ）●●●●●●

accept : 音声データの形式
voice : 音声合成で使用される声（日本語：ja-JP_EmiVoice)

第22回 Delphi/400 テクニカルセミナー

1- 音声合成の作成• テキストから音声ファイルを作成

AddItem パラメータをセット

ソース

pkGETorPOST：パラメータを、URL パラメータとして、送信。

レスポンスの音声データをストリームに書き込み、ファイルとして保存

MP3音声ファイルを
メディアプレイヤーにて再生

第22回 Delphi/400 テクニカルセミナー

1- 音声合成の作成• 実行結果１．音声合成させたい内容をテキストで入力

本日は、テクニカルセミナーにご参加いただきありがとうございます。

２．ボタンクリック

３．音声にて出力

第22回 Delphi/400 テクニカルセミナー1- 自動翻訳機アプリ• 設計画面• 3種類のRESTコンポーネントを配置

MediaPlayer1
音声録音用

Shape1: TShape
マウスを押すと録音開始
マウスを離すと録音終了

MediaPlayer2
音声再生用

音声認識（Speech To Text）

言語変換（Language Translator）

音声合成（Text To Speech）

MemoSource：TMemo
MemoTarget：TMemo

補足資料に、全ソースコードを掲載
第22回 Delphi/400 テクニカルセミナー1- 自動翻訳機アプリ• 実行（デモ）１．丸い部分をマウスで押しながら、日本語で話す

２．音声認識された日本語のテキストが出力

３．日本語が英語に変換

４．変換された英語で音声出力される

第22回 Delphi/400 テクニカルセミナー

1-４．Watson APIを活用したチャットボット

第22回 Delphi/400 テクニカルセミナー

1-

 検討するアプリ• チャットボットによる•物件紹介

質問に対し、自然言語で回答していくことで、お勧め物件を紹介する。
Assistant(照会応答)

家賃はいくら位？
家賃は6万円くらい
DB2 /400

あなたにお勧めの物件はこちら！

第22回 Delphi/400 テクニカルセミナー

1- チャットボットについて• チャットボットの採用例 （Watson事例より）• 日本航空• ハワイに関する現地情報を紹介• ケイ・オプティコム• お問合せ用アシスタントとして使用

インターフェースとしては、Webやモバイルでの使用が多い
第22回 Delphi/400 テクニカルセミナー

1- チャットボットについて• チャットボットのメリット• システム操作に詳しくない人でも会話形式で目的が達成できる。
• 対話内容がログとして残るため、履歴管理が可能。
• 一つのインターフェースで、色々な作業ができる。
（商品検索する、在庫を確認する、納期確認する、発注する全て一つのチャット上で行える）

といった操作が、業務システムでも、十分活用可能！
デスクトップに常駐する
チャットアプリで、社内のサポート問い合わせや
業務データの照会を手軽に行える

以前は、出先で調べ物がある
場合、電話連絡していたが、現在は、チャットボットにより簡単に問合せが行える

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• Assistantサービス• ユーザーとコンピューターが自然言語で対話可能な
アプリケーションを簡単に開発するためのサービス• 開発者はシンプルで洗練された開発ツールを用いることで、対話の流れを直感的な操作で作ることが可能。
＜活用例＞• オペレータが対応していたお客様や社内ユーザーからの問合せや手続きをチャットボットが代行• ロボット等の機械と人間の音声対話の実現（デモサイト）https://conversation-demo.ng.bluemix.net/（英語）

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• Assistantサービスの概要
Watson Assistantサービス内にある開発ツールを使用して、会話フローを作成

登録内容がWatsonによって学習される

WatsonAssistant
こんにちは。
こんにちは。物件をご紹介します！

画面から取得した
入力文字列をAPIでPOST

APIのレスポンスで取得した応答文字列を画面へ渡す【入力】“こんにちは。”「挨拶」が入力された場合、フローにある「挨拶」の応答を返す。
【出力】“こんにちは。物件をご紹介します！“第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• 会話フローの作成• 開発ツール起動方法
Assistantサービスのインスタンス
画面から、「ツールの起動」をクリック

ツールの初期画面。
[Workspaces]タブをクリック

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• 会話フローの作成• ワークスペースの新規作成

新規作成の場合、[Create]をクリック

ワークスペースの名前と概要を入力[Create]をクリックで新規ワークスペースが作成

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• 会話フローの作成• ワークスペース画面
ワークスペース画面にある[Intents], [Entities], [Dialog]を定義することで、会話のフローをつくる

Try it Out 画面例[Try it]をクリックすると、作成した会話フローを実際に試すことができる。

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• 会話フローに必要な4つの概念• Intent（発言の意図）• ユーザーが発言した入力テキストに含まれる「意図」。入力内容をAssistantサービスが分類し、発言でユーザーが求めている意図を理解。
WatsonAssistant

物件をさがして物件の検索をします。
家賃はいくら位を希望しますか？

Intent「物件の検索」を認識• Entity（意味づけされた単語）• ユーザーが発言した入力テキストから抽出された意味付けされたキーワード。入力テキストから抽出されたEntityは、ユーザーの「目的」の対象物を示す。
部屋をさがして物件の検索をします。
家賃はいくら位を希望しますか？
車をさがしてWatsonAssistant
Entity「物件」を示す単語
・部屋 ・賃貸 ・マンション
・アパート ...

私は、車を検索できません。

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• 会話フローに必要な4つの概念• Dialog（対話の流れ）• ユーザーの発言に対する対話の流れを制御するロジックをDialog（ノード）の組み合わせで実装。ユーザーの要求（IntentとEntity）に応じて一つの返事を返すだけのシンプルなノードだけでなく、ユーザーが求めるものを掘り下げていく木構造となったノードも作成可能。
ユーザーの入力に対し、Intent「挨拶」を認識した場合ユーザーの入力に対し、Intent「物件の検索」を認識した場合ユーザーの入力に対し、登録されたIntentが認識できない場合「解釈できません。違う表現で試してください」と返す。

「こんにちは。物件をご紹介します！」と返す。
「物件を検索します。
家賃はいくら位ですか？」と返す。

ユーザーの入力に対し、「金額」を認識した場合「都道府県はどこを希望ですか？」と返す。

第22回 Delphi/400 テクニカルセミナー「都道府県」
を認識
した場合

1-

 照会応答サービス• 会話フローに必要な4つの概念• Context（会話の背景）• ユーザーとWatson Assistantが対話を行うにあたって情報を保持できる領域。対話の回数の保持や、必要情報が全て入力されたかのチェック等に使用可能。Context上に任意の変数も設定でき、アプリ側でその値を使用してDBの参照等を行うこともできる。
物件の検索をします。
家賃はいくら位を希望しますか？
6万円くらい都道府県はどこを希望しますか？
大阪を希望

間取りはどれくらいですか？
1LDKを希望

お勧め物件はこちらです。

WatsonAssistantContext内に定義した[price]
変数に60000をセット

WatsonAssistant[state]変数に“大阪府”をセット

WatsonAssistant[layout]変数に“1LDK”をセット

物件ファイル

3つの変数の値をアプリ側で取得して、DBの検索条件に使用

第22回 Delphi/400 テクニカルセミナー

1- 照会応答サービス• Watson Assistant についての詳細な情報• チャットボット開発を手早く簡単に
https://www.ibm.com/watson/jp-ja/how-to-build-a-chatbot/• Watson Assistantの使い方を学ぶ
https://www.ibm.com/developerworks/jp/cognitive/library/cc-watson-chatbot-conversation/index.html

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• 物件紹介ワークスペース環境の準備• 付録CD-ROMに収録された[物件紹介]ワークスペースを取り込む

付録のCD-ROMにある[bukken.json]を選択[物件紹介]ワークスペースが取り込まれて使用可能になる

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• 物件紹介ワークスペース•[Intents]タブ

物件検索を識別する為の入力テキストの例を登録してWatsonに学習させる

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• 物件紹介ワークスペース•[Entities]タブ「物件」という目的を表す
単語の登録

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• 物件紹介ワークスペース•[Dialog]タブ
ノードを登録して、会話のフローを作成「もし～を認識したら」と登録物件に関連する単語で、物件検索を認識する場合のノード「～と返答し」を登録
メッセージだけでなく、Contextに独自の変数も登録可能「～する」を登録
次の入力を待ち受けたり、別のノードに移動したりする

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• ワークスペースIDの取得• プログラムからAPIを使用する場合、ワークスペースを識別する為に
Workspace IDを使用する
Workspace ID
ワークスペースを識別するID
APIで呼び出す際、対象となるWorkspace IDを指定する対象となるワークスペースより[View details]を選択

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• AssistantサービスのAPI仕様
リクエスト※API仕様の詳細は、APIリファレンスを参照

POST /v1/workspaces/{workspace_id}/message
パラメータ

タイプ

内容

workspace_id

URL パラメータ

使用するWorkspace ID

version

URL パラメータ

APIのバージョン日付 （現在は、2018-02-16を指定）

body

リクエストの本体送信するメッセージおよび会話の状態（Context）をセット （JSON形式）

レスポンス例{"context": { ... },"entities": [],"intents": [{ ... }],
"output": {"log_messages": [],"text": ["おはようございます！"],"nodes_visited": ["node_3_1480025899490"]},"input": {"text": "おはようございます"}

パラメータ

内容

output:text

会話の応答

input:text

送信した会話context

会話の状態}

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• 設計画面•

資格情報のURL

ButtonConv: TButton

RESTコンポーネント
EditInput: TEdit

RESTResponse1:
TRESTResponse
資格情報のユーザーとパスワード
HTTPメソッド (POST)●●●●●●

EditPrice: TEdit

MemoConv: TMemo

EditState: TEdit

EditLayout: TEdit

RESTリソース（パラメータ）
Workspace IDを指定
version : APIバージョン日付をセット

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• ソース(1/2)
会話情報のJSONテキスト作成
Private変数 FContext: コンテキスト（会話の状態）
会話を継続する為に、2回目以降
前回のコンテキスト値を再セット

AddItem パラメータをセット
会話のメッセージおよび状態をセット
コンテンツタイプには下記を指定
ctAPPLICATION_JSON

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• ソース(2/2)
会話の応答を取得

会話の状態を取得※contextの中にある“conversation_id”が会話を特定するID

ワークスペース内でセットされた変数を取得

第22回 Delphi/400 テクニカルセミナー

1- チャットボット機能の作成• 実行結果１．文章を入力

２．ボタンクリック

３．入力内容と応答内容が出力

４．会話が進むにつれ、
contextに格納された変数の値が順番に表示↓
最終的にこの条件を使ってDBを検索すればよい。

第22回 Delphi/400 テクニカルセミナー

1- 物件紹介チャットアプリ• モバイルから実行できるチャットボットアプリの作成•

DataSnapサーバーを使用した3層アプリ

Watson Assistant(照会応答)

Delphi/400
DataSnap Client
アプリ(FireMonkey)【画面UI処理】・チャット画面・物件検索結果表示画面

Delphi/400
DataSnap Server
アプリ

物件ファイル【ロジック】・Assistantサービスへの問い合わせ・IBM i からデータ取得

第22回 Delphi/400 テクニカルセミナー

1- 物件紹介チャットアプリ• DataSnapアプリ•

DataSnapアプリ開発の詳細については、下記を参照
第14回テクニカルセミナー『Delphi/400 XE5－こんなに簡単！IBM i スマートデバイスネイティブ開発－』

dbExpress接続を使用したDataSnapアプリの構成

DataSnap
Clientアプリ
SQLConnection
DataSnapサーバーへの接続を定義

DataSnap
Serverアプリ
TClientModule1

TServerMethods1

DSProviderConnection
DataSetProviderが定義されたサーバークラスを指定

IBM i への接続
C/S同様にdbExpress
接続で、IBM i に接続

ListFrm(結果表示)
ClientDataSet
メモリ上のデータセット
MainFrm(チャット)

TServerMethods1Client
サーバーで定義されたサブルーチンをクライ
アントから実行

DataSetProvider
データセットをクライアントに公開

Assistantを呼び出す
サブルーチンを定義
Watson Assistant(照会応答)

第22回 Delphi/400 テクニカルセミナー

1- 物件紹介チャットアプリ• 処理概要Watson Assistant(照会応答)

MainFrm(チャット画面)
チャット形式の会話を行う

物件の条件を会話で確認

条件が決まるごとに、contextの各変数の値を渡す

家賃（context: price)
都道府県（context: state)
間取り（context: layout)

show_data=“1”を受け取ったら、吹き出し内に画像を表示

条件がよいかの
確認

N

Y
条件終了フラグ（context: show_data=“1”)

画像クリックによりListFrmに遷移
ListFrm(検索結果表示画面)
各変数を使用してSQL文を作成して実行

補足資料に、全ソースコードを掲載
第22回 Delphi/400 テクニカルセミナー

1- 物件紹介チャットアプリ• 実行（デモ）contextに格納された変数の値を使って物件ファイルをSQL検索

物件ファイル
WatsonAssistant

物件紹介
ワークスペース

第22回 Delphi/400 テクニカルセミナー

1-５．まとめ

第22回 Delphi/400 テクニカルセミナー

1- まとめ• Watson API••••

WatsonはIBM Cloudの一機能として使用可能
ライト・アカウントであれば無償で使用可能
Watson API は、REST/JSONサービスとして使用
APIリファレンスに、呼出方法が記載されている• Delphi/400からのWatson API呼び出し• RESTコンポーネントにより呼び出しが可能• JSONをパース（解析）するユニットも使用可能

Delphi/400アプリに色々なWatson APIと連携させることで、より便利なアプリ構築が可能に！
第22回 Delphi/400 テクニカルセミナー

1-

ご清聴ありがとうございました。

第22回 Delphi/400 テクニカルセミナー

1-• 補足資料：

自動翻訳機アプリ

ソースコード

第22回 Delphi/400 テクニカルセミナー

1- 補足：自動翻訳機アプリ
フォーム

宣言部

ソースコード録音ファイル名を保持
再生ファイル名を保持

音声再生処理フォーム

実装部（１）
録音終了処理録音ファイルに保存
再生終了時イベント
音声ファイルを削除

録音開始処理第22回 Delphi/400 テクニカルセミナー

1- 補足：自動翻訳機アプリ
フォーム

実装部（２）

マウス押した時のイベント
録音開始

ソースコード
音声ファイルを文字列に変換する処理マウス離した時のイベント
録音終了から翻訳、音声再生まで実施（メイン処理）

第22回 Delphi/400 テクニカルセミナー

1- 補足：自動翻訳機アプリ
フォーム

実装部（３）

ソースコード

テキスト文字列を音声ファイルに変換する処理入力文字列を翻訳する処理

第22回 Delphi/400 テクニカルセミナー

1-• 補足資料：物件紹介チャットアプリ

ソースコード

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Server アプリ•

AssistantサービスとIBM iへの問い合わせ

TServerMethods1【宣言部】

IBM i へのQuery(データ参照)SQL実行結果は、
DataSetProvider1を通してクライアントに公開

Assistant (照会応答)
クライアントに公開するサブルーチン
Conversation : 入力文字を入れると応答文字を返却
Price： 家賃の現在値を取得
State： 都道府県の現在値を取得
Layout： 間取りの現在値を取得
ShowData：検索の条件がそろった場合、True

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Server アプリ
フォーム

実装部（１）

入力文字列をもとに、会話の応答を返却する処理OnCreateイベント
初期処理 変数初期化、DB接続

IBM i の接続環境にあわせて要修正

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Server アプリ
フォーム

実装部（２）

間取りの現在値を返却する処理

家賃の現在値を返却する処理

検索結果を表示するフラグの現在値を返す処理

都道府県の現在値を返却する処理

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

DataSnapクライアントモジュールの作成方法

TServerMethods1Client
DataSnapサーバーに用意されたメソッドが自動的に定義。
TServerMethods1Clientクラスのオブジェクトを通してアクセス可能。

IBM i へのQuery発行
CommandTextプロパティに設定したSQL文をDataSnapサーバーを通して実行。
結果をClientDataSetが受け取る。

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

ClientModuleUnit1

実装部

OnCalcFieldsイベント[計算項目]に値をセット[計算項目]を定義

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

宣言部

MainFrm
EditInput: TEdit

ButtonPost: TButton

ScrollBoxMain: TVertScrollBox

Image1: TImage

TImageクラスに家賃、都道府県、間取りの情報を追加

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

MainFrm

ボタン押下時処理（メイン処理）左側（ワトソン側）
吹き出し表示処理

画像クリック時処理
検索結果画面へ遷移

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

MainFrm
右側（人側）
吹き出し表示処理

拡張Imageクラスの生成処理

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

ListFrm

宣言部

ButtonBack: TButton

ListView1: TListView

LabelMsg: TLabel

物件名
物件詳細

第22回 Delphi/400 テクニカルセミナー

1- 補足：物件紹介チャットアプリソースコード• DataSnap Client アプリ•

ListFrm

戻るボタン押下時処理

物件データ取得処理
SQLを指定してClientDataSet取得

フォーム終了処理

フォーム表示処理
物件データを取得

第22回 Delphi/400 テクニカルセミナー

1-