- Published on
AI 에이전트 프레임워크 2026 심층 분석 - LangChain · LangGraph · LlamaIndex · CrewAI · AutoGen · PydanticAI · Mastra · DSPy · MCP 완벽 가이드
- Authors

- Name
- Youngju Kim
- @fjvbn20031
들어가며 — 2026년 5월, "에이전트 프레임워크"는 통합과 분화의 끝자락에 있다
2023년 말부터 2024년 초까지의 광풍이 지나간 자리에, 2026년 5월 현재 AI 에이전트 프레임워크 시장은 3개의 큰 흐름으로 정렬되고 있다. 첫째, LangChain은 끊임없는 비판(과한 추상화, 잦은 breaking change, 디버깅 난이도)에도 불구하고 점유율 1위를 유지한다. 둘째, **Anthropic이 제안한 MCP(Model Context Protocol)**가 사실상 도구 표준으로 자리잡으면서 프레임워크별 락인이 약해지고 있다. 셋째, PydanticAI와 Mastra처럼 "타입 안전성"을 전면에 내세운 신흥 프레임워크가 엔터프라이즈에서 LangChain의 자리를 잠식하고 있다.
이 글은 마케팅 비교표가 아니라 "지금 프로덕션에서 무엇이 어디에 들어가는가"를 정직하게 본다. LangGraph의 StateGraph, LlamaIndex의 query engine, CrewAI의 Crew/Task/Agent, PydanticAI의 Agent 데코레이터, Mastra의 TypeScript 에이전트, DSPy의 컴파일러, Instructor의 구조화 출력, OpenAI Agents SDK와 Vercel AI SDK 4까지 실제 API 형태와 함께 비교한다.
에이전트 프레임워크 2026 — 6개 레이어로 분해하기
먼저 큰 그림이다. 2026년 표준 에이전트 스택은 다음 6개 레이어로 나뉜다.
- 오케스트레이션(orchestration): 에이전트 루프, 도구 호출, 상태 관리
- 구조화 출력(structured output): Pydantic, Zod, JSON Schema, constrained decoding
- RAG/지식(knowledge): 임베딩, 벡터 검색, GraphRAG, 컨텍스트 압축
- 도구 표준(tool standard): MCP, OpenAPI function calling, A2A
- 메모리(memory): 단기 컨텍스트, 장기 에피소딕, 사용자별 상태
- 관측성과 평가(observability and eval): trace, run replay, eval suite
각 레이어를 한 두 도구가 담당하면 됐던 시대는 끝났다. 지금은 레이어 안에서도 "LangChain 진영", "Python-native 진영", "TypeScript 진영"이 갈라진다. 아래부터 한 레이어씩 본다.
LangChain — 비판에도 불구하고 점유율 1위인 이유
2025년 한 해 동안 X(Twitter)와 Hacker News에서 LangChain은 거의 매주 "왜 이걸 쓰지 말아야 하는가" 글이 올라왔다. 그럼에도 2026년 5월 PyPI 다운로드 통계에서 LangChain 계열(langchain, langchain-core, langchain-community)은 여전히 월간 6천만 다운로드를 넘는다. 이유는 단순하다. 이미 쓴 코드가 너무 많고, 통합된 LLM/벡터DB/도구 개수가 압도적이다.
핵심은 **LangChain Expression Language(LCEL)**다. 파이프 연산자로 체인을 조립하고, Runnable 인터페이스로 동기/비동기/스트리밍을 한꺼번에 처리한다. v0.3 이후 안정화되어 breaking change가 줄었다.
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
llm = ChatAnthropic(model="claude-opus-4-5-20250929")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a senior staff engineer reviewing code."),
("human", "Review this diff and return concerns:\n\n{diff}"),
])
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"diff": "<the code diff>"})
위 코드의 {diff}는 LangChain의 프롬프트 템플릿 placeholder다. 같은 패턴으로 {question} {context} 같은 변수가 chain 전체에 전파된다. LangChain의 진짜 가치는 이 placeholder 통일과, with_structured_output, bind_tools, with_fallbacks 같은 메서드의 일관성이다.
LangGraph — LangChain이 인정한 "체인의 한계"
LCEL은 선형 체인엔 좋지만, 에이전트의 본질인 "조건 분기, 루프, 인간 개입"엔 부족하다. LangGraph는 이 문제를 풀기 위해 LangChain 팀이 직접 만든 상태 그래프 라이브러리다. 2025년 후반 LangGraph는 LangChain에서 가장 빠르게 성장한 패키지가 됐다.
핵심은 StateGraph다. 노드는 함수, 엣지는 조건이고, 상태는 reducer로 누적된다. ReAct 패턴, 멀티 에이전트 핸드오프, 사람 검토(human-in-the-loop) 체크포인트가 모두 그래프 위에서 자연스럽게 표현된다.
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class AgentState(TypedDict):
messages: Annotated[list, add_messages]
next: str
def planner(state: AgentState) -> dict:
return {"next": "researcher", "messages": [{"role": "assistant", "content": "plan"}]}
def researcher(state: AgentState) -> dict:
return {"next": END, "messages": [{"role": "assistant", "content": "found"}]}
graph = StateGraph(AgentState)
graph.add_node("planner", planner)
graph.add_node("researcher", researcher)
graph.add_edge(START, "planner")
graph.add_conditional_edges("planner", lambda s: s["next"])
app = graph.compile(checkpointer=...)
LangGraph의 강점은 **체크포인터(checkpointer)**다. 실행 중 상태를 SQLite/Postgres/Redis에 저장하고, 사람 승인 후 재개하거나 분기점에서 시간 여행(time-travel) 디버깅을 한다. 프로덕션 에이전트의 가장 큰 문제(중간에 멈춰서 사람 확인 받기)를 이 패턴이 해결한다.
LlamaIndex — RAG 깊이로 차별화
LlamaIndex(2022년 GPT Index로 시작)는 LangChain과 같은 시기에 출발했지만, 검색 증강 생성(RAG)에 집중하면서 다른 길을 갔다. 2026년 현재 LlamaIndex는 "에이전트도 되지만 RAG가 본진"이다. 70가지 이상의 로더, 다층 인덱스, GraphRAG, multi-query routing, MetaGPT 스타일의 workflows까지 한 패키지에 들어있다.
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.llms.anthropic import Anthropic
documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents)
retriever = VectorIndexRetriever(index=index, similarity_top_k=10)
query_engine = RetrieverQueryEngine(
retriever=retriever,
llm=Anthropic(model="claude-opus-4-5-20250929"),
)
response = query_engine.query("What is the on-call rotation policy?")
print(response.response)
for node in response.source_nodes:
print(node.metadata["file_path"], node.score)
2025년 후반부터 LlamaIndex는 Workflow라는 이벤트 기반 추상화를 밀고 있다. LangGraph의 그래프와 유사하지만 이벤트 디스패치 모델을 쓴다. GraphRAG(엔티티 그래프 + 임베딩 결합) 구현이 가장 매끄럽다는 평가가 많다.
CrewAI — 역할 기반 멀티 에이전트의 대표주자
CrewAI는 2024년 João Moura가 시작한 프레임워크로, **"에이전트는 역할을 가진 동료처럼 협업해야 한다"**는 모델을 코드로 옮긴다. Agent, Task, Crew, Process라는 4개의 1급 개념만 알면 된다. LangChain보다 진입장벽이 낮아서 비개발자 PoC에 자주 쓰인다.
from crewai import Agent, Task, Crew, Process
researcher = Agent(
role="Senior Researcher",
goal="Find the latest on Claude Opus 4.5 benchmarks",
backstory="A meticulous AI researcher who cross-checks every source.",
verbose=True,
)
writer = Agent(
role="Technical Writer",
goal="Turn research into a 500-word brief",
backstory="Writes for engineering leaders. No fluff.",
verbose=True,
)
task1 = Task(description="Collect 5 sources", agent=researcher, expected_output="bullet list")
task2 = Task(description="Write the brief", agent=writer, expected_output="markdown")
crew = Crew(agents=[researcher, writer], tasks=[task1, task2], process=Process.sequential)
result = crew.kickoff()
CrewAI 1.0(2025년 4월)부터는 Flow라는 그래프 기반 API가 추가되어 LangGraph와 비슷한 분기 패턴도 가능해졌다. 단점은 디버깅이다 — 에이전트의 자유도가 높아서 잘못 가면 산으로 간다. 평가/관측은 LangSmith 또는 자체 CrewAI Plus 클라우드에 의존한다.
AutoGen — Microsoft의 대화형 멀티 에이전트
AutoGen은 Microsoft Research가 2023년 공개한 멀티 에이전트 대화 프레임워크다. 2025년 0.4 릴리스에서 완전히 재설계됐다. 핵심 추상화는 **"에이전트 간 대화"**로, GroupChat과 GroupChatManager가 라운드를 조율한다.
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient
model_client = OpenAIChatCompletionClient(model="gpt-4o")
coder = AssistantAgent("coder", model_client=model_client,
system_message="You write Python. Output a single function.")
reviewer = AssistantAgent("reviewer", model_client=model_client,
system_message="You review code. Approve or reject with reasons.")
team = RoundRobinGroupChat([coder, reviewer], max_turns=4)
result = await team.run(task="Write a function that parses ISO 8601 dates.")
AutoGen Studio는 시각적으로 에이전트를 구성하고 실행 결과를 즉시 확인하는 GUI다. 학계와 연구 PoC에서 점유율이 높다. 다만 프로덕션 운영(스레드 영속화, 백그라운드 실행, retry 정책)은 아직 LangGraph보다 약하다는 평이 많다.
PydanticAI — 타입 안전 에이전트의 신흥 강자
PydanticAI는 Pydantic 팀(Samuel Colvin 등)이 2024년 말에 공개한 에이전트 SDK다. 슬로건은 "FastAPI-feel for AI agents". Pydantic의 데이터 검증을 그대로 에이전트의 도구 시그니처와 출력 스키마에 적용한다. 엔터프라이즈에서 LangChain 대안으로 가장 빠르게 채택되는 중이다.
from pydantic import BaseModel
from pydantic_ai import Agent, RunContext
class WeatherResult(BaseModel):
city: str
temp_c: float
condition: str
agent = Agent(
"anthropic:claude-opus-4-5-20250929",
result_type=WeatherResult,
system_prompt="Return current weather as structured data.",
)
@agent.tool
async def get_weather(ctx: RunContext, city: str) -> dict:
return {"temp_c": 18.4, "condition": "cloudy"}
result = await agent.run("What's the weather in Seoul?")
print(result.data.city, result.data.temp_c)
PydanticAI의 강점은 의존성 주입과 타입 추론이다. RunContext로 DB/HTTP 클라이언트를 주입하고, @agent.tool 데코레이터는 함수 시그니처에서 JSON Schema를 자동 생성한다. 관측은 Pydantic Logfire와 1급 통합되어 있고, OpenTelemetry로도 내보낸다.
Mastra — TypeScript 진영의 에이전트 프레임워크
Mastra는 2024년 Shane Thomas와 동료들이 시작한 TypeScript-first 에이전트 프레임워크다. Vercel AI SDK 위에 얹어서 동작하며, Cloudflare Workers/Vercel Edge/Node.js에서 모두 돌아간다. JavaScript 풀스택 진영(특히 Next.js 채용 기업)에서 빠르게 점유율을 늘리고 있다.
import { Mastra } from "@mastra/core";
import { Agent } from "@mastra/core/agent";
import { anthropic } from "@ai-sdk/anthropic";
import { z } from "zod";
const supportAgent = new Agent({
name: "support",
instructions: "You handle customer support tickets concisely.",
model: anthropic("claude-opus-4-5-20250929"),
tools: {
lookupOrder: {
description: "Look up an order by id",
parameters: z.object({ orderId: z.string() }),
execute: async ({ orderId }) => ({ orderId, status: "shipped" }),
},
},
});
const mastra = new Mastra({ agents: { support: supportAgent } });
const result = await mastra.getAgent("support").generate("Where is order 1234?");
Mastra는 워크플로(LangGraph 유사), RAG, 평가, 메모리까지 한 패키지에 묶었다. 2026년 들어 Vercel과의 공식 협업이 깊어지면서 Next.js App Router의 server actions와 결합된 패턴이 표준으로 자리잡고 있다.
agno · smolagents · Cog · Letta — 가벼움과 특수성의 진영
- agno(구 Phidata): "fast agent framework"를 표방한다. LangChain 대비 5배 가벼운 런타임 오버헤드를 자랑한다. 멀티모달, 메모리, 팀 에이전트가 1급 개념이다.
- smolagents: HuggingFace가 2024년 말 공개한 미니멀 프레임워크. "에이전트는 코드 실행 도구를 가진 LLM"이라는 정의 하나로 출발한다.
CodeAgent는 Python 코드를 직접 생성·실행한다. - Cog(Replicate): 에이전트 프레임워크는 아니지만, 에이전트를 컨테이너로 패키징할 때 표준에 가깝다.
cog.yaml한 줄로 GPU 모델/에이전트를 OCI 이미지로 만든다. - Letta(구 MemGPT): UC Berkeley에서 시작된 메모리 중심 에이전트. 핵심은 "운영체제처럼 컨텍스트를 페이지 인/아웃 한다"는 패러다임. 장기 대화 봇에서 점유율이 가장 높다.
DSPy — Stanford가 만든 "프롬프트 프로그래밍" 패러다임
DSPy는 Omar Khattab(Stanford)이 주도한 라이브러리로, 프롬프트를 직접 쓰지 않고 시그니처와 모듈로 선언한 뒤 컴파일러가 자동 최적화하는 모델을 제안한다. 2026년 현재 학계와 일부 헤지펀드/연구실에서 적극 채택 중이다.
import dspy
lm = dspy.LM("anthropic/claude-opus-4-5-20250929")
dspy.configure(lm=lm)
class RAG(dspy.Module):
def __init__(self):
super().__init__()
self.retrieve = dspy.Retrieve(k=5)
self.generate = dspy.ChainOfThought("context, question -> answer")
def forward(self, question):
ctx = self.retrieve(question).passages
return self.generate(context=ctx, question=question)
rag = RAG()
optimized = dspy.MIPROv2(metric=dspy.evaluate.answer_exact_match).compile(rag, trainset=train)
핵심 통찰은 "프롬프트 엔지니어링은 코드 생성으로 대체된다"는 것이다. Few-shot 예제 선택, 지시문 작성, chain-of-thought 형태까지 컴파일러(MIPROv2, BootstrapFinetune 등)가 학습 데이터로 자동 튜닝한다.
Instructor와 Outlines — 구조화 출력의 양대 산맥
LLM이 매번 깨끗한 JSON을 뱉지 않는다는 문제는 2023년부터 알려져 있었다. 2026년 현재 두 가지 해법이 표준이다.
- Instructor(jxnl/instructor): Pydantic 모델을 함수 시그니처로 넘기면 LLM이 그 형태로 답한다. retry와 validation이 1급. OpenAI/Anthropic/Mistral/Gemini를 모두 같은 API로 쓴다.
- Outlines: 정규표현식/JSON Schema/문법(grammar)으로 토큰 단위 제약 디코딩을 한다. 로컬 모델(vLLM, Transformers)에서 100% 스키마 준수를 보장한다.
import instructor
from anthropic import Anthropic
from pydantic import BaseModel
class Ticket(BaseModel):
title: str
severity: str
components: list[str]
client = instructor.from_anthropic(Anthropic())
ticket = client.messages.create(
model="claude-opus-4-5-20250929",
response_model=Ticket,
max_tokens=1024,
messages=[{"role": "user", "content": "Login broken on iOS Safari only, P0."}],
)
print(ticket.severity, ticket.components)
Instructor는 클라우드 API 위주, Outlines는 로컬 추론 위주로 영역이 분명히 갈린다. 두 라이브러리 모두 Marvin이나 Guardrails AI보다 의존성이 가볍고 디버깅이 쉽다는 평이다.
OpenAI Agents SDK · Vercel AI SDK 4 · Anthropic SDK — 벤더 SDK의 진화
벤더 SDK도 더 이상 "단순 LLM 호출 라이브러리"가 아니다.
- OpenAI Agents SDK(2024년 말 정식 출시):
Agent,Runner,handoffs,guardrails가 1급 개념. Swarm(2024 실험판)의 정식 후속작. - Vercel AI SDK 4:
streamText,generateObject,tool헬퍼로 React Server Component 스트리밍과 도구 호출을 한 줄로 처리. - Anthropic Python/TS SDK:
messages.create에tools와tool_choice파라미터로 도구 호출, 추가로computer_use도구 타입을 지원.
import { streamText, tool } from "ai";
import { anthropic } from "@ai-sdk/anthropic";
import { z } from "zod";
const result = streamText({
model: anthropic("claude-opus-4-5-20250929"),
prompt: "Summarize today's PR list.",
tools: {
listPRs: tool({
description: "List open PRs",
parameters: z.object({ repo: z.string() }),
execute: async ({ repo }) => ({ prs: [] }),
}),
},
maxSteps: 5,
});
for await (const chunk of result.textStream) process.stdout.write(chunk);
Bedrock Agents(AWS), Google Gemini Function Calling, Cloudflare AI Agents까지 추가하면 2026년 모든 클라우드 벤더가 에이전트 SDK를 1급으로 제공한다.
MCP — Anthropic이 만든 도구 표준, 2026년 사실상의 de-facto
Model Context Protocol(MCP)은 Anthropic이 2024년 말 공개한 JSON-RPC 기반 도구/리소스 프로토콜이다. 1년 반 만에 LangChain, LlamaIndex, OpenAI Agents, Vercel AI SDK, Mastra가 모두 MCP 클라이언트를 1급으로 지원한다. 2026년 5월 현재 공식 레지스트리에 등록된 MCP 서버는 800개를 넘는다.
from mcp.server import Server
from mcp.server.stdio import stdio_server
app = Server("calendar-server")
@app.list_tools()
async def list_tools():
return [{
"name": "create_event",
"description": "Create a calendar event",
"inputSchema": {"type": "object", "properties": {"title": {"type": "string"}}},
}]
@app.call_tool()
async def call_tool(name, arguments):
if name == "create_event":
return [{"type": "text", "text": f"created: {arguments['title']}"}]
async with stdio_server() as (r, w):
await app.run(r, w, app.create_initialization_options())
MCP의 핵심 통찰은 **"도구는 서버, 에이전트는 클라이언트"**라는 분리다. Slack, GitHub, Notion, Postgres, Stripe 같은 회사들이 공식 MCP 서버를 제공하면, 어느 에이전트 프레임워크든 같은 도구 풀에 접근한다. 락인이 깨진다.
A2A — Google이 제안한 Agent-to-Agent 프로토콜
A2A(Agent2Agent)는 2025년 초 Google이 공개한 에이전트 간 협업 표준이다. MCP가 "에이전트와 도구 사이"라면 A2A는 "에이전트와 에이전트 사이"의 메시지 포맷, 능력 광고(capability advertisement), 작업 핸드오프를 표준화한다.
현재 채택은 MCP보다 느리지만, Salesforce, ServiceNow, Atlassian 같은 SaaS 벤더가 멀티 에이전트 메시 구축을 위해 A2A에 베팅하고 있다. 2026년 5월 기준 LangChain과 Vertex AI Agents가 A2A 어댑터를 제공한다.
{
"name": "research-agent",
"version": "1.0.0",
"capabilities": [
{ "name": "web.search", "description": "Search the web" },
{ "name": "doc.summarize", "description": "Summarize a document" }
],
"endpoints": { "rpc": "https://agent.example.com/a2a" }
}
위는 A2A 능력 카드(capability card)의 예시다. 다른 에이전트는 이 카드를 보고 어떤 작업을 위임할지 결정한다.
도구 호출 표준 — OpenAI function calling, Anthropic tool use, JSON Schema
벤더별 도구 호출 포맷은 여전히 미세하게 다르다. 2026년 시점에서 핵심 표준은 다음과 같다.
- OpenAI Chat Completions function calling:
tools배열에 JSON Schema 등록 후tool_calls로 반환. - Anthropic tool use:
tools배열 +tool_usecontent block.input_schema는 JSON Schema와 호환. - Google Gemini Function Calling:
FunctionDeclaration객체로 등록. Schema는 OpenAPI 3.0 부분 집합. - MCP:
inputSchema는 JSON Schema. 위 셋과 호환 가능한 형태로 변환된다.
LangChain, LlamaIndex, PydanticAI, Mastra 같은 프레임워크는 이 차이를 어댑터로 흡수한다. 직접 SDK를 쓸 때만 차이를 인지하면 된다.
guidance · BAML · griptape · Agency Swarm — 특수 영역의 강자들
- guidance(Microsoft): 토큰 단위 제약 디코딩을 코드처럼 표현. JSON Schema보다 더 정밀한 제어가 가능하지만 학습 곡선이 있다.
- BAML(Boundary ML): 프롬프트와 함수를 별도 .baml 파일에 선언하고 TypeScript/Python 코드를 자동 생성. "프롬프트를 코드처럼" 버전 관리하는 패턴.
- griptape: 엔터프라이즈 RAG/에이전트. Drivers, Memory, Rulesets 같은 추상화가 명확하고, 보안/거버넌스 메타데이터가 1급.
- Agency Swarm(VRSEN): OpenAI Assistants API 위에 멀티 에이전트 통신을 얹는다. 사내 자동화에서 빠르게 PoC하기 좋다.
에이전트 평가 — LangSmith, Phoenix, Langfuse, Galileo, Patronus, DeepEval
에이전트는 "실행 트레이스"가 곧 디버깅 단위다. 2026년 시장은 5개 그룹으로 나뉜다.
- LangSmith(LangChain Inc.): LangChain 진영의 표준. trace, dataset, evaluator, online eval 모두 1급.
- Arize AI Phoenix: 오픈소스 OpenTelemetry 기반. 자체 호스팅이 쉽고, OpenInference 스펙으로 모든 프레임워크를 지원.
- Langfuse: 오픈소스 + 클라우드. self-hosted가 간단하고, 가격이 LangSmith보다 친화적이라 스타트업이 선호.
- Galileo, Patronus AI, Confident AI DeepEval: 평가(metric, hallucination detection, regression) 중심. CI/CD에 통합하기 좋다.
- Weights & Biases Weave: 기존 W&B 사용자에게 친숙한 trace 뷰.
import phoenix as px
from openinference.instrumentation.langchain import LangChainInstrumentor
px.launch_app()
LangChainInstrumentor().instrument()
result = chain.invoke({"diff": "..."})
Phoenix의 강점은 OpenTelemetry GenAI semconv 1.0과의 정합이다. 2025년 후반 OTel SIG가 GenAI 시맨틱 컨벤션을 안정화하면서 trace 호환성이 크게 좋아졌다.
에이전트 메모리 — Mem0, Zep, Pinecone, Qdrant, Redis
장기 메모리는 2026년 가장 빠르게 성숙한 레이어다. 4개 패턴이 표준이다.
- Mem0: "사용자별 메모리 레이어"를 1급 API로. fact extraction과 retrieval을 자동화.
- Zep: 세션 메모리 + 지식 그래프. 대화 이력을 자동으로 엔티티 그래프로 인덱싱.
- Pinecone/Qdrant/Weaviate/Milvus: 에피소딕 메모리의 벡터 저장소.
- Redis + Postgres pgvector: 단기 캐시 + 영속 상태.
LangGraph는 자체 Memory 추상화로 위 모두를 어댑터로 감싼다. PydanticAI도 2025년 후반 Memory 1급 지원을 추가했다.
가드레일 — Guardrails AI, NeMo Guardrails, Lakera Guard
프로덕션 에이전트는 jailbreak, PII 누출, 정책 위반을 막아야 한다. 3개 라이브러리가 표준이다.
- Guardrails AI:
RAIL스펙으로 입출력 검증. Python/JS 모두 지원. - NVIDIA NeMo Guardrails: Colang DSL로 대화 흐름 규칙을 선언. 도구 호출 제한도 가능.
- Lakera Guard: 상용 API. prompt injection 탐지 정확도가 가장 높다는 평이 많다.
rails:
input:
flows:
- self check input
output:
flows:
- self check output
- check policy
위는 NeMo Guardrails의 config.yml 일부다. 입출력에 별도 flow를 걸어서 정책을 검증한다.
프레임워크 비교표 — 한 눈에 정리
| 프레임워크 | 언어 | 멀티 에이전트 | 구조화 출력 | 관측 통합 | 비고 |
|---|---|---|---|---|---|
| LangChain + LangGraph | Python/TS | 그래프 | with_structured_output | LangSmith | 가장 큰 생태계 |
| LlamaIndex | Python/TS | Workflow | Pydantic | LangSmith, Phoenix | RAG가 본진 |
| CrewAI | Python | Role 기반 | Pydantic | LangSmith, 자체 | 비개발자 친화 |
| AutoGen | Python | GroupChat | Pydantic | OTel | MS 진영 |
| PydanticAI | Python | 핸드오프 | Pydantic 1급 | Logfire, OTel | 타입 안전 |
| Mastra | TypeScript | Workflow | Zod | OTel | TS 진영 표준 |
| DSPy | Python | 모듈 | Signature | MLflow | 컴파일러 패러다임 |
| OpenAI Agents SDK | Python/TS | handoffs | Pydantic/Zod | OpenAI Traces | 벤더 SDK |
| Vercel AI SDK | TypeScript | maxSteps | Zod | Vercel Observability | Next.js 통합 |
선택 가이드 — 2026년 5월, 무엇을 골라야 하나
대원칙은 단순하다.
- 이미 LangChain 코드가 많다면: LangGraph로 점진 마이그레이션. 새 코드는 LangGraph로, 기존 LCEL은 그대로 둔다.
- 타입 안전과 엔터프라이즈 거버넌스가 중요: PydanticAI. Pydantic 생태계를 그대로 받는다.
- TypeScript 풀스택(Next.js, Cloudflare Workers): Mastra 또는 Vercel AI SDK 4. RSC와 결합이 자연스럽다.
- RAG가 본진이고 GraphRAG 까지 필요: LlamaIndex.
- 여러 역할의 협업을 빠르게 PoC: CrewAI.
- 연구실/논문 재현/벤치마크 자동 튜닝: DSPy.
- 로컬 모델(vLLM) + 100% 스키마 준수: Outlines.
- 단일 벤더(OpenAI/Anthropic)에 락인되어도 무방: OpenAI Agents SDK 또는 Anthropic SDK 직사용.
도구는 무조건 MCP 서버로 노출하는 것을 권장한다. 향후 프레임워크 교체를 자유롭게 한다.
비용 관리 — 토큰 회계와 캐싱
프로덕션 에이전트는 LLM 토큰이 곧 비용이다. 2026년 표준은 3가지다.
- prompt caching: Anthropic의
cache_control, OpenAI의 prompt caching, Gemini의 context caching 모두 5분 TTL 기반. 시스템 프롬프트와 도구 정의를 캐시 블록으로 빼면 75%+ 비용 절감. - batch API: 시간 민감하지 않은 작업은 OpenAI/Anthropic batch API로 50% 할인.
- 모델 캐스케이드: Haiku/Mini에서 먼저 처리하고 실패만 Opus/4로. LangChain
with_fallbacks, PydanticAImodels리스트로 구현.
LangSmith, Helicone, OpenLLMetry는 모두 토큰 비용을 trace 레벨로 집계한다. 사내 대시보드를 만들기 전에 이 셋 중 하나를 먼저 붙이는 게 효율적이다.
안티패턴 — 이걸 하면 6개월 뒤 후회한다
- LangChain을 "전부 다" 쓰기:
langchain-community의 모든 통합을 가져다 쓰면 의존성 폭발과 보안 감사 지옥에 빠진다. 필요한 통합만 직접 import. - 에이전트에 무한 루프 허용:
max_iterations와max_steps를 반드시 설정. 비용 폭주의 원인 1순위. - 메모리 없는 멀티턴 에이전트: Mem0/Zep 없이 매 턴 전체 히스토리를 LLM에 밀어넣으면 토큰 비용이 선형이 아닌 제곱으로 증가.
- eval 없이 프로덕션 출시: LangSmith/Phoenix dataset에 최소 50개 골든 케이스를 만들고 회귀 테스트로 돌린다.
- MCP 없이 도구 락인: 도구를 LangChain
@tool데코레이터로만 노출하면 다른 프레임워크로 옮길 때 다 재작성해야 한다. MCP 서버로 빼면 자유롭다. - 가드레일을 출시 직전에 붙이기: jailbreak 시나리오와 PII 누출은 처음부터 테스트 케이스로 포함.
마치며 — 2026년 후반 전망
2026년 하반기에 우리는 세 가지를 보게 될 것이다.
- MCP의 완전한 표준화: ISO/IETF 수준의 형식 표준 논의가 시작된다. 클라우드 벤더 간 도구 호환성이 보장된다.
- 타입 안전 에이전트의 엔터프라이즈 표준화: PydanticAI와 Mastra가 LangChain 대비 점유율을 빠르게 잠식한다. 특히 금융/의료/공공.
- 에이전트 OS의 등장: Letta(MemGPT)식 "에이전트 운영체제" 추상화가 LangGraph와 합쳐지면서, 백그라운드/장기 실행/사람 검토가 1급 기능이 된다.
지금 시작하는 팀이라면 LangGraph + PydanticAI + MCP + LangSmith(또는 Phoenix) 조합을 기본으로 두고, TypeScript가 본진이면 Mastra + Vercel AI SDK + OTel을 권한다. 1년 뒤에 돌아봐도 후회가 적은 조합이다.
References
- LangChain 공식 문서: docs.langchain.com
- LangGraph 공식 문서: langchain-ai.github.io/langgraph
- LlamaIndex 공식 문서: docs.llamaindex.ai
- CrewAI 공식 문서: docs.crewai.com
- AutoGen 공식 사이트: microsoft.github.io/autogen
- PydanticAI 공식 사이트: ai.pydantic.dev
- Mastra 공식 사이트: mastra.ai
- agno 공식 문서: docs.agno.com
- smolagents 공식 문서: huggingface.co/docs/smolagents
- DSPy 공식 사이트: dspy.ai
- Instructor: github.com/jxnl/instructor
- Outlines: github.com/outlines-dev/outlines
- Model Context Protocol: modelcontextprotocol.io
- OpenAI Agents SDK: openai.github.io/openai-agents-python
- Anthropic 공식 문서: docs.anthropic.com
- Vercel AI SDK: sdk.vercel.ai
- LangSmith: smith.langchain.com
- Arize Phoenix: phoenix.arize.com
- Langfuse: langfuse.com
- Galileo: galileo.ai
- Patronus AI: patronus.ai
- Confident AI DeepEval: confident-ai.com
- Weights & Biases Weave: wandb.ai/site/weave
- Mem0: mem0.ai
- Zep: getzep.com
- Guardrails AI: guardrailsai.com
- NeMo Guardrails: github.com/NVIDIA/NeMo-Guardrails
- Lakera Guard: lakera.ai
- OpenTelemetry GenAI semconv: opentelemetry.io/docs/specs/semconv/gen-ai
- A2A protocol: google.github.io/A2A