使用 Gemini API 生成文本

当以文本、图片、视频和音频作为输入时,Gemini API 可以生成文本输出。

本指南介绍了如何使用 generateContentstreamGenerateContent 方法生成文本。如需了解如何使用 Gemini 的视觉和音频功能,请参阅视觉音频指南。

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

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

根据纯文本输入生成文本

如需使用 Gemini API 生成文本,最简单的方法是为模型提供单个纯文本输入,如以下示例所示:

model = genai.GenerativeModel("gemini-1.5-flash")
response = model.generate_content("Write a story about a magic backpack.")
print(response.text)

在本例中,问题(“写一个关于魔法背包的故事”)不包含任何输出示例、系统说明或格式信息。这是一种零样本方法。对于某些用例,一次性多次性提示可能会生成更符合用户预期的输出。在某些情况下,您可能还需要提供系统说明,以帮助模型理解任务或遵循特定指南。

根据文本和图片输入生成文本

Gemini API 支持将文本与媒体文件相结合的多模态输入。以下示例展示了如何根据文本和图片输入生成文本:

import PIL.Image

model = genai.GenerativeModel("gemini-1.5-flash")
organ = PIL.Image.open(media / "organ.jpg")
response = model.generate_content(["Tell me about this instrument", organ])
print(response.text)

与纯文本提示一样,多模态提示可能涉及各种方法和优化。根据此示例的输出结果,您可能需要为提示添加步骤,或在说明中提供更具体的信息。如需了解详情,请参阅文件提示策略

生成文本串流

默认情况下,模型会在完成整个文本生成流程后返回回答。您可以通过不等待完整结果,而是使用流式传输来处理部分结果,从而实现更快的互动。

以下示例展示了如何使用 streamGenerateContent 方法实现流式传输,以便根据纯文本输入提示生成文本。

model = genai.GenerativeModel("gemini-1.5-flash")
response = model.generate_content("Write a story about a magic backpack.", stream=True)
for chunk in response:
    print(chunk.text)
    print("_" * 80)

构建互动式聊天

您可以使用 Gemini API 为用户构建互动式聊天体验。借助该 API 的聊天功能,您可以收集多轮问题和回答,让用户逐步获得答案,或在遇到多部分问题时获得帮助。此功能非常适合需要持续沟通的应用,例如聊天机器人、互动式辅导老师或客户服务助理。

以下代码示例展示了基本聊天功能的实现:

model = genai.GenerativeModel("gemini-1.5-flash")
chat = model.start_chat(
    history=[
        {"role": "user", "parts": "Hello"},
        {"role": "model", "parts": "Great to meet you. What would you like to know?"},
    ]
)
response = chat.send_message("I have 2 dogs in my house.")
print(response.text)
response = chat.send_message("How many paws are in my house?")
print(response.text)

启用聊天流式传输

您也可以使用直播聊天功能,如以下示例所示:

model = genai.GenerativeModel("gemini-1.5-flash")
chat = model.start_chat(
    history=[
        {"role": "user", "parts": "Hello"},
        {"role": "model", "parts": "Great to meet you. What would you like to know?"},
    ]
)
response = chat.send_message("I have 2 dogs in my house.", stream=True)
for chunk in response:
    print(chunk.text)
    print("_" * 80)
response = chat.send_message("How many paws are in my house?", stream=True)
for chunk in response:
    print(chunk.text)
    print("_" * 80)

print(chat.history)

配置文本生成

您发送到模型的每个提示都包含参数,用于控制模型生成响应的方式。您可以使用 GenerationConfig 配置这些参数。如果您未配置参数,模型将使用默认选项,这些选项可能会因模型而异。

以下示例展示了如何配置几个可用选项。

model = genai.GenerativeModel("gemini-1.5-flash")
response = model.generate_content(
    "Tell me a story about a magic backpack.",
    generation_config=genai.types.GenerationConfig(
        # Only one candidate for now.
        candidate_count=1,
        stop_sequences=["x"],
        max_output_tokens=20,
        temperature=1.0,
    ),
)

print(response.text)

candidateCount 指定要返回的生成的回答数量。目前,此值只能设置为 1。如果未设置,则默认为 1。

stopSequences 指定停止生成输出的一组字符序列(最多 5 个)。如果指定,该 API 将在 stop_sequence 首次出现时停止。停止序列不会包含在响应中。

maxOutputTokens 用于设置候选项中包含的令牌数量上限。

temperature 用于控制输出的随机性。使用较高的值可获得更具创造性的回答,使用较低的值可获得更具确定性的回答。值的范围为 [0.0, 2.0]。

您还可以配置对 generateContent 的个别调用:

response = model.generate_content(
    'Write a story about a magic backpack.',
    generation_config = genai.GenerationConfig(
        max_output_tokens=1000,
        temperature=0.1,
    )
)

在单个调用上设置的任何值都会替换模型构造函数上的值。

后续步骤

现在,您已经探索了 Gemini API 的基础知识,不妨尝试以下操作:

  • 视觉理解:了解如何使用 Gemini 的原生视觉理解功能处理图片和视频。
  • 系统指令:借助系统指令,您可以根据自己的特定需求和用例来引导模型的行为。
  • 音频理解:了解如何使用 Gemini 的原生音频理解功能处理音频文件。