대화형 컨텍스트 소개: 세션, 상태, 그리고 메모리¶
의미 있는, 여러 턴에 걸친 대화는 에이전트가 컨텍스트를 이해해야 합니다. 인간과 마찬가지로, 에이전트는 연속성을 유지하고 반복을 피하기 위해 대화 기록, 즉 어떤 말이 오고 갔고 어떤 작업이 수행되었는지를 기억해야 합니다. 에이전트 개발 키트(ADK)는 Session, State, Memory를 통해 이 컨텍스트를 관리하는 구조화된 방법을 제공합니다.
핵심 개념¶
에이전트와의 여러 대화 인스턴스를, 장기적인 지식을 활용할 수 있는 별개의 대화 스레드로 생각해보세요.
-
Session: 현재 대화 스레드- 사용자와 에이전트 시스템 간의 단일하고 진행 중인 상호작용을 나타냅니다.
- 해당 특정 상호작용 동안 에이전트가 수행한 메시지와 작업의 시간순 시퀀스(
이벤트라고 함)를 포함합니다. - 또한
Session은 이 대화 동안에만 관련된 임시 데이터(State)를 보유할 수 있습니다.
-
State(session.state): 현재 대화 내의 데이터- 특정
Session내에 저장된 데이터입니다. - (이 채팅 중의 쇼핑 카트 항목, 이 세션에서 언급된 사용자 기본 설정 등) 현재 활성화된 대화 스레드에만 관련된 정보를 관리하는 데 사용됩니다.
- 특정
-
Memory: 검색 가능한, 세션 간 정보- 여러 과거 세션에 걸쳐 있거나 외부 데이터 소스를 포함할 수 있는 정보 저장소를 나타냅니다.
- 에이전트가 즉각적인 대화를 넘어 정보나 컨텍스트를 기억하기 위해 검색할 수 있는 지식 베이스 역할을 합니다.
컨텍스트 관리: 서비스¶
ADK는 이러한 개념을 관리하기 위한 서비스를 제공합니다:
-
SessionService: 여러 대화 스레드(Session객체)를 관리합니다.- 라이프사이클을 처리합니다: 개별
Session의 생성, 검색, 업데이트(이벤트추가,State수정), 삭제.
- 라이프사이클을 처리합니다: 개별
-
MemoryService: 장기 지식 저장소(Memory)를 관리합니다.- (주로 완료된
Session으로부터) 정보를 장기 저장소로 수집하는 것을 처리합니다. - 쿼리를 기반으로 저장된 지식을 검색하는 메서드를 제공합니다.
- (주로 완료된
구현: ADK는 SessionService와 MemoryService 모두에 대해 다양한 구현을 제공하여, 애플리케이션의 필요에 가장 적합한 스토리지 백엔드를 선택할 수 있도록 합니다. 특히, 두 서비스 모두에 인메모리(in-memory) 구현이 제공됩니다. 이는 로컬 테스트 및 빠른 개발을 위해 특별히 설계되었습니다. 이러한 인메모리 옵션을 사용하여 저장된 모든 데이터(세션, 상태 또는 장기 지식)는 애플리케이션이 다시 시작되면 손실된다는 점을 기억하는 것이 중요합니다. 로컬 테스트를 넘어선 영속성 및 확장성을 위해 ADK는 클라우드 기반 및 데이터베이스 서비스 옵션도 제공합니다.
요약:
Session&State: 현재 상호작용에 중점 – 단일하고 활성 상태인 대화의 기록과 데이터. 주로SessionService에 의해 관리됩니다.- Memory: 과거 및 외부 정보에 중점 – 여러 대화에 걸쳐 있을 수 있는 검색 가능한 아카이브.
MemoryService에 의해 관리됩니다.
다음 단계¶
다음 섹션에서는 이러한 각 구성 요소에 대해 더 깊이 알아볼 것입니다:
Session: 구조와이벤트이해하기.State: 세션별 데이터를 효과적으로 읽고, 쓰고, 관리하는 방법.SessionService: 세션에 적합한 스토리지 백엔드 선택하기.MemoryService: 더 넓은 컨텍스트를 저장하고 검색하기 위한 옵션 탐색하기.
이러한 개념을 이해하는 것은 복잡하고, 상태를 유지하며, 컨텍스트를 인식하는 대화에 참여할 수 있는 에이전트를 구축하는 데 기본이 됩니다.