← 프로젝트 목록

Google ADK 생활 비서 챗봇

건강 기록, 일정 관리, 회고 등 개인 생활 전반을 지원하는 AI 멀티 에이전트 챗봇. 계층적 에이전트 아키텍처와 시맨틱 메모리 검색을 적용했다.

역할

풀스택 개발자 (개인)

기간

2025 — 현재

Kotlin Python 3.12 Spring Boot 4.0 (WebFlux) Google ADK PostgreSQL (pgvector) R2DBC Keycloak Swift (iOS)

주요 성과

  • Router → LifeAgent + ReflectAgent 계층적 에이전트 아키텍처 설계
  • LLM 기반 의도 분류(15종) + 신뢰도 기반 동적 라우팅
  • pgvector 시맨틱 메모리 검색 및 iOS 앱 개발

배경

매일 반복되는 건강 기록, 일정 확인, 회고 같은 루틴을 하나의 대화 인터페이스로 통합하고 싶었다. 기존 앱들은 기능별로 파편화돼 있어서 “토스트 먹었어”라는 한 마디로 식단 기록부터 칼로리 계산까지 처리하는 개인 비서를 직접 만들기로 했다. Google ADK의 멀티 에이전트 프레임워크를 활용해 역할별 에이전트를 분리하고 자연스러운 대화 흐름을 설계했다.

에이전트 아키텍처

---
config:
  theme: base
  themeVariables:
    primaryColor: "#e0f2fe"
    primaryTextColor: "#0c4a6e"
    primaryBorderColor: "#38bdf8"
    lineColor: "#94a3b8"
    fontSize: "14px"
---
flowchart TD
    Router["AuraRouter\n(최상위 라우터)"]
    Router --> Life["LifeAgent\n(생활비서)"]
    Router --> Reflect["ReflectAgent\n(회고비서)\n일간·주간·월간 회고"]
    Router --> Board["BoardAgent\n(대시보드)\n통계 데이터 제공"]

    Life --> Record["RecordAgent\n식단·운동·감정·복약 기록"]
    Life --> Schedule["ScheduleAgent\n일정 CRUD"]
    Life --> Mission["MissionManager\n반복 루틴 관리"]
    Life --> Memo["MemoAgent\n메모 저장·시맨틱 검색"]
    Life --> Goal["GoalAgent\n목표 설정·추적"]
    Life --> Executor["MissionExecutor\n앱 실행 시 미션 자동 실행"]
    Life --> Chat["ChatAgent\n일반 대화 (폴백)"]

    style Router fill:#fef3c7,stroke:#f59e0b,color:#78350f
    style Life fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f
    style Reflect fill:#ede9fe,stroke:#8b5cf6,color:#4c1d95
    style Board fill:#d1fae5,stroke:#10b981,color:#064e3b
    style Record fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e
    style Schedule fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e
    style Mission fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e
    style Memo fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e
    style Goal fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e
    style Executor fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e
    style Chat fill:#e0f2fe,stroke:#38bdf8,color:#0c4a6e

사용자 메시지가 들어오면 AuraRouter가 assistant 유형(생활/회고)을 판단하고 LifeAgent 또는 ReflectAgent로 전달한다. LifeAgent는 LLM 기반 의도 분류기로 건강 기록·일정·미션·메모·목표 등 15종 인텐트를 식별하고 신뢰도 점수에 따라 적합한 서브 에이전트를 동적으로 선택한다.

사용자의 직접 입력뿐 아니라 앱 실행 시 미션 자동 실행, 시간대별 인사·넛지·리마인더 같은 시스템 트리거도 지원해 사용자와 능동적으로 상호작용한다.

기술 스택 선택 이유

  • Google ADK + Gemini 2.0 Flash: 에이전트 간 계층적 라우팅과 세션 상태 관리가 프레임워크 수준에서 지원돼 직접 구현할 오케스트레이션 코드를 줄였다
  • Spring Boot 4.0 WebFlux + R2DBC: 에이전트의 비동기 스트리밍 응답을 논블로킹으로 처리하기 위해 리액티브 스택 선택
  • PostgreSQL + pgvector: 메모 검색에 시맨틱 유사도 검색을 적용해 키워드가 정확히 일치하지 않아도 관련 메모를 찾을 수 있게 했다
  • Keycloak 듀얼 인증: 모바일 앱 사용자와 에이전트 시스템의 인증을 분리해 보안과 편의성을 모두 확보했다

현재 진행 상황

MVP 단계로 핵심 에이전트(Router · LifeAgent · ReflectAgent)와 건강 기록·일정 관리 기능이 동작하는 상태다. iOS 앱 프론트엔드를 Swift로 개발 중이며 넛지·리마인더 같은 능동적 상호작용 기능을 확장하고 있다.