代码地址: 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_next和add_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', '编写代码', '测试代码']
示例说明
- 节点创建:通过
ActionNode创建具体任务节点,每个节点关联一个实际动作 - 图构建:使用
add_node添加节点,add_edge定义依赖方向 - 拓扑排序:自动计算执行顺序,确保前置动作完成后才执行后续动作
- 典型应用:在多智能体协作或复杂任务分解场景中用于流程控制