langgraph / / 2024. 12. 3. 07:32

[langgraph] 그래프의 입출력 스키마를 정의하는 방법

LangGraph 공식문서를 번역한 내용입니다. 필요한 경우 부연 설명을 추가하였고 이해하기 쉽게 예제를 일부 변경하였습니다. 문제가 되면 삭제하겠습니다.

https://langchain-ai.github.io/langgraph/how-tos/input_output_schema/

기본적으로 StateGraph는 단일 스키마로 작동하며, 모든 노드는 해당 스키마를 사용하여 통신해야 한다. 그러나 그래프에 대해 입력 스키마와 출력 스키마를 별도로 정의하는 것도 가능하다.

별도의 스키마를 지정하면, 노드 간의 통신을 위한 내부 스키마가 여전히 사용된다. 입력 스키마는 제공된 입력이 예상된 구조와 일치하는지 확인하고, 출력 스키마는 내부 데이터를 필터링하여 정의된 출력 스키마에 따라 관련된 정보만 반환한다.

이 예시에서는 입력 스키마와 출력 스키마를 별도로 정의하는 방법을 살펴보자.

준비

우선, 필요한 패키지를 설치하자.

pip install langgraph 

그래프 정의 및 사용

from langgraph.graph import StateGraph, START, END
from typing_extensions import TypedDict


# 입력 스키마 정의
class InputState(TypedDict):
    question: str


# 출력 스키마 정의
class OutputState(TypedDict):
    answer: str


# 입출력을 포함하는 스키마 정의
class OverallState(InputState, OutputState):
    pass


# 입력을 처리하고 답변을 생성하는 노드
def answer_node(state: InputState):
    return {"answer": "bye", "question": state["question"]}


builder = StateGraph(OverallState, input=InputState, output=OutputState)
builder.add_node(answer_node) 
builder.add_edge(START, "answer_node")  
builder.add_edge("answer_node", END)  
graph = builder.compile()  

print(graph.invoke({"question": "hi"}))
{'answer': 'bye'}

참고: invoke의 출력에는 출력 스키마만 포함된다.

LangGraph 참고 자료

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유