Com o Memory Bank, é possível criar memórias de longo prazo com base nas conversas entre o usuário e seu agente. Em seguida, o banco de memórias consolida e organiza as recordações de um usuário específico, adicionando, atualizando e removendo memórias ao longo do tempo. Nesta página, descrevemos como acionar a geração de recordações e recebê-las.
Quando você aciona a geração de recordações, o Banco de recordações realiza automaticamente as seguintes operações:
Extração: extrai informações sobre o usuário das conversas dele com o agente.
Consolidação: identifica se as memórias atuais com o mesmo escopo precisam ser excluídas ou atualizadas. O Memory Bank verifica se as novas recordações não são duplicadas ou contraditórias antes de mesclá-las com as atuais.
Nem todas as interações do user agent resultam na criação ou atualização de memórias. O Memory Bank só mantém informações consideradas valiosas para interações futuras, que podem incluir os seguintes tipos de informações:
- Informações sobre o usuário, como preferências, nomes, relacionamentos, hobbies e datas importantes. Por exemplo, "Trabalho no Google", "Prefiro o assento do corredor" ou "Meu aniversário de casamento é em 31 de dezembro".
- Principais eventos de conversa e resultados de tarefas. Por exemplo, "Comprei passagens aéreas de ida e volta entre JFK e SFO. Vou sair em 1º de junho de 2025 e voltar em 7 de junho de 2025".
- Informações que o usuário pede explicitamente para o agente lembrar. Por exemplo, se o usuário disser "Lembre-se de que eu uso principalmente Python", o Memory Bank vai gerar uma memória como "Eu uso principalmente Python".
As recordações só podem ser extraídas de texto, arquivos inline e dados de arquivos no conteúdo de origem. Todo o outro conteúdo, incluindo chamadas de função e respostas, é ignorado ao gerar recordações.
As recordações podem ser extraídas de imagens, vídeos e áudios fornecidos pelo usuário. Se o contexto fornecido pela entrada multimodal for considerado significativo pelo Memory Bank para interações futuras, uma memória textual poderá ser criada, incluindo informações extraídas da entrada. Por exemplo, se o usuário fornecer uma imagem de um golden retriever com o texto "Este é meu cachorro", o Banco de memórias vai gerar uma memória como "Meu cachorro é um golden retriever".
Configurar o ambiente
Antes de começar a gerar recordações, configure seu ambiente e a instância do Agent Engine. Esta seção pressupõe que você configurou um ambiente de desenvolvimento em Python ou está usando um ambiente de execução com um ambiente de desenvolvimento em Python, como o Colab.
Importar bibliotecas
Instale o SDK da Vertex AI:
pip install google-cloud-aiplatform>=1.100.0
Configurar um cliente do SDK da Vertex AI
import vertexai
client = vertexai.Client(
project="PROJECT_ID",
location="LOCATION",
)
Substitua:
- PROJECT_ID: o ID do projeto.
- LOCATION: sua região. Somente
us-central1
é compatível com o banco de memória do Vertex AI Agent Engine.
Configurar a instância do Agent Engine
Para buscar recordações do banco de memória, primeiro você precisa de uma instância de um Agent Engine. É possível criar uma instância ou acessar uma já existente. As novas instâncias ficam vazias, a menos que você primeiro crie ou gere recordações.
Criar
agent_engine = client.agent_engines.create()
Usar atual
agent_engine = client.agent_engines.get(name="AGENT_ENGINE_NAME")
Substitua:
- AGENT_ENGINE_NAME: o nome do mecanismo de agente. Ele precisa estar no formato
projects/.../locations/.../reasoningEngines/...
. Só é possível usar instâncias do Agent Engine emus-central1
para o banco de memória do Vertex AI Agent Engine.
Gerar recordações
Você pode acionar a geração de memórias usando GenerateMemories
no final de uma sessão ou em intervalos regulares dentro de uma sessão. A geração de memória extrai o contexto principal das conversas de origem e o combina com as memórias existentes para o mesmo escopo. Por exemplo, é possível criar memórias no nível da sessão usando um escopo como {"user_id": "123", "session_id": "456"}
. As recordações com o mesmo escopo podem ser consolidadas e recuperadas juntas.
Ao chamar GenerateMemories
, você precisa fornecer a conversa de origem usando Sessões do mecanismo de agente ou diretamente no formato JSON:
Sessões do Agent Engine
Com as sessões do Agent Engine, o Memory Bank usa eventos de sessão como a conversa de origem para geração de memória.
Para definir o escopo das recordações geradas, o Banco de recordações extrai e usa o ID do usuário da sessão por padrão. Por exemplo, o escopo das memórias é armazenado como {"user_id": "123"}
se o user_id
da sessão for "123". Você também pode fornecer um scope
diretamente, o que substitui o uso do user_id
da sessão como escopo.
client.agent_engines.generate_memories(
name=agent_engine.api_resource.name,
vertex_session_source={
"session": "SESSION_NAME"
},
# Optional when using Agent Engine Sessions. Defaults to {"user_id": session.user_id}.
scope=SCOPE,
config={
"wait_for_completion": True
}
)
Substitua:
SESSION_NAME: o nome da sessão.
(Opcional) SCOPE: um dicionário que representa o escopo das recordações geradas. Por exemplo,
{"session_id": "MY_SESSION"}
. Somente as memórias com o mesmo escopo são consideradas para consolidação. Se não for fornecido,{"user_id": session.user_id}
será usado.
Formato JSON
Forneça a conversa de origem diretamente no formato JSON se você estiver usando um armazenamento de sessão diferente das sessões do Agent Engine:
client.agent_engines.generate_memories(
name=agent_engine.api_resource.name,
direct_contents_source={
"events": EVENTS
},
scope=SCOPE,
config={
"wait_for_completion": True
}
)
Substitua:
- EVENTS: lista de dicionários de conteúdo. Exemplo:
[
{
"content": {
"role": "user",
"parts": [
{"text": "I'm work with LLM agents!"}
]
}
}
]
- SCOPE: um dicionário que representa o escopo das memórias geradas. Por exemplo,
{"session_id": "MY_SESSION"}
. Somente as memórias com o mesmo escopo são consideradas para consolidação.
GenerateMemories
retorna um AgentEngineGenerateMemoriesOperation
que contém uma lista de recordações geradas:
AgentEngineGenerateMemoriesOperation(
name="projects/.../locations/.../reasoningEngines/.../operations/...",
done=True,
response=GenerateMemoriesResponse(
generatedMemories=[
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action=<GenerateMemoriesResponseGeneratedMemoryAction.CREATED: "CREATED">,
),
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action=<GenerateMemoriesResponseGeneratedMemoryAction.UPDATED: "UPDATED">,
),
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action=<GenerateMemoriesResponseGeneratedMemoryAction.DELETED: "DELETED">,
),
]
)
)
Cada memória gerada inclui a action
que foi realizada nela:
CREATED
: indica que uma nova recordação foi adicionada, representando um conceito novo que não foi capturado pelas recordações atuais.UPDATED
: indica que uma memória existente foi atualizada, o que acontece se ela abordava conceitos semelhantes às informações extraídas recentemente. O fato da memória pode ser atualizado com novas informações ou permanecer o mesmo.DELETED
: indica que a memória existente foi excluída porque as informações dela eram contraditórias às novas informações extraídas da conversa.
Para memórias CREATED
ou UPDATED
, use GetMemories
para recuperar o conteúdo completo da memória. Recuperar DELETED
recordações resulta em um erro 404.