微调教程

本教程将帮助您开始使用 Python SDK 或 REST API(使用 curl)调优 Gemini API 服务。这些示例展示了如何调整 Gemini API 文本生成服务背后的文本模型。

在 ai.google.dev 上查看 试用 Colab 笔记本 在 GitHub 上查看笔记本

限制

在调整模型之前,您应了解以下限制:

微调数据集

针对 Gemini 1.5 Flash 微调数据集存在以下限制:

  • 每个示例的输入大小上限为 4 万个字符。
  • 每个示例的输出大小上限为 5,000 个字符。
  • 仅支持输入-输出对示例。不支持聊天式多轮对话。

已调参的模型

经过优化的模型具有以下限制:

  • 经过优化的 Gemini 1.5 Flash 模型的输入字符数上限为 4 万个字符。
  • 经过调优的模型不支持 JSON 模式。
  • 仅支持文本输入。

开始前须知:设置项目和 API 密钥

在调用 Gemini API 之前,您需要设置项目并配置 API 密钥。

列出已调参的模型

您可以使用 tunedModels.list 方法检查现有的优化模型。

from google import genai
client = genai.Client() # Get the key from the GOOGLE_API_KEY env variable

for model_info in client.models.list():
    print(model_info.name)

创建已调参模型

如需创建经过调优的模型,您需要在 tunedModels.create 方法中将数据集传递给模型。

在此示例中,您将调整模型以生成序列中的下一个数字。例如,如果输入为 1,则模型应输出 2。如果输入为 one hundred,则输出应为 one hundred one

# create tuning model
training_dataset =  [
    ["1", "2"],
    ["3", "4"],
    ["-3", "-2"],
    ["twenty two", "twenty three"],
    ["two hundred", "two hundred one"],
    ["ninety nine", "one hundred"],
    ["8", "9"],
    ["-98", "-97"],
    ["1,000", "1,001"],
    ["10,100,000", "10,100,001"],
    ["thirteen", "fourteen"],
    ["eighty", "eighty one"],
    ["one", "two"],
    ["three", "four"],
    ["seven", "eight"],
]
training_dataset=types.TuningDataset(
        examples=[
            types.TuningExample(
                text_input=i,
                output=o,
            )
            for i,o in training_dataset
        ],
    )
tuning_job = client.tunings.tune(
    base_model='models/gemini-1.0-pro-001',
    training_dataset=training_dataset,
    config=types.CreateTuningJobConfig(
        epoch_count= 5,
        batch_size=4,
        learning_rate=0.001,
        tuned_model_display_name="test tuned model"
    )
)

# generate content with the tuned model
response = client.models.generate_content(
    model=tuning_job.tuned_model.model,
    contents='III',
)

print(response.text)

迭代次数、批处理大小和学习率的最佳值取决于您的数据集以及用例的其他约束条件。如需详细了解这些值,请参阅高级调优设置超参数

试用模型

您可以使用 tunedModels.generateContent 方法并指定经过优化的模型的名称,以测试其性能。

response = client.models.generate_content(
    model=tuning_job.tuned_model.model,
    contents='III'
)

未实现

新 SDK 中尚未实现部分功能(进度报告、更新说明和删除经过调优的模型)。