본문으로 건너뛰기
블로그로 돌아가기
AI Agents

2025 AI 에이전트 구축 방법론: OpenAI Agent SDK부터 멀티에이전트 아키텍처까지

하이프마크 AI팀
2025년 2월 23일
2025 AI 에이전트 구축 방법론: OpenAI Agent SDK부터 멀티에이전트 아키텍처까지

AI 에이전트 기술, 2025년 어디까지 왔나

2024년까지 AI 에이전트는 "LLM + 프롬프트"의 단순한 조합이었습니다. 2025년, 에이전트 기술은 완전히 다른 차원으로 진화했습니다.

주요 변화:

  • OpenAI Agent SDK — 에이전트 간 핸드오프, 가드레일, 트레이싱 내장
  • Claude MCP (Model Context Protocol) — 외부 도구 연결의 표준화
  • Structured Outputs — LLM 출력을 100% 구조화된 JSON으로 보장
  • 멀티에이전트 오케스트레이션 — 여러 전문 에이전트가 협업하는 시스템

이 글에서는 하이프마크가 실제 프로젝트에서 사용하는 최신 에이전트 구축 방법론을 공유합니다.


에이전트 구축 프레임워크 비교

2025년 주요 프레임워크

프레임워크개발사특징적합한 용도
OpenAI Agent SDKOpenAI핸드오프, 가드레일, 트레이싱프로덕션 에이전트
LangChain/LangGraphLangChain체인 구성, 그래프 워크플로우복잡한 파이프라인
Claude Agent SDKAnthropicMCP 통합, 안전성 중심도구 연동 에이전트
CrewAICrewAI역할 기반 멀티에이전트팀 협업 시뮬레이션
AutoGenMicrosoft대화 기반 멀티에이전트연구/실험
직접 구축 (Flask + LLM API)-완전한 제어, 최소 의존성커스텀 비즈니스 로직

하이프마크의 선택: 직접 구축 + 선택적 SDK 활용

하이프마크는 Flask 기반 직접 구축을 기본으로 하되, 특정 기능에서 OpenAI Agent SDK나 Claude MCP를 선택적으로 활용합니다.

왜 프레임워크 올인을 하지 않는가:

  • 프레임워크 락인 방지 (특정 기술에 종속되면 LLM 교체가 어려움)
  • 비즈니스 로직의 완전한 제어 (프레임워크의 추상화가 방해가 되는 경우)
  • 디버깅 용이성 (블랙박스 없이 모든 단계를 투명하게 관찰)
  • 성능 최적화 (불필요한 오버헤드 제거)

핵심 패턴 1: Function Calling (도구 사용)

개념

LLM이 직접 코드를 실행하는 것이 아니라, **"이 도구를 이 파라미터로 호출해달라"**고 요청하고, 시스템이 실행한 후 결과를 돌려주는 패턴.

실전 예시: 마케팅 데이터 조회 에이전트

import openai
import json

# 에이전트가 사용할 수 있는 도구 정의
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_campaign_performance",
            "description": "특정 기간의 광고 캠페인 성과를 조회합니다",
            "parameters": {
                "type": "object",
                "properties": {
                    "platform": {
                        "type": "string",
                        "enum": ["naver", "google", "kakao", "meta"],
                        "description": "광고 플랫폼"
                    },
                    "date_from": {"type": "string", "description": "시작일 (YYYY-MM-DD)"},
                    "date_to": {"type": "string", "description": "종료일 (YYYY-MM-DD)"},
                    "metrics": {
                        "type": "array",
                        "items": {"type": "string"},
                        "description": "조회할 지표 (impressions, clicks, cost, conversions, roas)"
                    }
                },
                "required": ["platform", "date_from", "date_to"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_anomaly_report",
            "description": "이상 탐지 리포트를 생성합니다",
            "parameters": {
                "type": "object",
                "properties": {
                    "lookback_days": {"type": "integer", "description": "분석 기간 (일)"},
                    "sensitivity": {"type": "string", "enum": ["low", "medium", "high"]}
                },
                "required": ["lookback_days"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "optimize_budget",
            "description": "채널별 예산 최적화 제안을 생성합니다",
            "parameters": {
                "type": "object",
                "properties": {
                    "total_budget": {"type": "number", "description": "총 월 예산 (원)"},
                    "objective": {
                        "type": "string",
                        "enum": ["maximize_conversions", "maximize_roas", "minimize_cpa"],
                        "description": "최적화 목표"
                    }
                },
                "required": ["total_budget", "objective"]
            }
        }
    }
]

# 도구 실행 함수
def execute_tool(tool_name: str, arguments: dict):
    if tool_name == "get_campaign_performance":
        return query_bigquery_campaign_data(**arguments)
    elif tool_name == "get_anomaly_report":
        return run_anomaly_detection(**arguments)
    elif tool_name == "optimize_budget":
        return calculate_optimal_budget(**arguments)

# 에이전트 실행 루프
def run_agent(user_query: str):
    messages = [
        {"role": "system", "content": "마케팅 데이터 분석 전문 에이전트입니다."},
        {"role": "user", "content": user_query}
    ]

    while True:
        response = openai.chat.completions.create(
            model="gpt-4o",
            messages=messages,
            tools=tools,
        )

        msg = response.choices[0].message

        # 도구 호출이 없으면 최종 응답
        if not msg.tool_calls:
            return msg.content

        # 도구 실행 & 결과 추가
        messages.append(msg)
        for tool_call in msg.tool_calls:
            result = execute_tool(
                tool_call.function.name,
                json.loads(tool_call.function.arguments)
            )
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps(result, ensure_ascii=False)
            })

사용자 질문: "지난 주 네이버와 구글 ROAS를 비교해줘"

에이전트 동작:

  1. get_campaign_performance(platform="naver", ...) 호출
  2. get_campaign_performance(platform="google", ...) 호출
  3. 두 결과를 비교 분석하여 자연어 리포트 생성

핵심 패턴 2: RAG (검색 증강 생성)

왜 RAG가 필요한가

LLM은 학습 데이터에 없는 정보를 모릅니다. 기업의 내부 문서, 제품 매뉴얼, 고객 FAQ 등을 에이전트가 활용하려면 RAG 파이프라인이 필수입니다.

RAG 아키텍처

사용자 질문
    │
    ▼
[임베딩 생성] ← OpenAI text-embedding-3-small
    │
    ▼
[벡터 검색] ← Pinecone / Weaviate / PostgreSQL pgvector
    │
    ▼
[관련 문서 3-5개 추출]
    │
    ▼
[LLM에 컨텍스트로 전달]
    │
    ▼
답변 생성 (출처 포함)

실전 활용: 고객 서비스 RAG 에이전트

from openai import OpenAI

client = OpenAI()

def answer_with_rag(question: str, company_id: str) -> str:
    # 1. 질문을 벡터로 변환
    embedding = client.embeddings.create(
        model="text-embedding-3-small",
        input=question
    ).data[0].embedding

    # 2. 해당 기업의 지식베이스에서 관련 문서 검색
    relevant_docs = vector_store.query(
        vector=embedding,
        filter={"company_id": company_id},
        top_k=5
    )

    # 3. 검색된 문서를 컨텍스트로 LLM에 전달
    context = "\n\n".join([doc.text for doc in relevant_docs])

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": f"""고객 서비스 에이전트입니다.
            아래 참고 자료를 기반으로 답변하세요.
            참고 자료에 없는 내용은 "확인 후 답변드리겠습니다"라고 하세요.

            === 참고 자료 ===
            {context}"""},
            {"role": "user", "content": question}
        ],
        temperature=0.2,
    )

    return response.choices[0].message.content

핵심 패턴 3: 멀티에이전트 오케스트레이션

왜 하나의 에이전트로는 부족한가

복잡한 비즈니스 문제는 여러 전문 에이전트의 협업이 필요합니다.

예시: "이번 달 마케팅 전략 리포트를 만들어줘"

이 요청을 처리하려면:

  1. 데이터 분석가 — 전월 성과 데이터 분석
  2. 경쟁 분석가 — 경쟁사 동향 파악
  3. 전략가 — 분석 결과를 바탕으로 전략 수립
  4. 카피라이터 — 전략을 실행 가능한 캠페인 기획으로 변환

멀티에이전트 구현

class AgentOrchestrator:
    """여러 전문 에이전트를 조율하는 오케스트레이터"""

    def __init__(self):
        self.agents = {
            "analyst": DataAnalystAgent(),
            "competitor": CompetitorAnalysisAgent(),
            "strategist": StrategyAgent(),
            "copywriter": CopywriterAgent(),
        }

    def create_monthly_strategy(self, client_id: str) -> dict:
        # Phase 1: 데이터 수집 & 분석 (병렬 실행)
        analysis = self.agents["analyst"].analyze(
            client_id=client_id,
            period="last_month"
        )

        competitor = self.agents["competitor"].research(
            industry=get_client_industry(client_id),
            keywords=get_target_keywords(client_id)
        )

        # Phase 2: 전략 수립 (Phase 1 결과 활용)
        strategy = self.agents["strategist"].plan(
            performance_data=analysis,
            competitor_data=competitor,
            budget=get_monthly_budget(client_id),
            objectives=get_client_objectives(client_id)
        )

        # Phase 3: 실행 계획 생성
        campaign_plans = self.agents["copywriter"].create_campaigns(
            strategy=strategy,
            brand_guidelines=get_brand_voice(client_id),
            channels=["naver", "google", "kakao", "meta"]
        )

        return {
            "analysis": analysis,
            "competitor_insights": competitor,
            "strategy": strategy,
            "campaign_plans": campaign_plans,
            "generated_at": datetime.now().isoformat()
        }

에이전트 간 핸드오프

OpenAI Agent SDK의 핸드오프 패턴:

from agents import Agent, handoff

# 각 에이전트 정의
triage_agent = Agent(
    name="분류 에이전트",
    instructions="고객 문의를 분류하여 적절한 전문 에이전트에게 전달합니다.",
    handoffs=[
        handoff(target=sales_agent, description="구매/가격 문의"),
        handoff(target=support_agent, description="기술 지원/장애"),
        handoff(target=billing_agent, description="결제/환불"),
    ]
)

sales_agent = Agent(
    name="영업 에이전트",
    instructions="제품 소개와 가격 안내를 담당합니다.",
    tools=[get_pricing, schedule_demo, create_quote]
)

support_agent = Agent(
    name="기술 지원 에이전트",
    instructions="기술 문제 해결을 담당합니다.",
    tools=[search_knowledge_base, create_ticket, check_system_status]
)

핵심 패턴 4: 가드레일과 안전장치

프로덕션 에이전트의 필수 요소

가드레일목적구현 방법
입력 검증악의적 프롬프트 차단입력 필터링 + 프롬프트 인젝션 탐지
출력 검증부적절한 응답 방지LLM 기반 출력 검사
도구 제한위험한 작업 방지화이트리스트 기반 도구 접근
비용 제한API 비용 폭주 방지토큰/요청 수 상한 설정
에스컬레이션에이전트가 처리 못하는 경우사람에게 자동 전달
로깅모든 상호작용 기록구조화된 로그 + BigQuery 저장
# 가드레일 예시
class SafetyGuard:
    def check_input(self, user_input: str) -> bool:
        """프롬프트 인젝션 탐지"""
        suspicious_patterns = [
            "ignore previous instructions",
            "you are now",
            "system prompt",
            "이전 지시를 무시",
        ]
        return not any(p in user_input.lower() for p in suspicious_patterns)

    def check_output(self, response: str) -> bool:
        """부적절한 출력 필터링"""
        # 개인정보 노출 체크
        if contains_pii(response):
            return False
        # 경쟁사 비방 체크
        if contains_competitor_criticism(response):
            return False
        return True

    def check_cost(self, session_tokens: int) -> bool:
        """비용 한도 체크"""
        return session_tokens < 50000  # 세션당 5만 토큰 제한

하이프마크의 에이전트 구축 프로세스

4단계 프로세스

Phase 1: 발견 (1-2주)

  • 비즈니스 프로세스 분석
  • 자동화 가능 영역 식별
  • ROI 추정 및 우선순위 결정
  • 기술 스택 결정

Phase 2: 설계 (1-2주)

  • 에이전트 아키텍처 설계
  • 데이터 파이프라인 설계
  • 프롬프트 엔지니어링
  • 가드레일 설계

Phase 3: 구축 (3-6주)

  • Flask 기반 에이전트 개발
  • 도구/API 연동
  • RAG 파이프라인 구축 (필요 시)
  • 테스트 및 품질 검증

Phase 4: 운영 (지속)

  • 모니터링 및 성능 최적화
  • 프롬프트 반복 개선
  • 신규 기능 추가
  • 하이프마크.AI 대시보드 연동

결론

AI 에이전트는 더 이상 "챗봇"이 아닙니다. Function Calling으로 실제 업무를 수행하고, RAG로 기업 지식을 활용하고, 멀티에이전트로 복잡한 문제를 해결하는 자율적 업무 시스템입니다.

핵심은 어떤 프레임워크를 쓰느냐가 아니라, 비즈니스 문제에 최적화된 아키텍처를 설계할 수 있느냐입니다.

하이프마크는 50개 이상의 에이전트 프로젝트 경험을 바탕으로, 귀사의 비즈니스에 맞는 에이전트 아키텍처를 설계하고 구축합니다.

AI 에이전트 구축 상담 →

더 많은 인사이트가 필요하신가요?

AI 마케팅 전문가와 상담하고 비즈니스를 성장시키세요

문의하기
2025 AI 에이전트 구축 방법론: OpenAI Agent SDK부터 멀티에이전트 아키텍처까지 - Hypemarc Blog | Hypemarc