랭 그래프 (Lang Graph)

랭 그래프는 LLM(대규모 언어 모델) 기반의 다중 에이전트 프레임워크입니다. 주요 특징은 다음과 같습니다.

주요 특징

  • 사이클 지원: 에이전트 간 양방향 상호작용이 가능합니다. 이는 비순환 시스템과 달리 에이전트가 서로 돌아가며 상호 작용할 수 있음을 의미합니다.
  • 세밀한 제어: 미리 패키징된 코드가 적어 개발자가 로직을 더 많이 정의해야 하므로 시스템 작동 방식에 대한 더 큰 제어력을 가집니다.

상세 기능

  • 상태 및 흐름 정밀 제어: 노드(에이전트) 간에 전달되는 정보를 “상태(state)“를 사용하여 관리합니다. 노드 간 정보 이동 방식을 조작하고, 그래프 실행 중 수동 개입이 가능한 사용자 참여 루프 기능을 제공합니다.
  • 영감: 랭 그래프는 다음과 같은 시스템에서 영감을 받았습니다.
    • 프레겔 (Pregel): 구글의 대규모 그래프 처리 시스템.
    • 아파치 빔 (Apache Beam): 머신러닝 파이프라인.
    • 네트워크엑스 (NetworkX): 네트워크 시각화 도구.

구조

랭 그래프의 핵심 구조는 노드, 엣지, 에이전트로 구성됩니다.

  • 노드: 처리 단위 (에이전트) 를 나타냅니다.
  • 엣지: 노드 간의 연결을 정의합니다.
  • 에이전트: 노드 간의 정보 흐름에 대한 결정을 내리는 제어 로직 역할을 합니다.

실행 흐름

  1. 시작 노드에서 메시지를 보냅니다.
  2. 에이전트는 액션을 취할지 여부를 결정합니다.
  3. 그래프 실행은 흐름을 시각화합니다.

코드 구조

  1. 상태 (State) 정의: 노드 간에 전달되는 데이터 컨테이너 역할을 하는 클래스로 정의합니다. 메시지가 목록 형태로 저장되고 구조화됩니다. StateGraph를 통해 상태를 관리합니다.

    class State:
        message: List[str]
  2. 노드 및 엣지 추가:

    • 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")
  3. 함수 정의: 함수는 상태 및 구조를 준수해야하며, 데이터를 전달하고 작업을 실행합니다.

  4. 컴파일 및 시각화: 코드를 실행 가능한 그래프 객체로 컴파일합니다. 랭 그래프 스튜디오를 사용하여 실행 중 노드와 엣지의 흐름을 시각화합니다.

랭 그래프는 사용자에게 시스템에 대한 높은 수준의 제어 기능을 제공합니다.