Skip to content

ADK 智能体的 Google Gemini 模型

Supported in ADKPython v0.1.0Typescript v0.2.0Go v0.1.0Java v0.2.0Kotlin v0.1.0

ADK 支持 Google Gemini 系列生成式 AI 模型,这些模型提供了一系列功能强大的模型,具有广泛的功能。ADK 支持许多 Gemini 功能,包括代码执行Google 搜索上下文缓存Computer USE以及 Interactions API

入门

以下代码示例展示了在你的智能体中使用 Gemini 模型的基本实现:

from google.adk.agents import LlmAgent

# --- 使用稳定的 Gemini Flash 模型的示例 ---
agent_gemini_flash = LlmAgent(
    # 使用最新的稳定 Flash 模型标识符
    model="gemini-flash-latest",
    name="gemini_flash_agent",
    instruction="你是一个快速且得力的 Gemini 助手。",
    # ... 其他智能体参数
)
import {LlmAgent} from '@google/adk';

// --- 示例:定义一个基本的 Gemini Flash 智能体 ---
export const rootAgent = new LlmAgent({
  name: 'hello_time_agent',
  model: 'gemini-flash-latest',
  description: 'Gemini flash agent',
  instruction: `你是一个快速且得力的 Gemini 助手。`,
});
import (
    "google.golang.org/adk/agent/llmagent"
    "google.golang.org/adk/model/gemini"
    "google.golang.org/genai"
)

// --- Example using a stable Gemini Flash model ---
modelFlash, err := gemini.NewModel(ctx, "gemini-2.0-flash", &genai.ClientConfig{})
if err != nil {
    log.Fatalf("failed to create model: %v", err)
}
agentGeminiFlash, err := llmagent.New(llmagent.Config{
    // Use the latest stable Flash model identifier
    Model:       modelFlash,
    Name:        "gemini_flash_agent",
    Instruction: "You are a fast and helpful Gemini assistant.",
    // ... other agent parameters
})
if err != nil {
    log.Fatalf("failed to create agent: %v", err)
}
// --- 示例:使用稳定的 Gemini Flash 模型 ---
LlmAgent agentGeminiFlash =
    LlmAgent.builder()
        // 使用最新的稳定 Flash 模型标识符
        .model("gemini-flash-latest") // Set ENV variables to use this model
        .name("gemini_flash_agent")
        .instruction("你是一个快速且得力的 Gemini 助手。")
        // ... 其他智能体参数
        .build();
import com.google.adk.kt.agents.Instruction
import com.google.adk.kt.agents.LlmAgent
import com.google.adk.kt.models.Gemini

// --- 示例:使用稳定的 Gemini Flash 模型 ---
val agentGeminiFlash = LlmAgent(
    // 使用最新的稳定 Flash 模型标识符
    name = "gemini_flash_agent",
    model = Gemini(name = "gemini-flash-latest"),
    instruction = Instruction("你是一个快速且得力的 Gemini 助手。"),
    // ... 其他智能体参数
)
注意:Gemini 模型选择器 gemini-flash-latest

ADK 文档中的大多数代码示例使用 gemini-flash-latest 来选择最新可用的 Gemini Flash 版本。但是,如果你是从区域端点(如 us-central1)访问 Gemini,此选择字符串可能无法生效。在这种情况下,请使用 Gemini 模型页面或 Google Cloud Gemini 模型列表中的特定模型版本字符串。

本节介绍如何通过 Google AI Studio 进行快速开发,或通过 Google Cloud Vertex AI 进行企业级应用来对 Google 的 Gemini 模型进行身份验证。这是在 ADK 中使用 Google 旗舰模型的最直接方式。

本节介绍如何对 Google 的 Gemini 模型进行身份验证,可以通过 Google AI Studio 进行快速开发,也可以通过 Google Cloud Agent Platform 进行企业级应用。这是在 ADK 中使用 Google 旗舰模型的最直接方式。

提示

ADK 内部用于 Gemini 模型的 google-genai 库可以通过 Google AI Studio 或 Vertex AI 进行连接。

语音/视频流式处理的模型支持

为了在 ADK 中使用语音/视频流式处理,你需要使用支持 Live API 的 Gemini 模型。你可以在文档中找到支持 Gemini Live API 的模型 ID

Google AI Studio

这是最简单的方法,建议用于快速入门。

  • 身份验证方式: API 密钥
  • 设置步骤:

    1. 获取 API 密钥:Google AI Studio 获取你的密钥。
    2. 设置环境变量: 在项目的根目录中创建一个 .env 文件 (Python) 或 .properties 文件 (Java),并添加以下内容。ADK 会自动加载此文件。

      export GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY"
      export GOOGLE_GENAI_USE_VERTEXAI=FALSE
      

      (或者) 在模型初始化期间通过 Client 显式传递这些变量(请参见下面的示例)。

  • 可用模型:Google AI for Developers 网站上查看所有可用模型。

Google Cloud Vertex AI

Google Cloud Agent Platform

对于可扩展和生产场景,Agent Platform 是推荐的平台。Agent Platform 上的 Gemini 支持企业级功能、安全性和合规控制。根据你的开发环境和用例,选择以下身份验证方法之一

前置条件: 一个已启用 Agent Platform 的 Google Cloud 项目。

  1. 安装 gcloud CLI: 遵循官方安装说明
  2. 使用 ADC 登录: 此命令会打开浏览器对你的个人账号进行身份验证,适用于本地开发。
    gcloud auth application-default login
    
  3. 设置环境变量:

    export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
    export GOOGLE_CLOUD_LOCATION="YOUR_VERTEX_AI_LOCATION" # 例如,us-central1
    

    明确告诉库使用 Agent Platform:

    export GOOGLE_GENAI_USE_VERTEXAI=TRUE
    
  4. 模型:Agent Platform 文档 中查找可用的模型 ID。

方法 B: Agent Platform Express 模式

Agent Platform Express 模式提供了一种简化的、基于 API 密钥的设置,用于快速原型设计。

  1. 注册 Express 模式以获取你的 API 密钥。
  2. 设置环境变量:
    export GOOGLE_GENAI_API_KEY="PASTE_YOUR_EXPRESS_MODE_API_KEY_HERE"
    export GOOGLE_GENAI_USE_VERTEXAI=TRUE
    

方法 C: 服务账号 (用于生产环境和自动化)

对于已部署的任务应用程序,使用服务账号是标准方法。

  1. 创建服务账号 并授予其 Agent Platform User 角色。
  2. 为应用程序提供凭据:
    • 在 Google Cloud 上: 如果你在 Cloud Run、GKE、VM 或其他 Google Cloud 服务中运行智能体,环境可以自动提供服务账号凭据。你无需创建密钥文件。
    • 在其他地方: 创建一个服务账号密钥文件 并使用环境变量指向它:
      export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/keyfile.json"
      
      除了密钥文件,你还可以使用工作负载身份 (Workload Identity) 对服务账号进行身份验证,但这超出了本指南的范围。

保护你的凭据

服务账号凭据或 API 密钥是极其敏感的信息。切勿公开暴露它们。请使用密钥管理器(如 Google Cloud Secret Manager)在生产环境中安全地存储和访问它们。

Gemini 模型版本

请务必查阅 Gemini 官方文档以获取最新的模型名称,包括所需的特定预览版本。预览模型可能具有不同的可用性或配额限制。

故障排除

错误代码 429 - RESOURCE_EXHAUSTED

当你的请求数量超过了模型分配的处理容量时,通常会发生此错误。

要缓解此问题,你可以尝试以下操作:

  1. 为你尝试使用的模型请求更高的配额限制。
  2. 启用客户端重试。重试允许客户端在延迟后自动重新发送请求,如果配额问题是暂时的,这可能会有所帮助。

有两种方法可以设置重试选项:

选项 1:在智能体上设置重试选项(作为 generate_content_config 的一部分)。

如果你是自行实例化此模型适配器,则应使用此选项。

=== "Python"

    ```python
    root_agent = Agent(
        model='gemini-flash-latest',
        # ...
        generate_content_config=types.GenerateContentConfig(
            # ...
            http_options=types.HttpOptions(
                # ...
                retry_options=types.HttpRetryOptions(initial_delay=1, attempts=2),
                # ...
            ),
            # ...
        )
    )
    ```

=== "Java"

    ```java
    import com.google.adk.agents.LlmAgent;
    import com.google.genai.types.GenerateContentConfig;
    import com.google.genai.types.HttpOptions;
    import com.google.genai.types.HttpRetryOptions;

    // ...

    LlmAgent rootAgent = LlmAgent.builder()
        .model("gemini-flash-latest")
        // ...
        .generateContentConfig(GenerateContentConfig.builder()
            // ...
            .httpOptions(HttpOptions.builder()
                // ...
                .retryOptions(HttpRetryOptions.builder().initialDelay(1.0).attempts(2).build())
                // ...
                .build())
            // ...
            .build())
        .build();
    ```
    ```

**选项 2:在此模型适配器上设置重试选项。**

如果你是自行实例化适配器实例,则应使用此选项。

=== "Python"

    ```python
    from google.genai import types

    root_agent = Agent(
        model='gemini-flash-latest',
        # ...
        generate_content_config=types.GenerateContentConfig(
            # ...
            http_options=types.HttpOptions(
                # ...
                retry_options=types.HttpRetryOptions(initial_delay=1, attempts=2),
                # ...
            ),
            # ...
        )
    )
    ```

=== "Java"

    ```java
    import com.google.adk.agents.LlmAgent;
    import com.google.genai.types.GenerateContentConfig;
    import com.google.genai.types.HttpOptions;
    import com.google.genai.types.HttpRetryOptions;

    LlmAgent agent = LlmAgent.builder()
        .model(Gemini.builder()
            .modelName("gemini-flash-latest")
            .apiClient(Client.builder()
                .httpOptions(HttpOptions.builder()
                    .retryOptions(HttpRetryOptions.builder().initialDelay(1.0).attempts(2).build())
                    .build())
                .build())
            .build())
        .build();
    ```

=== "Kotlin"

    在 Kotlin 中,你可以通过自己创建 `Client` 实例并将其传递给 `Gemini` 构造函数来实现这一点。

    ```kotlin
    import com.google.adk.kt.agents.LlmAgent
    import com.google.adk.kt.models.Gemini
    import com.google.genai.Client
    import com.google.genai.types.HttpOptions
    import com.google.genai.types.HttpRetryOptions

    val client = Client.builder()
        .apiKey("YOUR_API_KEY")
        .httpOptions(HttpOptions.builder()
            .retryOptions(HttpRetryOptions.builder().initialDelay(1.0).attempts(2).build())
            .build())
        .build()

    val model = Gemini(client = client, name = "gemini-flash-latest")

    val agent = LlmAgent(
        name = "my_agent",
        model = model
        // ...
    )
    ```

Gemini Interactions API

Supported in ADKPython v1.21.0

Gemini Interactions APIgenerateContent 推理 API 的替代方案,它提供了有状态的对话功能,允许你使用 previous_interaction_id 链接交互,而无需在每个请求中发送完整的对话历史记录。对于长对话,这种方式更为高效。

你可以通过在 Gemini 模型配置中设置 use_interactions_api=True 参数来启用 Interactions API,如以下代码片段所示:

from google.adk.agents.llm_agent import Agent
from google.adk.models.google_llm import Gemini
from google.adk.tools.google_search_tool import GoogleSearchTool

root_agent = Agent(
    model=Gemini(
        model="gemini-flash-latest",
        use_interactions_api=True,  # 启用 Interactions API
    ),
    name="interactions_test_agent",
    tools=[
        GoogleSearchTool(bypass_multi_tools_limit=True),  # 转换为函数工具
        get_current_weather,  # 自定义函数工具
    ],
)

有关完整的代码示例,请参见 Interactions API 示例

已知限制

Interactions API 不支持在同一智能体内混合使用自定义函数调用工具与内置工具(例如 Google 搜索 工具)。你可以通过配置内置工具使用 bypass_multi_tools_limit 参数将其作为自定义工具来绕过此限制:

# 使用 bypass_multi_tools_limit=True 将 google_search 转换为函数工具
GoogleSearchTool(bypass_multi_tools_limit=True)

在此示例中,此选项将内置的 google_search 转换为函数调用工具(通过 GoogleSearchAgentTool),使其能够与自定义函数工具一起工作。