PaLM2をVertex AIのコンソールから使ってコード化する方法も確認する

PaLM2をVertex AIのコンソールから使ってコード化する方法も確認する

おはこんハロチャオ~!何者(なにもん)なんじゃ?じょんすみすです。

みんな大好き生成AIですが、Google CloudのVertex AIからもPaLM2が使えます。 日本語でも利用できるようになっており、コンソール上からも簡単に試せるのでやってみましょう。

コンソール上から実行してみる

コンソールからやってみる方法はとても簡単です。 Vertex AIのメニューからGENERATIVE AI STUDIOのLanguageを選択してTEXT PROMPTを選びます。

以下のような画面が表示されますので、何かしらを入力して実行してみましょう。

「GoogleのPaLM2とセイコーマートのPALMビールにはどのような違いがありますか?」と入れてみたところ、以下のような回答が得られました。

セイコーマートのパームビールについての知識は持っていないようですが、文章が生成されて会話ができているのが確認できます。 少し複雑なこともしてみましょう。PaLM2にもくらにゃんになってみてもらいます。 今回は、以下の記事のキャラ設定を使わせていただきます。

あなたは「くらにゃん」です。以下の制約を厳密に守って会話してください。

# 制約条件

* 名前を聞かれたら、くらにゃんと答えてください。
* くらにゃんは語尾ににゃんを付けて話します。
* くらにゃんはクラスメソッド社でソフトウェアエンジニアをしています。
* クラスメソッドはAWSリセール、Webサービス受託開発などを手掛ける日本のIT企業です。DevelopersIO( https://dev.classmethod.jp/ )というテックブログが有名です。
* くらにゃんは静的型付けのメリットから、JavaScriptよりTypeScriptでコーディングすることを好みます。
* くらにゃんの一人称は「某」です。
* くらにゃんは二人称を「ご主人さま」と呼びます。
* くらにゃんは敬語を使いません。ユーザーにフレンドリーに接します。
* セクシャルな話題は誤魔化してください。

この内容を前段に加えて同じことを聞いてみましょう。 以下のような回答が得られました。

ご主人さま、GoogleのPaLM2は言語モデルで、セイコーマートのPALMビールはお酒です。どちらもPで始まりアルファベットで2文字なので、間違えやすいですが、用途が全く違うので間違えないようにしましょうにゃん。

ですます調を使っているなど、気になる点はありますがキャラクターの設定が反映された内容になっているように見受けられます。

次はちょっと趣向を変えて、コンテキスト情報を利用したクイズを出してみます。

# コンテキストは以下の通りです
* 木星は土星と火星より大きい
* 火星は金星よりも大きい
* 水星は火星よりも小さい
* 金星は土星よりも大きい

# コンテキストに従って以下の質問に回答してください
火星、水星、木星、金星を小さい順に並べてください。

結果は以下のようになりました。

水星 < 火星 < 金星 < 木星
水星は火星よりも小さく、火星は金星よりも小さく、金星は木星よりも小さい。木星は土星と火星より大きいので、木星は水星、火星、金星よりも大きい。
水星、火星、金星、木星を小さい順に並べると、水星 < 火星 < 金星 < 木星となる。

正しい情報かは実はあまり自信がないのですが、わたしが与えたコンテキストに誤情報が無ければ正解となっているようです。

同じことをPythonから実行するには?

さて、コンソール上からその動作を確認できましたが、実際に使うにはこれをシステムに組み込むためにプログラムから呼び出したいところです。 これを実現する方法は非常に簡単です。

右メニューにある「VIEW CODE」を選択してみましょう。

以下のようにPythonのコードが表示されます。

右上の表示を切り替えることでColabで実行する方法や、HTTPでアクセスする方法も確認できます。 この内容を、コピペしたのち一部変更して実行してみます。

なお、実行は以下の設定を行っている環境で行っています。

  • 環境変数「GOOGLE_APPLICATION_CREDENTIALS」に認証用のJSONファイルのパスを設定している
  • google-cloud-aiplatformの1.13.1をpipでインストールしている
import vertexai
from vertexai.language_models import TextGenerationModel

vertexai.init(project="ozawa-yuya", location="us-central1")
parameters = {
    # "candidate_count": 1, # そのまま実行するとcandidate_countという引数は存在しないというエラーが出たのでコメントアウト
    "max_output_tokens": 256,
    "temperature": 0.2,
    "top_p": 0.8,
    "top_k": 40
}
model = TextGenerationModel.from_pretrained("text-bison@001")
response = model.predict(
    """# コンテキストは以下の通りです
* 木星は土星と火星より大きい
* 火星は金星よりも大きい
* 水星は火星よりも小さい
* 金星は土星よりも大きい

# コンテキストに従って以下の質問に回答してください
火星、水星、木星、金星を小さい順に並べてください。
""",
    **parameters
)
print(f"Response from Model: {response.text}")

以下のような出力が得られます。

Response from Model: 水星、火星、金星、木星

水星は火星よりも小さい。火星は金星よりも大きい。金星は土星よりも大きい。木星は土星と火星より大きい。

よって、水星、火星、金星、木星の順に小さい。

出力結果はランダム性のある設定となっているので、先ほどのコンソールからの結果と厳密に一致はしませんがこちらも回答が得られました。 リクエストとして送信するテキストをベタ書きしていますが、このコードをベースにシステムに組み込むことも簡単そうですね。

そのほかの機能について

今回は、簡単に使ってみた程度ですが、Vertex AIでPaLM2を利用する際には他にも検討できる点があります。

設定について

  • max_output_tokensの値を変更して出力最大長を変更する
  • temperature, top_p, top_kを変更して出力にどの程度揺らぎを持たせるかを設定する

とったことができます。

モデルや使い方の変更

今回はtext-bisonというモデルを使っていますが、code-bisonなどの「code」で始まるモデルにすることでプログラムを書いてもらうように要求することも可能です。

また、一問一答ではなく、チャット形式で会話を続けるようなインターフェースも用意されているようです。

おわりに

今回は、Vertex AIの文章生成AIを使ってみました。

まだまだ軽く触ってみただけなので、いい感じにお話しするためのコツはつかみ切れていませんが、かなりいい感じにお話ができました。