Google ADK实战趋势发现
到本篇文章结束时,你将拥有一个更强大的趋势探测器代理,可以从多个来源获取信息。更重要的是,你将学习使用ADK构建复杂代理所需的高级技能

和我们一起构建你的第一个多智能体系统!
欢迎回到我们关于构建终极AI研究助理系列的第二篇!在我们的第一篇文章中,我们构建了一个出色的代理,能够搜索网络以找到最新的AI代理新闻。但如果我们想添加更多专业技能,比如从Reddit开发者社区获取真实的脉搏呢?为了实现这一点,我们需要升级我们的代理设计。
在这篇指南中,我们将提升我们的技能,并重构我们的简单代理为一个强大的多智能体系统。我们将构建一个“管理者”代理,指挥一个专家团队,包括一个具有自定义Reddit工具的成员,以收集更丰富、更多样化的见解。
到本篇文章结束时,你将拥有一个更强大的趋势探测器代理,可以从多个来源获取信息。更重要的是,你将学习使用ADK构建复杂代理所需的高级技能。你将知道如何:
- 构建可扩展的多智能体系统。
- 从任何Python函数构建自定义工具(如我们的新Reddit工具)。
- 创建一个协调者代理,将任务分配给一组专家。
- 编写高级提示来管理多步骤、多工具的工作流。
- 调试使用ADK的强大Trace视图的多智能体系统。
这种架构是解锁代理全部潜力的关键。让我们开始吧!

1、获取Reddit API凭据并安装库
为了允许我们的代理程序化地访问Reddit,我们需要获取API凭据。这完全是免费的,只需一分钟。
a) 导航到Reddit应用页面:登录你的Reddit账户并前往应用偏好页面。
b) 创建一个新的应用:滚动到底部并点击标有“你是开发者?创建应用……”的按钮。
c) 填写表单:
- 名称:Trend Spotter Agent
- 将应用程序类型选择为脚本。
- 关于URL:你可以留空。
- 重定向URL:必须在此字段中输入
http://localhost:8080
。
d) 点击创建应用。你现在将被带到一个新页面,显示你的凭据。
e) 设置环境变量:出于安全考虑,我们将这些凭据存储为环境变量。
- 你的客户端ID是在“个人使用脚本”下面的字符字符串。
- 你的客户端密钥是在秘密标签旁边的长字符串。
- 在终端中运行以下导出命令:
export REDDIT_CLIENT_ID="YOUR_CLIENT_ID"
export REDDIT_CLIENT_SECRET="YOUR_CLIENT_SECRET"
export REDDIT_USER_AGENT="TrendSpotterAgent/0.1 by u/YourUsername"
f) 更新依赖项:将praw库添加到你的requirements.txt文件中并进行安装。
# requirements.txt
google-adk
praw
g) 从终端安装它:
pip install -r requirements.txt
配置你的云环境
如果你还没有这样做,我们在之前的博客文章中展示了如何定义设置,以告诉ADK如何安全地连接到你的Google Cloud帐户以使用Vertex AI和Google搜索等服务。
export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT=<your-gcp-project-id>
export GOOGLE_CLOUD_LOCATION=<your-gcp-project-location>
运行一次此命令。它会打开浏览器让你登录,允许ADK代表你发出授权请求。
gcloud auth application-default login
2、创建项目文件夹
为了组织我们新的代理团队,我们将在主trend_spotter包内创建一个sub_agents目录。
这里是创建主要代理文件夹结构的方法:
# 创建主项目文件夹
mkdir trend-spotter && cd trend-spotter
# 创建将保存代码的Python包文件夹
mkdir trend_spotter
touch trend_spotter/__init__.py
touch trend_spotter/agent.py
touch trend_spotter/prompt.py
# 创建顶级配置文件
touch pyproject.toml requirements.txt
# 最后,创建并激活虚拟环境
python3 -m venv venv && source venv/bin/activate
(在Windows上,使用 python -m venv venv && .\venv\Scripts\activate
)
在你定义了主要代理和文件夹结构之后,从你的trend-spotter根文件夹运行:
# 创建sub-agents目录及其Python初始化文件
mkdir trend_spotter/sub_agents
touch trend_spotter/sub_agents/__init__.py
3、创建专家子代理
现在我们将通过直接创建Agent类的实例来构建我们的两个专家代理。
3.1 Google搜索专家
- 创建新文件:trend_spotter/sub_agents/google_search_agent.py
- 添加此代码。注意我们是如何直接创建google_search_agent变量的。
# trend_spotter/sub_agents/Google Search_agent.py
from google.adk.agents import Agent
from google.adk.tools import google_search
MODEL = "gemini-2.5-pro-preview-05-06"
# 一个特定的、结构化的提示,用于控制此子代理的输出格式。
google_search_SUB_AGENT_PROMPT = """
**角色:**
- 你是一个专门的研究助手。
- 你的唯一目的是根据经理的指示执行Google搜索并返回原始的、结构化的结果。
**工具:**
- 你有一个工具:`Google Search`。
**上下文:**
- 你将收到经理代理提供的查询。
- 你的输出将由另一个代理读取,因此它必须干净、可预测且结构化。
- 你不得总结、分析或解释搜索结果。你的工作只是从工具的输出中找到并格式化信息。
**任务:**
1. 接受提供的搜索查询。
2. 使用`Google Search`工具执行搜索。
3. 按照下面指定的**精确**`输出格式`格式化工具的原始输出。
**输出格式:**
对于每个搜索结果,你必须提供标题、链接和摘要。每个完整的结果必须用'---'分隔。
---
标题: [第一个搜索结果的标题]
链接: [第一个搜索结果的完整URL]
摘要: [第一个搜索结果的摘要文本]
---
标题: [第二个搜索结果的标题]
链接: [第二个搜索结果的完整URL]
摘要: [第二个搜索结果的摘要文本]
---
(以此类推,适用于所有结果)
"""
google_search_agent = Agent(
model=MODEL,
name="google_search_agent",
description="擅长使用google_search查找最近的信息并返回包含URL的结构化结果列表。",
# 我们在这里指派新的、结构化的指令。
instruction=google_search_SUB_AGENT_PROMPT,
tools=[google_search]
)
3.2 Reddit专家
首先,为我们的自定义工具代码创建一个新文件:trend_spotter/tools.py。向其添加以下函数。
import os
import praw
# 该函数现在接受一个SUBREDDIT名称列表
def search_hot_reddit_posts(subreddit_names: list[str], limit_per_subreddit: int = 5) -> str:
"""
在一系列subreddit中搜索当前热门帖子,并返回它们的标题和URL。
参数:
subreddit_names: 要搜索的subreddit名称列表(例如:["LocalLLaMA", "MachineLearning"])。
limit_per_subreddit: 从每个subreddit检索的热门帖子数量。
返回:
包含状态和格式化帖子字符串列表的字典。
"""
try:
print(f"\n🔎 在以下subreddit中搜索热门帖子:{', '.join(subreddit_names)}...")
reddit = praw.Reddit(
client_id=os.environ["REDDIT_CLIENT_ID"],
client_secret=os.environ["REDDIT_CLIENT_SECRET"],
user_agent=os.environ["REDDIT_USER_AGENT"],
read_only=True,
)
all_posts = []
# 循环遍历提供的subreddit名称列表中的每个subreddit名称
for sub_name in subreddit_names:
print(f" - 从r/{sub_name}获取数据...")
subreddit = reddit.subreddit(sub_name)
for post in subreddit.hot(limit=limit_per_subreddit):
# 如果我们想要,可以在这里添加简单的过滤器,例如分数
if post.score > 5:
all_posts.append(f"标题: {post.title}\n链接: {post.url}")
if not all_posts:
return "未找到符合标准的热门帖子。"
print(f"✅ Reddit搜索完成。共找到{len(all_posts)}个符合条件的帖子。")
return "\n---\n".join(all_posts)
except Exception as e:
return f"Reddit搜索错误:{e}"
现在,在trend_spotter/sub_agents/reddit_agent.py中创建Reddit代理本身:
# trend_spotter/sub_agents/reddit_agent.py
from google.adk.agents import Agent
from trend_spotter.tools import search_hot_reddit_posts
MODEL = "gemini-2.5-pro-preview-05-06"
reddit_agent = Agent(
name="reddit_agent",
model=MODEL,
description="擅长使用其工具在特定Reddit子版块中寻找热门帖子的专家。",
tools=[search_hot_reddit_posts]
)
4、构建主要的协调者代理
现在我们将修改第1部分中的主要代理,成为我们新专家团队的“管理者”。
打开trend_spotter/prompt.py并将其中的内容替换为这个新的协调者提示:
# trend_spotter/prompt.py
ORCHESTRATOR_PROMPT = """
**角色:**
- 你是高度能力的AI研究团队管理者。
- 你的目的是为“The Agent Factory”播客生成高质量、详细的智能报告。
- 你的重点是仅限于对软件开发人员有影响和相关的AI代理发展。
**工具:**
- 你有两个专家代理可用作工具:
1. `google_search_agent`:擅长执行通用网络搜索以查找新闻、发布和技术文章。
2. `reddit_agent`:擅长在特定的Reddit子版块中找到真实的手动开发者对话。
**上下文:**
- 你必须综合来自`google_search_agent`和`reddit_agent`的信息以形成你的结论。
- 你筛选所有信息的主要标准是其对开发者的直接影响。排除任何纯粹基于商业或营销的内容。
- 在一般网络搜索和Reddit上出现多次的主题(例如)应被视为更重要并在报告中优先处理。
- 报告必须严格按照任务部分描述的格式进行结构化。
**任务:**
1. **发现当前日期:** 你的第一个动作是委派给你的`google_search_agent`。指示它找到当前日期。
2. **委派专注研究:**
- 根据日期,计算过去7天的起始和结束日期。
- 指示`google_search_agent`在计算出的日期范围内查找关于新开源代理框架、流行库(如LangChain、ADK、CrewAI或LlamaIndex)更新以及构建代理的技术教程的新闻。使用`after:YYYY-MM-DD`和`before:YYYY-MM-DD`操作符。
- 指示`reddit_agent`在子版块如“LocalLLaMA”、“MachineLearning”、“LangChain”、“AI_Agents”、“LLMDevs”和“singularity”中找到关于实际挑战、新技术和对新工具意见的最热门开发者对话。
3. **综合并创建最终报告:**
- 审查`google_search_agent`和`reddit_agent`提供的信息。
- 综合、筛选并去重发现的结果。你的主要筛选标准是**只选择对开发者有直接影响和重大意义的主题**。
- **特别注意在一般网络搜索和Reddit上多次出现的主题**,因为这些主题很可能是最重要的,应该优先处理。
- 报告**必须以指定日期范围的标题开头**。
- 报告正文必须有以下三个部分,详细如下。
- 对于每个项目,你**必须提供四个信息点**:一段1-2句的解释、缩进的“开发者影响”分析、“优先级理由”以及可验证的源URL。
**最终报告格式:**
**🔥 代理开发者五大趋势**
1. **[趋势1名称]**:[对这一趋势的一段1-2句解释。]
**(来源:[URL])**
* **开发者影响**:[对为什么这对开发者重要的简短说明。]
* **优先级理由**:[对为什么选择该主题的简短说明,例如“Reddit上讨论量大且在多个技术文章中提到。”]
2. ...(总计最多5个)
**🚀 代理开发者五大发布**
1. **[发布1名称]**:[对工具、框架或模型的一段1-2句解释。]
**(来源:[URL])**
* **开发者影响**:[对为什么这对开发者重要的简短说明。]
* **优先级理由**:[对为什么选择该主题的简短说明。]
2. ...(总计最多5个)
**🤔 代理开发者五大问题**
1. **[问题1主题]**:[对开发者正在询问的问题的一段1-2句解释。]
**(来源:[URL])**
* **开发者影响**:[对为什么这对开发者重要的简短说明。]
* **优先级理由**:[对为什么选择该主题的简短说明。]
2. ...(总计最多5个)
"""
打开trend_spotter/agent.py并将其中的内容替换为将其转换为协调者。注意我们现在导入了我们创建的代理实例。
# trend_spotter/agent.py
from google.adk.agents import LlmAgent
from google.adk.tools.agent_tool import AgentTool
# 导入我们创建的代理实例
from .sub_agents.google_search_agent import google_search_agent
from .sub_agents.reddit_agent import reddit_agent
from . import prompt
MODEL = "gemini-2.5-pro-preview-05–06"
# 这是我们主要的“管理者”代理,现在是一个LlmAgent
root_agent = LlmAgent(
model=MODEL,
name="TrendSpotterOrchestrator",
description="管理一组专家AI代理的管理者。",
instruction=prompt.ORCHESTRATOR_PROMPT,
# 协调者的“工具”是它的子代理,包装在AgentTool中
tools=[
AgentTool(agent=google_search_agent),
AgentTool(agent=reddit_agent)
],
)
5、运行你的多智能体系统
运行过程保持不变。adk web工具将自动加载你的root_agent,现在它已成为协调者。
确保你的pyproject.toml文件仍然正确指向你的主要代理:
[project]
name = "trend_spotter"
version = "0.1.0"
# Setuptools将自动发现你的trend_spotter包。
[tool.adk.agents]
trend_spotter = "trend_spotter.agent:root_agent"
使用新依赖项安装更新后的包:
pip install -e .
启动web界面:
adk web
在web UI的“事件”选项卡中,你现在将看到主要的协调者代理对其新的google_search_agent和reddit_agent子代理进行调用。你已经成功使用正确的ADK模式构建了一个更强大、更可扩展的AI系统!
你应该得到类似以下的输出:
6月4日至6月11日,2025年的报告
🔥 代理开发者五大趋势
LangChain企业采用框架:LangChain等框架在企业环境中显示出显著增长,表明在Python下载量上超过了OpenAI SDK,并与SAP和Salesforce等系统进行了新的集成。(来源:knowledia.com新闻 - “LangChain在6月2025年超过OpenAI SDK的Python下载量” - 这个具体的URL不在提供的搜索中,但代表了可能包含此类信息的新闻文章的类型“LangChain:在6月2025年超过了OpenAI SDK的Python下载量”。)
开发者影响:使用或学习LangChain的开发者可以预期在企业环境中获得更成熟的工具和更大的技能需求。
优先级理由:这一趋势基于下载统计数据和企业集成新闻,表明相关开发人员职业机会的重大转变。
代理开发中的增强可观测性和调试:有一股明显的趋势是朝着更复杂的监控、调试和管理AI代理成本的工具发展,Langfuse与LlamaIndex的集成以及LangSmith的新功能就是例证。(来源:https://news.llamaindex.ai/integrating-langfuse-for-observability-and-debugging-in-llamaindex-5f4f7f8c29ac [基于搜索“一篇6月6日,2025年讨论Langfuse与LlamaIndex集成以实现可观测性和调试的文章”。])
开发者影响:开发人员将拥有更好的工具来理解代理行为、优化性能并控制运营成本。
优先级理由:解决了构建稳健和可维护代理的关键开发人员需求,多个框架更新突显了这一点。
代理在处理结构化数据方面的进步:代理在处理结构化数据方面变得越来越熟练,微软AutoGen的结构化检索增强和LlamaIndex的电子表格代理的发展就是例证。(来源:每日AI代理新闻 - “微软AutoGen v0.4:结构化检索增强及MCP支持” - 这个URL不在搜索结果中,但信息“微软AutoGen v0.4实现了结构化检索增强”是。)
开发者影响:这使开发人员能够构建代理以处理更复杂、现实世界中的使用案例,涉及数据库、电子表格和其他结构化格式。
优先级理由:代表了代理能力的重大扩展,使新应用成为可能并增加了其效用。
本地和开源代理解决方案的增长:新的开源框架如“Goose”(来自Block)和“OpenHands”强调本地执行和定制,与Reddit(r/LocalLLaMA)上的开发者讨论一致,关于获得更多对他们的LLM设置控制权。(来源:https://www.reddit.com/r/LocalLLaMA/comments/1l8pem0/i_finally_got_rid_of_ollama/ 和有关Goose/OpenHands发布的新闻文章)
开发者影响:为开发人员提供了更多选择,以隐私为中心、成本效益高且高度可定制的代理开发。
优先级理由:得到了一般技术新闻和Reddit开发者社区(Reddit)中活跃讨论的支持。
多代理系统和互操作性标准的兴起:Fujitsu的协调器开发以及CrewAI和AutoGen(带有MCP支持)等框架的进步突出了多个代理协作的重点。LangGraph也是这一趋势的核心。(来源:Tech新闻文章“Fujitsu的Agentic Workflow Orchestrator”和https://www.reddit.com/r/LangChain/comments/1l8zy42/built_a_texttosql_multiagent_system_with/)
开发者影响:开发者越来越多地被要求设计、构建和管理多个专业化代理之间的交互,需要新的技能组合。
优先级理由:这是创新的一个关键领域,多个框架更新和构建复杂应用程序的开发者讨论都提到了这一点。
🚀 代理开发者五大发布
LangGraph平台普遍可用:LangChain的LangGraph,一个用于创建状态多演员LLM应用程序的库,现已普遍可用,提供了一键部署等功能。(来源:LangChain官方博客/文档 - 搜索提到“LangGraph平台现已普遍可用”作为LangChain更新。)
开发者影响:为开发人员提供了构建复杂、可扩展的代理系统的生产就绪路径以及多代理协作。
优先级理由:对一个受欢迎生态系统的重要发布,解决了多代理系统开发的需求。
AutoGen v0.4(微软):此版本引入了结构化检索增强和对Model Context Protocol(MCP)的全面支持,增强了数据处理能力和与其他代理平台的互操作性。(来源:Autogen的GitHub发布页或涵盖v0.4发布的新闻文章提到的搜索:“Microsoft AutoGen v0.4实现了结构化检索增强和对开源MCP标准的全面支持”)
开发者影响:允许开发人员构建更强大的AutoGen代理,能够处理复杂的数据交互和跨平台协作。
优先级理由:对Microsoft关键框架的重要更新,改善了核心功能和生态系统兼容性。
CrewAI v0.126.0:功能包括实时任务重新分配、Python 3.13支持、工具仓库中的持久化工具、MCP中的流式HTTP传输和主要文档重组。(来源:CrewAI的GitHub发布或其官方博客 - “CrewAI:于6月5日,2025年发布了v0.126.0”在搜索结果中。)
开发者影响:为开发人员提供了改进的性能、更好的工具管理、增强的互操作性和通过更好文档更容易的入门体验。
优先级理由:对不断发展的代理框架的重大更新,专注于效率和开发人员体验。
LlamaIndex电子表格代理和Llama Cloud更新:LlamaIndex推出了生产就绪的电子表格代理,用于自然语言问答,并宣布了新的MCP(模型上下文协议)集成和Llama Cloud增强功能。(来源:LlamaIndex新闻通讯/博客 - “LlamaIndex:...宣布推出新的生产就绪电子表格代理...新的MCP(模型上下文协议)集成...”在搜索结果中。)
开发者影响:为常见的业务分析任务提供了一个实用工具,并提高了LlamaIndex代理的可部署性和连接性。
优先级理由:解决了特定的高价值开发人员用例(电子表格交互)并提升了平台能力。
Goose(Block开源AI代理框架):由Block设计的可扩展AI代理框架,完全可以在本地运行,能够编写/执行代码并与文件系统交互。(来源:涵盖Goose发布的新闻文章 - “Goose:由Block(前身为Square)发布,Goose是一个开源AI代理框架...”在搜索结果中。)
开发者影响:为开发人员提供了一个新的、强大的、本地可控的工具来构建代理,特别是那些专注于编码任务的代理。
优先级理由:来自知名公司的新进入者在开源框架空间,迎合了本地优先开发的需求。
🤔 代理开发者五大问题
AI代理开发入门:新手积极寻求关于初始步骤的指导,选择基础框架(LangChain、CrewAI、AutoGen经常被提及)以及识别合适的入门项目。(来源:6月5日,2025年Reddit帖子中提供给初学者的建议,或者一个通用链接如https://www.reddit.com/r/AI_Agents/如果具体链接过多。搜索提到:“6月5日,2025年Reddit帖子为初学者提供建议...”)
开发者影响:突出显示了对开发人员构建AI代理的更结构化学习路径和可访问资源的需求。
优先级理由:一个基础问题,表明兴趣增长和社区/教育支持的需要,既出现在搜索结果中又出现在Reddit结果中。
优化和控制本地LLM设置:Reddit子版块如r/LocalLLaMA的开发者正在讨论本地LLM环境的实际挑战和替代方案(例如,从Ollama迁移到llama.cpp/OpenWebUI)。(来源:https://www.reddit.com/r/LocalLLaMA/comments/1l92vr0/as_some_people_asked_me_to_share_some_details/)
开发者影响:反映了开发人员努力微调他们的本地开发堆栈以提高性能、控制或功能集。
优先级理由:Reddit上关于工具和本地环境优化的实践、开发人员驱动的讨论。
实施文本到SQL多代理系统:Reddit上存在积极的探索和分享项目,关于构建多代理系统以处理复杂数据库交互任务,如文本到SQL,特别是使用LangGraph。(来源:https://www.reddit.com/r/LangChain/comments/1l8zy42/built_a_texttosql_multiagent_system_with/)
开发者影响:表明开发人员正在推动代理的能力,以处理复杂、高价值的企业任务,采用多代理设计。
优先级理由:代表了LangChain开发者社区内讨论的高级应用开发。
确保AI训练数据的质量:Reddit上的r/LLMDevs讨论了如何确保AI代理从高质量代码中学习,建议使用“黄金标准文件”而不是随机代码。(来源:https://www.reddit.com/r/LLMDevs/comments/1l8yweo/devs_stop_letting_ai_learn_from_random_code_use/)
开发者影响:这指出了一个不断演变的关注点,即确保数据完整性并遵循最佳实践,当微调或训练代理进行编码任务时。
优先级理由:Reddit上关于AI辅助软件开发质量和可靠性的重要讨论。
6、结束语
恭喜!你已经成功地将一个简单的代理升级为一个强大的多代理系统,使用了ADK的协调者模式。这是你在代理开发旅程中的一个重要里程碑。
你现在已经学习了一些构建复杂AI应用的最重要技能:
- 如何创建专家子代理
- 从任何Python函数构建自定义工具
- 设计一个管理者代理,协调整个团队解决问题。
这就是现实世界中可扩展代理系统的构建方式。
但这仅仅是个开始。你现在有了一个真正强大的基础,可以在此基础上扩展。想想你可以添加到团队中的其他专家——可以获取额外信息来源的代理/工具?一个保存报告到Google Docs的代理?一个将摘要发布到Slack或电子邮件的工具?可能性是无穷无尽的。
原文链接:Your First Multi-agent system: A Beginner’s Guide to Building an AI Trend finder with ADK
汇智网翻译整理,转载请标明出处
