Router(라우터0
복습
우리는 메시지를 상태로 사용하고 바인딩된 도구를 가진 채팅 모델을 활용하는 그래프를 구축했습니다.
이 그래프는 다음을 수행할 수 있음을 확인했습니다:
- 도구 호출 반환
- 자연어 응답 반환
목표
이를 라우터로 생각할 수 있습니다. 채팅 모델은 사용자 입력에 따라 직접 응답 또는 도구 호출 사이를 라우팅합니다.
이는 LLM이 도구 호출 또는 직접 응답을 통해 제어 흐름을 지시하는 에이전트의 간단한 예시입니다.

두 가지 출력 모두 처리할 수 있도록 그래프를 확장해 보겠습니다!
이를 위해 두 가지 아이디어를 활용할 수 있습니다:
(1) 도구를 호출할 노드를 추가합니다.
(2) 채팅 모델 출력을 확인하고, 도구 호출 노드로 연결하거나 도구 호출이 수행되지 않으면 단순히 종료하는 조건부 에지를 추가합니다.
%%capture --no-stderr
%pip install --quiet -U langchain_openai langchain_core langgraph from dotenv import load_dotenv
load_dotenv("../.env", override=True, verbose=True)True
from langchain_openai import ChatOpenAI
def multiply(a: int, b: int) -> int:
"""Multiply a and b.
Args:
a: first int
b: second int
"""
return a * b
llm = ChatOpenAI(model="gpt-4o")
llm_with_tools = llm.bind_tools([multiply])ToolNode를 사용하고, 단순히 도구 목록을 전달하여 이를 초기화합니다.
조건부 에지로는 tools_condition을 사용합니다.
from langgraph.graph import StateGraph, MessagesState
from langgraph.prebuilt import ToolNode, tools_condition
def agent(state: MessagesState):
response = llm_with_tools.invoke(state["messages"])
return {"messages": [response]}
builder = StateGraph(MessagesState)
builder.add_node("agent", agent)
builder.add_node("tools", ToolNode([multiply]))
builder.add_conditional_edges("agent", tools_condition)
builder.set_entry_point("agent")
builder.set_finish_point("tools")
graph = builder.compile()from IPython.display import display, Image
display(Image(graph.get_graph().draw_mermaid_png()))
이제 그래프가 도구를 실행하는 것을 확인할 수 있습니다!
ToolMessage로 응답합니다.
from langchain_core.messages import HumanMessage
response = graph.invoke({"messages": [HumanMessage("1 곱하기 2는 얼마인가요?")]})
for m in response["messages"]:
m.pretty_print()================================[1m Human Message [0m=================================
1 곱하기 2는 얼마인가요?
==================================[1m Ai Message [0m==================================
Tool Calls:
multiply (call_NHReX9FyLVW0atVJOe0zMuu0)
Call ID: call_NHReX9FyLVW0atVJOe0zMuu0
Args:
a: 1
b: 2
=================================[1m Tool Message [0m=================================
Name: multiply
2
LangGraph Studio
랭그래프 스튜디오에 대한 설명은 여기와 여기를 참조하세요. 로컬 개발 서버를 시작하려면, 이 모듈의 /studio 디렉터리에서 터미널에 다음 명령어를 실행하세요:
langgraph dev
다음과 같은 출력이 표시되어야 합니다:
- 🚀 API: http://127.0.0.1:2024
- 🎨 Studio UI: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
- 📚 API 문서: http://127.0.0.1:2024/docs
브라우저를 열고 스튜디오 UI로 이동하세요: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024.
스튜디오에서 router를 로드하세요. 이 라우터는 module-1/studio/langgraph.json에 설정된 module-1/studio/router.py를 사용합니다.