ADK 智能体的 Google Gemini 模型¶
ADK 支持 Google Gemini 系列生成式 AI 模型,这些模型提供了一套功能强大且用途广泛的能力。ADK 支持许多 Gemini 功能,包括代码执行(Code Execution)、Google 搜索、上下文缓存(Context caching)、计算机使用 (Computer Use) 和 交互(Interactions) API。
入门¶
以下代码示例展示了在你的智能体中使用 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 模型身份验证¶
本节介绍如何通过 Google AI Studio 进行快速开发,或通过 Google Cloud Vertex AI 进行企业级应用来对 Google 的 Gemini 模型进行身份验证。这是在 ADK 中使用 Google 旗舰模型的最直接方式。
集成方法: 使用以下任一方法进行身份验证后,你可以将模型的标识符字符串直接传递给 LlmAgent 的 model 参数。
提示
ADK 内部用于 Gemini 模型的 google-genai 库可以通过 Google AI Studio 或 Vertex AI 进行连接。
语音/视频流的模型支持 为了在 ADK 中使用语音/视频流,你需要使用支持 Live API 的 Gemini 模型。你可以在文档中找到支持 Gemini Live API 的模型 ID:
Google AI Studio¶
这是最简单的方法,建议用于快速入门。
- 身份验证方式: API 密钥
-
设置步骤:
- 获取 API 密钥: 从 Google AI Studio 获取你的密钥。
-
设置环境变量: 在项目的根目录中创建一个
.env文件 (Python) 或.properties文件 (Java),并添加以下内容。ADK 会自动加载此文件。(或者) 在模型初始化期间通过
Client显式传递这些变量(请参见下面的示例)。
-
可用模型: 在 Google AI for Developers 网站上查看所有可用模型。
Google Cloud Vertex AI¶
对于可扩展和面向生产的用例,Vertex AI 是推荐的平台。Vertex AI 上的 Gemini 提供企业级功能、安全性和合规性控制。根据你的开发环境和用例,选择以下方法之一进行身份验证。
前置条件: 一个启用了 Vertex AI API 的 Google Cloud 项目。
方法 A: 用户凭据 (用于本地开发)¶
- 安装 gcloud CLI: 遵循官方安装说明。
- 使用 ADC 登录: 此命令会打开浏览器对你的个人账号进行身份验证,适用于本地开发。
-
设置环境变量:
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID" export GOOGLE_CLOUD_LOCATION="YOUR_VERTEX_AI_LOCATION" # 例如,us-central1明确指示库使用 Vertex AI:
-
可用模型: 在 Vertex AI 文档中查找可用的模型 ID。
方法 B: Vertex AI Express 模式¶
Vertex AI Express 模式提供了一种简化的、基于 API 密钥的设置,用于快速原型设计。
- 注册 Express 模式以获取你的 API 密钥。
- 设置环境变量:
方法 C: 服务账号 (用于生产环境和自动化)¶
对于已部署的任务应用程序,使用服务账号是标准方法。
- 创建服务账号并为其授予
Vertex AI User角色。 - 为你的应用提供凭据:
- 在 Google Cloud 上: 如果你在 Cloud Run、GKE、VM 或其他 Google Cloud 服务中运行智能体,环境会自动提供服务账号凭据。你无需创建密钥文件。
- 在非 Google Cloud 环境: 创建一个服务账号密钥文件并使用环境变量指向它: 除了密钥文件,你还可以使用工作负载身份 (Workload Identity) 对服务账号进行身份验证,但这超出了本指南的范围。
保护你的凭据
服务账号凭据或 API 密钥是极其敏感的信息。切勿公开暴露它们。请使用密钥管理器(如 Google Cloud Secret Manager)在生产环境中安全地存储和访问它们。
Gemini 模型版本
请务必查阅 Gemini 官方文档以获取最新的模型名称,包括所需的特定预览版本。预览模型可能具有不同的可用性或配额限制。
故障排除¶
错误代码 429 - RESOURCE_EXHAUSTED¶
当你的请求数量超过了模型分配的处理容量时,通常会发生此错误。
要缓解此问题,你可以尝试以下操作:
- 为你尝试使用的模型请求更高的配额限制。
- 启用客户端重试。重试允许客户端在延迟后自动重新发送请求,如果配额问题是暂时的,这可能会有所帮助。
有两种方法可以设置重试选项:
选项 1:在 Agent 上设置重试选项(作为 generate_content_config 的一部分)。
如果你直接实例化智能体,可以使用此选项。
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-2.5-flash")
// ...
.generate_content_config(GenerateContentConfig.builder()
// ...
.http_options(HttpOptions.builder()
// ...
.retry_options(HttpRetryOptions.builder().initial_delay(1.0).attempts(2).build())
// ...
.build())
// ...
.build())
.build();
选项 2:在模型适配器上设置重试选项。
如果你自己实例化适配器实例,可以使用此选项。
import com.google.adk.agents.LlmAgent;
import com.google.adk.models.Gemini;
import com.google.genai.Client;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.HttpRetryOptions;
// ...
LlmAgent agent = LlmAgent.builder()
.model(Gemini.builder()
.model_name("gemini-2.5-flash")
.api_client(Client.builder()
.http_options(HttpOptions.builder()
.retry_options(HttpRetryOptions.builder().initial_delay(1.0).attempts(2).build())
.build())
.build())
.build())
.build();
Gemini Interactions API¶
Gemini Interactions API 是 generateContent 推理 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-2.5-flash",
use_interactions_api=True, # 启用 Interactions API
),
name="interactions_test_agent",
tools=[
GoogleSearchTool(bypass_multi_tools_limit=True), # 转换为函数工具
get_current_weather, # 自定义函数工具
],
)
import com.google.adk.agents.LlmAgent;
import com.google.adk.models.Gemini;
import com.google.adk.tools.GoogleSearchTool;
// 注意:Java ADK 对 Interactions API 的支持目前正在开发中。
LlmAgent rootAgent = LlmAgent.builder()
.model(Gemini.builder()
.model_name("gemini-2.5-flash")
.build())
.name("interactions_test_agent")
.tools(
GoogleSearchTool.INSTANCE, // 搜索工具
getCurrentWeather // 自定义函数工具
)
.build();
有关完整的代码示例,请参阅 交互(Interactions) API 示例。
已知限制¶
交互(Interactions) API 不 支持在同一个智能体中混合使用自定义函数调用工具和内置工具(例如 Google 搜索工具)。你可以通过使用 bypass_multi_tools_limit 参数将内置工具配置为作为自定义工具运行,从而绕过此限制:
在此示例中,该选项将内置的 google_search 转换为函数调用工具(通过 GoogleSearchAgentTool),从而使其可以与自定义函数工具一起使用。