EKO 智能体SDK架构的概述
EKO 智能体SDK(Eko框架)是由清华大学、复旦大学和斯坦福大学联合开发的智能体开发框架,旨在通过自然语言与简单代码快速构建“虚拟员工”,实现自动化任务执行。以下是其核心功能与技术特点的详细解析:
核心功能与应用场景
-
自动化任务执行
- 数据收集与分析:例如,自动抓取雅虎财经的股票数据(价格、市值、交易量),生成可视化报告。
- 系统测试:模拟用户操作进行登录页面测试,验证密码策略、生成测试报告。
- 文件管理:清理指定目录下的大文件(如删除大于1MB的文件)。
-
跨平台支持
- 浏览器自动化:通过截图和网页元素识别技术,操作网页按钮、输入框等交互元素。
- 电脑系统操作:支持命令行指令(如文件读写、进程管理),未来将扩展GUI操作。
- 插件化扩展:可作为浏览器插件使用,适应不同工作环境。
-
生产级干预机制
-
- 实时监控与调整:允许开发者在工作流执行前后插入逻辑(如验证输入、重试失败任务)。
- 安全控制:浏览器环境采用API密钥管理,电脑端操作需用户授权,确保系统级访问安全。
PlantUml架构图
分层规划
核心是一个分层规划框架,它将任务规划与执行分离开来:
规划层
- 将自然语言描述转换为结构化的工作流
- 使用大型语言模型(如Claude/OpenAI)将复杂任务分解为离散步骤
- 在执行前验证工作流结构和工具需求
- 创建可复用、可检查的工作流定义
执行层
- 动态执行工作流,同时适应运行时条件
- 根据上下文处理工具选择和排序
- 管理工作流节点之间的依赖关系
- 提供基于钩子的执行控制
任务描述
任务描述是用自然语言输入定义需要完成的任务。它关注期望的结果,而不是需要的具体步骤或工具。在我们的示例中,“将大象放进冰箱”是一个任何人都能理解的任务描述,但实现它需要仔细的规划和执行。
子任务
当Eko接收到任务描述时,它首先在规划阶段将其分解为逻辑子任务。每个子任务代表一个有意义的工作单元,有助于实现总体目标。在我们的大象示例中,Eko识别出三个子任务:打开冰箱门、推大象进去和关闭门。这种分解在任何实际执行开始之前发生。
可用工具
每个子任务都有一组可能帮助完成它的工具。这些工具在规划阶段根据子任务的要求和工具的能力确定。在我们的示例中,我们使用三个虚构的工具 - “移动手”()、“门使用”()和“施加力量”() - 来说明这个概念。
框架对比
Web信息抽取
Eko通过一种创新的方法处理网络信息:
- 识别并用唯一标识符标记网页上的交互元素
- 创建可视化覆盖层以显示元素之间的关系
- 将截图与伪HTML结合,以实现强大的元素识别
- 通过结合视觉和结构理解,增强浏览器自动化的准确性
这项技术对于浏览器自动化任务尤为重要,能够在不同页面状态下提供可靠的元素识别。
环境感知架构
Eko在不同的JavaScript环境中提供一致的能力,同时适应每个环境的独特约束:
浏览器扩展环境
- 完整的浏览器自动化能力
- 标签页和窗口管理
- DOM交互和内容提取
- 跨域通信处理
网络环境
- 为网络应用提供沙箱操作
- DOM操作和事件处理
- 内容提取和处理
- 安全的API端点集成
Node.js环境
- 系统级文件操作
- 命令执行和进程管理
- 完整的Node.js API访问
- 直接访问本地资源
工具系统
工具是Eko自动化中的构建块:
工具定义
- 每个工具都有一个独特的名称和描述
- 定义其输入模式和需求
- 实现特定的执行逻辑
- 可以访问共享的执行上下文
工具注册
- 管理每个环境中可用的工具
- 处理工具注册和验证
- 提供工具枚举和元数据
- 确保工具兼容性
工具类别
- 浏览器自动化工具(OpenUrl、BrowserUse等)
- 系统交互工具(FileRead、CommandExecute等)
- 内容处理工具(ExtractContent、ExportFile等)
- 支持自定义工具以实现可扩展性
钩子系统
钩子提供了对工作流执行的深度可见性和控制:
工作流钩子
- beforeWorkflow/afterWorkflow用于设置和清理
- 访问工作流级别的状态和变量
- 控制工作流的初始化和完成
子任务钩子
- beforeSubtask/afterSubtask用于节点级控制
- 监控并修改子任务的执行
- 访问执行上下文和结果
工具钩子
- beforeToolUse/afterToolUse用于细粒度控制
- 修改工具的输入和输出
- 实现自定义错误处理和恢复