Minion-Agent + Smolagents + DeepSeek-R1 实战教程:打造智能网页数据采集机器人

最近,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())

这个主函数使用异步方式运行,能够处理网页浏览等耗时操作而不阻塞程序。它创建智能体后,给出一个具体的任务:查找特定电脑的更优价格并与其他产品进行比较。

系统工作流程详解

任务规划和分解

当用户提出查询需求时,智能体的规划系统会自动启动,每三步制定一次策略。对于价格比较任务,系统会分解为以下步骤:

  1. 产品规格理解:首先分析用户指定的产品详细规格
  2. 多渠道价格搜索:在多个零售商网站搜索价格信息
  3. 同类产品对比:查找配置相似的竞品进行比较
  4. 数据整理和展示:将结果组织成表格形式

总结

Minion-Agent 的出现为 AI 智能体开发领域带来了新的活力。它不仅是一个技术框架,更代表了开放协作的开发理念。

通过本教程,我们看到了如何将 Minion-Agent、Smolagents 和 DeepSeek-R1 结合起来,构建功能强大的智能数据采集系统。这种组合充分发挥了各个组件的优势:

  • Minion-Agent 提供了统一的框架接口,解决了碎片化问题
  • Smolagents 提供了轻量级但功能完整的智能体实现
  • DeepSeek-R1 提供了强大的推理和理解能力
相关推荐
wangruofeng10 小时前
opencodex 解锁 Codex 任意模型,一个本地代理打通 Claude/Kimi/GLM/DeepSeek
llm·github·openai
wangruofeng10 小时前
姚顺雨长谈:在 Anthropic 和 Gemini 训练模型,英雄主义已经过时
llm·aigc
小林ixn10 小时前
Workflow 还是 Agent?帮你一次性搞清楚这俩到底有啥不一样
agent·workflow
Darling噜啦啦10 小时前
Workflow 还是 Agent?一文搞懂 AI 工程的两大核心范式,以及它们的未来
agent·workflow
沉默王二12 小时前
腾讯一面,我霸气反问:“你说你们在做Agent项目,说说 SubAgent、Plan 模式、Skill 调用这些你们都是怎么做的?”面试官一直在擦汗。。
面试·agent·ai编程
新知图书14 小时前
10.1 项目背景与需求分析(智能客服智能体开发)
人工智能·agent·ai agent·智能体·扣子
赵康15 小时前
AI 写代码之后,Code Review 会议怎么开
ai·llm·skill
莫逸风15 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
决战灬15 小时前
langgraph之interrupt(理论篇)
人工智能·python·agent
人间凡尔赛17 小时前
2026 AI Agent 多智能体协同编程实战指南:从 Kimi K3 到 GPT-5.6 深度解析
ai·agent·多智能体·编程实战·waic·gpt-5.6·kimik3