Migrar da API PaLM para a API Gemini na Vertex AI

Neste guia, mostramos como migrar o SDK da Vertex AI para código Python com uso da API PaLM para uso da API Gemini. É possível gerar texto, conversas com vários turnos (chat) e código com o Gemini. Após a migração, verifique suas respostas, porque a saída do Gemini pode ser diferente da saída do PaLM. Para mais informações, consulte Introdução a classes multimodais no SDK da Vertex AI.

Diferenças entre o Gemini e o PaLM

Confira abaixo algumas diferenças entre os modelos do Gemini e do PaLM:

  • As estruturas de resposta deles são diferentes. Para saber mais sobre a estrutura de resposta do Gemini, consulte o corpo de resposta da referência do modelo da API Gemini.

  • As categorias de segurança deles são diferentes. Para saber mais sobre as diferenças entre as configurações de segurança do Gemini e do PaLM, consulte Principais diferenças entre o Gemini e outras famílias de modelos.

  • O Gemini não realiza preenchimento de código. Se você precisar criar um aplicativo de preenchimento de código, use o modelo code-gecko. Para mais informações, consulte Modelo de preenchimento de código do Codey.

  • Para geração de código, o Gemini tem uma taxa de bloqueio de recitação maior.

  • A pontuação de confiança nos modelos de geração de código do Codey que indica o grau de confiança do modelo na resposta não é exposta no Gemini.

Atualizar o código do PaLM para usar modelos do Gemini

Os métodos na classe GenerativeModel são quase os mesmos que nas classes do PaLM. Por exemplo, use GenerativeModel.start_chat para substituir o equivalente no PaLM, ChatModel.start_chat. No entanto, como o Google Cloud está sempre melhorando e atualizando o Gemini, é possível que você se depare com algumas diferenças. Para mais informações, consulte a Referência do SDK para Python

Para migrar da API PaLM para a API Gemini, são necessárias as seguintes modificações no código:

  • Em todas as classes de modelo do PaLM, você usa a classe GenerativeModel no Gemini.

  • Para usar a classe GenerativeModel, execute a seguinte instrução de importação:

    from vertexai.generative_models import GenerativeModel

  • Para carregar um modelo do Gemini, use o construtor GenerativeModel em vez de usar o método from_pretrained. Por exemplo, para carregar o modelo do Gemini 1.0 Pro, use GenerativeModel(gemini-1.0-pro).

  • Para gerar texto no Gemini, use o método GenerativeModel.generate_content no lugar do método predict, usado nos modelos do PaLM. Por exemplo:

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

Comparação das classes do Gemini e do PaLM

Cada classe de modelo do PaLM é substituída pela classe GenerativeModel no Gemini. A tabela a seguir mostra as classes usadas pelos modelos do PaLM e a classe equivalente no Gemini.

Modelo do PaLM Classe de modelo do PaLM Classe de modelo do Gemini
text-bison TextGenerationModel GenerativeModel
chat-bison ChatModel GenerativeModel
code-bison CodeGenerationModel GenerativeModel
codechat-bison CodeChatModel GenerativeModel

Instruções comuns de configuração

O processo de configuração é o mesmo na API PaLM e na API Gemini na Vertex AI. Para mais informações, consulte Introdução ao SDK da Vertex AI para Python. Confira a seguir um exemplo de código curto que instala o SDK da Vertex AI para Python.

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

Neste exemplo de código, substitua PROJECT_ID pelo ID do projeto do Google Cloud e LOCATION pelo local do projeto do Google Cloud (por exemplo, us-central1).

Exemplos de código do Gemini e do PaLM

Cada um dos pares de exemplos de código a seguir inclui o código do PaLM e, ao lado dele, o código do Gemini que foi migrado do código do PaLM.

Geração de texto: básica

Os exemplos de código a seguir mostram as diferenças entre a API PaLM e a API Gemini para criar um modelo de geração de texto.

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)
        

Geração de texto com parâmetros

Os exemplos de código a seguir mostram as diferenças entre a API PaLM e a API Gemini para criar um modelo de geração de texto com parâmetros opcionais.

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

Os exemplos de código a seguir mostram as diferenças entre a API PaLM e a API Gêmeos para criar um modelo 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)
        

Geração de códigos

Os exemplos de código a seguir mostram as diferenças entre a API PaLM e a API Gemini para gerar uma função que prevê se um ano é bissexto.

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)
        

Migrar prompts para modelos do Gemini

Se você tiver conjuntos de comandos usados anteriormente com modelos do PaLM 2, poderá otimizá-los para uso com modelos Gemini usando o otimizador de comandos da Vertex AI (pré-lançamento).

Próximas etapas