在 ADK 中使用不同的模型¶
Agent Development Kit (ADK) 设计具有灵活性,允许你将各种大语言模型 (LLMs) 集成到你的智能体中。虽然 Google Gemini 模型的设置已在设置基础模型指南中介绍,但本页详细说明了如何有效利用 Gemini 并集成其他流行模型,包括那些外部托管或本地运行的模型。
ADK 主要使用两种机制进行模型集成:
- 直接字符串 / 注册表: 适用于与 Google Cloud 紧密集成的模型(如通过 Google AI Studio 或 Vertex AI 访问的 Gemini 模型)或托管在 Vertex AI 端点上的模型。你通常直接向
LlmAgent
提供模型名称或端点资源字符串。ADK 的内部注册表将此字符串解析为适当的后端客户端,通常利用google-genai
库。 - 包装类: 为了更广泛的兼容性,特别是对于 Google 生态系统之外的模型或需要特定客户端配置的模型(如通过 LiteLLM 访问的模型)。你实例化一个特定的包装类(例如
LiteLlm
)并将此对象作为model
参数传递给你的LlmAgent
。
以下部分将根据你的需求指导你使用这些方法。
使用 Google Gemini 模型¶
这是在 ADK 中使用 Google 旗舰模型的最直接方式。
集成方法: 直接将模型的标识符字符串传递给 LlmAgent
(或其别名 Agent
)的 model
参数。
后端选项与设置:
ADK 内部用于 Gemini 的 google-genai
库可以通过 Google AI Studio 或 Vertex AI 连接。
语音/视频流的模型支持
为了在 ADK 中使用语音/视频流式处理,你需要使用支持 Live API 的 Gemini 模型。你可以在文档中找到支持 Gemini Live API 的模型 ID:
Google AI Studio¶
- 使用场景: Google AI Studio 是开始使用 Gemini 的最简单方式。你只需要 API 密钥。最适合快速原型设计和开发。
- 设置: 通常需要将 API 密钥设置为环境变量:
- 模型: 在 Google AI 开发者网站 上查找所有可用模型。
Vertex AI¶
- 使用场景: 推荐用于生产应用,利用 Google Cloud 基础设施。Vertex AI 上的 Gemini 支持企业级功能、安全性和合规控制。
-
设置:
-
使用应用默认凭证 (ADC) 进行身份验证:
-
设置你的 Google Cloud 项目和位置:
-
明确告诉库使用 Vertex AI:
-
-
模型: 在 Vertex AI 文档 中查找可用的模型 ID。
示例:
from google.adk.agents import LlmAgent
# --- 使用稳定的 Gemini Flash 模型示例 ---
agent_gemini_flash = LlmAgent(
# 使用最新的稳定 Flash 模型标识符
model="gemini-2.0-flash",
name="gemini_flash_agent",
instruction="你是一个快速且乐于助人的 Gemini 助手。",
# ... 其他智能体参数
)
# --- 使用强大的 Gemini Pro 模型示例 ---
# 注意:始终检查官方 Gemini 文档以获取最新的模型名称,
# 包括特定的预览版本(如果需要)。预览模型可能有
# 不同的可用性或配额限制。
agent_gemini_pro = LlmAgent(
# 使用最新的通用可用 Pro 模型标识符
model="gemini-2.5-pro-preview-03-25",
name="gemini_pro_agent",
instruction="你是一个强大且知识渊博的 Gemini 助手。",
# ... 其他智能体参数
)
通过 LiteLLM 使用云和专有模型¶
要访问来自如 OpenAI、Anthropic(非 Vertex AI)、Cohere 等提供商的大量 LLM,ADK 通过 LiteLLM 库提供集成。
集成方法: 实例化 LiteLlm
包装类并将其传递给 LlmAgent
的 model
参数。
LiteLLM 概述: LiteLLM 充当翻译层,为 100 多个 LLM 提供标准化的、与 OpenAI 兼容的接口。
设置:
- 安装 LiteLLM:
-
设置提供商 API 密钥: 为你打算使用的特定提供商配置 API 密钥作为环境变量。
-
OpenAI 示例:
-
Anthropic 示例(非 Vertex AI):
-
查阅 LiteLLM 提供商文档 了解其他提供商的正确环境变量名称。
示例:
from google.adk.agents import LlmAgent from google.adk.models.lite_llm import LiteLlm # --- 使用 OpenAI 的 GPT-4o 的智能体示例 --- # (需要 OPENAI_API_KEY) agent_openai = LlmAgent( model=LiteLlm(model="openai/gpt-4o"), # LiteLLM 模型字符串格式 name="openai_agent", instruction="你是一个由 GPT-4o 提供支持的乐于助人的助手。", # ... 其他智能体参数 ) # --- 使用 Anthropic 的 Claude Haiku(非 Vertex)的智能体示例 --- # (需要 ANTHROPIC_API_KEY) agent_claude_direct = LlmAgent( model=LiteLlm(model="anthropic/claude-3-haiku-20240307"), name="claude_direct_agent", instruction="你是一个由 Claude Haiku 提供支持的助手。", # ... 其他智能体参数 )
-
通过 LiteLLM 使用开源和本地模型¶
为了最大限度的控制、节省成本、隐私或离线使用场景,你可以在本地运行开源模型或自托管它们,并使用 LiteLLM 集成它们。
集成方法: 实例化 LiteLlm
包装类,配置为指向你的本地模型服务器。
Ollama 集成¶
Ollama 允许你轻松在本地运行开源模型。
模型选择¶
如果你的智能体依赖工具,请确保从 Ollama 网站 选择支持工具的模型。
为了获得可靠的结果,我们建议使用具有工具支持的适当大小的模型。
可以使用以下命令检查模型的工具支持:
ollama show mistral-small3.1
Model
architecture mistral3
parameters 24.0B
context length 131072
embedding length 5120
quantization Q4_K_M
Capabilities
completion
vision
tools
你应该在能力下看到列出的 tools
。
你还可以查看模型使用的模板,并根据你的需求对其进行调整。
例如,上述模型的默认模板本质上建议模型应该始终调用函数。这可能导致函数调用的无限循环。
Given the following functions, please respond with a JSON for a function call
with its proper arguments that best answers the given prompt.
Respond in the format {"name": function name, "parameters": dictionary of
argument name and its value}. Do not use variables.
你可以将这样的提示替换为更具描述性的提示,以防止无限工具调用循环。
例如:
Review the user's prompt and the available functions listed below.
First, determine if calling one of these functions is the most appropriate way to respond. A function call is likely needed if the prompt asks for a specific action, requires external data lookup, or involves calculations handled by the functions. If the prompt is a general question or can be answered directly, a function call is likely NOT needed.
If you determine a function call IS required: Respond ONLY with a JSON object in the format {"name": "function_name", "parameters": {"argument_name": "value"}}. Ensure parameter values are concrete, not variables.
If you determine a function call IS NOT required: Respond directly to the user's prompt in plain text, providing the answer or information requested. Do not output any JSON.
然后你可以使用以下命令创建一个新模型:
使用 ollama_chat 提供商¶
我们的 LiteLLM 包装器可用于创建使用 Ollama 模型的智能体。
root_agent = Agent(
model=LiteLlm(model="ollama_chat/mistral-small3.1"),
name="dice_agent",
description=(
"hello world agent that can roll a dice of 8 sides and check prime"
" numbers."
),
instruction="""
You roll dice and answer questions about the outcome of the dice rolls.
""",
tools=[
roll_die,
check_prime,
],
)
重要的是设置提供商为 ollama_chat
而不是 ollama
。使用 ollama
将导致意外行为,如无限工具调用循环和忽略先前上下文。
虽然可以在 LiteLLM 内部提供 api_base
用于生成,但截至 v1.65.5,LiteLLM 库在完成后调用其他 API 时依赖于环境变量。因此,此时我们建议设置环境变量 OLLAMA_API_BASE
来指向 ollama 服务器。
使用 openai 提供商¶
或者,可以使用 openai
作为提供商名称。但这也需要设置 OPENAI_API_BASE=http://localhost:11434/v1
和 OPENAI_API_KEY=anything
环境变量,而不是 OLLAMA_API_BASE
。请注意,api base 现在末尾有 /v1
。
root_agent = Agent(
model=LiteLlm(model="openai/mistral-small3.1"),
name="dice_agent",
description=(
"hello world agent that can roll a dice of 8 sides and check prime"
" numbers."
),
instruction="""
You roll dice and answer questions about the outcome of the dice rolls.
""",
tools=[
roll_die,
check_prime,
],
)
调试¶
你可以通过在智能体代码中的导入后添加以下内容来查看发送到 Ollama 服务器的请求。
查找类似于以下的行:
Request Sent from LiteLLM:
curl -X POST \
http://localhost:11434/api/chat \
-d '{'model': 'mistral-small3.1', 'messages': [{'role': 'system', 'content': ...
自托管端点(例如 vLLM)¶
诸如 vLLM 之类的工具允许你高效地托管模型,并通常暴露与 OpenAI 兼容的 API 端点。
设置:
- 部署模型: 使用 vLLM(或类似工具)部署你选择的模型。记下 API 基础 URL(例如
https://your-vllm-endpoint.run.app/v1
)。- 对于 ADK 工具很重要: 部署时,确保服务工具支持并启用与 OpenAI 兼容的工具/函数调用。对于 vLLM,这可能涉及标志,如
--enable-auto-tool-choice
和可能特定的--tool-call-parser
,取决于模型。参考 vLLM 关于工具使用的文档。
- 对于 ADK 工具很重要: 部署时,确保服务工具支持并启用与 OpenAI 兼容的工具/函数调用。对于 vLLM,这可能涉及标志,如
-
认证: 确定你的端点如何处理认证(例如,API 密钥、承载令牌)。
集成示例:
import subprocess from google.adk.agents import LlmAgent from google.adk.models.lite_llm import LiteLlm # --- 使用托管在 vLLM 端点上的模型的智能体示例 --- # 由你的 vLLM 部署提供的端点 URL api_base_url = "https://your-vllm-endpoint.run.app/v1" # 你的 vLLM 端点配置识别的模型名称 model_name_at_endpoint = "hosted_vllm/google/gemma-3-4b-it" # vllm_test.py 的示例 # 认证(示例:为 Cloud Run 部署使用 gcloud 身份令牌) # 根据你的端点的安全性调整这一点 try: gcloud_token = subprocess.check_output( ["gcloud", "auth", "print-identity-token", "-q"] ).decode().strip() auth_headers = {"Authorization": f"Bearer {gcloud_token}"} except Exception as e: print(f"警告:无法获取 gcloud 令牌 - {e}。端点可能未受保护或需要不同的认证。") auth_headers = None # 或适当处理错误 agent_vllm = LlmAgent( model=LiteLlm( model=model_name_at_endpoint, api_base=api_base_url, # 如果需要,传递认证头 extra_headers=auth_headers # 或者,如果端点使用 API 密钥: # api_key="YOUR_ENDPOINT_API_KEY" ), name="vllm_agent", instruction="你是一个在自托管 vLLM 端点上运行的乐于助人的助手。", # ... 其他智能体参数 )
使用 Vertex AI 上的托管和微调模型¶
为了企业级可扩展性、可靠性和与 Google Cloud 的 MLOps 生态系统集成,你可以使用部署到 Vertex AI 端点的模型。这包括来自模型库的模型或你自己的微调模型。
集成方法: 将完整的 Vertex AI 端点资源字符串(projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID
)直接传递给 LlmAgent
的 model
参数。
Vertex AI 设置(综合):
确保你的环境已配置为 Vertex AI:
-
认证: 使用应用默认凭证 (ADC):
-
环境变量: 设置你的项目和位置:
-
启用 Vertex 后端: 关键是,确保
google-genai
库针对 Vertex AI:
模型库部署¶
你可以从 Vertex AI 模型库 部署各种开放和专有模型到端点。
示例:
from google.adk.agents import LlmAgent
from google.genai import types # 用于配置对象
# --- 使用从模型库部署的 Llama 3 模型的智能体示例 ---
# 替换为你实际的 Vertex AI 端点资源名称
llama3_endpoint = "projects/YOUR_PROJECT_ID/locations/us-central1/endpoints/YOUR_LLAMA3_ENDPOINT_ID"
agent_llama3_vertex = LlmAgent(
model=llama3_endpoint,
name="llama3_vertex_agent",
instruction="你是一个基于 Llama 3 的有帮助的助手,托管在 Vertex AI 上。",
generate_content_config=types.GenerateContentConfig(max_output_tokens=2048),
# ... 其他智能体参数
)
微调模型端点¶
部署你的微调模型(无论是基于 Gemini 还是 Vertex AI 支持的其他架构)会产生一个可以直接使用的端点。
示例:
from google.adk.agents import LlmAgent
# --- 使用 Vertex AI 上部署的 Claude 模型示例 ---
agent_claude_vertex = LlmAgent(
# 完整的 Vertex AI 端点资源字符串
model="projects/my-project/locations/us-central1/endpoints/1234567890",
name="claude_vertex_agent",
instruction="你是一个有帮助的助手,在 Vertex AI 上运行。",
# ... 其他智能体参数
)
通过 LiteLLM 在 Vertex AI 上使用 Claude 模型¶
一些提供商,如 Anthropic,直接通过 Vertex AI 提供他们的模型。
集成方法: 使用直接模型字符串(例如 "claude-3-sonnet@20240229"
),但需要在 ADK 内手动注册。
为什么需要注册? ADK 的注册表自动识别 gemini-*
字符串和标准 Vertex AI 端点字符串(projects/.../endpoints/...
),并通过 google-genai
库路由它们。对于通过 Vertex AI 直接使用的其他模型类型(如 Claude),你必须明确告诉 ADK 注册表哪个特定的包装类(在这种情况下为 Claude
)知道如何使用 Vertex AI 后端处理该模型标识符字符串。
示例:
-
Vertex AI 环境: 确保完成综合 Vertex AI 设置(ADC、环境变量、
GOOGLE_GENAI_USE_VERTEXAI=TRUE
)。 -
安装提供商库: 安装为 Vertex AI 配置的必要客户端库。
# --- 通过 LiteLLM 在 Vertex AI 上使用 Claude 的智能体示例 ---
agent_claude_vertex_litellm = LlmAgent(
model=LiteLlm(
model="anthropic/claude-3-haiku@google-vertex",
# 配置参数传递给 Vertex AI 的 LiteLLM 实现
),
name="claude_vertex_litellm_agent",
instruction="你是一个由 Vertex AI 上的 Claude 提供支持的乐于助人的助手。",
# ... 其他智能体参数
)
- 注册模型类: 在应用程序开始时添加此代码,在 使用 Claude 模型字符串创建智能体之前:
选择正确的模型¶
选择正确的模型取决于多个因素,包括:
- 性能: 更强大的模型(Gemini Pro、Claude 3 Opus 等)通常在复杂推理、理解口头说明和提供深入回应方面表现更好,但可能在响应延迟和成本方面支付"税"。
- 速度: "快速"变种(如 Gemini Flash)以更高效的性能提供响应,同时提供较好但经过优化的结果。
- 能力: 特定模型对高级能力(如代码生成、函数调用、规划)的支持各不相同。检查每个模型的文档以确认它支持你所需的特性。
- 费用: 更强大的模型或特定提供商可能会收取更高的费用。考虑你的预算限制和预期使用量。
- 部署: 本地模型更适合隐私敏感的应用或不可靠连接,但需要技术基础设施。
- 兼容性: 验证你选择的模型与 ADK 工具和特性的兼容性,尤其是功能调用/工具使用。
故障排除提示¶
如果你在使用特定模型时遇到问题:
- 检查环境变量: 确保设置了正确的环境变量(API 密钥、项目、位置等)。
- 查看认证: 确认认证凭证已准备就绪且有效。
- 依赖项: 确保安装了所有必要的依赖项(litellm、google-auth 等)。
- 工具/函数兼容性: 如果工具不起作用,请验证所选模型支持函数调用的格式,以及是否启用了此功能。
- 检查配额: 某些服务可能有 API 调用配额限制。
- 日志: 启用详细日志记录可能有助于识别问题:
下一步¶
现在你已经了解了如何使用各种模型,请探索: