O Memory Bank do Agent Platform permite fazer chamadas de API diretamente para sessões e o Memory Bank usando o SDK do Agent Platform. Use o SDK do Agent Platform se você não quiser que uma estrutura de agentes orquestre chamadas para você ou se quiser integrar sessões e o Memory Bank com estruturas de agentes diferentes do Kit de Desenvolvimento de Agente (ADK).
Este documento mostra como criar, fazer upload, recuperar e remover memórias usando chamadas de API.
Para o guia de início rápido usando o ADK, consulte Guia de início rápido do Memory Bank com o ADK.
Antes de começar
Para concluir as etapas demonstradas neste tutorial, siga primeiro as etapas em Configurar o Memory Bank.
Gerar memórias com as sessões do Agent Platform
Depois de configurar as sessões da plataforma de agentes e o Memory Bank, você pode criar sessões e anexar eventos a elas. As memórias são geradas como fatos da conversa do usuário com o agente para que fiquem disponíveis para interações futuras do usuário. Para mais informações, consulte Gerar memórias e Buscar memórias.
Crie uma sessão com um ID de usuário opaco. Todas as memórias geradas nessa sessão são automaticamente identificadas pelo escopo
{"user_id": "USER_ID"}, a menos que você forneça um escopo explicitamente ao gerar memórias.import vertexai client = vertexai.Client( project="PROJECT_ID", location="LOCATION" ) # This assumes that you already have an Agent Platform instance. If you don't, # you can create one using `agent_engine = client.agent_engines.create()`. session = client.agent_engines.sessions.create( # The name can be fetched using `agent_engine.api_resource.name`. name="AGENT_ENGINE_NAME", user_id="USER_ID" )Substitua:
PROJECT_ID: o ID do projeto.
LOCATION: sua região. Consulte as regiões com suporte do Memory Bank.
AGENT_ENGINE_NAME: o nome da instância do Agent Platform que você criou ou uma instância do Agent Platform. O nome precisa estar no seguinte formato:
projects/{your project}/locations/{your location}/reasoningEngine/{your reasoning engine}.USER_ID: um identificador do usuário. Todas as memórias geradas nessa sessão são automaticamente identificadas pelo escopo
{"user_id": "USER_ID"}, a menos que você forneça um escopo explicitamente ao gerar memórias.
Faça upload de eventos de forma iterativa para sua sessão. Os eventos podem incluir interações entre o usuário, o agente e as ferramentas. A lista ordenada de eventos representa o histórico de conversas da sessão. Esse histórico de conversas é usado como material de origem para gerar memórias para esse usuário específico.
import datetime client.agent_engines.sessions.events.append( name=session.response.name, author="user", # Required by Sessions. invocation_id="1", # Required by Sessions. timestamp=datetime.datetime.now(tz=datetime.timezone.utc), # Required by Sessions. config={ "content": { "role": "user", "parts": [{"text": "hello"}] } } )Para gerar memórias do histórico de conversas, acione uma solicitação de geração de memória para a sessão:
client.agent_engines.memories.generate( name=agent_engine.api_resource.name, vertex_session_source={ # `session` should have the format "projects/.../locations/.../reasoningEngines/.../sessions/...". "session": session.response.name }, # Optional when using Sessions. Defaults to {"user_id": session.user_id}. scope=SCOPE )
Substitua:
- (Opcional) SCOPE: um dicionário que representa o escopo das
memórias geradas, com um máximo de cinco pares de chave-valor e sem
*caracteres. 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.
Fazer upload de memórias
Como alternativa à geração de memórias usando diálogo
bruto, você pode fazer upload de memórias ou fazer com que
seus agentes as adicionem diretamente usando GenerateMemories com fatos
pré-extraídos.
Em vez de o Memory Bank extrair informações do seu conteúdo, você fornece os fatos que precisam ser armazenados sobre o usuário diretamente.
Para garantir a consistência com memórias geradas, tente
escrever fatos pré-extraídos na mesma perspectiva que você configurou para
o escopo especificado. Por
padrão, as memórias são geradas na perspectiva da primeira pessoa (por exemplo, I
am a software engineer).
client.agent_engines.memories.generate(
name=agent_engine.api_resource.name,
direct_memories_source={"direct_memories": [{"fact": "FACT"}]},
scope=SCOPE
)
Substitua:
FACT: o fato pré-extraído que precisa ser consolidado com memórias atuais. É possível fornecer até cinco fatos pré-extraídos em uma lista como esta:
{"direct_memories": [{"fact": "fact 1"}, {"fact": "fact 2"}]}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.
Como alternativa, você pode usar CreateMemory para fazer upload de memórias sem usar o Memory Bank para extração ou consolidação de memória.
memory = client.agent_engines.memories.create(
name=agent_engine.api_resource.name,
fact="This is a fact.",
scope={"user_id": "123"}
)
"""
Returns an AgentEngineMemoryOperation containing the created Memory like:
AgentEngineMemoryOperation(
done=True,
metadata={
"@type': 'type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateMemoryOperationMetadata",
"genericMetadata": {
"createTime": '2025-06-26T01:15:29.027360Z',
"updateTime": '2025-06-26T01:15:29.027360Z'
}
},
name="projects/.../locations/us-central1/reasoningEngines/.../memories/.../operations/...",
response=Memory(
create_time=datetime.datetime(2025, 6, 26, 1, 15, 29, 27360, tzinfo=TzInfo(UTC)),
fact="This is a fact.",
name="projects/.../locations/us-central1/reasoningEngines/.../memories/...",
scope={
"user_id": "123"
},
update_time=datetime.datetime(2025, 6, 26, 1, 15, 29, 27360, tzinfo=TzInfo(UTC))
)
)
"""
Recuperar e usar memórias
É possível recuperar memórias do usuário e incluí-las nas instruções do sistema para dar ao LLM acesso ao contexto personalizado.
Para mais informações sobre como recuperar memórias usando um método baseado em escopo, consulte Buscar memórias.
# Retrieve all memories for User ID 123.
retrieved_memories = list(
client.agent_engines.memories.retrieve(
name=agent_engine.api_resource.name,
scope={"user_id": "123"}
)
)
Você pode usar jinja para converter suas memórias estruturadas em um comando:
from jinja2 import Template
template = Template("""
<MEMORIES>
Here is some information about the user:
{% for retrieved_memory in data %}* {{ retrieved_memory.memory.fact }}
{% endfor %}</MEMORIES>
""")
prompt = template.render(data=retrieved_memories)
"""
Output:
<MEMORIES>
Here is some information about the user:
* This is a fact
</MEMORIES>
"""
Remover memórias
Há várias maneiras de excluir memórias da instância do Memory Bank, dependendo de como você quer selecionar quais memórias precisam ser removidas.
Remover pelo nome do recurso
Se você souber exatamente qual recurso de memória quer remover, poderá excluir uma memória específica usando o nome do recurso:
client.agent_engines.memories.delete(
name=MEMORY_NAME,
config={
# Set to false (default) if you want to delete the memory asynchronously.
"wait_for_completion": True
}
)
Substitua:
- MEMORY_NAME: o nome da memória a ser excluída. O nome precisa estar
no seguinte formato:
projects/{your project}/locations/{your location}/reasoningEngine/{your reasoning engine}/memories/{your memory}. É possível encontrar o nome da memória buscando memórias.
Remover por critérios
É possível usar a exclusão baseada em critérios para remover uma ou mais memórias. Somente as memórias que correspondem aos filtros fornecidos serão excluídas. É necessário especificar pelo
menos um de filter (aplicado a campos do sistema) ou filter_groups (aplicado a
campos de metadados).
operation = client.agent_engines.memories.purge(
name=agent_engine.api_resource.name,
# Specify at least one of `filter` or `filter_groups`.
filter="FILTER_STRING",
filter_groups=FILTER_GROUPS,
# Set to false (default) if you want to stage but not execute the purge operation.
force=True,
config={
# Set to false (default) if you want to purge memories asynchronously.
"wait_for_completion": True
}
)
Substitua:
- FILTER_STRING: uma string que usa
EBNF sintaxe para
filtrar campos do sistema. Os campos do sistema incluem
create_time,update_time,fact, etopics. Para mais informações sobre como filtrar campos do sistema, consulte a seção Filtrar por campos de metadados na página Buscar memórias. - FILTER_GROUPS: uma lista de dicionários ou objetos para filtrar metadados de memória. Para mais informações sobre como filtrar campos de metadados, consulte a seção Filtrar por campos do sistema na página Buscar memórias.
A operação vai retornar uma contagem de quantas memórias foram limpas (se force=True) ou seriam limpas se a operação fosse executada (se force=False).
print(operation.response.purge_count)
Por exemplo, é possível limpar todas as memórias que pertencem a um escopo para user_id "123":
operation = client.agent_engines.memories.purge(
name=agent_engine.api_resource.name,
filter="scope.user_id=\"123\""
force=True
)
Remover por significado semântico
Durante a geração de dados de memória,
o Memory Bank vai decidir se cria, atualiza ou exclui
memórias com base no conteúdo das informações recém-extraídas e nas
memórias atuais. Uma memória poderá ser excluída se as novas informações a contradizerem
ou se o conteúdo extraído instruir o Memory Bank a esquecer um
assunto (no caso do EXPLICIT_INSTRUCTIONS tópico
de memória).
Por exemplo, a solicitação a seguir excluiria as memórias atuais que contêm informações sobre preferências alimentares, se elas existirem para o scope especificado:
from google import genai
client.agent_engines.memories.generate(
name=agent_engine.api_resource.name,
direct_contents_source={
"events": [{
"content": genai.types.Content(
role="user",
parts=[
genai.types.Part.from_text(text="Forget my dietary preferences.")
]
)
}]
},
scope={...}
)
Limpar
Para limpar todos os recursos usados neste projeto, você pode excluir o Google Cloud projeto usado no guia de início rápido.
Caso contrário, exclua os recursos individuais criados neste tutorial, da seguinte maneira:
Use o exemplo de código a seguir para excluir a instância do Agent Platform, que também exclui todas as sessões ou memórias associadas à instância do Agent Platform.
agent_engine.delete(force=True)Exclua todos os arquivos criados localmente.
A seguir
Guia de início rápido com o Kit de Desenvolvimento de Agente
Introdução ao Kit de Desenvolvimento de Agente (ADK).