Thursday, May 1, 2025

What is Network Agent Architecture?

In this architecture, agents are defined as graph nodes. Each agent can communicate with every other agent (many-to-many connections) and can decide which agent to call next. This architecture is good for problems that do not have a clear hierarchy of agents or a specific sequence in which agents should be called.


from typing import Literal

from langchain_openai import ChatOpenAI

from langgraph.types import Command

from langgraph.graph import StateGraph, MessagesState, START, END


model = ChatOpenAI()


def agent_1(state: MessagesState) -> Command[Literal["agent_2", "agent_3", END]]:

    # you can pass relevant parts of the state to the LLM (e.g., state["messages"])

    # to determine which agent to call next. a common pattern is to call the model

    # with a structured output (e.g. force it to return an output with a "next_agent" field)

    response = model.invoke(...)

    # route to one of the agents or exit based on the LLM's decision

    # if the LLM returns "__end__", the graph will finish execution

    return Command(

        goto=response["next_agent"],

        update={"messages": [response["content"]]},

    )


def agent_2(state: MessagesState) -> Command[Literal["agent_1", "agent_3", END]]:

    response = model.invoke(...)

    return Command(

        goto=response["next_agent"],

        update={"messages": [response["content"]]},

    )


def agent_3(state: MessagesState) -> Command[Literal["agent_1", "agent_2", END]]:

    ...

    return Command(

        goto=response["next_agent"],

        update={"messages": [response["content"]]},

    )


builder = StateGraph(MessagesState)

builder.add_node(agent_1)

builder.add_node(agent_2)

builder.add_node(agent_3)


No comments:

Post a Comment