LangGraph 멀티에이전트 워크플로 구축: 설계·패턴·RAG·운영까지 (완전 가이드)
LangGraph 멀티에이전트를 활용해 검색·요약·플래닝·검증을 분업화하고, 장애·비용·지연까지 관리하는 프로덕션 워크플로를 단계별로 정리했습니다. 실전 코드, 합의/토너먼트 패턴, RAG 결합, 관찰성·보안·배포 팁까지 한 글에 담았습니다.
LangGraph 멀티에이전트로 계획-실행-관찰 루프를 구현하는 방법을 소개합니다. 노드/에지로 구성한 그래프, 상태 관리, 에러 분기, 합의·토너먼트 패턴, RAG·리랭킹 결합, 로그/메트릭·비용 최적화와 배포 전략을 실전 코드와 함께 다룹니다.
목차
1. 왜 LangGraph 멀티에이전트인가
2. 핵심 개념: 그래프·상태·전이
3. 실전 구축: 단일→멀티에이전트로 확장
4. 품질 강화: 합의·토너먼트·리뷰 패턴
5. RAG 통합과 프롬프트 전략
6. 운영·보안·비용 최적화
7. 결론
1. 왜 LangGraph 멀티에이전트인가
핵심 요약: LangGraph 멀티에이전트는 복잡한 태스크를 그래프 단위로 분해해 신뢰도·속도·확장성을 동시에 확보합니다.
LangGraph 멀티에이전트는 작업을 노드(에이전트/툴)와 에지(전이/조건)로 선언합니다. 복잡한 도메인도 상태 머신처럼 보이기 때문에 실패 지점과 비용을 눈으로 추적하기 쉽습니다.
또한 LangGraph 멀티에이전트는 상태를 중심으로 동작하므로 재시도·롤백·체크포인트를 붙이기가 편합니다. 서버나 배치, 이벤트 구동 등 다양한 환경에서 동일한 정의로 실행이 가능합니다.
마지막으로 LangGraph 멀티에이전트는 검증자(Reviewer)나 리랭커 같은 보정 노드를 추가해 환각을 줄이고, 롱테일 질의에서도 안정적 품질을 유지합니다.
2. 핵심 개념: 그래프·상태·전이
핵심 요약: 상태(dict) 하나로 컨텍스트·중간 산출물·결정 로그를 추적합니다.
2.1 그래프 구성 요소
- 노드(Node): LLM 프롬프트, 함수 호출, 파이썬 로직, 외부 API를 캡슐화.
- 에지(Edge): 다음 노드를 결정하는 조건식. 성공/실패/재시도 분기.
- 상태(State): 쿼리, 증거(citations), 계획(plan), 결과(result), 비용(metrics) 등을 담는 공용 딕셔너리.
2.2 미니멀 상태 설계 예시
State = {
"query": str,
"plan": list, # 단계별 액션
"evidence": list, # RAG 결과
"draft": str, # 중간 요약/초안
"answer": str,
"metrics": {"tokens_in":0, "tokens_out":0, "latency_ms":0},
"errors": []
}
2.3 전이 규칙
- 성공 전이: 다음 태스크로 이동.
- 실패 전이: 재시도 횟수(retry<=3)를 초과하면 회수 노드(rollback)로 이동.
- 보정 전이: Reviewer 점수 < 임계값이면 다시 검색/수정으로 회귀.
3. 실전 구축: 단일→멀티에이전트로 확장
핵심 요약: 먼저 단일 그래프를 작게 만들고, 역할을 분리하며 지표를 붙입니다.
3.1 의존성
pip install langgraph langchain pydantic
3.2 기본 그래프 뼈대
from langgraph.graph import StateGraph, START, END
state = {"query":"", "evidence":[], "answer":"", "errors":[]} # 초기 상태
# --- 노드 정의 ---
def plan_node(s):
# 질의 의도 분석 및 계획 생성
s["plan"] = ["search", "synthesize", "review"]
return s
def search_node(s):
# 여기에 RAG 검색 로직 연결(의사 코드)
s["evidence"] = ["doc1", "doc2"]
return s
def synth_node(s):
s["draft"] = "초안 생성"
return s
def review_node(s):
# 간단한 규칙 검증 예시
ok = len(s.get("evidence", [])) > 0
if not ok:
s["errors"].append("no_evidence")
return s
def finalize_node(s):
s["answer"] = f"근거 {len(s['evidence'])}개 기반 최종 답변"
return s
# --- 그래프 연결 ---
g = StateGraph(dict)
g.add_node("plan", plan_node)
g.add_node("search", search_node)
g.add_node("synthesize", synth_node)
g.add_node("review", review_node)
g.add_node("finalize", finalize_node)
g.add_edge(START, "plan")
g.add_edge("plan", "search")
# 조건부 전이
from langgraph.graph import ConditionalEdge
def has_evidence(s):
return "synthesize" if s.get("evidence") else "search"
g.add_conditional_edges("search", has_evidence)
g.add_edge("synthesize", "review")
g.add_edge("review", "finalize")
g.add_edge("finalize", END)
app = g.compile()
3.3 멀티에이전트로 확장
- 리서처: 쿼리 확장·하이브리드 검색.
- 라이터: 초안 생성·요약.
- 리뷰어: 사실성·포맷 검증, 실패 시 수정 지시.
- 플래너: 태스크 순서·병렬화 판단.
에이전트마다 시스템 프롬프트와 가드레일을 분리해 관리하면, 한 역할의 변경이 다른 역할에 미치는 영향을 줄일 수 있습니다.
4. 품질 강화: 합의·토너먼트·리뷰 패턴
핵심 요약: 후보 다양화 → 점수화 → 합의/선정 3단계로 품질을 끌어올립니다.
4.1 합의(Consensus) 패턴
여러 라이터가 독립적으로 답안을 만들고, 리뷰어가 **랭크 융합(RRF/Borda)**로 최종안을 고릅니다. 품질이 중요한 법무/정책 도메인에 적합합니다.
4.2 토너먼트(Tournament) 패턴
빠른 1차 스크리닝 후 상위 n개만 정밀 리뷰. 비용을 통제하면서도 평균 품질을 높일 수 있습니다.
4.3 리뷰(Reviewer) 패턴
리뷰어는 근거 인용 여부·사실성·금칙어·**포맷 준수(JSON/마크업)**를 체크합니다. 점수가 임계값 미만이면 수정 프롬프트를 생성해 라이터로 되돌립니다.
4.4 예시: 간단한 합의 노드
def consensus_node(s):
candidates = s.get("candidates", []) # 여러 라이터의 초안
# 아주 단순한 길이 점수(예시): 실제론 리랭커/평가 LLM 사용
ranked = sorted(candidates, key=len, reverse=True)
s["draft"] = ranked[0]
return s
5. RAG 통합과 프롬프트 전략
핵심 요약: RAG는 리콜, 프롬프트는 통제. 두 축을 함께 튜닝합니다.
5.1 검색·리랭킹
- 하이브리드 검색: BM25 + 벡터 ANN. 제품/버전/팀 필터를 메타데이터로 부여.
- 리랭킹: 상위 k=50 → k'=5로 Cross-Encoder 재점수화.
- 캐시: 검색 후보와 리랭킹 결과를 분리 캐시해 피크 시간 안정화.
5.2 프롬프트 포맷
- 근거 고정: "다음 출처만 사용하고 인용을 남겨라"를 시스템 규칙으로.
- 출력 스펙: JSON Schema로 필수 필드(답변, 인용, 신뢰도) 강제.
- 거절 템플릿: 근거 부족 시 정중히 거절하는 문구를 표준화.
5.3 LangGraph 멀티에이전트에서의 컨텍스트 패킹
- 노드간 전달 데이터는 최소화하고, 필요한 출처·요약만 유지.
- 긴 컨텍스트는 세션 요약과 KV 캐시로 압축.
6. 운영·보안·비용 최적화
핵심 요약: 관찰성(로그/메트릭)과 가드레일이 없으면 프로덕션 품질을 유지할 수 없습니다.
6.1 관찰성
- 이벤트 로그: session_id, node, tool, tokens_in/out, latency_ms, cost.
- 대시보드: 성공률, p95 지연, 캐시 히트율, 검색 공백률, 리뷰 실패율.
- 리플레이 테스트: 과거 세션을 재실행해 프롬프트/모델 변경 영향 확인.
6.2 보안·프롬프트 주입 방어
- 소스 화이트리스트와 메타데이터 필터로 RAG 입력을 제한.
- 함수 호출은 JSON Schema 검증·레이트리밋·서킷 브레이커 적용.
- HITL(승인): 비용·권한이 큰 액션은 휴먼 승인 절차를 삽입.
6.3 비용 최적화
- 프롬프트/결과/임베딩/검색 캐시를 레이어별로 도입.
- 스펙큘러티브 디코딩과 배칭으로 토큰/초 향상.
- A/B로 모델·프롬프트 변경의 비용 대비 효과를 검증.
결론
핵심 요약: LangGraph 멀티에이전트 성공의 열쇠는 작은 그래프에서 시작해 측정·학습·확장하는 데 있습니다.
LangGraph 멀티에이전트를 도입하면 팀은 복잡한 태스크를 역할·상태·전이로 분해해 반복 가능한 운영 체계를 만들 수 있습니다. 핵심은 품질 게이트(리뷰·합의), 관찰성(로그/메트릭), 보안(가드레일)을 표준화하는 것입니다. 작게 시작해 성공 케이스를 쌓고, 그래프를 병렬화·재사용하면서 확장해 보세요. LangGraph 멀티에이전트는 제품의 신뢰도와 개발 속도를 동시에 끌어올릴 수 있습니다.
함께 보면 좋은 글
AI 에이전트 실전 구축 가이드: 2025 워크플로우·도구·운영 전략
AI 에이전트 실전 구축 가이드: 2025 워크플로우·도구·운영 전략AI 에이전트는 2025년 현재 가장 뜨거운 기술 키워드 중 하나입니다. 이 글은 AI 에이전트의 개념부터 설계 원칙, 데이터·도구·메모
tapyst.com
프롬프트 주입 방어 완전 가이드: 안전한 RAG·툴 호출을 위한 4계층 보안 아키텍처
프롬프트 주입 방어 완전 가이드: 안전한 RAG·툴 호출을 위한 4계층 보안 아키텍처 프롬프트 주입 방어는 2025년 AI 제품 개발의 필수 역량입니다. 이 글은 프롬프트 주입 방어를 중심으로 데이터·
tapyst.com
'개발 · IT > IT 트렌드 & 생산성' 카테고리의 다른 글
PostgreSQL 쿼리 최적화·오류 트러블슈팅 완전 가이드: EXPLAIN/인덱스/VACUUM/락/데드락 (0) | 2025.09.05 |
---|---|
OpenSearch/Elasticsearch 쿼리 오류 완전 가이드: DSL 사용법·매핑 함정·페이징·집계·성능 튜닝 (0) | 2025.09.02 |
vLLM 서빙 완전 가이드: FastAPI·Kubernetes·RAG 결합으로 초저비용 고속 배포 (3) | 2025.08.29 |
LLM 캐시 최적화 완전 정복: KV 캐시·프롬프트 캐시·임베딩 캐시로 지연·비용 50% 줄이기 (4) | 2025.08.28 |
프롬프트 주입 방어 완전 가이드: 안전한 RAG·툴 호출을 위한 4계층 보안 아키텍처 (3) | 2025.08.27 |