AI Agent 개발: 세션 및 메모리 관리와 Google Cloud 통합
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

세션과 메모리 추가를 통한 AI 에이전트 개발

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

인공지능

대상자

AI 에이전트를 개발하는 개발자(초보자 및 중급자)

핵심 요약

  • 세션 관리는 대화의 문맥을 유지하기 위해 Session 객체를 사용하여 사용자 ID, 앱 이름, 이벤트 기록, 상태 정보를 저장
  • 세션 서비스로는 InMemorySessionService, DatabaseSessionService, VertexAiSessionService가 제공되며, 각각 로컬 개발, 프로덕션, Google Cloud 통합에 적합
  • 메모리 서비스로는 InMemoryMemoryServiceVertexAiRagMemoryService를 사용하여 세션 간의 컨텍스트를 유지하고 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 대체 솔루션 구현 권장