AI Agent框架OpenHands如何应对疑问?

摘要:AI Agent 框架探秘:拆解 OpenHands(7) Agent 目录AI Agent 框架探秘:拆解 OpenHands(7) Agent0x00 摘要0x01 状态管理1.1 设计要点1.2 State类0x02 Agent系统2
AI Agent 框架探秘:拆解 OpenHands(7)--- Agent 目录AI Agent 框架探秘:拆解 OpenHands(7)--- Agent0x00 摘要0x01 状态管理1.1 设计要点1.2 State类0x02 Agent系统2.1 基类2.2 Agent 类型0x03 State3.1 特色3.2 State 定义3.2.1 OpenHands 的 State3.2.2 其他实现3.3 生命周期3.4 联系3.4.1 State 与AgentController的联系3.4.2 State 与 Observation/Action 的关系3.4.3 State 的共享3.5 持久化和恢复3.6 小结0x04 大模型适配层(LLM Adapter)4.1 LLM4.1.1 作用4.1.2 代码4.2 LLMRegistry4.2.1 作用4.2.2 工作流4.2.3 代码0xFF 参考 0x00 摘要 An LLM agent runs tools in a loop to achieve a goal. 智能体(Agent)是一种能够感知和理解环境,并使用工具来实现目标的应用程序。LLM能够动态指导自己的过程和工具使用,保持对任务完成方式的控制。Agent的设计旨在更灵活地处理某些任务,其决策由模型决定,而非预定义的规则。 借助 CodeAct 的 LLM 智能体,OpenHands 通过交互式的多轮流程,展现出显著的优势: 智能体能够接收新的观察数据,并据此优化先前的行动方案。这类似于人类在任务执行中,依据新信息灵活调整策略的过程。 依托记忆与反馈机制,智能体可随时间提升自身性能。它能将过往经验铭记于心,并在后续任务中加以运用,不断进步,恰似一名持续学习成长的学生。 此外,智能体还能胜任复杂的流程任务,涵盖模型训练、数据可视化以及自动化决策等。这表明 CodeAct 不仅能处理基础任务,更能驾驭高级且复杂的作业,例如训练机器学习模型、绘制图表以及实施自动决策等。 因为本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。 0x01 状态管理 1.1 设计要点 多任务并发执行时,任务状态易出现冲突;长流程任务的中间状态(如已完成子任务、待处理步骤)易丢失;异常中断后难以精准恢复到中断前的状态。因此,需要有一个数据结构来维护Agent的状态,这就是State。 在每个 Session(我们的对话线程)中,state 属性就像智能体专用于该特定交互的草稿板,是智能体存储和更新对话期间所需动态细节的地方。 状态管理的价值在于可追溯与可恢复:任何时刻都能回答”当前在哪一步、为什么这样做、结果如何、接下来做什么”。在出现错误或需要人工介入时,可以精确定位问题并从断点恢复。状态设计最佳实践如下: 最小主义: 仅存储必要的、动态的数据。 序列化: 使用基本的、可序列化的类型。 描述性键和前缀: 使用清晰的名称和适当的前缀(user:、app:、temp: 或无前缀)。 浅层结构: 尽可能避免深层嵌套。 标准更新流程: 依赖 append_event。 1.2 State类 State类作为全面的数据容器,用于跟踪 OpenHands 系统中智能体的运行状态。它维护智能体运行、演进和从会话中恢复所需的所有关键信息,包括对话历史、运行指标、迭代控制和错误记录。save_to_session方法支持智能体状态的持久化存储,允许在不同的执行实例之间恢复会话和保持连续性。 对于需要长时间运行且状态不断变化的 Agent 任务来说,State的作用至关重要。 首先,它是 Agent 决策的核心依据,尤其是完整的历史事件记录,为 Agent 提供了不可或缺的上下文信息,让决策不再盲目; 其次,外部系统(比如用户界面或控制器)可以通过调整State来管理 Agent 的生命周期,实现暂停、恢复、终止等操作; 更重要的是,State可以被序列化存储,当任务因意外中断时,系统能通过加载存储的State,让任务从断点处精确恢复,完美解决了长周期任务的连续性问题。 0x02 Agent系统 2.1 基类 实际上,我们要实现一个 AI Agent,最简单的就是以 ReAct 为基础,去构建一个不断循环的推理(Reason),行动(Act)和观察(Observe)。 而在 OpenHands 的技术体系中,Agent 系统凭借高度灵活的模块化架构,实现了多样化专业 Agent 的开发与适配。
阅读全文