상세 컨텐츠

본문 제목

LangGraph

LLM

by 공길이의 숨겨진 세상 2025. 3. 26. 16:37

본문

LangGraph은 언어모델(LM) 기반 어플리케이션을 위한 비순환 그래프(DAG Directed Acyclic Graph) 기반의 프로그래밍 프레임워크로 복잡한 작업을 모듈화된 단계로 분해하고 흐름을 제어하는데 특화되어 있다. 특히 Multi-Agent 시스템과 LLM Orchestration에 강점을 가지며, 에이전트 간 협업, 반복적 실행, 분기 처리등을 유연하게 설계할 수 있다.

 

1. LangGraph의 기본 개념

 

(1) 왜 LangGraph인가?
- 문제인식 : 기존 LangChain은 선형적(Linear) 워크플로우에 최적화되었지만, 복잡한 분기/반복/병렬 처리는 표현하기 어려웠다.
- 해결책 : 그래프 구조를 도입해 동적 흐름 제어가 가능하도록 설계 ( 예 : 에이전트 협업, 실시간 피드백 루프)

 

(2) 핵심 용어
- Node : 작업의 기본 단위 (예 : LLM 호출 , 도구 실행, 조건 체크)
- Edge : 노드간 연결로, 실행 순서를 정의 (조건부 분기가능 : Conditional Edge)
- State : 그래프를 실행 중 공유되는 데이터 컨테이너 ( Dictionary 형태 )
- Compilation : 그래프를 실행 가능한 코드로 변환하는 과정

 

 

2. 아키텍처 및 실행 원리

 

(1) 그래프 구성 요소

from langgraph.graph import Graph

workflow = Graph()

# 1. 노드 정의
def node_1(state):
    return {"result": "data_processed"}

def node_2(state):
    return {"output": state["result"] + "_final"}

# 2. 노드 추가
workflow.add_node("processor", node_1)
workflow.add_node("finalizer", node_2)

# 3. 엣지 연결 (선형적 흐름)
workflow.add_edge("processor", "finalizer")

# 4. 진입점/종료점 설정
workflow.set_entry_point("processor")
workflow.set_finish_point("finalizer")

# 5. 컴파일 및 실행
app = workflow.compile()
result = app.invoke({"input": "initial_data"})

 

(2) 조건부 분기 ( Branching )

from langgraph.graph import Graph

workflow = Graph()

def router(state):
    if state["input"] == "A":
        return "path_a"
    else:
        return "path_b"

workflow.add_conditional_edges(
    start_key="router",
    condition=router,
    path_map={"path_a": "node_a", "path_b": "node_b"}
)

 

(3) 반복 실행  ( Loops )

* END 키워드로 반복 종료를 명시합니다.

from langgraph.graph import END
def should_continue(state):
    if state["tries"] >= 3:
        return "end"
    return "continue"

workflow.add_conditional_edges(
    start_key="retry_node",
    condition=should_continue,
    path_map={"continue": "retry_node", "end": END}
)

 

3. Multi-Agent 시스템과의 통합

(1) 에이전트 협업 설계

- 각 에이전트 별로 Node를 구현하고 State를 통해서 메시지를 전달합니다.

def agent_1(state):
    return {"response": "I'm Agent 1"}

def agent_2(state):
    return {"final_response": state["response"] + " + Agent 2"}

workflow.add_node("agent1", agent_1)
workflow.add_node("agent2", agent_2)
workflow.add_edge("agent1", "agent2")

 

4. 적용 사례

(1) 논문 작성 에이전트

- 연구노드 (PubMed 검색) -> 초안 작성 노드 -> 피드백 루프 (반복 개선)

(2) AI 기반 게임  NPC

- NPC별 에이전트가 LangGraph로 협력해 동적 스토리라인 생성

 

5. LangGraph vs 다른 프레임워크

기능 LangGraph LangChain LlamaIndex
흐름제어 (workflow) 그래프 기반(DAG) 선형 체인 검색 중심
반복 / 분기 지원 제한적 미지원
Multi-Agent 최적화 가능하지만 복잡함 부적합
실시간 조정 가능 어려움 어려움

 

 

6. 한계와 해결 방안


한계

한계 극복 해결책

디버깅 복잡성

각 노드들의 진행과정을 디버깅하는 방법으로 노드들을 아우르는 State 시각화 도구 활융

대규모 그래프 관리의 어려움

서브 그래프의 모듈화로 한개의 그래프로 해결하려 하지 말고 부모그래프, 자식 그래프 구조로 모듈화

LLM 지연 시간 문제(많이느림)

비동기 실행 ( Async 지원 ) 

 

 

7. 결론 : LangGraph의 의의

* 복잡한 워크플로우를 명시적 그래프로 표현해 유지보수성을 확보한다.

* 에이전트 협업에 특화된 최초의 LLM 프레임워크이다

* 실시간 분기/반복이 필요한 어플리케이션 ( 예: 게임, 고객지원)에 아주 이상적이다.

 

 

'LLM' 카테고리의 다른 글

MoE (Mixture of Experts)  (0) 2025.03.26
MCP (Model Context Protocol)  (0) 2025.03.26

관련글 더보기