LangGraph 공식문서를 번역한 내용입니다. 필요한 경우 부연 설명을 추가하였고 이해하기 쉽게 예제를 일부 변경하였습니다. 문제가 되면 삭제하겠습니다.
https://langchain-ai.github.io/langgraph/how-tos/pass_private_state/
일부 경우에는 노드들이 그래프의 주요 스키마에 포함되지 않는 중요한 중간 정보를 교환하고자 할 수 있다. 이 비공개 데이터는 그래프의 전체 입력/출력에는 관련이 없으며, 특정 노드들 간에만 공유되어야 한다.
이 가이드에서는 세 개의 노드(node_1, node_2, node_3)로 구성된 순차적 그래프의 예제를 만들어 보자. 여기서 비공개 데이터는 첫 번째 두 단계(node_1, node_2) 간에 전달되고, 세 번째 단계(node_3)는 공개된 전체 상태만 접근할 수 있다.
준비
우선, 필요한 패키지를 설치하자.
pip install langgraph
그래프 정의 및 사용
from langgraph.graph import StateGraph, START, END
from typing_extensions import TypedDict
# 공유 상태
class OverallState(TypedDict):
a: str
# 비공개 데이터
class Node1Output(TypedDict):
private_data: str
# node_1과 node_2간에만 공유되는 데이터
def node_1(state: OverallState) -> Node1Output:
output = {"private_data": "set by node_1"}
print(f"Entered node `node_1`:\n\tInput: {state}.\n\tReturned: {output}")
return output
# Node2 입력은 node_1 이후에만 사용 가능한 개인 데이터를 필요로 한다.
class Node2Input(TypedDict):
private_data: str
def node_2(state: Node2Input) -> OverallState:
output = {"a": "set by node_2"}
print(f"Entered node `node_2`:\n\tInput: {state}.\n\tReturned: {output}")
return output
# Node3은 공개 데이터이다
def node_3(state: OverallState) -> OverallState:
output = {"a": "set by node_3"}
print(f"Entered node `node_3`:\n\tInput: {state}.\n\tReturned: {output}")
return output
builder = StateGraph(OverallState)
builder.add_node(node_1)
builder.add_node(
node_2
) # node_2는 두 번째 node이고 node_1에서 개인 데이터를 데이터이다.
builder.add_node(node_3) # node_3은 세 번째 노드이고 개인 데이터를 볼 수 없다.
builder.add_edge(START, "node_1")
builder.add_edge("node_1", "node_2")
builder.add_edge(
"node_2", "node_3"
)
builder.add_edge("node_3", END)
graph = builder.compile()
response = graph.invoke(
{
"a": "set at start",
}
)
print()
print(f"Output of graph invocation: {response}")
Entered node `node_1`:
Input: {'a': 'set at start'}.
Returned: {'private_data': 'set by node_1'}
Entered node `node_2`:
Input: {'private_data': 'set by node_1'}.
Returned: {'a': 'set by node_2'}
Entered node `node_3`:
Input: {'a': 'set by node_2'}.
Returned: {'a': 'set by node_3'}
Output of graph invocation: {'a': 'set by node_3'}
LangGraph 참고 자료
- Controllability
- Persistence
- Memory
- Human-in-the-loop
- Streaming
- Tool calling
- Subgraphs
- State Management
- Other
- Prebuilt ReAct Agent
반응형