1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[IRNA] IRNAからwatsonx.aiに質問する方法

Posted at

はじめに

IBM Rapid Network Automation(IRNA)からIBMのLLMプラットフォームであるwatsonx.aiに質問をするワークフローを作ってみたので紹介します。

実現方法

IRNAのワークフロー機能には、HttpRequestというGUIベースで作成した設定を元にAPIコールを実施してくれるものがあります。
今回はHttpRequestの機能を使ってwatsonx.aiに対してAPIコールで質問を投げ、回答をもらうという動作を実現しました。

この記事はIBM Cloudのアカウントがあることを前提にしています。
さくっと試したい場合は以下のリンク先から評価環境の作成が可能です。
https://jp-tok.dataplatform.cloud.ibm.com/registration/stepone?context=wx&preselect_region=true
また、IRNAからwatsonx.aiにアクセスできる環境が必要です。

1. 事前準備

事前準備としてwatsonx.aiのデプロイを済ませ、APIキーとProject IDを取得しておきます。
APIキーとProject IDの取得方法は以下を参考にしてください。

watsonxのAPIを呼び出せるようになるまで
watsonx.aiのAPIの使い方とサンプルコード

2. ワークフロー作成

IRNAのワークフローを作成します。
完成したワークフロー全体の流れは図のようになっています。
image.png

以降に個々の設定内容を説明します。

2-1. 環境変数の設定

まず、環境変数として以下の変数を定義しました。
$question_message watsonx.aiに質問するプロンプト文章、ここに質問内容を入力する
$watson_api_token APIキーから取得するアクセストークン
$apikey 事前準備で取得したAPIキー
$project_id 事前準備で取得したProject ID

$result はデフォルトで存在する変数です。

image.png

2-2. 1つ目のHttpRequestの設定

1つ目のHttpRequestはAPIキーからアクセストークンを取得するために作成します。

IBM Cloudの仕様上、発行されたアクセストークンは1時間(3600秒)が有効期限になっていました。一定時間経過するとアクセストークンがExpireしてしまうため、都度取得するワークフローとしました。

以下のcurlを実行するとアクセストークンを取得できるので、これをHttpRequestのパラメータとして置き換えて設定します。

curl -X POST "https://iam.cloud.ibm.com/identity/token" \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'grant_type=urn:ibm:params:oauth:grant-type:apikey' \
-d 'apikey=事前準備で取得したAPIキー'

HttpRequestはCommon配下にあります。
image.png

HttpRequestでは画像のような設定となります。
image.png

Queryに設定した"grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=" + $apikeyで事前に取得したAPIキーをセットしています。

2-3. 1つ目のAssignの設定

上記のHttpRequestで取得したアクセストークンを環境変数にセットするAssignを設定します。
image.png

2-4. 2つ目のHttpRequestの設定

2つ目のHttpRequestがwatsonx.aiにプロンプトをリクエストする部分の設定になります。

どういったパラメータを入力する必要があるのかはwatsonx.aiのPrompt Labから確認しました。
Prompt Labではプロンプトをコード表示する機能があるのでcurlではどういったコードになるかの確認が可能です。画像の赤枠部分をクリックするとコードが表示されます。
image.png

テキストでは次のような内容です。

curl "https://jp-tok.ml.cloud.ibm.com/ml/v1/text/generation?version=2023-05-29" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -d '{
	"input": "IBM watsonx.aiについて教えてください",
	"parameters": {
		"decoding_method": "greedy",
		"max_new_tokens": 200,
		"min_new_tokens": 0,
		"stop_sequences": [],
		"repetition_penalty": 1
	},
	"model_id": "ibm/granite-8b-japanese",
	"project_id": "使用するwatsonx.aiのProject IDが入ります"
}'

URLはwatsonx.aiをデプロイしているリージョンによって変更が必要です。
今回の例は東京リージョンとなります。他のリージョンはリンク先のEndpoint URLsを参照してください。https://cloud.ibm.com/apidocs/watsonx-ai

HttpRequestでcurlのコードを置き換えて画像のような設定をしました。
image.png

次の点で汎用性を上げています。
・Headersの"Authorization"に有効なアクセストークンが必要となるので$watson_api_tokenを使用
・Bodyの"input"に$question_messageを使用することで質問内容を変更したい場合に環境変数値の変更で対応可能

別のLLMを使用したい場合は”model_id”を変更することで可能です。watsonx.aiでサポートされているLLMはリンク先でご確認ください。
IBM Cloud 上のサービスおよび機能の地域での可用性

2-5. 2つ目のAssignの設定

最後に上記のHttpRequestの結果をAssignにセットする設定をします。
image.png

3. テスト

作成したワークフローでwatsonx.aiに質問できるかテストします。
設定に問題なければRunを実行した際のLogで回答が返ってきます。
image.png

以下が「IBM watsonx.aiについて教えてください」の結果です。
image.png

Prompt Labで質問した場合と同じ結果が得られたので正しく機能しているようです。

4. さいごに

今回の記事はここまでのワークフローの内容ですが後続で別のサービスに渡すようなワークフローが実際のユースケースと想定されます。
また、今回Inputは固定で設定していますが他の機器からのwebhook通知など動的な入力情報からwatsonx.aiに質問することでIRNAとwatsonx.aiのシナジーが発揮できると思います。

以上、IRNAからwatsonx.aiに質問する設定の紹介でした。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?