ADK에서 Session 이란?
에이전트끼리 맥락을 기억하게 하는데 ADK에서 이런 개별 대화 스래드를 추적하고 관리하기 위해 설계된 객체
Session 객체
사용자가 에이전트와 상호작용을 시작하면 SessionService는 Session객체를 생성한다. 이 객체는 하나의 특정 채팅 스레드와 관련된 모든 것을 담는 컨테이너 역할을 함.
Session 객체의 주요 속성은 다음과 같습니다:
- 식별 정보 (id, app_name, user_id): 대화를 고유하게 식별하는 레이블입니다.
- id: 이 특정 대화 스레드의 고유 식별자
- app_name: 이 대화가 속한 에이전트 애플리케이션의 이름
- user_id: 대화를 특정 사용자와 연결 (중요)
- 대화 기록 (events): 해당 스레드 내에서 발생한 모든 상호작용(Event 객체 - 사용자 메시지, 에이전트 응답, 도구 사용 등)의 시간순 목록이다.
- 세션 상태 (state): 오직 이 대화에만 관련된 임시 데이터를 저장하는 공간입니다. 에이전트가 대화 중에 사용하는 스크래치패드(메모장)와 같습니다. (다음 포스팅때 다를 예정)
- 활동 추적 (last_update_time): 이 대화에서 마지막 이벤트가 발생한 시간을 기록한 타임스탬프입니다
from google.adk.sessions import InMemorySessionService, Session
# 속성을 확인하기 위해 간단한 세션을 생성합니다.
temp_service = InMemorySessionService()
example_session = await temp_service.create_session(
app_name="my_app",
user_id="example_user",
state={"initial_key": "initial_value"} # state는 생성 시 초기화할 수 있습니다.
)
print("--- Session 속성 확인하기 ---")
print(f"ID (`id`): {example_session.id}")
print(f"애플리케이션 이름 (`app_name`): {example_session.app_name}")
print(f"사용자 ID (`user_id`): {example_session.user_id}")
print(f"상태 (`state`): {example_session.state}") # 여기서는 초기 상태만 보입니다.
print(f"이벤트 (`events`): {example_session.events}") # 처음에는 비어 있습니다.
print(f"마지막 업데이트 (`last_update_time`): {example_session.last_update_time}")
print("----------------------------")
SessionService 세션 관리
개발자가 직접 Session객체를 생성하거나 관리하지않는다. SessionService를 통해 대화 세션의 전체 생명주기를 관리할 수 있다.
역할
- 새 대화 시작: create_session으로 새로운 Session 객체를 생성
- 기존 대화 이어가기: get_session으로 특정 Session을 ID로 가져옴
- 진행 상황 저장: append_event로 새로운 상호작용(Event)을 세션 기록에 추가한다. (세션 state도 이 메커니즘을 통해 업데이트된다.)
- 대화 목록 조회: 특정 사용자의 활성 세션 목록을 찾는다..
- 정리: delete_session으로 대화가 끝난 Session 객체와 데이터를 삭제한다.
SessionService 구현체
- InMemorySessionService
- 메모리 활용방식 (휘발됨)
- 빠른 개발, 로컬 테스트, 예제 실행등에 용이
from google.adk.sessions import InMemorySessionService
session_service = InMemorySessionService()
- VertexAiSessionService
- 구글 VertexAI 인프라를 사용해서 세션을 관리한다.
- 영속적임
- Google Cloud에 배포된 확장가능한 프로덕션에 용이
# 필요: pip install google-adk[vertexai] 및 GCP 프로젝트 설정
from google.adk.sessions import VertexAiSessionService
PROJECT_ID = "your-gcp-project-id"
LOCATION = "us-central1"
REASONING_ENGINE_APP_NAME = "reasoning-engine-id"
session_service = VertexAiSessionService(project=PROJECT_ID, location=LOCATION)
# 서비스 메서드 호출 시 app_name으로 REASONING_ENGINE_APP_NAME 사용
- DatabaseSessionService
- RDB 연결로 세션 영구 저장
- 영속적
- 직접 관리하는 안정적인 영구 저장소가 필요할때 용이
세션의 생명 주기 (문서 복붙)

- 시작 또는 재개: Runner가 SessionService를 사용해 create_session (새 대화) 또는 get_session (기존 대화)을 호출합니다.
- 컨텍스트 제공: Runner가 적절한 Session 객체를 받아 에이전트에게 state와 events 기록을 제공합니다.
- 에이전트 처리: 사용자가 메시지를 보내면, 에이전트는 이 메시지와 세션의 state, events를 분석하여 응답을 결정합니다.
- 응답 및 상태 업데이트: 에이전트가 응답을 생성하면, Runner는 이를 Event 객체로 포장합니다.
- 상호작용 저장: Runner가 sessionService.append_event(session, event)를 호출합니다. 서비스는 Event를 기록에 추가하고, 이벤트 내 정보를 바탕으로 state를 저장소에 업데이트합니다.
- 다음 준비: 에이전트의 응답이 사용자에게 전달되고, 업데이트된 Session은 SessionService에 의해 저장되어 다음 턴을 준비합니다.
- 대화 종료: 대화가 끝나면 sessionService.delete_session()을 호출하여 저장된 세션 데이터를 정리할 수 있습니다.
이제 러너와 세션을 활용해서 adk api_server를 활용해서 api서버로 띄워서 내 애플리케이션에 내가 설계한 에이전트들을 붙여볼 수 있을 것 같다.
'AI' 카테고리의 다른 글
| ADK(Agent Development Kit) 스터디 2주차 (4) Runner 에 대해서 (내가 만든 ADK Agent를 API로 사용하고 싶다!) (0) | 2025.07.18 |
|---|---|
| ADK(Agent Development Kit) 스터디 1주차 (3) Workflow agent 개념 (0) | 2025.07.14 |
| ADK(Agent Development Kit) 스터디 1주차 (2) agent and Tools (1) | 2025.07.14 |
| ADK(Agent Development Kit) 스터디 1주차 (1) ADK에 대해 (5) | 2025.07.09 |
| ADK(Agent Development Kit) 스터디 1주차 (0) 사전준비 (2) | 2025.07.08 |