文本生成

当以文本、图片、视频和音频的形式提供输入时,Gemini API 可以生成文本输出。

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

根据纯文本输入生成文本

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

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[{"text": "Write a story about a magic backpack."}]
        }]
       }' 2> /dev/null

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

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

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

# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"

# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT

cat > "$TEMP_JSON" << EOF
{
  "contents": [{
    "parts":[
      {"text": "Tell me about this instrument"},
      {
        "inline_data": {
          "mime_type":"image/jpeg",
          "data": "$(cat "$TEMP_B64")"
        }
      }
    ]
  }]
}
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d "@$TEMP_JSON" 2> /dev/null

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

生成文本串流

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

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

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${GOOGLE_API_KEY}" \
        -H 'Content-Type: application/json' \
        --no-buffer \
        -d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'

构建互动式聊天

借助 Gemini SDK,您可以收集多轮问题和回答,让用户逐步获得答案,或在遇到多部分问题时获得帮助。此 SDK 功能提供了一个用于跟踪对话历史记录的接口,但在后台使用相同的 generateContent 方法来创建响应。

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

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

启用聊天流式传输

您还可以将流式传输与聊天功能搭配使用,如以下示例所示:

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

配置文本生成

您向模型发送的每个提示都包含控制模型如何生成回答的参数。您可以使用 GenerationConfig 配置这些参数。如果您未配置参数,则模型会使用默认选项,这些选项可能会因模型而异。

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

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
        "contents": [{
            "parts":[
                {"text": "Write a story about a magic backpack."}
            ]
        }],
        "safetySettings": [
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "threshold": "BLOCK_ONLY_HIGH"
            }
        ],
        "generationConfig": {
            "stopSequences": [
                "Title"
            ],
            "temperature": 1.0,
            "maxOutputTokens": 800,
            "topP": 0.8,
            "topK": 10
        }
    }'  2> /dev/null | grep "text"

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

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

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

topP 可更改模型选择输出 token 的方式。系统会按照概率从最高到最低的顺序选择词元,直到所选词元的概率总和等于 topP 值。默认的 topP 值为 0.95。

topK 可更改模型选择输出 token 的方式。如果 topK 设为 1,则表示所选 token 是模型词汇表的所有 token 中概率最高的 token;如果 topK 设为 3,则表示系统将从 3 个概率最高的 token 中选择下一个 token(通过温度确定)。系统会根据 topP 进一步过滤词元,并使用温度采样选择最终的词元。

添加系统说明

借助系统说明,您可以根据自己的特定需求和使用情形来控制模型的行为。

通过向模型提供系统指令,您可以为模型提供额外的上下文来了解任务、生成自定义程度更高的回答,并在用户与模型的整个交互过程中遵循特定的准则。您还可以通过设置系统说明来指定产品级行为,与最终用户提供的提示分开。

您可以在初始化模型时设置系统说明:

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
    "parts":
      { "text": "You are a cat. Your name is Neko."}},
    "contents": {
      "parts": {
        "text": "Hello there"}}}'

如需查看使用系统说明的互动式端到端示例,请参阅 Colab 系统说明

后续步骤

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

  • 视觉理解:了解如何使用 Gemini 的原生视觉理解功能处理图片和视频。
  • 音频理解:了解如何使用 Gemini 的原生音频理解功能处理音频文件。