랭 그래프 (Lang Graph)
랭 그래프는 LLM(대규모 언어 모델) 기반의 다중 에이전트 프레임워크입니다. 주요 특징은 다음과 같습니다.
주요 특징
- 사이클 지원: 에이전트 간 양방향 상호작용이 가능합니다. 이는 비순환 시스템과 달리 에이전트가 서로 돌아가며 상호 작용할 수 있음을 의미합니다.
- 세밀한 제어: 미리 패키징된 코드가 적어 개발자가 로직을 더 많이 정의해야 하므로 시스템 작동 방식에 대한 더 큰 제어력을 가집니다.
상세 기능
- 상태 및 흐름 정밀 제어: 노드(에이전트) 간에 전달되는 정보를 “상태(state)“를 사용하여 관리합니다. 노드 간 정보 이동 방식을 조작하고, 그래프 실행 중 수동 개입이 가능한 사용자 참여 루프 기능을 제공합니다.
- 영감: 랭 그래프는 다음과 같은 시스템에서 영감을 받았습니다.
- 프레겔 (Pregel): 구글의 대규모 그래프 처리 시스템.
- 아파치 빔 (Apache Beam): 머신러닝 파이프라인.
- 네트워크엑스 (NetworkX): 네트워크 시각화 도구.
구조
랭 그래프의 핵심 구조는 노드, 엣지, 에이전트로 구성됩니다.
- 노드: 처리 단위 (에이전트) 를 나타냅니다.
- 엣지: 노드 간의 연결을 정의합니다.
- 에이전트: 노드 간의 정보 흐름에 대한 결정을 내리는 제어 로직 역할을 합니다.
실행 흐름
- 시작 노드에서 메시지를 보냅니다.
- 에이전트는 액션을 취할지 여부를 결정합니다.
- 그래프 실행은 흐름을 시각화합니다.
코드 구조
-
상태 (State) 정의: 노드 간에 전달되는 데이터 컨테이너 역할을 하는 클래스로 정의합니다. 메시지가 목록 형태로 저장되고 구조화됩니다.
StateGraph를 통해 상태를 관리합니다.class State: message: List[str] -
노드 및 엣지 추가:
StateGraph에 노드와 엣지를 추가합니다.- 노드는 함수 형태로 정의되며, LLM 호출을 포함할 수 있습니다.
- 엣지는 노드 간의 연결과 정보 흐름을 정의합니다.
def chat_bot(state): llm_result = llm.invoke(state.message) state.message.append(llm_result) return state graph.add_node("bot", chat_bot) graph.add_edge("start", "bot") -
함수 정의: 함수는 상태 및 구조를 준수해야하며, 데이터를 전달하고 작업을 실행합니다.
-
컴파일 및 시각화: 코드를 실행 가능한 그래프 객체로 컴파일합니다. 랭 그래프 스튜디오를 사용하여 실행 중 노드와 엣지의 흐름을 시각화합니다.
랭 그래프는 사용자에게 시스템에 대한 높은 수준의 제어 기능을 제공합니다.