多智能体框架Agno快速入门
6/19/25About 6 min
本文档旨在通过一个更简单、更易于理解的例子,帮助初学者快速掌握 agno
库的核心概念和基本用法,并解释其内部工作原理。
agno
快速入门指南
agno
是一个强大的 Python 库,用于构建、管理和协调自主 AI 智能体(Agent)。无论您是想创建一个能够独立完成任务的智能体,还是组建一个由多个智能体协作的团队来解决复杂问题,agno
都提供了模块化和可扩展的工具来实现您的想法。
本指南将通过一个简单的“研究员与作家团队”示例,带您一步步了解 agno
的核心组件。
核心概念
在开始之前,让我们先了解几个 agno
的核心概念:
- Model (模型): 这是智能体的“大脑”,负责思考、推理和生成内容。
agno
支持多种模型,例如本例中使用的Ollama
(可以本地运行 Llama 3 等开源模型)。 - Tools (工具): 这些是赋予智能体具体能力的工具箱,让它能够与外部世界互动。例如,进行网页搜索、查询数据库、获取财经数据等。
- Agent (智能体): 一个智能体是 模型、工具 和 指令 (Instructions) 的结合体。它被赋予一个特定的角色(
role
)和目标,并利用其工具来完成任务。 - Team (团队): 当单个智能体不足以解决复杂问题时,您可以创建一个团队。团队由多个智能体成员组成,它们在一个协调者(也是一个模型)的指导下分工协作,共同完成一个更大的目标。
- Memory (记忆): 记忆系统允许智能体和团队记住之前的交互,从而实现有状态的、连续的对话和任务处理。
实践案例:创建“研究与写作”团队
我们的目标是创建一个团队,该团队可以接收一个研究主题,然后:
- 研究员 (Researcher): 使用网络搜索工具查找相关信息。
- 作家 (Writer): 将研究员找到的资料整理成一篇结构清晰的摘要。
第1步:环境设置和模型初始化
首先,确保您已经安装了 agno
库。然后,我们需要导入必要的模块并初始化我们将要使用的 LLM。
# 导入核心模块
from agno.agent import Agent
from agno.models.ollama import Ollama
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.reasoning import ReasoningTools
from agno.team import Team
# 初始化一个 Ollama 模型作为我们智能体的“大脑”
# 请确保您的 Ollama 服务正在运行,并且已下载相应模型
# 将 host 地址替换为您自己的 Ollama 服务地址
ollama_model = Ollama(id="llama3", # 使用一个较小的模型以获得更快的响应
timeout=60,
host="http://127.0.0.1:11434") # 示例地址,请替换
第2步:创建智能体 (Agents)
接下来,我们定义两个角色不同的智能体。
- 研究员 (Researcher Agent): 它的职责是上网搜索信息,所以我们给它配备
DuckDuckGoTools
工具。 - 作家 (Writer Agent): 它的职责是分析和总结信息,我们给它配备
ReasoningTools
来帮助它更好地思考和组织内容。
# 创建一个专门负责网络搜索的“研究员”
researcher_agent = Agent(
name="Researcher",
role="负责根据指定主题,在互联网上搜索、查找和收集相关信息。",
model=ollama_model,
tools=[DuckDuckGoTools()], # 赋予它 DuckDuckGo 搜索工具
instructions="专注于查找准确、权威的信息来源。",
add_datetime_to_instructions=True,
)
# 创建一个专门负责写作和总结的“作家”
writer_agent = Agent(
name="Writer",
role="负责将收集到的原始信息进行分析、提炼和总结,最终形成一篇通顺、有条理的文章。",
model=ollama_model,
tools=[ReasoningTools(add_instructions=True)], # 赋予它推理和思考工具
instructions="确保你的输出结构清晰、语言流畅,并突出要点。",
add_datetime_to_instructions=True,
)
第3步:组建团队 (Team)
现在,我们将这两个智能体组合成一个团队。团队的协调者(model
)将负责理解总体任务,并将子任务分配给最合适的成员。
# 创建一个“研究与写作”团队
research_team = Team(
name="Research and Writing Team",
mode="coordinate", # 使用协调模式,让团队领导来分配任务
model=ollama_model, # 团队本身也需要一个“大脑”来协调工作
members=[researcher_agent, writer_agent], # 将我们创建的智能体加入团队
instructions=[
"高效协作,首先进行信息检索,然后基于检索结果进行总结报告。",
"最终只输出由作家智能体整合后的最终报告。",
"确保报告内容全面且准确。",
],
markdown=True,
show_members_responses=True, # 在调试时可以看到每个成员的输出
enable_agentic_context=True,
add_datetime_to_instructions=True,
)
第4步:运行团队并提出问题
团队已经准备就绪!现在,让我们给它分配一个任务,看看它们如何协作完成。
if __name__ == "__main__":
# 向团队提出一个研究课题
question = "介绍一下 Python 语言的主要优势和常见应用领域。"
# 运行团队并流式输出结果
research_team.print_response(
question,
stream=True,
show_full_reasoning=True, # 显示详细的思考过程
stream_intermediate_steps=True,
)
内部工作原理解析
当您运行上面的代码时,agno
内部发生了什么?
任务分派:
- 用户的问题 "介绍一下 Python 语言的主要优势和常见应用领域" 被发送给
research_team
。 - 团队的协调模型(
team.model
)分析了这个问题和团队成员(members
)的角色。它判断出,要回答这个问题,首先需要收集信息。
- 用户的问题 "介绍一下 Python 语言的主要优势和常见应用领域" 被发送给
研究员执行任务:
- 协调者将一个子任务:“搜索 Python 的优势和应用领域” 分配给最合适的成员——
Researcher
智能体。 Researcher
智能体接收到任务后,调用其唯一的工具DuckDuckGoTools
,在网络上执行搜索。
- 协调者将一个子任务:“搜索 Python 的优势和应用领域” 分配给最合适的成员——
信息传递:
Researcher
完成搜索后,将找到的原始资料(例如网页链接、摘要等)返回给团队协调者。
作家执行任务:
- 协调者现在拥有了原始资料。它分析下一步应该是“总结和写作”。
- 于是,它将这些原始资料连同一个新的指令(例如“请根据以下信息,撰写一份关于 Python 优势和应用的报告”)一起发送给
Writer
智能体。
生成最终报告:
Writer
智能体接收到资料和指令。它利用自己的模型能力和ReasoningTools
对信息进行分析、提炼、组织和润色,最终生成一篇结构化的报告。
输出结果:
- 由于团队指令中要求“只输出最终报告”,协调者会将
Writer
生成的报告作为整个团队的最终成果,呈现给用户。
通过这种方式,agno
将一个复杂任务自动分解,并利用不同智能体的专长进行协作处理,最终高效地完成目标。希望这个简单的例子能帮助您开启agno
的探索之旅!
- 由于团队指令中要求“只输出最终报告”,协调者会将