LangGraph
LangGraph는 LLM을 활용한 멀티 에이전트 시스템을 구축을 위한 라이브러리 입니다. 상태 추적과 복잡한 워크플로우 관리에 강점을 가지고 있으며, 이를 통해 하나의 애플리케이션에서 여러 에이전트가 동시 또는 순차적으로 상호작용하며 작업을 수행할 수 있습니다.
LanghGraph의 특징
- Cycles(반복문) and Branching(조건문) : 상태에 따라 동작을 다르게 하거나, 반복적인 작업 수행 지원
- Persistence(지속성) : 각 단계 별 완료될 때마다 상태를 자동으로 저장
- 에러 복구, 일시 중단 후 재개, 타임 트래블(time travel), Human-in-the-loop 기능 구현이 가능
- 타임 트래블(time travel) : 과거의 상태로 돌아가거나 이전에 수행된 작업으로 되돌림
- 에러 복구, 일시 중단 후 재개, 타임 트래블(time travel), Human-in-the-loop 기능 구현이 가능
- Human-in-the-Loop : 에이전트가 계획한 다음 작업을 승인하거나 편집 기능
- Streaming Support : 각 노드에서 생성되는 대로 스트림 출력 제공.
- 특히 토큰 스트리밍(token streaming) 을 지원하여, 텍스트 기반의 작업이나 결과가 한 번에 모두 나오지 않고 실시간으로 처리 가능
- Integration with LangChain : LangChain 및 LangSmith 와 통합 용이
LangGraph의 구조
flowchart TD
%% 노드 정의
_start_("_start_") --> agent("agent")
agent -->|continue| action
agent -->|end| _end_("_end_")
action --> agent
%% 스타일 설정
style _start_ fill:#3E2C58,stroke:#A78BFA,stroke-width:2px,color:white
style agent fill:#3E2C58,stroke:#A78BFA,stroke-width:2px,color:white
style action fill:#1C274F,stroke:#93C5FD,stroke-width:2px,color:white
style _end_ fill:#1C1B19,stroke:#FACC15,stroke-width:2px,color:white
%% 선 색상 설정
linkStyle 0 stroke:#A78BFA,stroke-width:2px
linkStyle 1 stroke:#93C5FD,stroke-width:2px,stroke-dasharray:5 5
linkStyle 2 stroke:#FACC15,stroke-width:2px,stroke-dasharray:5 5
linkStyle 3 stroke:#93C5FD,stroke-width:2px
• 노드 (Nodes): 그래프의 기본 단위로, 각 노드는 특정한 작업을 수행하거나, 데이터를 변환하는 기능을 담당합니다. 예) 데이터 전처리, 정보 추출, 텍스트 분석 등
• 엣지 (Edges): 노드들 간의 연결을 나타내며, 데이터가 어떻게 흐르고 변환되는지를 시각적으로 나타냅니다.
• 그래프 (Graph): 여러 개의 노드와 엣지가 결합된 구조로, 복잡한 작업 흐름을 전체적으로 다룹니다.
LangGraph의 코드 구성
1. State(상태) 정의
- 에이전트 간에 어떤 정보를 주고 받을지 정의. (즉, 노드간의 상태를 전달함.)
2. Node 선언
- LLM을 통해 어떤식으로 정보를 처리 할지를 정의
3. Edge
- 노드들 간의 연결을 나타내며, 데이터가 어떻게 흐르고 변환되는지를 시각적으로 나타냄
LangChain vs LangGraph
1. 애플리케이션 구조 :
• LangChain : 주로 단일 에이전트를 중심으로 파이프라인을 구성하는 데 중점을 둡니다. 이는 각기 다른 NLP 작업을 순차적으로 처리하는 데 적합합니다.
• LangGraph : 멀티 액터 시스템을 구축하여 여러 에이전트가 협력하거나 경쟁하면서 복잡한 작업을 처리하는 데 적합합니다. 이는 더 큰 시스템이나 복잡한 비즈니스 로직을 관리할 때 유리합니다.
2. 상태 추적 :
• LangChain : 상태 추적을 명시적으로 제공하지 않지만, 각 파이프라인의 출력은 이전 단계의 결과를 활용할 수 있습니다.
• LangGraph : 상태 기반 애플리케이션을 구축할 수 있으며, 각 에이전트가 상태를 추적하고 이를 바탕으로 의사 결정을 내리며 작업을 진행할 수 있습니다.
3. 용도와 목적 :
• LangChain : 텍스트 변환, 데이터 처리, API 호출 등 다양한 단일 작업 흐름을 처리하는 데 유용합니다.
chain = prompt | llm | parser
chain.invoke({"query": query})
• LangGraph : 멀티 에이전트 협업과 복잡한 워크플로우의 구축을 목표로 하며, 에이전트 간의 상호작용을 통한 분산 처리가 필요한 경우에 적합합니다.