この1年はここ数年と比べても LLM への取り組み時間が長い1年だったと思います。普段は普通に OpenAI とかも使ってるんですが(笑)、今回は WatsonX.AI で LangChain やエージェントを使う方法を自分なりに調べた結果を数回に分けて紹介します。 初回である今回は次回以降で実際に watsonx.ai を活用するための準備部分を一通り紹介します。

最初は準備というか、IBM Cloud の Watsonx.AI でプロンプトや Jupyter Notebook を使えるようになるまでの準備作業を紹介します。この辺り、事情が分かっていたり、既に完了している人は飛ばしていただいて構いません。

0:準備編 (今回はここ)
1:Jupyter Notebook 編
2:LangChain 編


IBM Cloud で Watsonx.AI の生成 AI や Cloud Pak for Data の Jupyter Notebook を使うためにはそのための準備がいくつか必要となります。実際にコードを書いたりするのは次回以降からとして、今回は次回以降でコーディングするために必要な一通りの準備を行っておきます。


【IBM Cloud 内に必要なサービスを作る】
最初に IBM Cloud 内に必要なサービスのインスタンスを作成します。先に結論を言うと、以下3つのサービスインスタンスを作っておく必要があります(作成済みであればここは飛ばしていただいて構いません):
IBM Cloud Object Storage
Watsonx.AI Studio
Watson Machine Learning

一番上の Cloud Object Storage は 25GB までの無料枠があり、またそれ以外の2つは無料版が提供されていて、この無料枠内で試すだけであれば実質的な料金をかけることなく試すことができるものです。

では上から順に作成していきます。IBM Cloud にログイン後、画面左にあるメニューの上から3番目(リソース・リスト)を選択して、現在までに作成したサービスインスタンスの一覧を表示します。IBM Cloud Object Storage が作成済みの場合は「ストレージ」カテゴリ内に表示されるので、何か表示されている人はそのインスタンスを使うことで(新たには作成しなくても)代用できます。新規に作成する場合は画面右上の「リソースの作成」ボタンをクリックします:
2024123001


カタログ画面に切り替わるので、検索バーに "object storage" と入力すると "Object Storage" サービスが見つかるので、これを選択します:
2024123002


"Cloud Object Storage" インスタンス作成画面に切り替わります。ここでインフラストラクチャーとしてはデフォルトの "IBM Cloud" が選択されていることを確認して、下にスクロールします:
2024123003


料金プランは "Standard" を選択します(25 GB の無料枠があります)。更にそのまま下にスクロール:
2024123004


リソース名とリソースグループを適当に指定(デフォルトのままでもOK)して、最後に画面右下の「作成」ボタンをクリックしてインスタンスを作成します:
2024123005


少し待つと指定した名前でインスタンスが作成されます。これで Cloud Object Storage インスタンスは作成できました:
2024123006


画面左上のハンバーガーメニュー(横三本線)から「リソース・リスト」を選択して、インスタンス一覧の画面に戻ります:
2024123007


上で作成した Cloud Object Storage のインスタンスが「ストレージ」カテゴリー内に追加されていることが確認できます。これで Cloud Object Storage は準備できました:
2024123008


続けて同様に Watsonx.AI Studio インスタンスを作成します。この画面内右上の「リソースの作成」ボタンをクリックします:
2024123009


カタログ画面では今度は "watsonx" と入力し、候補に出てくるサービス一覧の中から "watsonx.ai Studio" を選択します:
2024123010


"watsonx.ai Studio" インスタンス作成画面に切り替わります。ここでロケーションとして「東京」を選択してください(後述しますが、日本語対応 LLM を使える唯一のロケーションです)。また料金プランは「ライト」を選択すると一定の枠内であれば無料です(もちろん有料の Standard プランを選択いただいても構いません):
2024123011


画面を下にスクロールして、リソース名、リソースグループ(どちらもデフォルトのままで構いません)を指定し、画面右の要約部に表示されている料金を確認した上で、画面右下の同意ボックスにチェックを入れて「作成」します:
2024123012


少し待つと指定した名称のインスタンスが作成されます。これで "watsonx.ai Studio" インスタンスも準備できました。 先ほどと同じ方法(画面左上のハンバーガーメニューからリソースリスト)でもいいのでせすが、この画面の左上にある「リソース・リスト」をクリックした場合でも同じ画面に戻ることができます:
2024123013


リソースリスト内の「AI/機械学習」カテゴリに watsonx.ai Studio のインスタンスが追加されていることを確認します。 必要なインスタンスの追加としては最後に "Watson Machine Learning" インスタンスを作成します。画面右上の「リソースの作成」をクリックします:
2024123014


カタログ画面において "watson ma" くらいまで入力すると、検索候補に "Watson Machine Learning" が表示されるので、これを選択します:
2024123015


"watsonx.ai Studio" の時と同様にロケーションは「東京」を選択し、料金プランは「ライト」にすると無料枠内で利用できます:
2024123016


下にスクロールして、リソースの名称とリソース・グループ(デフォルトのままで構いません)を選択して、画面右上の要約部で料金を確認して、画面右下の同意ボックスにチェックを入れて「作成」します:
2024123017


少し待つと指定した名前のインスタンスが作成されます。ここでも画面左上の「リソース・リスト」をクリックしてリソース一覧画面に戻ります:
2024123018


リソース・リスト画面内において、「ストレージ」カテゴリー内に Cloud Object Storage インスタンスが、「AI/機械学習」カテゴリー内に "watsonx.ai Studio" インスタンスと "Watson Machine Learning" インスタンスがそれぞれ存在していることを確認します:
2024123019


この3つのインスタンスが揃っていれば次に進むことができます。


【プロンプトを実行できるようプロジェクトを準備する】
Watsonx.AI でいわゆる「プロンプト」を実行できるようにするための準備を行います。初回のみ必要な準備や設定があるので、その内容を中心に紹介します。

まずはリソースリストから作成済みの Watson Machine Learning インスタンスを選択します。選択後の画面内に「起動」と書かれているボタン右側の矢印をクリックするとメニューが表示されるので、"IBM Watsonx" を選択します。なお、ここで紹介する初回準備が完了した後はこの "IBM Watsonx" を選択することでプロンプト画面へ遷移することができるようになります:
2024123020


以下のようなダイアログが表示されたらチェックボックスにチェックをいれます。オンラインツアーガイドは不要であれば画面右上の×印をクリックしてダイアログを閉じます:
2024123021


すると以下のような画面になります。必要な準備が完了していると、ここから直接プロンプト画面に遷移できるのですが、そのためには「プロジェクト」と呼ばれる項目が作成されている必要があります(のちのち Python で LangChain やエージェントを使う際に、このプロジェクトの ID が必要になります)。プロジェクト作成済みであればそのプロジェクトを使ってもいいのですが、初回はまだ作成されていないのでこのタイミングで1つ作成しておきます。画面下部の「プロジェクト」と書かれたリンクをクリックします:
2024123022


プロジェクトの一覧画面に遷移します。まだプロジェクトが1つも作成されていないと以下のような画面になるはずです。ここで「新規プロジェクト」ボタンをクリックします:
2024123023


プロジェクトの名前(下図では "project-20241230")を適当に指定し、ストレージ欄には作成済みの Cloud Object Storage を選択します(1つだけ作られている場合ははじめから選択済みのはずです)。プロジェクトで使うストレージまで指定できたら「作成」ボタンをクリックします:
2024123024


指定した名前のプロジェクトが作成され、そのプロジェクトの画面に移動します。このプロジェクト内でどの程度のリソース(CPU やトークン数など)を使ったか、といった概要はここで確認できます:
2024123025


続けてプロジェクトと Watson Machine Learning インスタンスを紐づけします。画面内の「管理」タブから「サービスおよび統合」メニューを選択し、「サービスの関連付け」ボタンをクリックします:
2024123026


「サービスの関連付け」画面内で自分が作成した Watson Machine Learning インスタンスを選択(チェック)して「アソシエイト」ボタンをクリックします:
2024123027


1つ前の画面に戻り、「サービスおよび統合」画面内に選択した Watson Machine Learning インスタンスが関連付けされていることを確認します。これでプロンプトを実行するための準備は整いました:
2024123028


【watsonx.ai のプロンプトを実行する】
では実際に watsonx.ai のプロンプトを実行し、この後の作業で必要になるプロジェクト ID などの値を取り出すところまでを実施します。

上の作業を実行した直後の場合は、元の画面に戻るために画面左上のハンバーガーメニューから「ホーム」を選択します:
2024123029


元の("IBM watsonx.ai" を選択した時の)画面に戻ります。必要な準備が全て完了しているので「Prompt Lab を開く」リンクが有効になっています。ここをクリックします:
2024123030


「プロンプト・ラボへようこそ」というダイアログが表示されたら、全てにチェックを入れて先に進みます(オンラインツアーが不要であれば「ツアーをスキップ」をクリックしてください):
2024123031


以下のような画面が表示されれば、ここからプロンプトを指定して問い合わせを実施することができます:
2024123032


が、実際に問い合わせを行う前に利用する LLM のモデルを変更/指定する手順を理解しておきましょう。画面右上のモデル部(下図では「モデル granite-3-8b-instruct」と表示されている部分)をクリックします:
2024123033


「すべての基盤モデルを表示する」というメニューが表示されるので、この部分をクリックします:
2024123034


すると watsonx.ai で利用可能な LLM 基盤モデルの一覧が表示されます(ここで表示される内容は今後更新される可能性があるので、下図のものとは異なっている可能性があります)。この中から特徴などに合わせて利用する LLM 基盤モデルを選択します。なお Watson Machine Learning インスタンスを作成した時に東京リージョンを選択していると、この中に "granite-8b-japanese" という日本語特化型基盤モデルが選択可能になります。ここではこの "granite-8b-japanese" モデルを選択します(Watson Machine Learning インスタンスを作成した時の料金プランによっては選択できるモデルとできないモデルがあることに注意してください):
2024123035


選択した基盤モデル(ここでは "granite-8b-japanese")の説明が表示されます。これでよければ「モデルの選択」ボタンをクリックして確定します:
2024123036


1つ前のプロンプト画面に戻り、利用基盤モデルが選択したもの(下図の例では "granite-8b-japanese")に切り替わったことを確認します:
2024123037


基盤モデルが確定したところで、改めてプロンプトの問い合わせを実施してみます。「フリーフォーム」が選択されていることを確認して、LLM 基盤モデルに問い合わせしたい内容(下図では「IBM Cloud の特徴を完結に教えてください。」)を入力して、最後に右下の「生成」ボタンをクリックします:
2024123038


すると入力した内容を選択した LLM に問い合わせ、その結果が問い合わせ内容の下に表示されていきます(この結果は選択した LLM 基盤モデルによっても変わります)。とりあえずプロンプトの実施ができることを確認します:
2024123039


【プログラミング時に必要な情報を取り出す】
ここまでの内容で IBM Cloud で watsonx.ai の LLM を使ってプロンプトを実施するまでの手順を紹介しました。 単にプロンプトを使うだけであればここまでの内容でも充分なのですが、本ブログの目的は単なるプロンプト実行ではなく、Python (Jupyter Notebook)のプログラミングで LangChain を実現したり、エージェント処理を実現することです。この「プログラミングによって LLM を利用する」上で必要になる情報を取得する手順を紹介します。

プロンプト問い合わせ後に画面右上のメニュー右から2番目の「コードの表示」アイコンをクリックして、この問い合わせを実施した時のプログラミングコードを確認してみます:
2024123040


「コードの表示」と書かれたダイアログが表示されます。この画面内でどのようなコードを書くと、今と同じ処理を実現できるか、という内容を、Curl/Node.js/Python で確認することができます。

この Curl の画面の中で curl 実行時のパラメーターの中で指定されている model_id と project_id の値はプロングラミング時に必要になるため、メモしておいてください。model_id は LLM の基盤モデルを示す ID で、今回の例だと "granite-8b-japanese" という基盤モデルを示す ID の値(="ibm/granite-8b-japanese")が表示されています。project_id はこのプロンプトを実行している時に使うプロジェクトの ID で、この値は自分以外の人に知られないようにしましょう。

加えて "curl" の直後にある URL のホスト値(下図の場合は "https://jp-tok.ml.cloud.ibm.com")もプロングラミング時に必要な情報です:
2024123041


プログラミングによって watsonx.ai を利用する際に必要な情報がもう1つあります。それは API Key と呼ばれるもので、プログラミングによって実行される処理を実行する人(=要するにあなた)の権限を特定するための値です。API Key を取得するには IBM Cloud 画面から画面↑の「管理」と書かれている部分をクリックし、「アクセス(IAM)」を選択します:
2024123042


管理画面左にある「API キー」を選択すると、これまでに作成された API Key の一覧が表示されます(初めて作成する場合は何も表示されません)。ここで新しい API Key を作成するには表示の内容が「自分の IBM Cloud API キー」になっていることを確認してから「作成」ボタンをクリックします:
2024123043


「IBM Cloud API キーの作成」というダイアログが表示されます。ここで名前(下図では "IBM Cloud API Key - 20241230")を適当に指定し、Leaked action(この値が外部に漏れた場合の処置方法)や Session creation (この API Key でセッションの作成が必要か)を指定します(よく分からない場合はデフォルトのままでも構いません)。最後に「作成」ボタンをクリックします:
2024123054


すると新しい API キーが作成されます。この値は作成した人(=あなた)がプログラミングで自分の LLM を使うことを許可するための値であるため、絶対に他の人に知られないようにしてください(知られた場合、その人はあなたのふりをして、あなたの権限で LLM を使うことができるようになります)。API キー値は最初は表示されていませんが、目のアイコンをクリックすると表示することができます。また JSON ファイルとしてダウンロードすることもできます。ダウンロードせずにこの画面を消してしまったら2度と表示することはできない(その場合は削除して再作成)ことに注意してください:
2024123045


ダウンロードした JSON ファイルをテキストエディタで開くと以下のようになり、"apikey" という属性値として API キーが含まれています。ダウンロード後に API キーを確認する場合はこの値を使ってください:
2024123046


ここまでの手順で、watsonx.ai の LLM をプログラミングから使う上で必要な、4つの値
URL(東京リソースで作成した場合は "https://jp-tok.ml.cloud.ibm.com")
モデル ID(使う基盤モデルを変更する場合は変更後の値を再度確認する必要があります)
プロジェクト ID
API キー値
が全て揃いました。


【Jupyter Notebook を使えるようにする】
ここまでの手順で URL/モデル ID/プロジェクト ID/API キー値 の4つが揃いました。これでプログラミングから watsonx.ai の LLM (のプロンプト)を使うことができるようになりました。

自分の PC に Python などをインストールしてローカルで実行する場合はこの4つだけで始めることもできますが、IBM Cloud を利用していれば、Jupyter Notebook と呼ばれるプログラミング言語などのインストールも不要なオンラインの実行環境を利用することができます(無料インスタンスを使っている場合はその無料枠内で利用できます)。この Jupyter Notebook を使えるようにするための準備も行っておきましょう。

改めて IBM Cloud にログインし、リソース・リストから "Watson Machine Learning" のインスタンスを選択します:
2024123047


"Watson Machine Learning" インスタンス画面内の「起動」ボタン右側の矢印をクリックし、2つのメニューアイテムが表示されたら "IBM Cloud Pak for Data" を選択します:
2024123048


初回は以下のような画面が表示されます。この "IBM Cloud Pak for Data" でもプロジェクト単位で利用コンテンツを管理するのですが、初回はプロジェクトが1つも存在していません。この画面が表示されたら、最初のプロジェクトを新規に作成するため、「新規プロジェクト」を選択してから「次へ」ボタンをクリックします(プロジェクト作成済みでこの画面になった場合は右上の×印で画面を消して構いません):
2024123049


「プロジェクトの作成」画面に移動するので、プロジェクトの名称(下図では "CP4D project")を適当に入力します。またこのプロジェクトで利用するストレージとして作成済みの Cloud Object Storage インスタンスを選択します。最後に「作成」ボタンをクリックします:
2024123050


指定した名前(下図では "CP4D project")でプロジェクトが作成されます。このプロジェクトの構成要素の1つとして Jupyter Notebook を使うことができます。 実際に1つ作成してみます。「Python または R notebooks でのデータおよびモデルの管理」と書かれたボックスをクリックします:
2024123051


作成する Jupyter Notebook の名前と、構成スペックを指定します。名前は適当に(下図では "Jupyter Notebook - 20241230")指定し、構成スペックは最も小さなもの(2024/12/30 時点では "Runtime 24.1 on Python 3.11 XXS( 1 vCPU 4GB RAM )")を選択します。最後に「作成」ボタンをクリックします:
2024123052


すると以下のような Jupyter Notebook の画面になり、オンラインから Python コードを入力して実行することができるようになります:
2024123053


一度作成した Jupyter Notebook はプロジェクト内の「資産」として管理されます。作成後に再度利用する場合はプロジェクト選択後の画面で「資産」タブをクリックすると、指定した名称の Jupyter Notebook 資産が選択できます:
2024123055


再度編集状態にするには画面右のメニューから「編集」を選択すると Jupyter Notebook のランタイムが再度インスタンス化されて、編集ができるようになります:
2024123056


(編集可能になった後の画面)
2024123057


【SerpAPI の API キーを取得する】
本シリーズの最後に LangChain でエージェントを使う際に、検索エンジンと LLM を組み合わせた問い合わせ処理を実施する予定です。そこで利用する機能の1つ SerpAPI の API キーを取得(無料アカウントの場合は月 100 回の検索が可能)しておきましょう。

SerpAPI の API キー取得方法はまず公式サイトへ行き、右上の "Register" からアカウントを登録します:
https://serpapi.com/


アカウント登録後にサインインし、"API Key" メニューから(無料アカウントの場合は1つ)API キーを作成することができます。この API キーも(無料ですが、流出してしまうと、他の誰かに 100 回使われたらその月はもう使えなくなってしまうので)自分以外の人には教えないようにしましょう:
2024123058


【ここまでのまとめ】
以上、今回紹介したここまでの作業で以下の値が全て揃いました:
・watsonx.ai プログラミング時に必要な4つの値
 ・URL
 ・モデル ID
 ・プロジェクト ID
 ・API キー値
・Jupyter Notebook の利用環境
・LangChain プログラミング時に必要な外部キー
 ・Serp API キー


次回からはこれらの値や環境を使って、実際に watsonx.ai の LLM 基盤モデルを使って LangChain やエージェントを実装していきます。