์ ์กฐ๊ณต์ Agentic AI ์์คํ
์์ ์ฌ๋ฌ Unit-Agent๋ค์ด ๋์์ ์กด์ฌํ ๋,
Task Routing ๋ฐ ํ์
์ ๋ต์ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ํจ์จ์ ์ธ ๋ฌธ์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ง ์ค๋ช
ํ์์ค.
LangGraph ๋๋ LangChain ๊ตฌ์กฐ๋ฅผ ์๋ก ๋ค์ด,
Super-Agent๊ฐ Unit-Agent๋ค์ ์คํ ์์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ๋ ๋ก์ง์ ๊ธฐ์ ํ์์ค.
โ ๊ฐ์ — Multi-Agent ์์คํ ์ ํ์์ฑ
์ ์กฐ ํ๊ฒฝ์ ๋ฐ์ดํฐ ์ ํ(์ผ์·๋ฌธ์·ํ์ง์งํ·์ด๋ฏธ์ง) ์ด ๋ค์ํ๊ณ ,
๊ณผ์
๋ณตํฉ์ฑ(KPI ๊ณ์ฐ → ์์ธ๋ถ์ → ์กฐ์น์ ์ ์) ์ด ๋๊ธฐ ๋๋ฌธ์
๋จ์ผ LLM์ผ๋ก๋ ์ ํ์ฑ๊ณผ ์ถ์ ์ฑ์ด ๋จ์ด์ง๋ค.
๋ฐ๋ผ์ “์ญํ ๋ณ ๋ถ์
ํ๋ ๋ค์ค ์์ด์ ํธ ๊ตฌ์กฐ(Multi-Agent System)” ๋ก ์ ํํด์ผ ํ๋ค.
์ด๋ ์ค์ฌ ์ญํ ์ Super-Agent๊ฐ ๋ด๋นํ๋ฉฐ,
Unit-Agent๋ “์ ๋ฌธํ๋ ๋๊ตฌ ํธ์ถ”์ ์ํํ๋ ํ์ ๊ตฌ์ฑ์์๋ค.
โก ์ฃผ์ ๊ตฌ์ฑ์์ ์ ์
| Super-Agent (Planner/Router) | ์ฌ์ฉ์์ ์์ฒญ์ ๋ถ์ํ๊ณ , ํ์ํ ํ์ Agent๋ค์ ํธ์ถํ๋ ์งํ์ | “์ด๋ฒ ์ฃผ ํ์ง ๋ฆฌํฌํธ ์์ฑ” → DataAgent, KPIAgent, RAGAgent ์ ํธ์ถ |
| Unit-Agent | ํน์ ๋๊ตฌ·๋ชจ๋ธ·DB๋ฅผ ์กฐ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ | DataQuery, KPI, RootCause, RAG, Chart, Report |
| Memory / Context Store | Agent ๊ฐ intermediate ๊ฒฐ๊ณผ ๊ณต์ | LangGraph Memory, Redis, PostgreSQL |
| Execution Engine | ๋ณ๋ ฌ/๋์ ์คํ ๋ฐ ์ฅ์ ๋ณต๊ตฌ ์ ์ด | LangGraph, Temporal, Argo |
โข Routing ์ ๋ต ์ ํ
| Static Routing | ๊ณ ์ ๋ ํ๋ก์ฐ (์: Data→KPI→RAG→Report) | ์์ ์ฑ, ๋จ์ํจ | ์ ์ฐ์ฑ ๋ฎ์ |
| Dynamic Routing | ์ ๋ ฅ ๋ฐ์ดํฐ·ํ๋ฅ ๊ฐ·์๋(Intent)์ ๋ฐ๋ผ ์คํ ๊ฒฝ๋ก๋ฅผ ์ค์๊ฐ ๊ฒฐ์ | ์์จ์ฑ, ํจ์จ์ ์ฒ๋ฆฌ | ์ค๊ณ ๋ณต์ก |
| Hybrid Routing | ์ฃผ์ ๊ฒฝ๋ก๋ ๊ณ ์ , ์ธ๋ถ ์ ํ์ ๋์ | ์์ ์ฑ๊ณผ ์ ์ฐ์ฑ์ ๊ท ํ | ๊ด๋ฆฌ ๋น์ฉ ์ค๊ฐ |
โฃ LangGraph ๊ธฐ๋ฐ ์ค๊ณ ์์
nodes:
- intent_parser
- data_agent
- anomaly_agent
- rootcause_agent
- rag_agent
- report_agent
edges:
- intent_parser -> data_agent
- data_agent -> anomaly_agent
- anomaly_agent -> rootcause_agent
- rootcause_agent -> rag_agent [if confidence < 0.9]
- rag_agent -> report_agent
- Super-Agent ๋ก์ง (Python ์์ฌ์ฝ๋)
if intent == "weekly_quality_report":
run_parallel([data_agent, anomaly_agent])
result = rootcause_agent.run(data, anomalies)
if result.confidence < 0.9:
rag_context = rag_agent.retrieve(result.keywords)
result = rootcause_agent.refine(rag_context)
report = report_agent.generate(result)
โค ์ค๋ฌด ์๋๋ฆฌ์ค ์์
- ์ํฉ: “๋ผ์ธ2 ์์จ ๊ธ๋ฝ ๋ณด๊ณ ์ ์์ฑ ์์ฒญ”
- Super-Agent๊ฐ intent=‘report_generation’ ๊ฐ์ง
- DataAgent์ AnomalyAgent๋ฅผ ๋ณ๋ ฌ ์คํ (๋ฐ์ดํฐ ์ง๊ณ + ์ด์ํ์ง)
- RootCauseAgent๊ฐ SHAP ๊ธฐ๋ฐ ์์ธ ๋ถ์ ์ํ (์จ๋, ์๋ ์ํฅ๋ ์ฐ์ถ)
- Confidence=0.82 → RAGAgent ํธ์ถํ์ฌ SOP ๊ทผ๊ฑฐ ํ๋ณด
- ReportAgent๊ฐ ์ต์ข ๋ณด๊ณ ์ ์์ฑ
- ๊ฒฐ๊ณผ Groundedness=0.97, CitationAccuracy=0.95 → ์น์ธ ํต๊ณผ
โฅ ์ค๋ฌด์ ํจ๊ณผ
| ๋ถ์์๊ฐ | 2~3์๊ฐ | 10๋ถ |
| ์ ํ๋ | ๋จ์ ํต๊ณ ๊ธฐ๋ฐ | ์ธ์ฉ ๊ทผ๊ฑฐ ํฌํจ |
| ์ ์ฐ์ฑ | ์๋ | ๋์ ๋ผ์ฐํ |
| ์ฅ์ ๋์ | ์๋ ์ฌ์๋ | ์๋ ํด๋ฐฑ ๋ฐ ์ฌ์คํ |
โฆ ํ๊ฐ ํฌ์ธํธ
- LangGraph ๋ ธ๋ ๊ตฌ์กฐ์ ์กฐ๊ฑด ๋ถ๊ธฐ๋ฅผ ๋ช ํํ ๊ธฐ์ ํ๋๊ฐ
- ๋ณ๋ ฌ ์ฒ๋ฆฌ(parallel)์ Confidence ๊ธฐ๋ฐ ๋ถ๊ธฐ(if) ๋ก์ง์ ์ ์ํ๋๊ฐ
- Super-Agent์ ์์ฌ๊ฒฐ์ ๋ฉ์ปค๋์ฆ์ ๋ช ํํ ์ค๋ช ํ๋๊ฐ