MetaGPT Actions基础框架之动作图解析

74 阅读2分钟

代码地址: github.com/FoundationA…

action_graph.py

ActionGraph 类解析

概述

ActionGraph 是一个有向图类,用于表示动作之间的依赖关系,并提供拓扑排序功能以确定执行顺序。

核心属性

  • nodes: 存储图中所有节点,以节点key为键
  • edges: 存储有向边,键为起始节点key,值为目标节点key列表
  • execution_order: 存储拓扑排序后的节点执行顺序

主要方法

1. __init__

初始化空的节点字典、边字典和执行顺序列表。

2. add_node(node)
  • 功能:向图中添加节点
  • 参数:node - 要添加的节点对象
  • 实现:将节点以其key为键存储在nodes字典中
3. add_edge(from_node, to_node)
  • 功能:添加有向边,建立节点间依赖关系
  • 参数:from_node, to_node - 边的起始和目标节点
  • 实现:
    • edges中记录边关系
    • 调用节点的add_nextadd_prev方法维护节点间引用
4. topological_sort()
  • 功能:对图进行拓扑排序,确定节点执行顺序
  • 实现:
    • 使用深度优先搜索(DFS)实现拓扑排序
    • 将排序结果存储在execution_order
    • 排序结果为逆序插入栈中,保证依赖节点优先执行

依赖关系

类中注释提到依赖ActionNode类,但当前代码中该导入被注释掉。

使用示例

以下是ActionGraph的基本使用示例,展示如何创建动作依赖图并执行拓扑排序:

from metagpt.actions.action_graph import ActionGraph
from metagpt.actions.action_node import ActionNode

# 创建动作节点
node1 = ActionNode(key="需求分析", action=AnalyzeRequirements)
node2 = ActionNode(key="设计API", action=DesignAPI)
node3 = ActionNode(key="编写代码", action=WriteCode)
node4 = ActionNode(key="测试代码", action=WriteTest)

# 构建动作图
graph = ActionGraph()
graph.add_node(node1)
graph.add_node(node2)
graph.add_node(node3)
graph.add_node(node4)

# 添加依赖关系: 需求分析 → 设计API → 编写代码 → 测试代码
graph.add_edge(node1, node2)
graph.add_edge(node2, node3)
graph.add_edge(node3, node4)

# 执行拓扑排序
graph.topological_sort()
print("执行顺序:", [node.key for node in graph.execution_order])
# 输出: 执行顺序: ['需求分析', '设计API', '编写代码', '测试代码']
示例说明
  1. 节点创建:通过ActionNode创建具体任务节点,每个节点关联一个实际动作
  2. 图构建:使用add_node添加节点,add_edge定义依赖方向
  3. 拓扑排序:自动计算执行顺序,确保前置动作完成后才执行后续动作
  4. 典型应用:在多智能体协作或复杂任务分解场景中用于流程控制