Agentic AI Platform 아키텍처
📅 작성일: 2025-02-05 | 수정일: 2026-02-14 | ⏱️ 읽는 시간: 약 6분
이 문서는 Amazon EKS 기반 프로덕션급 Agentic AI Platform의 전체 시스템 아키텍처와 핵심 컴포넌트 설계를 다룹니다. 자율적으로 작업을 수행하는 AI 에이전트를 효율적으로 구축하고 운영하기 위한 플랫폼 아키텍처를 제시합니다.
개요
Agentic AI Platform은 자율적인 AI 에이전트가 복잡한 작업을 수행할 수 있도록 지원하는 통합 플랫폼입니다. 최신 AI/ML 기술, 컨테이너 오케스트레이션, 그리고 클라우드 네이티브 아키텍처를 통합하여 안정적이고 확장 가능한 GenAI 서비스를 제공합니다.
해결하는 문제
기존 GenAI 서비스 구축 과정에서의 도전 과제:
- AI 모델 서빙의 복잡성: 다양한 모델의 배포 및 리소스 관리 어려움
- 통합 부족: ML 프레임워크와 도구의 통합 부재
- 스케일링 문제: 성능 최적화 및 자동 확장의 어려움
- MLOps 자동화: 배포 파이프라인 및 자동화 부재
- 비용 효율성: 리소스 활용 최적화 방안 부재
이 가이드는 이러한 문제들을 체계적으로 해결하기 위한 실전 전략을 제시합니다.
핵심 기능
이 문서는 솔루션 아키텍트, 플랫폼 엔지니어, DevOps 엔지니어를 대상으로 합니다. Kubernetes와 AI/ML 워크로드에 대한 기본적인 이해가 필요합니다.
전체 시스템 아키텍처
Agentic AI Platform은 6개의 주요 레이어로 구성됩니다. 각 레이어는 명확한 책임을 가지며, 느슨한 결합을 통해 독립적인 확장과 운영이 가능합니다.
레이어별 역할
핵심 컴포넌트
Agent Runtime Layer
Agent Runtime Layer는 AI 에이전트가 실행되는 환경을 제공합니다. 각 에이전트는 독립적인 Pod로 실행되며, Kagent Controller에 의해 관리됩니다.
주요 기능
- 상태 관리: 에이전트의 대화 컨텍스트 및 작업 상태 유지
- 도구 실행: 등록된 도구를 비동기적으로 실행
- 메모리 관리: 단기/장기 메모리를 통한 컨텍스트 유 지
- 오류 복구: 실패한 작업의 자동 재시도 및 폴백
Tool Registry
Tool Registry는 에이전트가 사용할 수 있는 도구들을 중앙에서 관리합니다. Kubernetes CRD(Custom Resource Definition)를 통해 도구를 선언적으로 정의합니다.
apiVersion: kagent.dev/v1alpha1
kind: Tool
metadata:
name: web-search
namespace: ai-agents
spec:
type: api
description: "웹 검색을 수행하여 최신 정보를 가져옵니다"
config:
endpoint: http://search-service/api/search
method: POST
timeout: 30s
parameters:
- name: query
type: string
required: true
description: "검색 쿼리"
- name: max_results
type: integer
default: 10
description: "최대 결과 수"
authentication:
type: bearer
secretRef:
name: search-api-token
key: token
도구 유형
Memory Store (Milvus)
Milvus는 RAG 시스템의 핵심인 벡터 저장소 역할을 합니다. 에이전트는 Milvus를 통해 관련 문서를 검색하고 컨텍스트를 보강합니다.
컬렉션 설계 예시
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType
# 컬렉션 스키마 정의
fields = [
FieldSchema(name="id", dtype=DataType.VARCHAR, max_length=64, is_primary=True),
FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=65535),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),
FieldSchema(name="metadata", dtype=DataType.JSON),
FieldSchema(name="tenant_id", dtype=DataType.VARCHAR, max_length=64),
]
schema = CollectionSchema(fields, description="Knowledge base for agents")
collection = Collection(name="agent_knowledge", schema=schema)
# HNSW 인덱스 생성 (고성능 검색)
index_params = {
"metric_type": "COSINE",
"index_type": "HNSW",
"params": {"M": 16, "efConstruction": 256}
}
collection.create_index(field_name="embedding", index_params=index_params)
Orchestrator (Kagent)
Kagent는 Kubernetes Operator 패턴을 사용하여 AI 에이전트의 전체 라이프사이클을 관리합니다.
Agent CRD 예시
apiVersion: kagent.dev/v1alpha1
kind: Agent
metadata:
name: customer-support-agent
namespace: ai-agents
spec:
# 모델 설정
model:
provider: openai
name: gpt-4-turbo
temperature: 0.7
maxTokens: 4096
# 시스템 프롬프트
systemPrompt: |
당신은 친절하고 전문적인 고객 지원 에이전트입니다.
항상 정확한 정보를 제공하고, 모르는 것은 솔직히 인정하세요.
# 사용할 도구
tools:
- name: search-knowledge-base
type: retrieval
config:
vectorStore: milvus
collection: support-docs
topK: 5
- name: create-ticket
type: api
config:
endpoint: http://ticketing-service/api/tickets
method: POST
# 메모리 설정
memory:
type: redis
config:
host: redis-master.ai-data.svc.cluster.local
port: 6379
ttl: 3600
maxHistory: 50
# 스케일링 설정
scaling:
minReplicas: 2
maxReplicas: 10
targetCPUUtilization: 70
targetMemoryUtilization: 80
# 리소스 제한
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
Inference Gateway (Kgateway)
Kgateway는 Kubernetes Gateway API를 기반으로 AI 모델 추론 요청을 지능적으로 라우팅합니다.
HTTPRoute 설정 예시
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: inference-routing
namespace: ai-gateway
spec:
parentRefs:
- name: ai-gateway
namespace: ai-gateway
rules:
# GPT-4 모델 라우팅 (가중치 기반)
- matches:
- path:
type: PathPrefix
value: /v1/chat/completions
headers:
- name: x-model-id
value: "gpt-4"
backendRefs:
- name: vllm-gpt4-primary
port: 8000
weight: 80
- name: vllm-gpt4-canary
port: 8000
weight: 20
# Claude 모델 라우팅
- matches:
- path:
type: PathPrefix
value: /v1/chat/completions
headers:
- name: x-model-id
value: "claude-3"
backendRefs:
- name: vllm-claude3
port: 8000
# MoE 모델 라우팅 (복잡한 작업용)
- matches:
- path:
type: PathPrefix
value: /v1/chat/completions
headers:
- name: x-model-id
value: "mixtral-8x7b"
backendRefs:
- name: tgi-mixtral
port: 8080