Skip to main content
새로운 실행을 위해 다른 구성으로 그래프를 재구성해야 할 수 있습니다. 예를 들어, 설정에 따라 다른 그래프 상태나 그래프 구조를 사용해야 할 수 있습니다. 이 가이드에서는 이를 수행하는 방법을 보여드립니다.
참고 대부분의 경우, 설정에 기반한 동작 커스터마이징은 각 노드가 설정을 읽고 그에 따라 동작을 변경할 수 있는 단일 그래프를 통해 처리되어야 합니다

사전 요구 사항

배포를 위한 앱 설정에 대한 이 가이드를 먼저 확인하시기 바랍니다.

그래프 정의하기

LLM을 호출하고 사용자에게 응답을 반환하는 간단한 그래프가 있는 앱이 있다고 가정해 보겠습니다. 앱 파일 디렉토리는 다음과 같습니다:
my-app/
|-- requirements.txt
|-- .env
|-- openai_agent.py     # code for your graph
여기서 그래프는 openai_agent.py에 정의되어 있습니다.

재구성 없이

표준 LangGraph API 구성에서 서버는 openai_agent.py의 최상위 레벨에 정의된 컴파일된 그래프 인스턴스를 사용하며, 다음과 같습니다:
from langchain_openai import ChatOpenAI
from langgraph.graph import END, START, MessageGraph

model = ChatOpenAI(temperature=0)

graph_workflow = MessageGraph()

graph_workflow.add_node("agent", model)
graph_workflow.add_edge("agent", END)
graph_workflow.add_edge(START, "agent")

agent = graph_workflow.compile()
서버가 그래프를 인식하도록 하려면, LangGraph API 구성 파일(langgraph.json)에서 CompiledStateGraph 인스턴스를 포함하는 변수의 경로를 지정해야 합니다. 예를 들어:
{
    "dependencies": ["."],
    "graphs": {
        "openai_agent": "./openai_agent.py:agent",
    },
    "env": "./.env"
}

재구성하기

사용자 정의 구성으로 새로운 실행마다 그래프를 재구성하려면, openai_agent.py를 다시 작성하여 설정을 받아 그래프(또는 컴파일된 그래프) 인스턴스를 반환하는 _함수_를 제공해야 합니다. 사용자 ID ‘1’에 대해서는 기존 그래프를 반환하고, 다른 사용자에 대해서는 도구 호출 에이전트를 반환하고 싶다고 가정해 보겠습니다. 다음과 같이 openai_agent.py를 수정할 수 있습니다:
from typing import Annotated
from typing_extensions import TypedDict
from langchain_openai import ChatOpenAI
from langgraph.graph import END, START, MessageGraph
from langgraph.graph.state import StateGraph
from langgraph.graph.message import add_messages
from langchain.tools import tool
from langgraph.prebuilt import ToolNode
from langchain.messages import BaseMessage
from langchain_core.runnables import RunnableConfig


class State(TypedDict):
    messages: Annotated[list[BaseMessage], add_messages]


model = ChatOpenAI(temperature=0)

def make_default_graph():
    """Make a simple LLM agent"""
    graph_workflow = StateGraph(State)
    def call_model(state):
        return {"messages": [model.invoke(state["messages"])]}

    graph_workflow.add_node("agent", call_model)
    graph_workflow.add_edge("agent", END)
    graph_workflow.add_edge(START, "agent")

    agent = graph_workflow.compile()
    return agent


def make_alternative_graph():
    """Make a tool-calling agent"""

    @tool
    def add(a: float, b: float):
        """Adds two numbers."""
        return a + b

    tool_node = ToolNode([add])
    model_with_tools = model.bind_tools([add])
    def call_model(state):
        return {"messages": [model_with_tools.invoke(state["messages"])]}

    def should_continue(state: State):
        if state["messages"][-1].tool_calls:
            return "tools"
        else:
            return END

    graph_workflow = StateGraph(State)

    graph_workflow.add_node("agent", call_model)
    graph_workflow.add_node("tools", tool_node)
    graph_workflow.add_edge("tools", "agent")
    graph_workflow.add_edge(START, "agent")
    graph_workflow.add_conditional_edges("agent", should_continue)

    agent = graph_workflow.compile()
    return agent


# this is the graph making function that will decide which graph to
# build based on the provided config
def make_graph(config: RunnableConfig):
    user_id = config.get("configurable", {}).get("user_id")
    # route to different graph state / structure based on the user ID
    if user_id == "1":
        return make_default_graph()
    else:
        return make_alternative_graph()
마지막으로, langgraph.json에서 그래프 생성 함수(make_graph)의 경로를 지정해야 합니다:
{
    "dependencies": ["."],
    "graphs": {
        "openai_agent": "./openai_agent.py:make_graph",
    },
    "env": "./.env"
}
LangGraph API 구성 파일에 대한 자세한 정보는 여기에서 확인하세요
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I