はじめに
watsonx.aiの生成AIのサービスをPythonスクリプト(Jupyter Notebook)から実行する一連の流れを試してみます。具体的にはプロンプトにより指示を与えて、それに対する回答の文書を生成させるということをやりたいです。
ここでは環境構築からサンプルを動かせるところまでをやってみます。
※2024年6月時点の情報です
環境イメージ
IBM Cloud上でwatsonx.aiを称するためのサービスを立ち上げます。今回はIBM Cloudのアカウントがあれば無償で利用できる範囲で試してみます。
PC側はWindows11のVS Codeから使用することを想定してPythonおよびJupyter関連のExtensionを追加します。
また、GitHubで提供されているサンプルのPythonスクリプトを実行する想定ですが、WindowsおよびVS CodeでGitについてのセットアップは済みの想定とします。
今回の操作をやってみる際に以下の記事を参考にさせていただいております。
Qiita記事:
0からのIBM watsonx.aiのはじめかた
VSCodeでJupyter Notebookを使ってみた【ゼロからPython勉強してみる】
IBM Cloud Documentation:
Watson Studio
Watson Machine Learning
生成 AI ソリューションの開発 - 生成 AI ソリューションのコーディング
IBM Cloud API Docs - watsonx.ai
IBM Cloud側構成
watsonx.aiの構成
Watson Studioサービスのインスタンス作成
watsonx.ai関連の各種ツールを提供してくれるWatson Studioというサービスがあります。まずはこのWatson Studioというサービスのインスタンスを作成します。
IBM Cloudの管理コンソールから検索窓で「Watson Studio」を入力し、Watson Studioサービスを選択
作成したいIBMアカウントの元で、ロケーション、プラン(今回は無料のライトプラン)を選択し、作成
Watson Studioサービスのインスタンスが作成されました。
watsonxの起動
「Launch in」の横のプルダウンメニューからIBM watsonxを選択します。
ようこそ画面が表示されるので、利用規約同意にチェックし「x」ボタン or ツアー実行
プロジェクト作成
watsonxのトップ画面の下の方の「プロジェクト」の横の「+」アイコンをクリック
プロジェクトIDの確認
プロジェクトの画面で「管理」タブからプロジェクトIDを確認する
※この情報はPythonからのアクセス時に使用します
Machine Learningサービスの作成および関連付け
プロンプトLabなどを使用する場合、Machine Learningのサービスを別途作成して関連付けをしておく必要があります。
プロジェクトの画面の「管理」タブから「サービスおよび統合」を選択し、「サービスの関連付け」をクリック
今作成したMachine Learningのインスタンスを選択して「アソシエイト」
Prompt Labを試してみる
watsonxのトップ画面から、開く場所: 「test01」(上で作成したプロジェクト名)になっていることを確認し「Prompt Labを開く」を選択
Prompt Labが開くので、サンプルの1つを選択してみます。
チャット形式で生成AIの機能が使えることが確認できました。
API Keyの作成
IBM Cloudの管理コンソールにて、当該IBM Cloudアカウントを選択して、管理 - アクセス(IAM)を選択
APIキーが生成されます
※ここで生成されるキーはこのタイミングでしか確認できませんので、コピーして安全な場所に管理しておく必要があります。
※この情報はPythonからのアクセス時に使用します
エンドポイントURL確認
Watsonx Studioサービスのインスタンスを作成したロケーションを確認します。(今回の場合は「東京」)
以下のサイトにて、ロケーションに応じたエンドポイントのURLを確認します。
Endpoint URLs
東京の場合https://jp-tok.ml.cloud.ibm.com
となります。
※この情報はPythonからのアクセス時に使用します
PC側構成
Windows11上にPython, Jupyter Notebook関連のセットアップを行います。VS Code, Gitについては設定済みの想定です。
Pythonのインストール
以下のサイトからインストーラーをダウンロードします。
https://www.python.org/downloads/windows/
今回は3.10.xのうち2024年6月時点で最新の3.10.11をインストールすることにします。
確認
c:\>python --version
Python 3.10.11
c:\>pip --version
pip 23.0.1 from C:\Python310\lib\site-packages\pip (python 3.10)
VS Code Extensionのインストール
マーケットプレースからPythonおよびJupyterのExtensionをインストールします。
Python仮想環境のセットアップ
Pythonでは実行環境を仮想化する仕組みが提供されていますのでこれを利用します。
VS Codeでターミナルを開き、適当なディレクトリを作成して、カラのpythonスクリプトファイル「blank.py」を作成しておきます。そのディレクトリで「python -m venv test01」を実行します。(test01という仮想環境を作成します)
新しい環境が作成されました。これをワークスペースフォルダに選択しますか?
というポップアップが出ますがここでは無視します。
Ctrl+Shit+Pでコマンドパレットを開き、「Python: インタープリターを選択」を選択します。
これで新しいターミナルを開くと、指定した仮想環境がActivateされた形で起動するはずなのだが、デフォルトで開くPower Shellだと恐らくポリシーに引っかかってActivateされてないっぽい。
多分この辺が関係ありそう: Windows10のVSCodeでvenvを利用するときの注意点
プロンプトの先頭に(test01)
という仮想環境がActivateされていることを示す表記があるのを確認
サンプル実行
サンプル・リポジトリのクローン
GitHubにwatson関連のサンプル・スクリプトが含まれたリポジトリが公開されています。
GitHub - IBM/watson-machine-learning-samples
こちらをローカルにクローンして利用します。
VS CodeのコマンドパレットからGitクローンを選択します。
適当なフォルダを指定してクローンします。
サンプルのJupyter Notebookを実行してみる
以下に提供されるサンプルを動かしてみます。
cloud/notebooks/python_sdk/deployments/foundation_models/Use watsonx, and Meta llama-3-70b-instruct
to answer question about an article.ipynb
上のNotebookをVS Codeで開いて、指示通り実行していきます。
Notebookを開いたあとに、右上にtest01(Python 3.10.11)
と表示されていることを確認してください。これは、このNotebookが先に作成した仮想環境「test01」に紐づいていることを示しています(このNotebook上のコードを実行する際に、この仮想環境で実行されることになる)。意図しない環境に紐づいている場合は、ここの表示をクリックすると、仮想環境が選択できるようになるはずなので使用したい仮想環境を選択してください。
※ある環境では、仮想環境に切り替えようとしたときにipykernelがインストールできないというようなエラーで切り替えに失敗したことがありました。コマンドプロンプトを開いて仮想環境をActivateし、そこで pip install ipykernel
を手動で実行した後切り替えを行うとうまくいきました。
Install dependencies
コードブロックの左側の三角アイコンをクリックしてコードを実行していきます。
まずは必要なモジュールのインストール
※ここでトラップが2つありますのでご注意を!
(1) 先頭に「!」マークがついた命令は、OSコマンドを発行することを意味しています。Windows環境でこれを実行すると文字化けが生じてしまいます。VS CodeのJupyterで使われるOSコマンド実行環境の文字コードは恐らくShiftJISベースになっていて、Notebook自体はUTF-8で解釈しようとしているために文字化けが生じるものと推察されます。
参考: VsCode_Jupyterの文字化けの対策(chcp)
上の記事に従って、まず!chcp 65001
を実行してOSコマンド実行シェルの文字コードをUTF-8に変更してから実行すると文字化けは解消されました。Notebookを改修するのはイケてないのでどこか設定で文字コードを指定できないか探したのですが見つからず...
(2) pip install
コマンドの結果をパイプでつないでtail
コマンドに渡していますが、Windowsでは標準でtailコマンドは提供されていないようです。このサンプルはMacやLinuxを前提に作成されているものと思われます。私の環境ではMinGWというツールをセットアップしているので使えましたが、そういうものが無い環境だとtailコマンド使えないので、パイプ以降は削除して実行する必要があります。
※MinGW入れておくとtailとかgrepとかUnixコマンドをWindows上で使えるので非常に便利です。おすすめです。
Defining the WML credentials
URL部分は、今回東京リージョンのサービスを使用するので、上で確認した東京リージョン用のエンドポイントURL(https://jp-tok.ml.cloud.ibm.com
)に置き換えます。
実行するとAPI Keyの入力が促されるので、先に作成したAPI Keyを指定します。
Defining the project id
実行するとProject IDの入力が促されるので、先に作成したプロジェクトのProject IDを指定します。
Specify Foundation Model
Defining the model parameters
Initialize the model
Model's detail
Define Instruction and question
ここでは、サンプルとしてあるArticleの文章を示し、それに対する質問と答えのサンプルをInstructionとして与えています。
その後、求めるquestionを指定しています。
Answer the question using Meta llama-3-70b-instruct
model.
以下のquestionに対して、
question = "Question: Why should you use mulch when growing tomatoes?"
以下のanswerが返されました
Answer: To prevent soil-borne disease from splashing up onto the fruit when you water.
サンプルをカスタマイズして実行
上のサンプルは英語の記事を与えてその内容についての質問をし、回答を生成させるサンプルでした。これを日本語に置き換えて実施してみます。
Instructionに日本語を指定
元々のサンプルの英文をGoogle翻訳で日本語に翻訳した文章に置き換えてみます。
Instruction:
記事の情報のみを使用して、次の質問に回答してください。記事に適切な回答がない場合は、「わかりません」と答えてください。
Article:
###
トマトは、野菜畑で最も人気のある植物の 1 つです。
成功のヒント:
病気や害虫に強い品種を選択すれば、トマトの栽培は非常に簡単です。
挑戦したい経験豊富な園芸家にとって、栽培できる伝統品種や特別な品種は無数にあります。
トマトの植物にはさまざまなサイズがあります。
12 インチ未満の非常に小さな品種があり、バルコニーやパティオの鉢や吊り下げバスケットでよく育ちます。
高さと幅が数フィートの茂みに成長し、より大きな容器で育てられる品種もあります。
プランターや花壇で幅と高さが数フィートの巨大な茂みに成長する品種もあります。
さらに、6 フィート以上の長いつる植物として成長し、トレリスをよじ登る品種もあります。
トマトの植物は、直射日光が当たる場所で最もよく育ちます。
トマトには、たっぷりと頻繁に水をやる必要があります。
マルチを使用すると、水をやったときに土壌伝染病が果実に飛び散るのを防ぐことができます。
吸芽を刈り込み、先端を摘み取るだけでも、植物は果実を生産するために全力を注ぐようになります。
###
Question: トマトの栽培は簡単ですか?
Answer: はい、病気や害虫に強い品種を選べば簡単です。
Question: トマトにはどんな品種がありますか?
Answer: 伝統品種や特産品種は無数にあります。
question:
Question: トマトを栽培するときにマルチを使用する必要があるのはなぜですか?
結果確認
Answer:
Answer: 土壌伝染病が果実に飛び散るのを防ぐためです。
日本語の指示に対してもきちんと回答が得られました。
おわりに
VS Code, Python, Jupyter Notebook を使用し、watsonx.aiの生成AIのサービスを利用する一連の流れを確認できました。
あとはこれをベースに色々と応用をしていけると思います。