AI/langchain

LangChain vs LangGraph

moxie2ks 2025. 6. 22. 18:01
728x90
반응형

개요

LangChain과 LangGraph는 대규모 언어 모델(LLM) 기반 애플리케이션 개발을 위한 프레임워크로, 각각 다른 접근 방식과 용도를 가지고 있다. LangChain은 순차적 워크플로우와 모듈러 아키텍처에 중점을 둔 범용 프레임워크인 반면, LangGraph는 LangChain 위에 구축된 특화된 라이브러리로 복잡한 그래프 기반 워크플로우와 상태 관리에 특화되어 있다. LangChain은 2022년 오픈소스로 출시되어 LLM 애플리케이션 개발의 표준 도구로 자리 잡았으며, LangGraph는 2024년 초 LangChain 생태계의 일부로 출시되어 에이전트 런타임과 멀티 에이전트 시스템 구축을 위한 고급 기능을 제공한다. 두 프레임워크는 상호 보완적 관계에 있으며, 프로젝트의 복잡성과 요구사항에 따라 선택적으로 사용할 수 있다.

설명

LangChain은 LLM을 다양한 애플리케이션에 통합하기 위해 설계된 오픈소스 프레임워크이다. 체인(Chain) 개념을 중심으로 한 순차적 워크플로우를 통해 여러 모델을 조합하고, 프롬프트를 관리하며, 외부 데이터 소스와 연결할 수 있는 유연성과 모듈성을 제공한다. LangChain의 아키텍처는 코드 기반 워크플로우 구조를 사용하여 개발자가 Python 스크립트를 통해 플로우를 정의할 수 있게 한다.

LangGraph는 LangChain 생태계 내에서 개발된 특화된 라이브러리로, 순환 그래프 생성을 용이하게 하여 에이전트 런타임에 필요한 복잡한 워크플로우를 구현한다. StateGraph 클래스를 중심으로 한 그래프 기반 아키텍처를 제공하며, 중앙 상태 객체가 시간에 따라 업데이트되는 구조를 가진다. LangGraph는 선언적 모델을 강조하여 시각적 표현을 통한 워크플로우 관리를 가능하게 한다.

LangGraph Platform과 LangGraph Studio는 LangGraph 생태계의 핵심 구성 요소이다. LangGraph Platform은 워크플로우 실행을 지원하는 기본 인프라 역할을 하며, LangGraph Studio는 워크플로우 디자인을 위한 사용자 친화적 인터페이스를 제공한다. 이러한 구조는 복잡한 AI 에이전트를 최소한의 코드로 구축할 수 있는 환경을 조성한다.

특징

LangChain의 주요 특징은 모듈러 설계와 순차적 체인 구조이다. 각 체인은 특정 순서로 실행되는 일련의 작업으로 구성되며, 사전 정의된 플로우가 있는 프로세스에 이상적이다. LangChain은 다양한 프로그래밍 언어와 기술과의 광범위한 호환성을 제공하여 다양한 개발 환경에 통합할 수 있는 유연성을 갖추고 있다. 메모리 관리 기능을 통해 상호작용 간 컨텍스트를 유지할 수 있으며, 빠른 프로토타이핑과 간단한 LLM 통합에 적합하다.

LangGraph의 핵심 특징은 상태 관리와 순환 그래프 지원이다. 그래프의 노드는 상태 속성에 대한 연산을 반환하는 형태로 중앙 상태를 업데이트하며, 속성은 완전히 재정의되거나 기존 값에 추가될 수 있다. LangGraph는 복잡한 비선형 워크플로우를 처리할 수 있는 능력을 가지고 있으며, 루프와 이전 상태 재방문을 허용하는 유연한 그래프 구조를 제공한다. 멀티 에이전트 시스템 구축에 특화되어 있어 여러 독립적 에이전트가 동적으로 상호작용하고 적응할 수 있는 환경을 조성한다.

LangGraph의 시각적 프레임워크는 드래그 앤 드롭 인터페이스를 통해 복잡한 에이전트 플로우를 생성할 수 있게 하며, 광범위한 코딩 없이도 에이전트 상호작용을 시각적으로 설계할 수 있다. 피드백 루프, 의사결정 프로세스, 다단계 작업을 쉽게 처리할 수 있어 실시간 상호작용과 비즈니스 프로세스 자동화에 적합하다.

성능 측면에서 LangChain은 작은 파이프라인에서 우수한 성능을 보이지만, 대규모 데이터 처리 시 LangGraph의 병렬 처리 기능이 더 효과적이다. LangGraph는 여러 노드를 동시에 실행할 수 있는 병렬성을 제공하여 확장성 면에서 우위를 가진다.

예제

LangChain 기본 체인 구현

from langchain import OpenAI, LLMChain, PromptTemplate
from langchain.chains import SimpleSequentialChain

# 기본 프롬프트 템플릿
template = """
질문: {question}
답변: 단계별로 설명해주세요.
"""

prompt = PromptTemplate(
    input_variables=["question"],
    template=template
)

# LLM 체인 생성
llm = OpenAI(temperature=0.7)
chain = LLMChain(llm=llm, prompt=prompt)

# 순차적 체인 실행
result = chain.run("파이썬에서 리스트와 튜플의 차이점은?")
print(result)

LangGraph 상태 관리 구현

from langgraph.graph import StateGraph, END
from typing import TypedDict
import operator

# 상태 정의
class AgentState(TypedDict):
    messages: list
    user_input: str
    final_answer: str

# 노드 함수 정의
def process_input(state):
    """사용자 입력 처리"""
    user_message = state["user_input"]
    return {
        "messages": [f"처리중: {user_message}"],
        "user_input": user_message
    }

def generate_response(state):
    """응답 생성"""
    processed_input = state["user_input"]
    response = f"'{processed_input}'에 대한 답변을 생성했습니다."
    return {
        "messages": state["messages"] + [response],
        "final_answer": response
    }

def should_continue(state):
    """조건부 라우팅"""
    if len(state["messages"]) < 3:
        return "generate"
    else:
        return "end"

# 그래프 구성
workflow = StateGraph(AgentState)

# 노드 추가
workflow.add_node("process", process_input)
workflow.add_node("generate", generate_response)

# 엣지 추가
workflow.add_edge("process", "generate")
workflow.add_conditional_edges(
    "generate",
    should_continue,
    {
        "generate": "generate",
        "end": END
    }
)

# 시작점 설정
workflow.set_entry_point("process")

# 컴파일 및 실행
app = workflow.compile()
result = app.invoke({
    "messages": [],
    "user_input": "LangGraph 사용법",
    "final_answer": ""
})

멀티 에이전트 시스템 예제

from langgraph.graph import StateGraph
from langgraph.prebuilt import create_agent_executor

# 여러 전문 에이전트 정의
research_agent = create_agent_executor(
    tools=[web_search_tool],
    llm=llm,
    system_message="당신은 연구 전문가입니다."
)

analysis_agent = create_agent_executor(
    tools=[data_analysis_tool],
    llm=llm,
    system_message="당신은 데이터 분석 전문가입니다."
)

# 멀티 에이전트 워크플로우
def supervisor_node(state):
    """감독자 에이전트가 작업 분배"""
    task_type = classify_task(state["user_input"])
    if task_type == "research":
        return {"next_agent": "researcher"}
    else:
        return {"next_agent": "analyst"}

# 계층적 에이전트 시스템 구성
multi_agent_graph = StateGraph(AgentState)
multi_agent_graph.add_node("supervisor", supervisor_node)
multi_agent_graph.add_node("researcher", research_agent)
multi_agent_graph.add_node("analyst", analysis_agent)

# 조건부 라우팅 설정
multi_agent_graph.add_conditional_edges(
    "supervisor",
    lambda x: x["next_agent"],
    {
        "researcher": "researcher",
        "analyst": "analyst"
    }
)

결론

LangChain과 LangGraph는 LLM 애플리케이션 생태계에서 서로 다른 요구사항을 충족한다. LangChain은 순차적 작업을 위한 단순성과 모듈성에서 뛰어나며, 빠른 프로토타이핑과 직접적인 LLM 통합에 적합하다. 반면 LangGraph는 복잡하고 적응적인 워크플로우를 위한 유연한 시스템 구축에 탁월하며, 상태 관리와 멀티 에이전트 시스템이 필요한 환경에서 진가를 발휘한다.

프로젝트 요구사항에 따른 선택 기준은 명확하다. 간단한 선형 프로세스나 빠른 개발이 필요한 경우 LangChain이 적합하며, 동적이고 상태 기반의 상호작용이나 복잡한 에이전트 시스템이 필요한 경우 LangGraph가 더 효과적이다. 성능 측면에서도 소규모 파이프라인에서는 LangChain이, 대규모 병렬 처리나 확장성이 중요한 환경에서는 LangGraph가 우위를 보인다.

2024년을 기점으로 프로덕션 환경에서 에이전트가 실질적으로 작동하기 시작했으며, 이는 범용적인 완전 자율 에이전트가 아닌 수직적이고 범위가 좁으며 높은 제어 가능성을 가진 맞춤형 인지 아키텍처를 통해 달성되었다. LangGraph는 이러한 트렌드의 중심에서 기업들이 신뢰할 수 있는 프로덕션급 에이전트를 구축할 수 있는 저수준의 제어 가능한 에이전트 프레임워크로 자리 잡았다. 향후 두 프레임워크는 각각의 강점을 살려 LLM 기반 애플리케이션 개발의 서로 다른 영역에서 지속적으로 발전할 것으로 전망된다.

참고문헌

728x90
반응형

'AI > langchain' 카테고리의 다른 글

LangChain Runnable Parallel 실행 예제  (0) 2025.05.14