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 提供了强大的推理和理解能力
相关推荐
AI大模型1 小时前
AI落地开源三剑客系列教程:工作流平台n8n使用教程
程序员·llm·agent
33255_40857_280592 小时前
Dify:赋能你的 AI 应用开发
agent
Tadas-Gao2 小时前
视觉Transformer金字塔架构演进:从PVT到CoaT的技术脉络与创新解析
人工智能·深度学习·机器学习·大模型·llm·transformer
阿里云大数据AI技术4 小时前
【新模型速递】PAI-Model Gallery云上一键部署MiniMax-M1模型
人工智能·llm·云计算
聚客AI4 小时前
工业级Prompt设计手册:构建高准确率AI应用的10个黄金法则
人工智能·llm·掘金·日新计划
waynaqua5 小时前
LivePortrait - 让静态照片“活”起来
llm·aigc
bastgia6 小时前
LangGraph + MCP + Ollama 实战教程:打造强大的多智能体聊天机器人
llm·mcp
Florian6 小时前
Graph ⋈ Agent:Chat2Graph 如何重构 GraphRAG 范式?
知识图谱·agent·rag·graphrag·chat2graph·符号主义
experdot8 小时前
3种方法让LLM提取任意文档中的知识点
llm