构建你的第一个多智能体工作流
使用 agno 框架构建你的第一个多智能体工作流:支持深度推理与联网搜索
在人工智能的浪潮中,大型语言模型(LLM)已经展示了其强大的能力。然而,单个 LLM 的调用往往难以完成需要规划、信息检索和深度分析的复杂任务。这时,智能体(Agent)和工作流(Workflow)的概念应运而生。
今天,我们将通过一个具体的 Python 代码示例,向您展示如何使用新兴的 agno
框架,轻松构建一个由多个智能体协作、支持深度推理和联网搜索的自动化工作流。
我们的目标是: 创建一个工作流,当用户提出一个复杂问题时(例如“如何写一篇好的论文?”),系统能够自动:
- 规划:将问题拆解成多个可执行的步骤。
- 研究:利用网络搜索工具,为每个步骤搜集相关信息。
- 执行:综合所有规划和研究结果,进行逻辑推理,最终给出一个全面而详细的答案。
让我们深入代码,看看 agno
是如何让这一切变得简单的。
核心理念:专业分工的智能体团队
我们的工作流 MyFirstWorkflow
的核心思想,是模仿一个人类专家团队的工作模式。我们定义了三个角色鲜明的智能体(Agent),每个智能体都有其独特的职责:
- Planner (规划师):负责宏观布局,制定行动计划。
- Researcher (研究员):负责信息搜集,提供事实依据。
- Executor (推理专家):负责综合分析,得出最终结论。
这种“责任分离”的设计模式,是构建高级 AI 应用的关键。它使得整个流程更加清晰、可控,并且输出的结果也更为可靠和深入。
代码深度解析
让我们逐段分析实现这个工作流的代码。
1. 环境设置与模型定义
from agno.workflow.workflow import Workflow
from agno.models.ollama.chat import Ollama
from agno.agent import Agent, RunResponse
from agno.tools.duckduckgo import DuckDuckGoTools
# ... 其他引入 ...
# 定义我们使用的 LLM,这里使用了通过 Ollama 部署的本地模型
OllamaLLM = Ollama(id="qwen3:14b",
timeout=60,
host= "http://141.223.121.59:11434")
agno
框架:我们从agno
库中导入了Workflow
,Agent
等核心组件。Ollama
模型:代码中最亮眼的一点是,它没有使用商业 API,而是通过Ollama
连接到一个本地或私有服务器上部署的开源模型 (qwen3:14b
)。这为用户提供了极高的数据隐私和灵活性。agno
让接入本地模型变得异常简单。
2. 定义工作流与三大智能体
我们的整个业务逻辑被封装在 MyFirstWorkflow
类中。
class MyFirstWorkflow(Workflow):
description: str = (
"深度推理,联网查询用户需求"
)
# ... Agent 定义如下 ...
a. The Planner (规划师)
planner = Agent(
name="planner",
role="规划师",
goal="将用户问题拆解为多个任务步骤",
system_message="请将这个问题分解为多个清晰的任务步骤:\n\n{input}。",
model=OllamaLLM,
storage=get_agent_storage("planner"),
add_history_to_messages=True, # 启用历史记忆
)
role
和goal
:清晰地定义了智能体的身份和目标。system_message
:这是最关键的部分,它相当于给 LLM 的指令(Prompt)。我们告诉它,无论输入 ({input}
) 是什么,它的任务都是将其分解为清晰的步骤。
b. The Researcher (研究员)
researcher = Agent(
name="researcher",
role="研究员",
goal="使用联网搜索工具,查找关键信息",
system_message="请针对任务:{input}\n使用工具搜索相关资料,并总结最相关的信息。",
model=OllamaLLM,
tools=[DuckDuckGoTools(timeout=10, proxy="socks5://127.0.0.1:7890")],
storage=get_agent_storage("researcher"),
add_history_to_messages=True,
)
tools=[DuckDuckGoTools(...)]
: 这是为智能体赋能的关键!我们为研究员配备了DuckDuckGoTools
工具,使其具备了联网搜索的能力。这意味着它不再局限于模型训练数据中的知识,而是可以获取实时信息。proxy
设置:代码还贴心地展示了如何为工具设置代理,这在特定的网络环境中非常实用。
c. The Executor (推理专家)
executor = Agent(
name="executor",
role="推理专家",
goal="汇总所有资料并进行逻辑推理,得出最终结论",
system_message="以下是任务信息和搜索结果:\n{input}\n请根据逻辑关系进行深入分析,得出详细结论。",
model=OllamaLLM,
storage=get_agent_storage("executor"),
add_history_to_messages=True,
)
- 这个智能体没有工具。它的唯一任务是“思考”。
- 它的
system_message
指示它将接收到的信息({input}
,即规划和研究结果)进行深度分析和逻辑推理,最终形成结论。
3. 编排工作流:run
方法
如果说 Agent 是演员,那么 run
方法就是剧本。它定义了数据如何在智能体之间流动。
def run(self, user_input: str) -> RunResponse:
logger.info(f"Getting input from user.")
# 第1步:用户输入交给规划师
planner_contents: RunResponse = self.planner.run(user_input)
# 第2步:规划师的输出(任务步骤)交给研究员
reseacher_contents: RunResponse = self.researcher.run(planner_contents.content)
# 第3步:研究员的输出(搜索总结)交给推理专家
executor_contents: RunResponse = self.executor.run(reseacher_contents.content)
# 返回最终结论
return executor_contents
这个流程清晰地展示了一个“思考链”(Chain of Thought)的实现:
用户输入 -> 规划 -> 研究 -> 推理 -> 最终输出
这种链式调用,将一个复杂问题层层深入,每一步都建立在上一步坚实产出的基础上,从而保证了最终结果的质量和深度。
4. 运行与输出
if __name__ == "__main__":
# 运行工作流
report: RunResponse = MyFirstWorkflow(debug_mode=True).run(
user_input="如何写一篇好的论文?"
)
# 打印最终报告
pprint_run_response(report, markdown=True, show_time=True)
当以“如何写一篇好的论文?”作为输入运行时,agno
会自动完成以下任务:
planner
输出类似这样的计划:- 确定研究主题与范围
- 进行文献综述
- 提出核心论点与假设
- 设计论文结构大纲
- 撰写初稿
- 引用与格式化
- 修改与校对
researcher
接收到这些步骤,使用 DuckDuckGo 搜索“如何进行文献综述”、“论文大纲设计技巧”等,并对结果进行总结。executor
拿到规划步骤和每个步骤的研究概要,最终融合成一篇关于如何写好论文的、结构清晰、内容详实的完整指南。
结论
我们刚刚通过一个简单的脚本,用 agno
构建了一个功能强大的 AI 工作流。它不再是一个简单的问答机器人,而是一个懂得规划、研究、推理的智能系统。
这仅仅是一个开始。你可以基于这个模式,通过增加更专业的工具(如 ArXiv 搜索、代码执行、数据库查询)和更细分的智能体,来构建满足你特定需求的、更为复杂的自动化解决方案。
agno
框架为我们打开了一扇通往高级 AI 应用的大门。现在,是时候动手尝试,构建属于你自己的智能体了!