Migrer de l'API PaLM vers l'API Gemini sur Vertex AI

Ce guide explique comment migrer votre code SDK Vertex AI pour Python depuis l'API PaLM vers l'API Gemini. Gemini vous permet de générer du texte, des conversations multitours (du chat) et du code. Après la migration, vérifiez vos réponses, car la sortie Gemini peut être différente de la sortie PaLM. Pour plus d'informations, consultez la Présentation des classes multimodales dans le SDK Vertex AI.

Différences entre Gemini et PaLM

Voici quelques différences entre les modèles Gemini et PaLM :

  • Les structures de leurs réponses sont différentes. Pour découvrir la structure des réponses Gemini, consultez la section Corps de la réponse de référence du modèle de l'API Gemini.

  • Leurs catégories de sécurité sont différentes. Pour découvrir les différences entre les paramètres de sécurité de Gemini et ceux de PaLM, consultez la section Principales différences entre Gemini et les autres familles de modèles.

  • Gemini ne peut pas effectuer d'opération de complétion de code. Si vous devez créer une application de complétion de code, utilisez plutôt le modèle code-gecko. Pour en savoir plus, consultez la section Modèle de complétion de code Codey.

  • Concernant la génération de code, Gemini présente un taux plus élevé de traitement de blocs de récitation.

  • Le score de confiance des modèles de génération de code Codey qui indique le niveau de confiance du modèle dans sa réponse n'est pas exposé dans Gemini.

Mettre à jour le code PaLM afin d'utiliser des modèles Gemini

Les méthodes de la classe GenerativeModel sont pour la plupart identiques à celles des classes PaLM. Vous utiliserez par exemple la méthode GenerativeModel.start_chat pour remplacer son équivalent PaLM, ChatModel.start_chat. Cependant, étant donné que Google Cloud applique un processus continu d'amélioration et de mise à jour de Gemini, vous constaterez potentiellement quelques différences. Pour en savoir plus, consultez la documentation de référence du SDK Python.

Pour migrer de l'API PaLM vers l'API Gemini, les modifications de code suivantes sont nécessaires :

  • Pour toutes les classes de modèle PaLM, vous devez utiliser la classe GenerativeModel dans Gemini.

  • Pour utiliser la classe GenerativeModel, exécutez l'instruction d'importation suivante :

    from vertexai.generative_models import GenerativeModel

  • Pour charger un modèle Gemini, utilisez le constructeur GenerativeModel au lieu de la méthode from_pretrained. Par exemple, pour charger le modèle Gemini 1.0 Pro, spécifiez GenerativeModel(gemini-1.0-pro).

  • Pour générer du texte dans Gemini, utilisez la méthode GenerativeModel.generate_content plutôt que la méthode predict, qui est utilisé sur les modèles PaLM. Exemple :

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

Comparaison des classes Gemini et PaLM

Chaque classe de modèle PaLM est remplacée par la classe GenerativeModel dans Gemini. Le tableau suivant présente les classes utilisées par les modèles PaLM et leur classe équivalente dans Gemini.

Modèle PaLM Classe de modèle PaLM Classe de modèle Gemini
text-bison TextGenerationModel GenerativeModel
chat-bison ChatModel GenerativeModel
code-bison CodeGenerationModel GenerativeModel
codechat-bison CodeChatModel GenerativeModel

Instructions de configuration courante

Pour l'API PaLM et l'API Gemini dans Vertex AI, le processus de configuration est identique. Pour en savoir plus, consultez la Présentation du SDK Vertex AI pour Python. Voici un exemple de code court qui installe le SDK Vertex AI pour Python.

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

Dans cet exemple de code, remplacez PROJECT_ID par votre ID de projet Google Cloud et remplacez LOCATION par l'emplacement de votre projet Google Cloud (par exemple, us-central1).

Exemples de code Gemini et PaLM

Chacune des paires d'exemples de code suivantes comprend du code PaLM et, à côté, du code Gemini migré à partir du code PaLM.

Génération de texte : Basic

Les exemples de code suivants montrent les différences entre l'API PaLM et l'API Gemini pour créer un modèle de génération de texte.

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)
        

Génération de texte avec des paramètres

Les exemples de code suivants montrent les différences entre l'API PaLM et l'API Gemini pour créer un modèle de génération de texte, avec des paramètres facultatifs.

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)
        

Chat

Les exemples de code suivants montrent les différences entre l'API PaLM et l'API Gemini pour créer un modèle de chat.

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)
        

Génération de code

Les exemples de code suivants montrent les différences entre l'API PaLM et l'API Gemini pour générer une fonction qui prédit si une année est bissextile.

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)
        

Migrer des requêtes vers des modèles Gemini

Si vous avez des ensembles d'invites que vous avez déjà utilisés avec des modèles PaLM 2, vous pouvez les optimiser pour les utiliser avec des modèles Gemini à l'aide de l'optimiseur d'invites Vertex AI (bêta).

Étapes suivantes