LoginSignup
17
7

watsonxのAPIを呼び出せるようになるまで

Last updated at Posted at 2023-08-01

はじめに

ついにIBMでも生成AIが出てきて、EnterpriseのためのAIはどこまで使えるようになるのか楽しみですね。
さて、その使い勝手を検証してもらうためには、様々な人たちに使ってもらう必要があると思いますし、誰かがアプリケーションに組み込んでみて初めて真価を発揮するでしょう。

早速使ってみたいけど、SDKは2023/8/1時点でPythonのみ提供されているみたい。Node.jsを普段使う身としては、せめて curl で呼び出せる必要が、、、
なので、こちらの記事ではwatsonxのAPIをcurlで呼び出せるようになるまでの細かい手順を紹介します。

※IBM Cloudアカウントがあることが前提になっています

IBM watsonxへまずアクセスしてみよう

https://dataplatform.cloud.ibm.com/login?context=wx&save_region=true
こちらにアクセスします。
実行環境は以下から選択できますが、今回はダラスに作成します。

  • ダラス(us-south)
  • ロンドン(eu-gb)
  • フランクフルト(eu-de)
  • 東京(jp-tok)
    IBMidはすでにあるIBM Cloudアカウントの情報を入力してください。

注意
実行環境選択したロケーションにLiteプランのWatson Studio/Watson Machine Learningが作成されます。
すでにLiteプランの両サービスがある場合は、そのサービスと同じロケーションを選択するか、既存のLiteプランのサービスを削除してから実施する必要があります。

image.png
認証ページが表示されるので、IBM Cloudアカウントと同じ情報を入力ください。
image.png
連絡先と利用ポリシーを確認されるので、必要な情報を入力します。
image.png
無事にポータルが表示されました
image.png
試しに生成AIに質問を投げてみたいので、 ファウンデーション・モデルを試し、プロンプトを作成するを選びます。
なお、自動的に xxのサンドボックス という名前でProjectが作成されました。
Projectはwatsonxを動かす上での一定のワークスペースとなります。
image.png
利用ポリシーを確認されるので、すべての項目にチェックを入れます。
私は特にツアーは必要ないですが、ツアーを見たい方はツアーを開始を選択してください。
image.png
とりあえず、初期表示された状態で、画面末尾のプロンプトのテスト、の項目に「日本の首都は?」と入れて、画面右下の「生成」のボタンを押します。
image.png
無事に「東京」という回答が得られました。他の都道府県が応答されたらどうしようかと思いました。
image.png
画面末尾に以下のような記載があります。

停止理由: シーケンス・トークンの終わりが検出されました
トークン: 17 入力 + 5 生成済み = 22 / 2048
4 秒

今回の生成AIの利用で、入力に17、出力に5、合計22のトークンを消費しています。
この利用したトークンは重要で、Liteプランで利用する場合、月に25,000トークンまでしか利用できません。

注意
watsonxで生成AIを利用する場合、裏でWatson Machine Learningのサービスを利用しています。
月に25,000トークンまで利用可能な記載はWatson Machine Learningのサービスのプランに記載されています。

curlで実行するために

実は、先ほどの画面の右側に「コードの表示」というボタンがあります。
image.png
開いてみるとここにcurlのコマンドが。これで実行できるのでは?と誰もが思うはずです。
image.png

問題は、Bearer認証で記載されている YOUR_ACCESS_TOKEN は、どこにあるのか?という問題。

xxのサンドボックスというProjectを選択し、「管理」から「アクセス制御」を選択すると「アクセストークン」のタブが見えます。
image.png

試しにアクセストークンを作成してみましょう。
image.png
無事にトークンが作成できました。
image.png
これでやっと curl で先ほどの内容を再現できるでしょうか?

エラーだってよ

HTTP/1.1 401 Unauthorized
image.png

つまり、先ほど作成したアクセストークンは、生成AIを利用するためのものではない、ということです。

では、どうやってアクセストークンを作成すれば良いのか?
ヒントは、curlのリクエスト先のURLを見てください

これ、Watson Machine Learningのエンドポイントですね。つまり、Watson Machine Learningのアクセストークンを発行できる必要があります。

Service IDを作成する

IBM Cloudのポータル上部のメニューにある「管理」から「アクセス(IAM)」を選択してください。
image.png

左側のメニューから「サービスID」を選択します。
すでにいくつかサービスを利用していた場合自動生成された情報もあると思いますが、今回は新規に作成してみましょう。
image.png
最低サービスIDの名称を入れて作成を選択します。
image.png
サービスIDが作成できました。
この状態では、何の権限も持たないので、Watson Machine Learningの権限を割り当てます。
image.png
ポリシーの作成で、まず、サービスに「Watson Machine Learning」を選択します。
image.png
リソースでは、すべてのリソースを選択しても動作するのですが、今回はwatsonx用に作成されたWatson Machine Learningのインスタンスのみ権限がある状態にします。
image.png
とりあえず管理者相当の権限を設定して、末尾の追加を選択します。
image.png
画面右側にアクセス・サマリーが表示されるので、割り当てを選択して、サービスIDに権限を割り当てます。
image.png
これでサービスIDに権限が付与されました。
image.png
このサービスIDに紐づくAPIキーを作成するので、画面上のAPIキーのタブを選択して、作成します。
image.png
最低名前を入力して作成を選択します。
image.png
APIキーが作成されるので、どこかに控えておきましょう。
image.png

表示されたAPIキーはポップアップをCloseする、もしくは表示から300秒経過すると二度と表示されなくなります。
作成したAPIキーは記録するようにしてください。

APIキーからアクセストークンを取得する

こちらの記事にも記載ありますが、下記のようなcurlコマンドで取得可能です

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キー'

応答として下記の内容が得られます。

{
  "access_token": "eyJraWQiOiIyMDIzMDcx(~中略~)ayftdlDpiFQ5tKQ",
  "refresh_token": "not_supported",
  "token_type": "Bearer",
  "expires_in": 3600,
  "expiration": 1690900173,
  "scope": "ibm openid"
}

こちらで生成されたアクセストークンは1時間(3600秒)で失効します。有効期限が切れた場合は、改めてアクセストークンの生成が必要です

curlでwatsonxのAPIを呼び出してみる

先ほど取得したアクセストークンを利用して、改めて先ほど認証でエラーになったcurlコマンドを実行してみましょう

HTTP/1.1 403 Forbidden
image.png

エラーだってよ(再掲)

とはいえ、ここまでくるとあと少しです。
メッセージの中に下記のような内容が記載あります。

Failed to find the iam-ServiceId-xxxxxx member in project_id xxxxxx

これは、watsonxのProjectにそのService IDが参加していません(見つかりません)というエラーなので、ProjectにService IDを含めるようにしましょう。

watsonx のプロジェクトにService IDを含める

watsonxの画面からProjectを選択、管理のタブを選び、左側のメニューからアクセス制御を指定。
先ほどはアクセストークンを見ましたが、今回は、画面右側のコラボレーターの追加からサービスIDの追加を選択します。
image.png
先ほど作成したService IDを検索してチェックボックスにマークをして、忘れがちですがロールを指定して画面右下から追加を行います
image.png
これで無事にService IDがprojectに追加されました
image.png
これで先ほどエラーになったcurlコマンドを実行すると、無事にwatsonxの生成AIから応答が返るようになります。
image.png

さいごに

いかがでしたでしょうか?
watsonxにアクセストークン生成って書いてるのだから、そのアクセストークンでcurlコマンドが動いてほしいですが、ちょっと工夫が必要ですね。
Node.jsのSDKが2023/8/1時点で無いようなので、Node.jsで書いているアプリでwatsonxと連携する場合、アクセストークンの生成処理を自前で書かなければならない部分がありますが、これでやっと自分で作成しているアプリとwatsonxを自力で繋げることが出来そうです。
この内容で少しでも多くの人がwatsonxを触ってみるにあたって、壁に当たることなく利用できることを願います。

2023/8/3 追記
Node.jsからwatsonxを利用する記事を投稿しました
watsonxのAPIをNode.jsから呼び出してみる

17
7
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
17
7