美文网首页
MetaGPT智能体开发学习笔记04 - ActionNode

MetaGPT智能体开发学习笔记04 - ActionNode

作者: yunpeng | 来源:发表于2024-01-26 09:07 被阅读0次

    本文主要学习 ActionNode 是什么?

    1. ActionNode是对Action的通用化抽象,是SOP的最小单元(每个SOP都可以看做由ActionNode组成的动作集合)。它提供了统一的抽象(包括key等见下方参数列表),相较于action整体逻辑更加干净、SOP的组织更加清晰;这对于未来学员设计和调试复杂的智能体行为是极其有益的。传统的SOP在后续迭代中可能会变得繁琐,因为它们通常需要在代码中多处进行修改。而通过引入动作节点,我们可以实现更高效的组合和同步

    2. ActionNode构成的动作树能够更有效地模拟语言的复杂结构,包括语法和语义关系,这有助于提升系统处理自然语言的能力。 ActionNode使得大型语言模型(LLM)能够专注于每个最小单元的填槽任务,为智能体的规划能力提供了一种高效的数据结构,以便快速遍历各种状态和决策点,寻找最优或所需的路径

    3. ActionNode为后续SOP的自动生成尝试提供了可能。就像在《我的世界》中不同的技能可以组合成新的技能一样,通过动作树节点的编排,我们可以创造出新的技能,从而更接近自然语言编程的目标。这种统一的抽象和结构化的方法,使得系统能够更好地适应和学习,为智能体的进化提供了坚实的基础

    ActionNode可以被视为一组动作树,根据类内定义,一个动作树的父节点可以访问所有的子动作节点;也就是说,定义了一个完整的动作树之后,可以从父节点按树的结构顺序执行每一个子动作节点。因此,动作的执行也可以突破0.4版本框架中,需要在Role的_react内循环执行的限制,达到更好的CoT效果。
    ActionNode仍然需要基于Action类进行构建,在定义一个ActionNode动作树之后,需要将该动作树作为参数赋予一个Action子类,在并将其输入到Role中作为其动作。在这个意义上,一个ActionNode动作树可以被视为一个内置CoT思考的Action。
    同时,在ActionNode基类中,也配置了更多格式检查和格式规范工具,让CoT执行过程中,内容的传递更加结构化。这也服务于让MetaGPT框架生成更好、更长、更少Bug的代码这一目的。
    Agent在复杂的流程中需要多次自动化地迭代action的输入输出,完成:1. prompt的自动优化;2. 不同结果的回溯和聚合;3. 相关节点的结果以及人工评价;这些处理都要求以一个更通用的数据结构来承载,action node目前的设计可以覆盖到这类需求,从而减少开发者自己大量写prompt和堆叠agent的任务处理流程

    技术演进

    Function call 和ActionNode 的区别:

    两者的设计意图有比较大的区别

    1. function calling是为了工具调用而设计,比如有一个工具列表,长度为k,需要选择1个工具并填写m个参数,每个参数是一个短值,可能平均几个token;一般而言,它要求填写“待调用函数”的参数,擅长从长文本中抽取信息,一般在对话里比较常用
    • 定义Function,用户请求时带上对应的Function Call定义。
    • ChatGPT从query里理解意图并提取出函数调用所需要的参数词典
    • 用户本地执行Function得到结果,并二次访问ChatGPT
    • ChatGPT整合query和相关Function的结果答案进行输出。
    1. ActionNode是为了结构化SOP输出而设计,比如有一系列SOP,需要执行并且获得多级展开结果;比如一篇文档,可以有"正文-章节1-章节1.1",这实际上是在填写一个完整的嵌套结构,并且输出总是长的;现实中,一篇成熟的产品文档可能有10000个以上字符,对应~15000 token
      此外,function calling也可以成为 ActionNode的底层,但是填写“待调用函数”非常反直觉,而且之前手工测试效果比较差,它的输出偏短,很难有效的完成类似代码、长文本的生成,所以现在并没有使用它作为底层

    使用ActionNode: 定义一个包含一系列ActionNode的Action,首先需要定义一个动作树的父节点和一系列子节点,将子节点与父节点建立联系

    使用actionNode

    在Action.run方法中,调用父节点的执行方法,获取所有子节点按顺序执行之后的结果
    ui_describe = await UI_DESIGN_NODE.fill(prompt)

    ActionNode.fill是其执行动作的方法,通过这个方法,实现执行传入的prompt并获取结果返回,并将结果存储在自身中

    相关文章

      网友评论

          本文标题:MetaGPT智能体开发学习笔记04 - ActionNode

          本文链接:https://www.haomeiwen.com/subject/mxavodtx.html