ADK 智能体的 Google Gemini 模型¶
ADK 支持 Google Gemini 系列生成式 AI 模型,这些模型提供了一系列功能强大的模型,具有广泛的功能。ADK 支持许多 Gemini 功能,包括代码执行、Google 搜索、上下文缓存、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)
}
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 旗舰模型的最直接方式。
当通过服务使用 AI 模型时,例如 Gemini API 或 Google Cloud 上的 Gemini Enterprise Agent Platform,你必须提供 API 密钥或向服务进行身份验证。提供此信息的最直接方式是使用环境变量或 .env 文件。以下示例展示了配置智能体以使用 Gemini API 或 Gemini Enterprise Agent Platform 的最常见方式。
有关将 ADK 智能体连接到 Google Cloud 托管模型和服务(包括 Gemini Enterprise Agent Platform)的更多详情,请参阅连接 Google Cloud 和 Agent Platform指南。
语音和视频流式支持¶
为了在 ADK 中使用语音/视频流式处理,你需要使用支持 Live API 的 Gemini 模型。你可以在文档中找到支持 Gemini Live API 的模型 ID:
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-flash-latest",
use_interactions_api=True, # Enable Interactions API
),
name="interactions_test_agent",
tools=[
GoogleSearchTool(bypass_multi_tools_limit=True), # Converted to function tool
get_current_weather, # Custom function tool
],
)
有关完整代码示例,请参阅 Interactions API 示例。
已知限制¶
Interactions API 不支持在同一智能体中将自定义函数调用工具与内置工具(如 Google 搜索工具)混合使用。你可以通过使用 bypass_multi_tools_limit 参数将内置工具配置为自定义工具来解决此限制:
在此示例中,此选项将内置的 google_search 转换为函数调用工具(通过 GoogleSearchAgentTool),使其可以与自定义函数工具一起使用。
当你的请求数量超过了模型分配的处理容量时,通常会发生此错误。
要缓解此问题,你可以尝试以下操作:
- 为你尝试使用的模型请求更高的配额限制。
- 启用客户端重试。重试允许客户端在延迟后自动重新发送请求,如果配额问题是暂时的,这可能会有所帮助。
有两种方法可以设置重试选项:
选项 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
// ...
)
```