【もっと簡単に】LaravelでWatsonを使おう


過去に書いたLaravelからWatson Assistantを使うをきっかけにWatson AssistantWatson 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 IdManage 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 リファレンス