기억 가져오기

이 페이지에서는 생성되고 업로드된 기억을 메모리 뱅크에서 가져오는 방법을 설명합니다. 메모리 뱅크 구성, 생성, 사용에 관한 전체 워크플로는 REST API 사용하기 빠른 시작을 참고하세요.

생성된 기억을 가져오는 옵션은 다음과 같습니다.

  • 기억 가져오기: 단일 기억의 전체 콘텐츠를 가져옵니다.

  • 기억 나열: 기억을 나열합니다.

  • 기억 검색: 범위 기반 기억 검색을 사용하여 기억을 검색합니다. 유사 검색을 사용하거나 범위 내의 모든 기억을 검색합니다.

환경 설정

시작하기 전에 환경과 Agent Engine 인스턴스를 설정해야 합니다. 이 섹션에서는 Python 개발 환경을 설정했거나 Python 개발 환경이 포함된 런타임(예: Colab)을 사용하고 있다고 가정합니다.

라이브러리 가져오기

Vertex AI SDK를 설치합니다.

  pip install google-cloud-aiplatform>=1.100.0

Vertex AI SDK 클라이언트 설정

  import vertexai

  client = vertexai.Client(
      project="PROJECT_ID",
      location="LOCATION",
  )

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • LOCATION: 리전. Vertex AI Agent Engine 메모리 뱅크에는 us-central1만 지원됩니다.

Agent Engine 인스턴스 구성

메모리 뱅크에서 기억을 가져오려면 먼저 Agent Engine의 인스턴스가 필요합니다. 새 인스턴스를 만들거나 기존 인스턴스를 가져올 수 있습니다. 먼저 새로 만들거나 기억을 생성하지 않으면 새 Agent Engine 인스턴스는 비어 있습니다.

만들기

agent_engine = client.agent_engines.create()

기존 사용

agent_engine = client.agent_engines.get(name="AGENT_ENGINE_NAME")

다음을 바꿉니다.

  • AGENT_ENGINE_NAME: 에이전트 엔진의 이름. projects/.../locations/.../reasoningEngines/... 형식이어야 합니다. Vertex AI Agent Engine 메모리 뱅크의 경우 us-central1에서만 Agent Engine 인스턴스를 사용할 수 있습니다.

기억 가져오기

GetMemories을 사용하여 단일 기억의 전체 콘텐츠를 가져옵니다.

memory = client.agent_engines.get_memory(name="MEMORY_NAME")

다음을 바꿉니다.

  • MEMORY_NAME: 'projects/.../locations/.../reasoningEngines/.../memories...' 형식의 정규화된 기억 이름

기억 나열

ListMemories를 사용하여 메모리 뱅크의 모든 기억을 가져옵니다.

pager = client.agent_engines.list_memories(name=agent_engine.api_resource.name)
for page in pager:
  print(page)

범위 기반 검색을 사용하여 기억 가져오기

RetrieveMemories를 사용하여 특정 범위의 기억을 검색할 수 있습니다. 검색 요청과 정확히 동일한 범위(순서와 관계 없음)의 기억만 반환됩니다. 예를 들어 {"user_id": "123"}를 사용하여 특정 사용자로 범위가 지정된 모든 기억을 검색할 수 있습니다. 반환된 기억이 없으면 메모리 뱅크에 제공된 범위의 기억이 없는 것입니다.

기억의 범위는 기억가 생성되거나 만들어질 때 정의되며 변경할 수 없습니다.

RetrieveMemories를 사용하여 특정 범위에서 다음 작업을 실행할 수 있습니다.

특정 범위의 기억이 많은 경우 유사 검색을 사용하여 유사 검색 파라미터를 제공하여 가장 유사한 기억만 검색할 수 있습니다. 메모리 뱅크는 유사 검색을 실행할 때 요청과 정확히 동일한 범위의 기억만 고려합니다. 유사성 검색은 기억의 사실과 요청의 검색어 간에 임베딩 벡터를 비교합니다.

반환된 기억은 가장 유사한 기억(유클리드 거리가 가장 짧음)에서 가장 유사하지 않은 기억 (유클리드 거리가 가장 큼) 순으로 정렬됩니다.

results = client.agent_engines.retrieve_memories(
    name=agent_engine.api_resource.name,
    scope=SCOPE,
    similarity_search_params={
        "search_query": "QUERY",
        # Optional. Defaults to 3.
        "top_k": 3
    }
)
# RetrieveMemories returns a pager. You can use `list` to retrieve all memories.
list(results)

"""
Returns:

[
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is a fact."
      },
      distance=0.5
    ),
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is another fact."
      },
      distance=0.7
    ),
]
"""

다음을 바꿉니다.

  • QUERY: 유사 검색을 실행할 쿼리. 예를 들어 대화의 마지막 사용자 차례를 쿼리로 사용할 수 있습니다.

  • SCOPE: 유사성 검색의 범위를 나타내는 사전. 예를 들면 {"user_id": "123"}입니다. 요청과 범위가 동일한 기억만 고려됩니다.

모든 기억 검색

유사성 검색 파라미터가 제공되지 않으면 RetrieveMemories는 현재 대화와의 유사성과 관계없이 제공된 범위가 있는 모든 기억을 반환합니다.

results = client.agent_engines.retrieve_memories(
    name=agent_engine.api_resource.name,
    scope=SCOPE
)
# RetrieveMemories returns a pager. You can use `list` to retrieve all pages' memories.
list(results)

"""
Returns:

[
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is a fact."
      }
    ),
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is another fact."
      }
    ),
]
"""

다음을 바꿉니다.

  • SCOPE: 검색 범위를 나타내는 사전. 예를 들면 {"user_id": "123"}입니다. 요청과 범위가 동일한 기억만 반환됩니다.