✅ ADK 대화 문맥 구성요소 요약
📌 왜 Context가 중요한가?
- **의미 있는 다중 턴 대화(Multi-turn conversation)**를 위해, 에이전트는 이전 대화 내용과 상태를 기억해야 합니다.
- 이를 위해 ADK는 Session, State, Memory 개념을 통해 문맥을 구조화하고 관리할 수 있게 지원합니다.
🧩 핵심 개념 비교
구성요소설명예시저장 위치
Session |
하나의 대화 흐름 (단일 스레드) |
"이번 쇼핑 대화" |
SessionService |
State |
현재 Session 내 임시 데이터 |
장바구니, 사용자 입력 |
Session.state |
Memory |
장기 기억 또는 외부 지식 |
이전 대화에서 입력한 취향, 검색한 정보 |
MemoryService |
🟡 Session (세션)
- 하나의 연속된 대화 스레드를 의미
- 이 안에는 **대화 기록(Event 목록)**과 **현재 상태(State)**가 포함됨
- 각 세션은 고유하며, 별도의 주제나 작업 흐름을 가질 수 있음
🟢 State (세션 상태)
- 세션 내에서 임시로 유지되는 값들
- 예: 사용자가 선택한 옵션, 대화 중 설정한 변수들
- ctx.session.state 를 통해 읽고 쓸 수 있음
- 해당 세션 내에서만 유효함
🔵 Memory (장기 기억)
- 여러 세션에 걸친 지식 또는 외부에서 가져온 정보의 저장소
- 검색 가능하며 이전의 컨텍스트를 불러올 수 있음
- 주로 완료된 세션의 요약 정보를 학습시키거나 사용자 프로필, FAQ 데이터 저장에 활용
🛠️ Context를 관리하는 서비스
서비스역할구현체
SessionService |
세션 및 상태 관리 |
InMemorySessionService, DB 기반, 클라우드 기반 등 |
MemoryService |
장기 메모리 저장소 관리 |
InMemoryMemoryService, 검색엔진 기반 등 |
🔸 InMemory 구현체는 개발용이며, 앱 재시작 시 데이터가 사라짐
🔄 관계 정리
🧠 핵심 요약
항목요약 설명
Session |
하나의 대화 흐름 전체를 추적 (이벤트 기록 포함) |
State |
현재 세션 내에서만 유효한 임시 데이터 |
Memory |
여러 세션 또는 외부 데이터를 포함하는 장기 기억 저장소 |
서비스 계층 |
Session → SessionService, Memory → MemoryService에서 관리 |