谷歌开源Agent框架ADK快速入门
文章目录
- 谷歌 Agent Development Kit (ADK) 框架
- 架构设计与多代理协作
- 模型与工具生态的支持
- 项目主页和文档
- 谷歌ADK与MCP兼容性
- LiteLLM技术
- LiteLLM简介
- LiteLLM部署和调用
- 各类大模型接入LiteLlm
谷歌 Agent Development Kit (ADK) 框架
- 谷歌 Agent Development Kit (ADK) 是 Google 在 2025 年发布的开源 AI 多代理开发框架。它旨在让开发者像进行软件开发一样来创建和部署自主智能体系统,使构建从简单任务到复杂工作流的多代理应用更为容易。ADK 同时支撑 Google 内部 Agentspace 和客户互动套件(CES)代理的底层框架,并已通过开源惠及社区。
架构设计与多代理协作
- ADK支持多代理 (multi-agent) 架构,在设计上将应用拆分为多个专职的代理,并通过层次化的管理和协作来完成复杂任务。
- 典型模式是采用层次化的主从代理模型:可以定义一个主代理(如“调度/主管”代理)负责统筹,根据用户请求的意图将子任务委派给不同功能特长的子代理处理。
- 这种设计允许代理间自动分工与协调:在处理用户消息时,主代理的底层大模型会参考自己及子代理的能力描述,判断是否将工作转交(handoff)给某个子代理。例如,一个
WeatherAgent
主管可根据用户输入动态决定是自己调用天气查询工具回答天气问题,还是将对话移交给GreetingAgent
来处理问候语。为此,每个代理在定义时都需要提供清晰的角色说明和能力描述,以帮助大模型决策职责路由。这种通过LLM
推断驱动的代理转移机制使ADK
的多代理系统更具自适应性,能够根据对话内容灵活调用最合适的代理处理。除此之外,ADK 还支持多代理并行和循环等复杂编排模式:内置了顺序 (Sequential)、并行 (Parallel)。
模型与工具生态的支持
- 模型支持方面,ADK 采用模型无关、插件式设计。通过内置的 LiteLLM 适配层,ADK 可以无缝对接 Vertex AI 模型园中各种模型,甚至包括 Anthropic、Meta、Mistral、AI21 等多家提供商的大模型。这意味着企业可根据需求选择最适合的模型或使用私有模型,而无需更改 ADK 的使用方式,避免供应商锁定。
- 工具扩展方面,ADK 拥有丰富的内置工具和第三方工具整合能力。框架自带了诸如网络搜索、代码执行等常用工具模块,并通过开放 API支持开发者注册任意 Python 函数作为自定义工具。ADK 特别提供了模型上下文协议 (MCP) 工具接口和对 OpenAPI 服务的集成,方便调用外部系统。ADK 还能够把其他代理作为工具使用:例如可以将一个由 LangChain 或 CrewAI 构建的代理包装为 ADK 工具供另一个代理调用,从而充分利用社区已有成果。
项目主页和文档
- ADK项目主页
- ADK项目说明文档
谷歌ADK与MCP兼容性
- 模型上下文协议 (MCP) 是一项开放标准,旨在规范 Gemini 和 Claude 等大型语言模型 (LLM) 与外部应用程序、数据源和工具的通信方式。MCP可以理解为一种通用的连接机制,简化了LLM 获取上下文、执行操作以及与各种系统交互的方式。
- MCP 遵循客户端-服务器架构,定义**数据(资源)、交互式模板(提示)和可操作功能(工具)**如何由MCP 服务器公开并由MCP 客户端(可以是 LLM 主机应用程序或 AI 代理)使用。
- 而对于新一代Agent框架来说,都从底层代码功能方面支持
MCP
工具调用,而对于ADK
来说更是允许以工具形式接入MCP
,同时也允许将Agent
包装为一个MCP server
:- 在
ADK
中使用现有的MCP
服务器:ADK
代理充当MCP
客户端,利用外部MCP
服务器提供的工具。 - 通过
MCP
服务器公开ADK
工具:构建一个包装ADK
工具的MCP
服务器,使任何MCP
客户端都可以访问它们。
- 在
LiteLLM技术
- 在深入学习
ADK
之前,需要先学习ADK
默认的大模型调用工具——LiteLlm
的使用方法。在后续使用ADK
时,选择基础模型是最基础的环节,而ADK
目前只支持使用LiteLlm
进行模型调用,因此先详细学习国内外在线模型、以及ollama和vLLM驱动下的开源模型如何接入LiteLlm
,然后再讲解如何上手使用ADK
。
LiteLLM简介
- LiteLLM项目地址
- LiteLLM说明文档
- LiteLLM 是一个轻量级的 Python 库,旨在简化与各种大语言模型(LLM)进行交互的过程。它特别适用于开发者在多种云服务提供商(OpenAI)或本地部署模型(Ollama)上运行大语言模型。通过提供简洁的 API 和灵活的配置选项,LiteLLM 使得开发者可以轻松调用和集成各种不同的 LLM,同时支持模型的定制化扩展和高效调度。LiteLLM 核心功能如下:
- 跨平台模型兼容性:LiteLLM使开发者能够通过统一接口调用多个大语言模型,无论是云端提供的 API(如 OpenAI)还是本地托管的模型(如 Ollama)。它内置支持常见的大型模型和多模型集成,如 GPT-3.5、GPT-4、DeepSeek 等。
- 简化的 API 调用:LiteLLM 提供简单直观的接口,使得开发者无需深入了解底层 API 细节即可实现与模型的交互。用户只需关注模型名称和输入输出内容,LiteLLM 会自动处理与模型的连接、API 调用以及响应解析工作。
- 多模型支持:LiteLLM 支持通过配置文件和代码直接切换不同的模型。它支持从 OpenAI、Anthropic、Meta、DeepSeek 等多个模型提供商调用,还允许开发者轻松集成自定义模型。例如,可以在一个项目中同时使用 OpenAI 的 GPT 模型和 DeepSeek 的推理模型,而无需额外的集成工作。
- 灵活的代理支持:LiteLLM 可以配置为代理模型的 API,通过代理层进行调用,支持本地化部署和代理服务,例如与 Ollama 等工具结合,运行本地大语言模型。这使得 LiteLLM 在需要进行模型切换或构建跨平台服务时,能够提供极大的灵活性。
- 自定义 API 路由(Base URL):LiteLLM 允许用户设置自定义的
base_url
,以支持通过代理或内部 API 调用模型。这为需要在多个环境中运行或通过私有部署调用 LLM 的企业应用提供了便利。 - 流式响应与事件处理:LiteLLM 支持流式响应(streaming responses),允许开发者在模型生成回复的同时进行处理。通过这种方式,开发者能够实时接收和处理模型输出,适用于需要低延迟响应的应用场景,如实时对话或多轮交互。
- 工具和任务管理:在集成外部工具(如搜索引擎、数据库查询等)时,LiteLLM 通过简洁的配置支持多任务执行。开发者可以将外部工具与模型结合,形成复杂的自动化任务流,例如通过模型生成的查询请求,调用外部 API 完成任务并返回结果。
- 灵活的配置和扩展性:LiteLLM 提供了多种配置选项,允许开发者根据具体需求调优模型的行为。用户可以通过传入配置文件来调整模型的推理设置、响应格式、温度参数等,此外,LiteLLM 还支持通过插件扩展其功能,适应更多的使用场景。
LiteLLM部署和调用
- 安装LiteLLM并检查版本信息【截至2025.8.2:10:24,本文使用最新本 1.74.14进行学习】
# 解决底层依赖缺失 pip install networkx # 下载litellm包 pip install litellm # 查看litellm版本 pip show litellm
Name: litellm Version: 1.74.14 Summary: Library to easily interface with LLM API providers Home-page: https://litellm.ai Author: BerriAI Author-email: License: MIT Location: C:\Users\kongyue\.conda\envs\langChain_stu\Lib\site-packages Requires: aiohttp, click, httpx, importlib-metadata, jinja2, jsonschema, openai, pydantic, python-dotenv, tiktoken, tokenizers Required-by: Note: you may need to restart the kernel to use updated packages.
- litellm简单调用LLM的代码,这里使用阿里云百炼平台
from litellm import completion OPENAI_API_BASE="https://dashscope.aliyuncs.com/compatible-mode/v1" OPENAI_API_KEY="sk-xxx" MODEL="deepseek/deepseek-r1-0528"# 使用 LiteLLM 调用 DeepSeek 模型 response = completion(model=MODEL, messages=[{"role": "user", "content": "你好,好久不见!"}],api_base=OPENAI_API_BASE,api_key=OPENAI_API_KEY )# print(response) # 获取第一个回复选项 first_choice = response.choices[0] # 获取消息内容 message_content = first_choice.message.content print(message_content)
你好呀!😊 好久不见!真开心能再次和你聊天~最近过得怎么样?一切还顺利吗? 无论是想闲聊、分享新鲜事,还是需要帮忙解决问题,我随时都在这里哦~✨ (所以…最近有什么有趣的事发生吗?或者想聊聊什么话题呢?)
各类大模型接入LiteLlm
- 尝试使用
LiteLLm
调用更多模型,以及本地ollama
、vLLM
驱动的开源模型。 - 在实际开发过程中,如果涉及到多个模型调用,可以考虑在当前项目文件内创建
.env
文件,用于保存不同模型的API-KEY
和调用请求地址Base_URL
。OPENAI_BASE_URL=https://api.openai-hk.com/v1 OPENAI_API_KEY=hk-xx OPENAI_MODEL=openai/gpt-4o DS_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 DS_API_KEY=sk-xxx DS_MODEL=deepseek/deepseek-r1-0528 OLLAMA_BASE_URL=http://localhost:11434 OLLAMA_API_KEY=ollama OLLAMA_MODEL=ollama/qwen2.5:7b-instruct
- 在同目录文件notebook文件进行读取配置的数据
import os from dotenv import load_dotenv load_dotenv(override=True)# 读取模型组的BASE_URL DS_BASE_URL = os.getenv("DS_BASE_URL") OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL") print(DS_BASE_URL) print(OPENAI_BASE_URL) # 读取模型组的API-KEY DS_API_KEY = os.getenv("DS_API_KEY") OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") print(DS_API_KEY) print(OPENAI_API_KEY) # 读取模型组的模型名称 DS_MODEL = os.getenv("DS_MODEL") OPENAI_MODEL = os.getenv("OPENAI_MODEL") print(DS_MODEL) print(OPENAI_MODEL)
- 测试openai模型调用
import os from dotenv import load_dotenv load_dotenv(override=True) OPENAI_BASE_URL=os.getenv("OPENAI_BASE_URL") OPENAI_API_KEY=os.getenv("OPENAI_API_KEY") OPENAI_MODEL=os.getenv("OPENAI_MODEL") openai_response = completion(model=OPENAI_MODEL, messages=[{"role": "user", "content": "你好,好久不见!"}],api_base=OPENAI_BASE_URL,api_key=OPENAI_API_KEY )print(openai_response.choices[0].message.content)
- 测试ollama模型调用
import os from dotenv import load_dotenv load_dotenv(override=True) OLLAMA_BASE_URL=os.getenv("OLLAMA_BASE_URL") OLLAMA_API_KEY=os.getenv("OLLAMA_API_KEY") OLLAMA_MODEL=os.getenv("OLLAMA_MODEL") ollama_response = completion(model=OLLAMA_MODEL, messages=[{"role": "user", "content": "你好,好久不见!"}],api_base=OLLAMA_BASE_URL,api_key=OLLAMA_API_KEY )print(ollama_response.choices[0].message.content)