在 Vertex AI 上从 PaLM API 迁移到 Gemini API

本指南介绍如何将 Python 版 Vertex AI SDK 代码从使用 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 中公开。

更新 PaLM 代码以使用 Gemini 模型

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 模型,请使用 GenerativeModel 构造函数,而不是使用 from_pretrained 方法。例如,如需加载 Gemini 1.0 Pro 模型,请使用 GenerativeModel(gemini-1.0-pro)

  • 如需在 Gemini 中生成文本,请使用 GenerativeModel.generate_content 方法,而不是在 PaLM 模型中使用的 predict 方法。例如:

   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,设置过程相同。如需了解详情,请参阅 Python 版 Vertex AI SDK 简介。以下是用于安装 Python 版 Vertex AI SDK 的短代码示例。

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 模型搭配使用。

后续步骤