ADK 콜백 훅(Callback Hooks)으로 AI 에이전트(AI Agent) 성능, 비용, 관측 가능성 모두 잡다!
ADK 콜백 훅(Callback Hooks)을 활용하여 에이전트(Agent)의 관측 가능성(Observability)을 확보하고, 비용 및 지연 시간(Latency)을 개선하는 방법 제시
beforeAgentCallback, afterAgentCallback, beforeModelCallback 등 다양한 콜백 훅(Callback Hooks)을 활용하여 성능 측정(Performance Metrics), 세션 상태 관리(Session State Management), 조건부 단계 건너뛰기(Conditional Step Skipping) 구현
Gemini를 활용한 LLM 에이전트(LLM Agent)에서 beforeModelCallback을 통해 불필요한 LLM 호출을 방지하여 토큰 사용량(Token Usage) 절감
afterToolCallback을 활용하여 유효성 검사 시도 횟수를 제한하고, 오류 상태(Error Status)를 관리하여 안정성(Stability)을 향상시킴
ADK 콜백 훅(Callback Hooks)의 작동 원리
ADK(Agent Development Kit)는 에이전트(Agent)의 생명 주기(Lifecycle)에 다양한 콜백 훅(Callback Hooks)을 제공하여, 개발자가 특정 시점에 커스텀 로직(Custom Logic)을 삽입할 수 있도록 지원한다.
beforeAgentCallback: 에이전트(Agent) 실행 전, 세션 초기화(Session Initialization) 및 성능 측정(Performance Measurement)에 활용
afterAgentCallback: 에이전트(Agent) 실행 후, 성능 지표 기록(Performance Metrics Logging) 및 상태 정리(State Cleanup) 수행
beforeModelCallback: LLM 호출 전, 입력 데이터 검증(Input Data Validation) 및 조건부 실행(Conditional Execution) 제어
이러한 콜백 훅(Callback Hooks)은 에이전트(Agent)의 관측 가능성(Observability)을 높이고, 비용 효율성(Cost Efficiency)을 개선하는 핵심 요소이다.
성능 측정 및 모니터링(Monitoring) 구현
본문에서는 beforeAgentCallback과 afterAgentCallback을 활용하여 에이전트(Agent)의 성능 지표(Performance Metrics)를 측정하고 로깅(Logging)하는 방법을 제시한다.
agentStartCallback: 세션 상태(Session State)에 시작 시간 기록
agentEndCallback: 종료 시간 기록 후, 총 실행 시간(Total Execution Time)을 계산하여 콘솔에 출력
console.log를 활용한 로깅(Logging): 간단한 구현이지만, 성능 병목(Performance Bottleneck)을 파악하는 데 유용
실제 운영 환경에서는 오픈텔레메트리(OpenTelemetry), 프로메테우스(Prometheus), 그라파나(Grafana) 등 분산 추적(Distributed Tracing) 및 모니터링 시스템(Monitoring System)을 연동하여 가시성을 확보하는 것이 일반적이다.
세션 상태 관리(Session State Management) 및 재사용성
ADK(Agent Development Kit) 콜백 훅(Callback Hooks)을 활용하여 세션 상태(Session State)를 관리하고, 코드의 재사용성(Reusability)을 높이는 방법을 설명한다.
beforeAgentCallback: 세션 변수 초기화(Session Variable Initialization)를 통해 각 에이전트(Agent) 실행 전에 데이터 정합성(Data Consistency) 유지
prepareEvaluationTool: 새로운 프로젝트 설명(Project Description)을 설정하여 데이터 격리(Data Isolation) 구현
createAfterToolCallback: 유효성 검사 시도 횟수(Validation Attempts)를 증가시키고, 최대 시도 횟수 초과 시 오류 처리(Error Handling)
이러한 패턴은 에이전트(Agent)의 유지보수성(Maintainability)을 향상시키고, 오류 발생 가능성(Error Probability)을 줄이는 데 기여한다.
조건부 실행(Conditional Execution) 및 토큰(Token) 절감
beforeModelCallback을 활용하여 LLM 호출 전에 입력 데이터(Input Data)를 검증하고, 불필요한 LLM 호출을 방지하여 비용 절감(Cost Reduction) 및 지연 시간 감소(Latency Reduction)를 달성한다.
isCompleted: 프로젝트 분석(Project Analysis)이 완료된 경우, LLM 호출을 건너뛰고 결과 반환(Result Return)
decision.verdict: 결정(Decision)이 이미 완료된 경우, LLM 호출을 건너뛰고 결과 반환(Result Return)
beforeModelCallback: LLM 호출 전 데이터 검증(Data Validation)을 통해 토큰 사용량(Token Usage)을 최적화
이러한 전략은 LLM의 과도한 사용(Overuse)을 방지하고, 에이전트(Agent)의 응답 시간(Response Time)을 개선하는 데 효과적이다.
ADK(Agent Development Kit) 생태계 및 활용 사례
본문에서는 ADK(Agent Development Kit)를 활용하여 AI 에이전트(AI Agent)를 구축하고, 다양한 콜백 훅(Callback Hooks)을 적용하는 방법을 제시한다.
Gemini in Vertex AI: LLM 모델(LLM Model)로 Gemini를 사용하며, 지역적 제약으로 인해 Vertex AI를 활용
MailHog: 로컬 환경에서 이메일 테스트(Email Testing)를 위해 사용
npm 패키지(Package) 관리: @google/adk, nodemailer 등 필요한 의존성(Dependency)을 설치하고, 버전 고정(Version Pinning)을 통해 안정성 확보
ADK는 AI 에이전트(AI Agent) 개발을 위한 강력한 프레임워크(Framework)이며, 콜백 훅(Callback Hooks)을 통해 유연하고 확장 가능한(Flexible and Scalable) 시스템을 구축할 수 있다.