最近,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 框架,提供统一的开发体验。
核心功能模块实现
工具参数解析模块
首先实现工具参数解析功能,这是确保智能体正确调用各种工具的基础:
"""Minion Agent 使用示例"""import asynciofrom dotenv import load_dotenvimport osfrom PIL import Imagefrom io import BytesIOfrom time import sleepfrom smolagents import ChatMessagefrom smolagents.models import parse_json_if_neededfrom minion_agent import MinionAgent, AgentConfig, AgentFrameworkfrom smolagents import CodeAgent, ActionStepdef 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 字典,确保参数格式正确。
截图功能实现
接下来实现截图功能,这对于调试和记录智能体的操作过程非常重要:
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 信息。
智能体配置模块
智能体的配置是整个系统的核心,需要仔细设计:
# 配置主智能体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
:包含截图回调函数多智能体协作配置
为了处理复杂任务,我们还可以配置多个专门的子智能体:
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"), }, )]
这里定义了两个专门的智能体:一个负责网页搜索和导航,另一个专门负责访问网页。这种分工合作的方式能够提高系统的效率和稳定性。
主程序逻辑实现
最后实现主程序逻辑,整合所有功能模块:
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)}") raiseif __name__ == "__main__": asyncio.run(main())
这个主函数使用异步方式运行,能够处理网页浏览等耗时操作而不阻塞程序。它创建智能体后,给出一个具体的任务:查找特定电脑的更优价格并与其他产品进行比较。
系统工作流程详解
任务规划和分解
当用户提出查询需求时,智能体的规划系统会自动启动,每三步制定一次策略。对于价格比较任务,系统会分解为以下步骤:
- 产品规格理解:首先分析用户指定的产品详细规格多渠道价格搜索:在多个零售商网站搜索价格信息同类产品对比:查找配置相似的竞品进行比较数据整理和展示:将结果组织成表格形式
总结
Minion-Agent 的出现为 AI 智能体开发领域带来了新的活力。它不仅是一个技术框架,更代表了开放协作的开发理念。
通过本教程,我们看到了如何将 Minion-Agent、Smolagents 和 DeepSeek-R1 结合起来,构建功能强大的智能数据采集系统。这种组合充分发挥了各个组件的优势:
- Minion-Agent 提供了统一的框架接口,解决了碎片化问题Smolagents 提供了轻量级但功能完整的智能体实现DeepSeek-R1 提供了强大的推理和理解能力