세션과 메모리 추가를 통한 AI 에이전트 개발
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인공지능
대상자
AI 에이전트를 개발하는 개발자(초보자 및 중급자)
핵심 요약
- 세션 관리는 대화의 문맥을 유지하기 위해
Session
객체를 사용하여 사용자 ID, 앱 이름, 이벤트 기록, 상태 정보를 저장 - 세션 서비스로는
InMemorySessionService
,DatabaseSessionService
,VertexAiSessionService
가 제공되며, 각각 로컬 개발, 프로덕션, Google Cloud 통합에 적합 - 메모리 서비스로는
InMemoryMemoryService
와VertexAiRagMemoryService
를 사용하여 세션 간의 컨텍스트를 유지하고 RAG 기반의 임베딩 저장/검색 가능 - 상태 관리는
output_key
,ToolContext
,EventActions.state_delta
를 통해 업데이트 가능하며, 복잡한 객체는 저장 금지
섹션별 세부 요약
1. 세션의 역할과 구성 요소
Session
객체는 사용자 ID, 앱 이름, 이벤트 기록, 상태 정보를 저장하여 대화의 문맥을 유지- 기본 식별자:
id
,appName
,userId
- 이벤트: 사용자 메시지, 도구 호출, 에이전트 응답의 시퀀스 기록
- 상태: 에이전트가 세션 중에 엑세스 및 수정 가능한 구조화된 데이터 저장
2. 세션 서비스 종류 및 사용 시나리오
- InMemorySessionService: 로컬 개발 및 프로토타이핑에 적합, 앱 재시작 시 데이터 삭제
```python
from google.adk.sessions import InMemorySessionService
session_service = InMemorySessionService()
```
- DatabaseSessionService: 프로덕션 환경에서 관계형 데이터베이스 사용, 내장 마이그레이션 시스템 제공
```python
from google.adk.sessions import DatabaseSessionService
session_service = DatabaseService(db_url="your_database_url")
```
- VertexAiSessionService: Google Cloud와 Vertex AI 통합, 관리형 인프라 활용
```python
from google.adk.sessions import VertexAiSessionService
session_service = VertexAiSessionService(project="your-gcp-project-id", location="us-central1")
```
3. 상태 관리 방법
- output_key: 에이전트 출력 값 자동 저장
```python
ticket_finder_agent = LlmAgent(output_key="best_ticket")
```
- ToolContext/CallbackContext: 도구 내부에서 상태 수동 업데이트
```python
def purchase_ticket(tool_context: ToolContext):
tool_context.state["waiting_for_purchase"] = False
```
- EventActions.state_delta: 시스템 수준 이벤트로 상태 변경 정의
```python
state_changes = {"ticket_in_screen": "AV-258"}
actions = EventActions(state_delta=state_changes)
```
4. 메모리 서비스 및 RAG 활용
- InMemoryMemoryService: 단일 세션 내 정보 접근 가능
- VertexAiRagMemoryService: RAG 기반 임베딩 저장 및 세션 간 컨텍스트 검색
```python
from google.adk.memory import VertexAiRagMemoryService
memory_service = VertexAiRagMemoryService(
rag_corpus="projects/your-gcp-project-id/locations/us-central1/ragCorpora/your-corpus-id",
similarity_top_k=5,
vector_distance_threshold=0.7
)
```
- 메모리 저장: 세션 종료 후
add_session_to_memory
로 데이터 추가
```python
await memory_service.add_session_to_memory(session)
```
5. 상태 관리 시 주의사항
- 복잡한 객체/클래스는 저장 금지, 원시 데이터(문자열, 숫자, 불리언) 사용 권장
- 데이터 범위 지정:
- session.state["last_message"]
: 세션 내부 공유
- session.state["user:theme"]
: 사용자 전체 세션 공유
- session.state["app:language"]
: 앱 전체 공유
- session.state["temp:step"]
: 일시적 정보
결론
- 세션 서비스 선택: 로컬 개발은
InMemorySessionService
, 프로덕션은DatabaseSessionService
, Google Cloud 통합은VertexAiSessionService
사용 - 메모리 구현: RAG 기반
VertexAiRagMemoryService
로 세션 간 컨텍스트 유지, 또는 Pinecone/Qdrant 등 외부 벡터 DB 사용 가능 - 실무 팁: 상태 관리 시 원시 데이터와 범위 지정을 통해 데이터 무결성 보장, Vertex AI가 아닌 환경에서는 RAG 대체 솔루션 구현 권장