Vertex AI の PaLM API から Gemini API に移行する

このガイドでは、Vertex AI SDK for Python のコードを PaLM API から Gemini API に移行する方法について説明します。Gemini では、テキスト、マルチターンの会話(チャット)、コードを生成できます。移行後、Gemini の出力が PaLM の出力と異なる可能性があります。レスポンスを必ず確認してください。詳細については、Vertex AI SDK のマルチモーダル クラスの概要をご覧ください。

Gemini と PaLM の違い

Gemini モデルと PaLM モデルの違いは次のとおりです。

  • レスポンスの構造が異なります。Gemini レスポンスの構造については、Gemini API モデル リファレンスのレスポンス本文をご覧ください。

  • 安全性のカテゴリが異なります。Gemini と PaLM の安全性設定の違いについては、Gemini と他のモデル ファミリーの主な違いをご覧ください。

  • Gemini はコード補完を実行できません。コード補完アプリケーションを作成する必要がある場合は、code-gecko モデルを使用します。詳細については、Codey コード補完モデルをご覧ください。

  • コード生成の場合、Gemini は列挙ブロックレートが高くなります。

  • モデルのレスポンスの信頼度を示す Codey コード生成モデルの信頼スコアは、Gemini では公開されていません。

Gemini モデルを使用するように PaLM コードを更新する

GenerativeModel クラスのメソッドは、PaLM クラスのメソッドとほとんど同じです。たとえば、GenerativeModel.start_chat を使用して PaLM で同等の ChatModel.start_chat を置き換えます。ただし、Google Cloud では Gemini の改善と更新が常に行われるため、違いが生じる可能性があります。詳細については、Python SDK リファレンスをご覧ください。

PaLM API から Gemini API に移行するには、次のコード変更が必要です。

  • すべての PaLM モデルクラスで、Gemini の GenerativeModel クラスを使用します。

  • GenerativeModel クラスを使用するには、次のインポート ステートメントを実行します。

    from vertexai.generative_models import GenerativeModel

  • Gemini モデルを読み込むには、from_pretrained メソッドではなく GenerativeModel コンストラクタを使用します。たとえば、Gemini 1.0 Pro モデルを読み込むには、GenerativeModel(gemini-1.0-pro) を使用します。

  • Gemini でテキストを生成する場合は、PaLM モデルで使用される predict メソッドではなく、GenerativeModel.generate_content メソッドを使用します。例:

   model = GenerativeModel("gemini-1.0-pro-002")
   response = model.generate_content("Write a short poem about the moon")

Gemini クラスと PaLM クラスの比較

各 PaLM モデルクラスは、Gemini の GenerativeModel クラスに置き換えられます。次の表に、PaLM モデルで使用されるクラスと、Gemini で同等のクラスを示します。

PaLM モデル PaLM モデルクラス Gemini モデルクラス
text-bison TextGenerationModel GenerativeModel
chat-bison ChatModel GenerativeModel
code-bison CodeGenerationModel GenerativeModel
codechat-bison CodeChatModel GenerativeModel

一般的な設定手順

Vertex AI の PaLM API と Gemini API のいずれでも設定プロセスは同じです。詳細については、Vertex AI SDK for Python の概要をご覧ください。Vertex AI SDK for Python をインストールする簡単なコードサンプルを次に示します。

pip install google-cloud-aiplatform
import vertexai
vertexai.init(project="PROJECT_ID", location="LOCATION")

このサンプルコードでは、PROJECT_ID は Google Cloud プロジェクト ID に置き換え、LOCATION は Google Cloud プロジェクトのロケーション(us-central1 など)に置き換えます。

Gemini と PaLM のコードサンプル

次のコードサンプルのペアのそれぞれには、PaLM コードと、PaLM コードから移行された Gemini コードが含まれています。

テキスト生成: 基本

次のコードサンプルは、テキスト生成モデルの作成における PaLM API と Gemini API の違いを示しています。

PaLM Gemini
from vertexai.language_models import TextGenerationModel

model = TextGenerationModel.from_pretrained("text-bison@002")

response = model.predict(prompt="The opposite of hot is")
print(response.text) #  'cold.'
        
from vertexai.generative_models import GenerativeModel

model = GenerativeModel("gemini-1.0-pro")

responses = model.generate_content("The opposite of hot is")

for response in responses:
    print(response.text)
        

パラメータを使用したテキスト生成

次のコードサンプルでは、テキスト生成モデルの作成における PaLM API と Gemini API の違いを、オプションのパラメータとともに示しています。

PaLM Gemini
from vertexai.language_models import TextGenerationModel

model = TextGenerationModel.from_pretrained("text-bison@002")

prompt = """
You are an expert at solving word problems.

Solve the following problem:

I have three houses, each with three cats.
each cat owns 4 mittens, and a hat. Each mitten was
knit from 7m of yarn, each hat from 4m.
How much yarn was needed to make all the items?

Think about it step by step, and show your work.
"""

response = model.predict(
    prompt=prompt,
    temperature=0.1,
    max_output_tokens=800,
    top_p=1.0,
    top_k=40
)

print(response.text)
        
from vertexai.generative_models import GenerativeModel

model = GenerativeModel("gemini-1.0-pro")

prompt = """
You are an expert at solving word problems.

Solve the following problem:

I have three houses, each with three cats.
each cat owns 4 mittens, and a hat. Each mitten was
knit from 7m of yarn, each hat from 4m.
How much yarn was needed to make all the items?

Think about it step by step, and show your work.
"""

responses = model.generate_content(
    prompt,
    generation_config={
        "temperature": 0.1,
        "max_output_tokens": 800,
        "top_p": 1.0,
        "top_k": 40,
    }
  )

for response in responses:
    print(response.text)
        

チャット

次のコードサンプルは、チャットモデルの作成における PaLM API と Gemini API の違いを示しています。

PaLM Gemini
from vertexai.language_models import ChatModel

model = ChatModel.from_pretrained("chat-bison@002")

chat = model.start_chat()

print(
    chat.send_message(
        """
Hello! Can you write a 300 word abstract for a research paper I need to write about the impact of AI on society?
"""
    )
)

print(
    chat.send_message(
        """
Could you give me a catchy title for the paper?
"""
    )
)
        
from vertexai.generative_models import GenerativeModel

model = GenerativeModel("gemini-1.0-pro")

chat = model.start_chat()


responses = chat.send_message(
        """
Hello! Can you write a 300 word abstract for a research paper I need to write about the impact of AI on society?
"""
    )

for response in responses:
   print(response.text)


responses = chat.send_message(
        """
Could you give me a catchy title for the paper?
"""
    )

for response in responses:
   print(response.text)
        

コード生成

次のコードサンプルは、うるう年かどうかを予測する関数を生成する際の PaLM API と Gemini API の違いを示しています。

Codey Gemini
from vertexai.language_models import CodeGenerationModel

model = CodeGenerationModel.from_pretrained("code-bison@002")

response = model.predict(
        prefix="Write a function that checks if a year is a leap year."
    )

print(response.text)
        
from vertexai.generative_models import GenerativeModel

model = GenerativeModel("gemini-1.0-pro-002")

response = model.generate_content("Write a function that checks if a year is a leap year.")

print(response.text)
        

プロンプトを Gemini モデルに移行する

以前に PaLM 2 モデルで使用したプロンプト セットがある場合は、Vertex AI プロンプト オプティマイザー(プレビュー)を使用して、Gemini モデルで使用するように最適化できます。

次のステップ