最近,AI 智能体开发领域出现了一个引人注目的新框架------Minion-Agent。这个框架的出现解决了当前 AI 智能体开发中的一个关键痛点:框架碎片化问题。
在传统的开发模式中,想要构建一个功能完整的 AI 智能体,开发者往往需要在 OpenAI、LangChain、Google AI、Smolagents 等多个框架之间来回切换,因为每个框架都有自己的优势和局限性。这种碎片化不仅增加了开发复杂度,也成为了 AI 智能体大规模应用的主要障碍。
与此同时,DeepSeek 刚刚发布了 R1 系列推理模型的最新版本------DeepSeek-R1-0528。这个拥有 685 亿参数的模型在思考深度和推理能力方面有了显著提升,整体性能已经可以与 o3 和 Gemini-2.5-Pro 等国际顶级模型相媲美。
本教程将结合 Minion-Agent 框架、Smolagents 工具和 DeepSeek-R1 模型,手把手教你构建一个强大的智能网页数据采集机器人。这个机器人不仅能自动浏览网页、提取数据,还能基于采集到的信息回答用户问题,甚至生成结构化的对比分析报告。
Minion-Agent 框架深度解析
核心概念和优势
Minion-Agent 是一个简单而强大的 AI 智能体框架,它的设计理念是让用户能够轻松使用 AI 技术完成复杂任务。与传统方案相比,它具有以下核心优势:
多框架统一支持:Minion-Agent 兼容 OpenAI、LangChain、Google AI、Smolagents 等主流 AI 框架。通过统一的接口,开发者可以无缝调用不同框架的能力,避免了重复学习和适配的成本。
丰富的内置工具集:框架预集成了网页浏览、文件操作、任务自动化等实用工具,同时支持扩展机制,允许开发者根据需求添加自定义工具。
多智能体协作机制:支持创建多个子智能体并让它们协同工作。Minion-Agent 会自动分配和管理这些智能体的任务,实现真正的分布式智能处理。
智能网页操作能力:集成了先进的浏览器自动化功能,能够处理复杂的网页交互、数据抓取和信息提取任务。
深度研究功能:内置了专门的 DeepResearch 智能体,能够围绕特定主题进行深入研究,自动组织和总结信息。
系统架构设计
Minion-Agent 采用了先进的"信息流"设计模式,实现了从用户指令到最终结果的完整闭环处理。系统主要包含三个核心组件:
浏览器使用智能体 (BrowserUseAgent) :这个组件包装了 browser-use 库,通过动态加载 LangChain 模型和懒加载 Chrome 浏览器实例,在 MinionAgent 框架内提供自动化网页浏览功能。其关键创新是动态任务更新机制,允许同一智能体实例通过修改内部状态来处理多个不同的任务提示。
深度研究智能体 (DeepResearcher) :执行多阶段研究工作流程,包括主题澄清、搜索查询生成、并行搜索执行、内容总结、迭代研究循环等。它使用专门的模型 (如 DeepSeek-R1-Distill-Llama-70B) 来合成综合性答案。
智能体大脑 (MinionBrain) :作为抽象基类,通过工厂模式为不同智能体框架提供统一接口。它动态导入特定实现,处理同步/异步执行,并维护框架抽象。
核心库介绍
项目使用了以下核心库:
Smolagents:一个轻量级但功能强大的智能体框架,只需几行代码就能创建复杂的智能体。它提供了简洁的 API 和丰富的功能模块。
Minion-Agent:新一代开源 AI 智能体开发框架,专门设计来解决当前 AI 智能体开发中的框架碎片化问题。通过集成多个 AI 框架,提供统一的开发体验。
核心功能模块实现
工具参数解析模块
首先实现工具参数解析功能,这是确保智能体正确调用各种工具的基础:
python
"""Minion Agent 使用示例"""
import asyncio
from dotenv import load_dotenv
import os
from PIL import Image
from io import BytesIO
from time import sleep
from smolagents import ChatMessage
from smolagents.models import parse_json_if_needed
from minion_agent import MinionAgent, AgentConfig, AgentFramework
from smolagents import CodeAgent, ActionStep
def parse_tool_args_if_needed(message: ChatMessage) -> ChatMessage:
for tool_call in message.tool_calls:
tool_call.function.arguments = parse_json_if_needed(tool_call.function.arguments)
return message
这个函数的作用是处理智能体的工具调用消息。它接收一个 ChatMessage 对象,检查是否包含工具调用。如果有工具调用,就遍历每个调用,将 JSON 字符串格式的参数转换为 Python 字典,确保参数格式正确。
截图功能实现
接下来实现截图功能,这对于调试和记录智能体的操作过程非常重要:
python
def save_screenshot(memory_step: ActionStep, agent: CodeAgent) -> None:
sleep(1.0) # 等待页面加载完成
browser_tool = agent.tools.get("browser")
if browser_tool:
# 清理旧截图以节省内存
for previous_memory_step in agent.memory.steps:
if isinstance(previous_memory_step, ActionStep) and previous_memory_step.step_number <= memory_step.step_number - 2:
previous_memory_step.observations_images = None
# 使用 Playwright 截图
result = browser_tool(action="screenshot")
if result["success"] and "screenshot" in result.get("data", {}):
screenshot_bytes = result["data"]["screenshot"]
image = Image.open(BytesIO(screenshot_bytes))
print(f"截取浏览器截图: {image.size} 像素")
memory_step.observations_images = [image.copy()]
# 获取当前URL
state_result = browser_tool(action="get_current_state")
if state_result["success"] and "url" in state_result.get("data", {}):
url_info = f"当前URL: {state_result['data']['url']}"
memory_step.observations = (
url_info if memory_step.observations is None else memory_step.observations + "\n" + url_info
)
这个函数负责在智能体执行过程中捕获浏览器截图。它首先等待页面完全加载,然后清理旧的截图以节省内存,接着使用 Playwright 工具截图并保存到内存步骤中。同时,它还会获取当前页面的 URL 信息。
智能体配置模块
智能体的配置是整个系统的核心,需要仔细设计:
python
# 配置主智能体
agent_config = AgentConfig(
model_id="deepseek/deepseek-reasoner",
name="research_assistant",
description="专业的研究助手",
model_args={
"api_key": os.environ.get("DEEPSEEK_API_KEY"),
},
tools=[
"minion_agent.tools.browser_tool.browser",
"minion_agent.tools.generation.generate_pdf",
"minion_agent.tools.generation.generate_html",
"minion_agent.tools.generation.save_and_generate_html",
],
agent_type="CodeAgent",
agent_args={
"additional_authorized_imports": "*",
"planning_interval": 3,
"step_callbacks": [save_screenshot]
}
)
这个配置定义了一个名为"research_assistant"的智能体,使用 DeepSeek 推理模型。智能体配备了浏览器工具、PDF 生成工具、HTML 生成工具等。重要参数包括:
additional_authorized_imports: "*"
:允许导入所有 Python 模块planning_interval: 3
:每3步进行一次规划step_callbacks
:包含截图回调函数
多智能体协作配置
为了处理复杂任务,我们还可以配置多个专门的子智能体:
python
managed_agents = [
AgentConfig(
name="search_web_agent",
model_id="deepseek/deepseek-reasoner",
description="专门用于网页搜索和导航的智能体",
tools=["minion_agent.tools.browser_tool.browser"],
model_args={
"api_key": os.environ.get("DEEPSEEK_API_KEY"),
},
agent_type="ToolCallingAgent",
),
AgentConfig(
name="visit_webpage_agent",
model_id="deepseek/deepseek-reasoner",
description="专门用于访问网页的智能体",
tools=["minion_agent.tools.web_browsing.visit_webpage"],
model_args={
"api_key": os.environ.get("DEEPSEEK_API_KEY"),
},
)
]
这里定义了两个专门的智能体:一个负责网页搜索和导航,另一个专门负责访问网页。这种分工合作的方式能够提高系统的效率和稳定性。
主程序逻辑实现
最后实现主程序逻辑,整合所有功能模块:
python
async def main():
try:
# 创建并运行智能体
agent = await MinionAgent.create(AgentFramework.SMOLAGENTS, agent_config)
result = agent.run(
"我想购买 MEK AI-Enhanced Gaming PC Desktop Computer - " \
"NVIDIA GeForce RTX 5090, AMD Ryzen 7 9700X 5.5GHz, 32GB DDR5 RGB, 2TB NVME M.2 SSD, 1300W 80+ Gold PSU, WiFi 7, Windows 11。" \
"请帮我找到更好的价格并与其他笔记本电脑进行比较,将结果制成表格形式。"
)
print("智能体回复:", result)
print("任务完成!")
except Exception as e:
print(f"错误: {str(e)}")
raise
if __name__ == "__main__":
asyncio.run(main())
这个主函数使用异步方式运行,能够处理网页浏览等耗时操作而不阻塞程序。它创建智能体后,给出一个具体的任务:查找特定电脑的更优价格并与其他产品进行比较。
系统工作流程详解
任务规划和分解
当用户提出查询需求时,智能体的规划系统会自动启动,每三步制定一次策略。对于价格比较任务,系统会分解为以下步骤:
- 产品规格理解:首先分析用户指定的产品详细规格
- 多渠道价格搜索:在多个零售商网站搜索价格信息
- 同类产品对比:查找配置相似的竞品进行比较
- 数据整理和展示:将结果组织成表格形式
总结
Minion-Agent 的出现为 AI 智能体开发领域带来了新的活力。它不仅是一个技术框架,更代表了开放协作的开发理念。
通过本教程,我们看到了如何将 Minion-Agent、Smolagents 和 DeepSeek-R1 结合起来,构建功能强大的智能数据采集系统。这种组合充分发挥了各个组件的优势:
- Minion-Agent 提供了统一的框架接口,解决了碎片化问题
- Smolagents 提供了轻量级但功能完整的智能体实现
- DeepSeek-R1 提供了强大的推理和理解能力