开启左侧

LangGraph——Multi-agent

[复制链接]
米落枫 发表于 昨天 23:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
Multi-agent架构

Multi-agent架构分类

    Network:每个agent都可以与其他每个agent进行通信。任何agent都可以决定接下来呼叫哪个其他的agent。Supervisor:每个agent与Supervisor agent进行通信。Supervisor agent决定接下来应该调用哪个agent
    Supervisor (tool-calling):这是 Supervisor 架构的特例。单个agent可以表示为工具。在这种情况下,Supervisor agent使用工具调用 LLM 来决定要调用哪些agent工具,以及要传递给这些agent的参数。Hierarchical:您可以定义一个多agent系统,其中包含一个supervisor of supervisors。这是管理程序架构的推广,允许更复杂的控制流。Custom multi-agent workflow:每个agent仅与agent子集通信。流的某些部分是确定性的,只有某些agent可以决定接下来要呼叫哪些其他的agent。
LangGraph——Multi-agent-1.png


Handoffs(交接)

在Multi-agent架构中,agent可以表示为图节点。每个agent节点执行其步骤并决定是完成执行还是路由到另一个agent,包括可能路由到自身(例如,在循环中运行)。Multi-agent交互中的一种常见模式是交接 ,即一个agent将控制权移交给另一个agent。切换允许您指定:
    destination:要导航到的目标agent(例如,要转到的节点的名称)payload:要传递给agent的信息(例如,状态更新)
要在 LangGraph 中实现切换,agent节点可以返回 Command 对象,该对象允许您结合控制流和状态更新:
  1. def agent(state) -> Command[Literal["agent", "another_agent"]]:
  2.     # the condition for routing/halting can be anything, e.g. LLM tool call / structured output, etc.
  3.     goto = get_next_agent(...)  # 'agent' / 'another_agent'
  4.     return Command(
  5.         # Specify which agent to call next
  6.         goto=goto,
  7.         # Update the graph state
  8.         update={"my_state_key": "my_state_value"}
  9.     )
复制代码
在更复杂的场景中,每个agent节点本身都是一个图(即子图 ),其中一个agent子图中的节点可能希望导航到不同的agent。例如,如果您有两个agent,alice 和 bob(父图中的子图节点),并且 alice 需要导航到 bob,则可以在 Command 对象中设置 graph=Command.PARENT:
  1. def some_node_inside_alice(state):
  2.     return Command(
  3.         goto="bob",
  4.         update={"my_state_key": "my_state_value"},
  5.         # specify which graph to navigate to (defaults to the current graph)
  6.       
复制代码
原文地址:https://blog.csdn.net/qq_50863584/article/details/151263069
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )