過去に書いたLaravelからWatson Assistantを使うをきっかけにWatson Assistant
とWatson Discovery Service
の呼び出しをラップするライブラリを作成しました。
ソースはGithubに置いてあります。
packagistはこちら。
インストール方法
composer経由でインストール可能です。
composer require motuo/call-watson-api
watson用のconfig file
を下記のコマンドで生成します。
php artisan vendor:publish
上記のコマンドを実行すると、どのProviderのConfigを生成するか聞かれるので下記のパッケージを選択して下さい。
Provider: motuo\CallWatsonAPI\CallWatsonServiceProvider
最後に、.env
ファイルにWatsonの認証情報やURLを追加しましょう。
WATSON_ASSISTAN_API_URL="https://gateway-fra.watsonplatform.net/assistant/api"
WATSON_ASSISTANT_VERSION="2018-07-10"
WATSON_ASSISTANT_WORKSPACEID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
WATSON_ASSISTANT_USER_NAME=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
WATSON_ASSISTANT_PASSWORD=xxxxxxxxxxxx
WATSON_DISCOVERY_API_URL="https://gateway-fra.watsonplatform.net/discovery/api"
WATSON_DISCOVERY_VERSION="2018-10-15"
WATSON_DISCOVERY_ENV_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
WATSON_DISCOVERY_COLLECTION=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
WATSON_DISCOVERY_USER_NAME=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
WATSON_DISCOVERY_PASSWORD=xxxxxxxxxxxx
ちなみに、Watson Assistant
のワークスペースIDや認証情報は下記をクリックする事で取得可能です。
DiscoveryのENV_ID
及びCollection Id
はManage dataのこちらから
使い方
Watson Assistant APIの呼び出し
簡単にメッセージを送る事が出来ます。
Controllerの例
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//useを忘れずに!!!
use motuo\CallWatsonAPI\CallAssistant;
class TestContoller extends Controller
{
public function index(Request $request,CallAssistant $CWA){
//ここでWatson Assistantにメッセージを飛ばす。
$response = $CWA->postMessage('input message',session('context')?session('context'):[]);
//必要に応じてjsonを配列にデコード
$responseArray = json_decode($response,true);
//連続した会話を実現するために、contextデータをsessionに可能する。
$request->session()->put('context',$responseArray['context']);
return view('welcome');
}
}
Watson Discovery APIの呼び出し方
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use motuo\CallWatsonAPI\CallDiscovery;
class TestContoller extends Controller
{
public function index(Request $request,CallDiscovery $CWD){
//自分のCollection内の検索
$query = ['query'=>[
'version' => '2018-08-01',
'deduplicate' => 'false',
'highlight' => 'true',
'passages' => 'true',
'passages.count' => '5' ,
'natural_language_query' => 'natural_language_query'
]];
$CWD->queryCollection($query);
//トレーニングデータ一覧の取得
$CWD->listTrainingData();
//質問文をキーにQueryIdを取得
$CWD->getQueryIdByNLQ('natural_language_query');
//質問文をトレーニング用のクエリとして追加
$CWD->addQueryToTrainingData('document_id','natural_language_query',100);
//トレーニング用のクエリを削除
$CWD->deleteTrainingDataQuery('query_id');
//既にクエリに紐づいている用例データの一覧を取得
$CWD->listExamplesTrainingData('query_id');
//既に該当のドキュメントがクエリに紐づいている場合、document_idを返却。
$CWD->getExampleId('query_id','document_id');
//トレーニング用データに用例と関連性(0~100)を追加
$CWD->addExampleToTrainingData('query_id','document_id',100);
//トレーニング用データから用例を削除
$CWD->deleteExampleForTrainingDataQuery('query_id','document_id');
}
}
初めてLaravel用のpackageを作りましたが、簡単・便利・その上楽しい
もっと早くやって置けばよかった…
参考文献
パッケージ開発
Watson Assistant API リファレンス
Watson Discovery API リファレンス