EKO 智能体SDK架构介绍

0 阅读5分钟

EKO 智能体SDK架构的概述

EKO 智能体SDK(Eko框架)是由清华大学、复旦大学和斯坦福大学联合开发的智能体开发框架,旨在通过自然语言与简单代码快速构建“虚拟员工”,实现自动化任务执行。以下是其核心功能与技术特点的详细解析

核心功能与应用场景
  1. 自动化任务执行

    • 数据收集与分析:例如,自动抓取雅虎财经的股票数据(价格、市值、交易量),生成可视化报告。
    • 系统测试:模拟用户操作进行登录页面测试,验证密码策略、生成测试报告。
    • 文件管理:清理指定目录下的大文件(如删除大于1MB的文件)。
  2. 跨平台支持

    • 浏览器自动化:通过截图和网页元素识别技术,操作网页按钮、输入框等交互元素。
    • 电脑系统操作:支持命令行指令(如文件读写、进程管理),未来将扩展GUI操作。
    • 插件化扩展:可作为浏览器插件使用,适应不同工作环境。
  3. 生产级干预机制

    • 实时监控与调整:允许开发者在工作流执行前后插入逻辑(如验证输入、重试失败任务)。
    • 安全控制:浏览器环境采用API密钥管理,电脑端操作需用户授权,确保系统级访问安全。

image

PlantUml架构图

image

分层规划

核心是一个分层规划框架,它将任务规划与执行分离开来:

规划层
  • 将自然语言描述转换为结构化的工作流
  • 使用大型语言模型(如Claude/OpenAI)将复杂任务分解为离散步骤
  • 在执行前验证工作流结构和工具需求
  • 创建可复用、可检查的工作流定义
执行层
  • 动态执行工作流,同时适应运行时条件
  • 根据上下文处理工具选择和排序
  • 管理工作流节点之间的依赖关系
  • 提供基于钩子的执行控制

image

任务描述

任务描述是用自然语言输入定义需要完成的任务。它关注期望的结果,而不是需要的具体步骤或工具。在我们的示例中,“将大象放进冰箱”是一个任何人都能理解的任务描述,但实现它需要仔细的规划和执行。

子任务

当Eko接收到任务描述时,它首先在规划阶段将其分解为逻辑子任务。每个子任务代表一个有意义的工作单元,有助于实现总体目标。在我们的大象示例中,Eko识别出三个子任务:打开冰箱门、推大象进去和关闭门。这种分解在任何实际执行开始之前发生。

可用工具

每个子任务都有一组可能帮助完成它的工具。这些工具在规划阶段根据子任务的要求和工具的能力确定。在我们的示例中,我们使用三个虚构的工具 - “移动手”()、“门使用”()和“施加力量”() - 来说明这个概念。

框架对比

image

Web信息抽取

Eko通过一种创新的方法处理网络信息:

  • 识别并用唯一标识符标记网页上的交互元素
  • 创建可视化覆盖层以显示元素之间的关系
  • 将截图与伪HTML结合,以实现强大的元素识别
  • 通过结合视觉和结构理解,增强浏览器自动化的准确性

这项技术对于浏览器自动化任务尤为重要,能够在不同页面状态下提供可靠的元素识别。

image

环境感知架构

Eko在不同的JavaScript环境中提供一致的能力,同时适应每个环境的独特约束:

浏览器扩展环境
  • 完整的浏览器自动化能力
  • 标签页和窗口管理
  • DOM交互和内容提取
  • 跨域通信处理
网络环境
  • 为网络应用提供沙箱操作
  • DOM操作和事件处理
  • 内容提取和处理
  • 安全的API端点集成
Node.js环境
  • 系统级文件操作
  • 命令执行和进程管理
  • 完整的Node.js API访问
  • 直接访问本地资源

工具系统

工具是Eko自动化中的构建块:

工具定义
  • 每个工具都有一个独特的名称和描述
  • 定义其输入模式和需求
  • 实现特定的执行逻辑
  • 可以访问共享的执行上下文
工具注册
  • 管理每个环境中可用的工具
  • 处理工具注册和验证
  • 提供工具枚举和元数据
  • 确保工具兼容性
工具类别
  • 浏览器自动化工具(OpenUrl、BrowserUse等)
  • 系统交互工具(FileRead、CommandExecute等)
  • 内容处理工具(ExtractContent、ExportFile等)
  • 支持自定义工具以实现可扩展性

钩子系统

钩子提供了对工作流执行的深度可见性和控制:

工作流钩子
  • beforeWorkflow/afterWorkflow用于设置和清理
  • 访问工作流级别的状态和变量
  • 控制工作流的初始化和完成
子任务钩子
  • beforeSubtask/afterSubtask用于节点级控制
  • 监控并修改子任务的执行
  • 访问执行上下文和结果
工具钩子
  • beforeToolUse/afterToolUse用于细粒度控制
  • 修改工具的输入和输出
  • 实现自定义错误处理和恢复