AI 기술이 발전함에 따라 단일 모델의 한계를 넘어 여러 특화된 에이전트가 함께 작업하는 멀티 에이전트 시스템이 주목받고 있습니다. 이러한 시스템을 구축할 때 가장 중요한 것은 적절한 프레임워크의 선택인데, 최근 개발자들 사이에서 LangGraph가 유연성과 효율성 면에서 주목받고 있습니다. 이번 글에서는 실제 기업들의 사례를 통해 LangGraph가 어떻게 복잡한 AI 에이전트 시스템 구축에 활용되고 있는지 살펴보겠습니다.
LangGraph란 무엇인가?
LangGraph는 LangChain에서 개발한 프레임워크로, 그래프 기반 아키텍처를 통해 복잡한 AI 에이전트 시스템을 구축할 수 있게 해줍니다. 기존 LangChain의 연쇄적 접근 방식에서 한 단계 더 나아가, 다양한 경로와 반복적인 패턴을 가진 흐름을 만들 수 있습니다. 특히 여러 에이전트가 협력하거나, 복잡한 작업을 수행하는 시스템을 설계할 때 유용합니다.
LangGraph의 그래프 기반 아키텍처 예시 (출처: LangChain 블로그)
법률 분야에서의 LangGraph 활용: Definely 사례
Definely는 법률 산업에 AI 솔루션을 통합하여 변호사들의 일상 워크플로우를 혁신하고 있는 기업입니다. 이들은 Microsoft Word 내에서 작동하는 특화된 에이전트를 개발하여 계약 초안 작성, 협상 및 검토 과정을 간소화하는 데 중점을 두고 있습니다.
해결하고자 한 핵심 문제: 변호사의 시간 소모적 워크플로우
법률 전문가들은 많은 양의 계약서, 법률 연구, 문서 구성 등의 작업을 처리해야 하며, 이는 시간이 많이 소요되고 인적 오류가 발생하기 쉽습니다. 이전에 Definely는 LangChain을 기반으로 한 RAG(Retrieval-Augmented Generation) 챗봇을 활용했지만, 이는 주로 계약 내용에 대한 질문에 답변하는 제한된 기능만 제공했습니다.
이러한 한계를 극복하기 위해 Definely는 LangGraph를 도입하여 더 복잡한 법률 작업을 처리할 수 있는 다중 에이전트 시스템을 구축했습니다. 이 시스템은 다음과 같은 기능을 갖추고 있습니다:
- 계획(Plan): 복잡한 법률 문제를 더 작고 관리하기 쉬운 하위 작업으로 분해
- 해결(Solve): 각 하위 작업을 완료하기 위해 함께 작업하는 전담 에이전트 배치
- 적응(Adapt): 작업이 진행됨에 따라 접근 방식을 동적으로 수정
- 상호작용(Interact): 주요 시점에서 의사 결정을 안내하기 위한 인간의 입력과 승인 통합
Definely의 멀티 에이전트 시스템 아키텍처 (출처: LangChain 블로그)
LangGraph의 주요 기능
Definely는 LangGraph의 그래프 기반 아키텍처를 통해 변호사가 일상 업무를 처리하는 방식을 모방하는 적응력 있고 매우 맞춤화 가능한 다중 에이전트 프레임워크를 만들었습니다. 특히 LangGraph의 비독단적이고 유연한 설계는 광범위한 도메인 지식과 맞춤형 정보 통합이 중요한 법률과 같은 복잡한 분야에 효과적입니다.
이를 통해 Definely의 AI 시스템은 다음과 같은 기능을 제공합니다:
- 핵심 계약 정보 추출: 계약서에서 정의, 조항 및 기타 계약 데이터를 정확하고 신뢰성 있게 자동으로 추출합니다.
- 계약 변경의 결과 분석: 계약의 각 변경 사항의 결과를 분석하여 변경 사항이 계약의 다른 부분에 미치는 영향을 이해할 수 있습니다.
- 복잡한 법률 쿼리 답변: 사용자가 여러 계약서에 걸쳐 질문할 때 관련된 모든 측면을 고려하여 답변합니다.
- 계약 언어 초안 작성 및 개선: 맥락을 잃지 않고 계약 언어의 초안 작성, 검토, 요약, 수정 및 개선을 지원합니다.
- 시스템 통합 및 문서 관리: 법률 회사의 문서 관리 시스템과 통합하여 의사 결정, 조항 초안 작성 및 법률 쿼리 응답을 향상시킵니다.
- 계약 마크업: 법률 팀의 지침, 선호도 및 이전 거래에 따라 계약서를 자동으로 마크업합니다.
“LangGraph의 유연성은 법률 전문가들이 업무에 접근하는 방식을 모방하는 AI 에이전트를 구축할 수 있게 해주었습니다. 이는 변호사와 업계에 게임 체인저입니다.” – Sigurjon Isaksson, Definely의 AI 책임자
코딩 에이전트 개발에서의 LangGraph 활용: Qodo 사례
Qodo는 GPT-3 시대부터 AI 코딩 어시스턴트를 개발해 왔습니다. 초기에는 테스트 생성, 코드 리뷰, 개선과 같은 다양한 코딩 작업에 대해 미리 정의된 구조화된 흐름을 사용했습니다. 이 접근 방식은 초기 LLM 모델들의 한계에도 불구하고 실용적인 가치를 제공했습니다.
Claude Sonnet 3.5가 출시된 후, LLM은 코딩 작업에서 훨씬 더 뛰어난 능력을 보여주기 시작했습니다. 이러한 환경 변화에 맞춰 Qodo는 보다 동적이고 유연한 시스템을 구축하면서도 코드 품질에 대한 높은 기준을 유지하고자 했습니다. 여러 프레임워크 중에서 LangGraph를 선택한 이유는 무엇일까요?
유연성과 의견이 있는 워크플로우의 균형
Qodo가 가장 중요하게 고려한 점은 의견이 있는(opinionated) 워크플로우를 유지하면서도 적응성을 갖추는 것이었습니다. LangGraph의 그래프 기반 접근 방식은 완전히 개방적인 방식(LLM에 모든 도구를 제공하고 루프에서 실행하도록 하는)에서부터 완전히 구조화된 결정론적 흐름(Qodo가 시작한 것과 같은)까지 다양한 스펙트럼 어디에서나 에이전트를 구축할 수 있는 유연성을 제공합니다.
LangGraph의 핵심은 에이전트를 위한 상태 머신을 정의할 수 있게 해준다는 점입니다. 워크플로우에서 개별 단계를 나타내는 노드와 이러한 단계 간의 가능한 전환을 정의하는 엣지를 만들 수 있습니다. 각 노드는 컨텍스트 수집, 계획, 코드 생성 또는 검증과 같은 특정 기능을 수행할 수 있으며, 그래프 구조는 이러한 기능이 어떻게 연결되는지 결정합니다.
Qodo의 주요 워크플로우 (출처: Qodo 블로그)
그래프의 연결 밀도는 에이전트가 얼마나 구조화되어 있거나 유연한지에 해당합니다. 연결이 적은 희소 그래프는 각 단계가 정확히 다음 단계로 이어지는 더 엄격하고 예측 가능한 흐름에 해당합니다. 상호 연결이 많은 밀집 그래프는 에이전트에게 경로를 선택할 더 많은 자유를 제공합니다.
미래의 더 강력한 모델은 완전히 개방적인 접근 방식에서 가장 잘 작동할 수 있지만, 현재 최고의 LLM을 사용하더라도 문제를 안내할 때 더 좋은 결과를 얻을 수 있습니다. LangGraph의 유연성 덕분에 새롭고 더 강력한 모델이 출시될 때 흐름이 얼마나 구조화되어 있는지 쉽게 재조정할 수 있습니다.
Qodo의 주요 흐름은 다음과 같은 패턴을 따릅니다:
- 컨텍스트 수집 노드가 코드베이스에서 관련 정보를 수집
- 계획 노드가 작업을 관리 가능한 단계로 분해
- 실행 노드가 실제 코드 생성
- 검증 노드가 모범 사례와 요구 사항에 대해 출력을 확인
검증이 실패하면 에이전트는 처음부터 다시 시작하는 대신 특정 피드백을 통해 실행 단계로 돌아갑니다.
일관된 인터페이스와 재사용 가능한 컴포넌트
복잡한 시스템을 구축할 때 프레임워크는 작업을 간소화해야 합니다. LangGraph의 API는 이를 정확히 제공합니다. Qodo의 주요 워크플로우를 LangGraph로 구현한 간략화된 예는 다음과 같습니다:
from langgraph.graph import StateGraph, END
workflow = StateGraph(name="coding_assistant")
workflow.add_node("context_collector", collect_relevant_context)
workflow.add_node("task_planner", create_execution_plan)
workflow.add_node("task_executor", execute_plan)
workflow.add_node("validator", validate_output)
# 노드 간 흐름 정의
workflow.add_edge("context_collector", "task_planner")
workflow.add_edge("task_planner", "task_executor")
workflow.add_edge("task_executor", "validator")
# 검증 결과에 따른 조건부 라우팅
workflow.add_conditional_edges(
"validator",
should_revise,
{
True: "task_executor", # 수정이 필요한 경우 루프백
False: END # 검증이 통과되면 완료
}
)
graph = workflow.compile()
graph.invoke({"user_input": "build me a game like levelsio"})
이 선언적 접근 방식은 코드를 거의 자체 문서화합니다. 워크플로우 정의는 개념적 다이어그램을 직접 반영하므로 추론하고 수정하기 쉽습니다. 각 노드 함수는 현재 상태를 수신하고 해당 상태에 대한 업데이트를 반환합니다.
또한 노드 기반 아키텍처는 재사용 가능한 컴포넌트를 만드는 데 탁월합니다. 예를 들어, 컨텍스트 수집 노드와 검증 노드는 거의 모든 흐름에서 사용됩니다. 이러한 컴포넌트들은 최소한의 구성으로 다른 그래프에 삽입될 수 있습니다. Qodo는 TDD(테스트 주도 개발)와 같은 전문 흐름을 구축하면서 이러한 재사용 가능한 컴포넌트의 이점을 누리고 있습니다.
Qodo의 TDD 워크플로우 (출처: Qodo 블로그)
내장된 상태 관리
LangGraph의 내장 상태 관리 기능은 추가적인 개발 없이도 강력한 기능을 제공합니다. 에이전트에 지속성을 추가하는 것은 아래와 같이 몇 줄의 코드만으로 가능합니다:
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.postgres import PostgresSaver
workflow = StateGraph(name="coding_assistant")
...
checkpointer = PostgresSaver.from_conn_string(
"postgresql://user:password@localhost:5432/db"
)
checkpointer.setup()
graph = workflow.compile(checkpointer=checkpointer)
이 간단한 추가로 수집된 컨텍스트, 만들어진 계획, 생성된 코드를 포함한 전체 워크플로우 상태가 사용자 정의 인프라를 구축하지 않고도 PostgreSQL 데이터베이스에 유지됩니다. SQLite 및 메모리 내 체크포인터도 동일하게 쉽게 추가할 수 있습니다.
멀티 에이전트 시스템의 주요 이점
멀티 에이전트 시스템은 다음과 같은 여러 가지 이점을 제공합니다:
- 모듈성: 멀티 에이전트 시스템은 모듈식으로 설계되어 있어 각 에이전트가 특정 작업에 특화될 수 있습니다.
- 전문화: 작업이 여러 구성 요소로 나뉘어 해당 기술을 갖춘 에이전트에게 할당됩니다.
- 협업 학습: 여러 에이전트가 함께 작업하면서 서로의 출력을 통해 학습할 수 있습니다.
- 견고성: 하나의 에이전트가 실패하더라도 전체 시스템은 계속 기능할 수 있습니다.
- 의사 결정 향상: 다양한 관점과 접근 방식이 더 나은 결과로 이어질 수 있습니다.
- 병렬 처리: 여러 에이전트가 동시에 다른 작업을 수행할 수 있습니다.
개발 과정에서의 도전과제
물론 LangGraph를 사용하는 것이 완전히 문제가 없는 것은 아닙니다. Qodo는 다음과 같은 몇 가지 도전에 직면했습니다:
- 문서화: 프레임워크가 빠르게 발전하고 있어 문서가 때때로 불완전하거나 오래된 경우가 있습니다. 프로젝트 유지 관리자와 직접 소통해야 할 필요가 있을 수 있습니다.
- 테스트 및 모의(mocking): 결정론적이지 않은 LLM 기반 시스템을 개발할 때 테스트와 모의는 큰 도전입니다. 비교적 간단한 흐름조차도 재현하기 매우 어렵습니다. 특히 IDE와 같은 외부 환경과 상호 작용하는 시스템의 경우 자동화된 테스트에서 시뮬레이션하기 어렵습니다.
개발자를 위한 실용적인 조언
- 점진적으로 복잡성 증가시키기: 처음부터 복잡한 멀티 에이전트 시스템을 구축하려고 하지 마세요. 단일 에이전트로 시작하여 점차 기능을 추가하면서 시스템을 확장하세요.
- 재사용 가능한 컴포넌트 설계하기: 컨텍스트 수집, 계획, 검증과 같은 핵심 기능을 여러 워크플로우에서 재사용할 수 있는 모듈로 설계하세요.
- 상태 설계에 주의하기: 에이전트 간에 공유되는 상태를 신중하게 설계하세요. 충분한 정보를 포함하되, 너무 복잡해지지 않도록 주의하세요.
- 에이전트의 역할 명확히 정의하기: 각 에이전트의 역할과 책임을 명확히 정의하고, 에이전트 간의 상호작용 방식을 설계하세요.
- 인간 참여 지점 고려하기: 완전 자동화가 아닌, 필요한 시점에 인간이 개입할 수 있는 지점을 설계하세요. 특히 법률, 의료와 같은 중요한 결정이 필요한 도메인에서는 더욱 중요합니다.
결론
LangGraph는 AI 에이전트 개발자들에게 유연하고 강력한 프레임워크를 제공합니다. 그래프 기반 아키텍처를 통해 단순한 작업에서부터 복잡한 멀티 에이전트 시스템까지 다양한 AI 솔루션을 구축할 수 있습니다. Definely와 Qodo의 사례에서 볼 수 있듯이, LangGraph는 특히 도메인 지식이 중요하고 워크플로우가 복잡한 분야에서 뛰어난 성능을 발휘합니다.
AI 기술이 계속 발전함에 따라 더 강력한 모델이 등장할 것이고, LangGraph와 같은 프레임워크는 이러한 모델의 능력을 최대한 활용하면서도 안정적이고 예측 가능한 시스템을 구축할 수 있게 해줄 것입니다. 미래의 AI 에이전트 개발은 단일 모델의 성능을 넘어, 여러 특화된 에이전트가 어떻게 효과적으로 협력하여 더 복잡한 문제를 해결할 수 있는지에 초점을 맞출 것입니다.
Comments