LoginSignup
5
4

More than 5 years have passed since last update.

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

Posted at

過去に書いた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や認証情報は下記をクリックする事で取得可能です。
Assistant_Credentials1.PNG

DiscoveryのENV_ID及びCollection IdManage dataのこちらから
Discovery_Credentials1.PNG

使い方

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を作りましたが、簡単・便利・その上楽しい:thumbsup:
もっと早くやって置けばよかった…

参考文献

パッケージ開発
Watson Assistant API リファレンス
Watson Discovery API リファレンス

5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4