PART 10 - 강의 3/3

Agent 프레임워크

Agent 개발을 위한 주요 프레임워크 비교

01

Agent 프레임워크 개요

주요 프레임워크 소개

Agent를 직접 구현하는 것은 복잡하고 시간이 많이 걸립니다. 다행히 여러 오픈소스 프레임워크들이 Agent 개발을 위한 추상화와 도구를 제공합니다. 각 프레임워크는 서로 다른 철학과 강점을 가지고 있습니다.

LangChain

LangChain Inc.

가장 널리 사용되는 LLM 애플리케이션 프레임워크. Chain과 Agent를 위한 풍부한 추상화 제공.

풍부한 생태계 다양한 통합 높은 복잡도
95K+
GitHub Stars
Python/JS
언어

LlamaIndex

LlamaIndex Inc.

데이터 연결에 특화된 프레임워크. RAG와 데이터 Agent 구축에 최적화.

RAG 특화 데이터 커넥터 Agent도 지원
37K+
GitHub Stars
Python/TS
언어

AutoGen

Microsoft

멀티 에이전트 대화에 특화. 여러 Agent 간의 협업 워크플로우 구축에 최적.

멀티 에이전트 대화 기반 코드 실행
35K+
GitHub Stars
Python
언어

CrewAI

CrewAI Inc.

역할 기반 AI Agent 협업 프레임워크. 직관적인 "팀" 메타포로 Agent 구성.

직관적 API 역할 기반 빠른 프로토타이핑
20K+
GitHub Stars
Python
언어

Semantic Kernel

Microsoft

엔터프라이즈 환경을 위한 SDK. Azure 및 Microsoft 생태계와 긴밀히 통합.

엔터프라이즈 C#/.NET Azure 통합
22K+
GitHub Stars
C#/Python/Java
언어

Claude Agent SDK

Anthropic

Anthropic의 공식 Agent SDK. Claude 모델에 최적화된 간결한 Agent 구현.

Claude 최적화 심플한 API 공식 지원
New
2024 출시
Python/TS
언어
02

프레임워크 상세 비교

기능별 비교표

기능 LangChain LlamaIndex AutoGen CrewAI
Single Agent Excellent Good Basic Good
Multi Agent LangGraph Limited Excellent Excellent
RAG 통합 Excellent Best Basic Basic
Tool 생태계 100+ Tools 50+ Tools 30+ Tools 20+ Tools
학습 곡선 High Medium Low Low
프로덕션 준비 High High Medium Medium
문서화 Excellent Good Good Growing
커뮤니티 Largest Large Growing Growing
03

코드 예시 비교

같은 작업을 각 프레임워크로 구현

같은 작업(웹 검색 Agent)을 각 프레임워크에서 어떻게 구현하는지 비교해 봅니다.

from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_community.tools import TavilySearchResults
from langchain import hub

# LLM 설정
llm = ChatOpenAI(model="gpt-4")

# Tool 설정
search = TavilySearchResults(max_results=3)
tools = [search]

# ReAct 프롬프트 로드
prompt = hub.pull("hwchase17/react")

# Agent 생성
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,
    max_iterations=5
)

# 실행
result = agent_executor.invoke({
    "input": "2024년 AI 트렌드는?"
})
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
from llama_index.core.tools import FunctionTool

# 커스텀 검색 함수
def web_search(query: str) -> str:
    """웹에서 정보를 검색합니다."""
    # 실제 검색 API 호출
    return f"'{query}'에 대한 검색 결과..."

# Tool 생성
search_tool = FunctionTool.from_defaults(fn=web_search)

# LLM 설정
llm = OpenAI(model="gpt-4")

# ReAct Agent 생성
agent = ReActAgent.from_tools(
    tools=[search_tool],
    llm=llm,
    verbose=True,
    max_iterations=5
)

# 실행
response = agent.chat("2024년 AI 트렌드는?")
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json

# LLM 설정
config_list = [{
    "model": "gpt-4",
    "api_key": os.environ["OPENAI_API_KEY"]
}]

# Assistant Agent (AI)
assistant = AssistantAgent(
    name="researcher",
    system_message="당신은 연구 전문가입니다. 웹 검색을 통해 정보를 찾아주세요.",
    llm_config={"config_list": config_list}
)

# User Proxy (코드 실행 가능)
user_proxy = UserProxyAgent(
    name="user",
    human_input_mode="NEVER",
    code_execution_config={
        "work_dir": "workspace",
        "use_docker": False
    }
)

# 대화 시작
user_proxy.initiate_chat(
    assistant,
    message="2024년 AI 트렌드를 검색해서 요약해줘"
)
from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool

# Tool 설정
search_tool = SerperDevTool()

# Agent 정의 (역할 기반)
researcher = Agent(
    role="Research Analyst",
    goal="최신 AI 트렌드를 조사하고 분석",
    backstory="당신은 10년 경력의 기술 분석가입니다.",
    tools=[search_tool],
    verbose=True
)

# Task 정의
research_task = Task(
    description="2024년 AI 트렌드를 조사하고 핵심 내용을 정리해주세요.",
    expected_output="주요 트렌드 5가지와 각각에 대한 설명",
    agent=researcher
)

# Crew 구성 및 실행
crew = Crew(
    agents=[researcher],
    tasks=[research_task],
    verbose=2
)

result = crew.kickoff()
04

프레임워크 선택 가이드

상황에 맞는 프레임워크 선택

어떤 유형의 Agent가 필요한가요?
|
Single Agent + RAG
LlamaIndex
|
범용 Single Agent
LangChain
|
Multi-Agent 협업
CrewAI / AutoGen
|
엔터프라이즈/.NET
Semantic Kernel

상황별 추천

01
빠른 프로토타이핑
아이디어를 빠르게 검증하고 싶을 때. 직관적인 API와 낮은 학습 곡선 필요.
추천: CrewAI, AutoGen
02
RAG 시스템 구축
문서 기반 Q&A, 지식 관리 시스템. 데이터 연결과 인덱싱이 중요.
추천: LlamaIndex
03
프로덕션 배포
안정성, 모니터링, 확장성이 중요한 실제 서비스 운영.
추천: LangChain + LangSmith
04
복잡한 워크플로우
여러 Agent가 협력하여 복잡한 작업 수행. 팀 시뮬레이션.
추천: AutoGen, CrewAI
05
엔터프라이즈 환경
Azure 클라우드, .NET 생태계, 기업 보안 요구사항.
추천: Semantic Kernel
06
Claude 기반 개발
Claude 모델을 주력으로 사용하며 안정적인 Agent 구축.
추천: Claude Agent SDK
실용적 조언

프레임워크 선택에 정답은 없습니다. 팀의 기술 스택, 프로젝트 요구사항, 그리고 향후 확장성을 고려하세요. 또한 프레임워크 없이 직접 구현하는 것도 좋은 선택일 수 있습니다. 특히 간단한 Agent의 경우 프레임워크의 오버헤드가 더 클 수 있습니다.

05

LangGraph

상태 기반 Agent 워크플로우

LangGraph는 LangChain 팀에서 만든 상태 기반 워크플로우 라이브러리입니다. 복잡한 Agent 로직을 그래프 형태로 표현하여 조건부 분기, 루프, 병렬 처리 등을 명시적으로 정의할 수 있습니다.

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

# 상태 정의
class AgentState(TypedDict):
    messages: Annotated[list, operator.add]
    next_action: str

# 노드 함수 정의
def think(state: AgentState) -> AgentState:
    """LLM이 다음 행동을 결정"""
    ...

def act(state: AgentState) -> AgentState:
    """도구 실행"""
    ...

def should_continue(state: AgentState) -> str:
    """조건부 분기 결정"""
    if state["next_action"] == "end":
        return "end"
    return "continue"

# 그래프 구성
workflow = StateGraph(AgentState)
workflow.add_node("think", think)
workflow.add_node("act", act)

workflow.set_entry_point("think")
workflow.add_edge("think", "act")
workflow.add_conditional_edges(
    "act",
    should_continue,
    {"continue": "think", "end": END}
)

app = workflow.compile()
# LangGraph로 구현한 ReAct Agent
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults

# 설정
llm = ChatOpenAI(model="gpt-4")
tools = [TavilySearchResults(max_results=3)]

# LangGraph의 prebuilt ReAct Agent 사용
agent = create_react_agent(llm, tools)

# 실행 (스트리밍 지원)
for chunk in agent.stream({
    "messages": [{"role": "user", "content": "AI 트렌드 알려줘"}]
}):
    print(chunk)

# 체크포인트 저장 (상태 지속성)
from langgraph.checkpoint.sqlite import SqliteSaver
memory = SqliteSaver.from_conn_string(":memory:")
agent = create_react_agent(llm, tools, checkpointer=memory)
LangGraph vs LangChain Agent

LangChain의 기존 AgentExecutor보다 LangGraph가 더 권장됩니다. LangGraph는 명시적인 상태 관리, 더 나은 디버깅, 체크포인팅을 통한 복구 기능을 제공합니다. 복잡한 Agent 로직은 LangGraph로 구현하세요.

SUMMARY

핵심 요약

  • LangChain: 가장 큰 생태계, 범용 Agent, 높은 복잡도
  • LlamaIndex: RAG 특화, 데이터 연결 최적화
  • AutoGen: Multi-Agent 대화, 코드 실행 지원
  • CrewAI: 역할 기반 협업, 직관적 API
  • LangGraph: 상태 기반 워크플로우, LangChain과 함께 사용
  • 선택 기준: 프로젝트 요구사항, 팀 역량, 확장성 고려