Pythonを使ったwatsonx.aiによるコード生成の実装方法

IBMのAIプラットフォームであるwatsonx.aiはGUI上でプロンプトの実行をするだけではなく、Python SDKも提供しているためPythonコードからも操作が可能です。

この記事ではPythonコードからwatsonx.aiのLLMを呼び出し、Javaコードの生成を実行する方法を紹介します。

以下はwatsonx.aiのプロジェクトが作成済みであることを前提としています。

まだwatsonx.aiを使ったことが無い、プロジェクトを作成していない方はこちらの記事を参考にプロジェクト作成までを完了させてください。

スポンサーリンク

事前準備

Python SDKのインストール

現在watsonxのLLMをPythonから呼び出すためにはIBM Watson Machine Learningのインストールが必要です。

$ pip install ibm-watson-machine-learning

IBM Cloud APIの作成・取得

watsonxはIBM Cloudのサービスなので外部からアクセスする場合はAPIキーが必要となります。

watsonxの管理コンソールを開いたら、左上のハンバーガーメニューをクリックし、アクセス(IAM)へ移動します。

IBM CloudのIBM管理画面に移動するので、もう一度左上のハンバーガーメニューからAPIキーをクリックします。作成ボタンを押してAPIキーを作成しましょう。

watsonx.aiのプロジェクトID取得

事前準備の最後は自身のwatsonx.aiプロジェクトを用意する必要があります。
watsonx.aiの自身のプロジェクトに入り、管理コンソールの管理>一般を開くとプロジェクトIDが記載されているので控えておきます。

以上で準備は完了です。

Pythonコードの実装

以下のコード全体はGitHubリポジトリ上で公開しています。

LLMを定義

watsonxで提供されているLLMを定義します。今回はmpt-7b-instruct2のモデルを利用することにします。事前準備で取得したAPIキーやプロジェクトIDをご自身のものに置き換えてください。

my_credentials.urlの値はwatsonxと紐づけているwatson machine learningサービスのURLです。
公式ドキュメントを参照してご自身がホストしているリージョンのURLを選択して下さい。

from ibm_watson_machine_learning.foundation_models.utils.enums import ModelTypes
from ibm_watson_machine_learning.foundation_models import Model
from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams

# 要編集
my_credentials = {
    "url"    : <watson machine learningのURL>,
    "apikey" : <IBM cloudのAPIキー>
}

generate_params = {
    GenParams.TEMPERATURE : 1.0,
    GenParams.MAX_NEW_TOKENS : 400
}

model_id    = ModelTypes.MPT_7B_INSTRUCT2
# 要編集
project_id  = <プロジェクトID>
space_id    = None
verify      = False

model = Model(
    model_id, 
    my_credentials, 
    generate_params, 
    project_id, 
    space_id, 
    verify 
)

プロンプトを実行する

本題のプロンプトを実行します。今回は簡単なJava関数のコード生成タスクを指示してみます。

prompt = """
以下の処理を実行する関数をJavaコードで書いてください。

# 処理
1. コンマで区切られた文字列をリストに変換する

# 出力コード

"""

response = model.generate_text(prompt)

print( response )

以上のPythonスクリプトを実行すると無事レスポンスが返却されました。これでひとまずPythonからwatsonxのモデルを操作することが出来るようになりました!

public static List<String> split(String str) {
        return Arrays.asList(str.split(","));
    }

まとめ

この記事ではPython SDKを利用してwatsonxのLLMを操作する方法を紹介しました。
残念ながらIBM Watson Machine Learningは現状LangChainインターフェースを提供していないため、まだ不便なところもあります。

また、現在IBM Generative AI Python SDKという新たなOSSのPython SDKも開発していて、こちらはまだテクニカルプレビュー版watsonx.aiのみ対応しているようです。こちらのSDKはLangChainインターフェースを提供しているので将来的には利用できるのでしょう。

かなり状況が流動的なので注意して観察しておく必要がありそうです。

参考文献

コメント