Memory Bank te permite crear recuerdos a largo plazo a partir de las conversaciones entre el usuario y tu agente. En esta página se describe cómo funciona la generación de recuerdos, cómo puedes personalizar la forma en que se extraen y cómo activar la generación de recuerdos.
Información sobre la generación de recuerdos
Memory Bank extrae recuerdos de datos de origen y los organiza automáticamente en una colección específica (definida por un scope
) añadiendo, actualizando y eliminando recuerdos con el tiempo.
Cuando activas la generación de recuerdos, Memory Bank realiza las siguientes operaciones:
Extracción: extrae información sobre el usuario de sus conversaciones con el agente. Solo se conservará la información que coincida con al menos uno de los temas de memoria de tu instancia.
Consolidación: identifica si se deben eliminar o actualizar los recuerdos que ya existen con el mismo ámbito en función de la información extraída. Banca de recuerdos comprueba que los recuerdos nuevos no sean duplicados ni contradictorios antes de combinarlos con los que ya tienes. Si los recuerdos que ya tienes no se solapan con la información nueva, se creará un nuevo recuerdo.
Los recuerdos solo se pueden extraer de texto, archivos insertados y datos de archivos del contenido de origen. Todo el contenido restante, incluidas las llamadas a funciones y las respuestas, se ignora al generar recuerdos.
Los recuerdos se pueden extraer de imágenes, vídeos y audios proporcionados por el usuario. Si Memory Bank considera que el contexto proporcionado por la entrada multimodal es significativo para futuras interacciones, se puede crear una memoria textual que incluya información extraída de la entrada. Por ejemplo, si el usuario proporciona una imagen de un golden retriever con el texto "Este es mi perro", Banco de recuerdos genera un recuerdo como "Mi perro es un golden retriever".
Temas de recuerdos
Los "temas de memoria" identifican qué información considera Memory Bank que es significativa y, por lo tanto, debe conservarse como recuerdos generados. Memory Bank admite dos tipos de temas de memoria:
Temas gestionados: la etiqueta y las instrucciones las define Memory Bank. Solo tienes que proporcionar el nombre del tema gestionado. Por ejemplo:
Diccionario
memory_topic = { "managed_memory_topic": { "managed_topic_enum": "USER_PERSONAL_INFO" } }
Basado en clases
from vertexai.types import ManagedTopicEnum from vertexai.types import MemoryBankCustomizationConfigMemoryTopic as MemoryTopic from vertexai.types import MemoryBankCustomizationConfigMemoryTopicManagedMemoryTopic as ManagedMemoryTopic memory_topic = MemoryTopic( managed_memory_topic=ManagedMemoryTopic( managed_topic_enum=ManagedTopicEnum.USER_PERSONAL_INFO ) )
Temas personalizados: tú defines la etiqueta y las instrucciones al configurar tu instancia de Memory Bank. Se usarán en la petición del paso de extracción de Memory Bank. Por ejemplo:
Diccionario
memory_topic = { "custom_memory_topic": { "label": "business_feedback", "description": """Specific user feedback about their experience at the coffee shop. This includes opinions on drinks, food, pastries, ambiance, staff friendliness, service speed, cleanliness, and any suggestions for improvement.""" } }
Basado en clases
from vertexai.types import MemoryBankCustomizationConfigMemoryTopic as MemoryTopic from vertexai.types import MemoryBankCustomizationConfigMemoryTopicCustomMemoryTopic as CustomMemoryTopic memory_topic = MemoryTopic( custom_memory_topic=CustomMemoryTopic( label="business_feedback", description="""Specific user feedback about their experience at the coffee shop. This includes opinions on drinks, food, pastries, ambiance, staff friendliness, service speed, cleanliness, and any suggestions for improvement.""" ) )
Cuando se usan temas personalizados, se recomienda proporcionar ejemplos con pocos ejemplos para demostrar cómo se deben extraer los recuerdos de la conversación.
De forma predeterminada, Memory Bank conserva todos los temas gestionados siguientes:
- Información personal (
USER_PERSONAL_INFO
): información personal importante sobre el usuario, como nombres, relaciones, aficiones y fechas importantes. Por ejemplo, "Trabajo en Google" o "Mi aniversario de boda es el 31 de diciembre". - Preferencias de los usuarios (
USER_PREFERENCES
): gustos, rechazos, estilos o patrones preferidos, ya sean explícitos o implícitos. Por ejemplo, "Prefiero el asiento del medio". - Eventos clave de la conversación y resultados de las tareas (
KEY_CONVERSATION_DETAILS
): hitos o conclusiones importantes de la conversación. Por ejemplo, "He reservado billetes de avión de ida y vuelta entre JFK y SFO. Me voy el 1 de junio del 2025 y vuelvo el 7 de junio del 2025". - Instrucciones explícitas para recordar o olvidar (
EXPLICIT_INSTRUCTIONS
): información que el usuario pide explícitamente al agente que recuerde o que olvide. Por ejemplo, si el usuario dice "Recuerda que uso principalmente Python", Memory Bank genera un recuerdo como "Uso principalmente Python".
Es lo mismo que usar el siguiente conjunto de temas de memoria gestionada:
Diccionario
memory_topics = [
{"managed_memory_topic": {"managed_topic_enum": "USER_PERSONAL_INFO"}},
{"managed_memory_topic": {"managed_topic_enum": "USER_PREFERENCES"}},
{"managed_memory_topic": {"managed_topic_enum": "KEY_CONVERSATION_DETAILS"}},
{"managed_memory_topic": {"managed_topic_enum": "EXPLICIT_INSTRUCTIONS"}},
]
Basado en clases
from vertexai.types import ManagedTopicEnum
from vertexai.types import MemoryBankCustomizationConfigMemoryTopic as MemoryTopic
from vertexai.types import MemoryBankCustomizationConfigMemoryTopicManagedMemoryTopic as ManagedMemoryTopic
memory_topics = [
MemoryTopic(
managed_memory_topic=ManagedMemoryTopic(
managed_topic_enum=ManagedTopicEnum.USER_PERSONAL_INFO)),
MemoryTopic(
managed_memory_topic=ManagedMemoryTopic(
managed_topic_enum=ManagedTopicEnum.USER_PREFERENCES)),
MemoryTopic(
managed_memory_topic=ManagedMemoryTopic(
managed_topic_enum=ManagedTopicEnum.KEY_CONVERSATION_DETAILS)),
MemoryTopic(
managed_memory_topic=ManagedMemoryTopic(
managed_topic_enum=ManagedTopicEnum.EXPLICIT_INSTRUCTIONS)),
]
Si quieres personalizar los temas que Memory Bank conserva, define los temas de la memoria en tu configuración de personalización al configurar Memory Bank.
Generar recuerdos
Para completar los pasos que se muestran en esta guía, primero debes seguir los pasos de Configuración de Memory Bank.
Puedes activar la generación de recuerdos con GenerateMemories
al final de una sesión o a intervalos regulares durante una sesión. La generación de recuerdos extrae el contexto clave de las conversaciones de origen y lo combina con los recuerdos existentes del mismo ámbito. Por ejemplo, puedes crear recuerdos a nivel de sesión usando un ámbito como {"user_id": "123", "session_id": "456"}
. Los recuerdos con el mismo ámbito se pueden consolidar y recuperar juntos.
Cuando llames a GenerateMemories
, debes proporcionar la conversación de origen a través de sesiones de Agent Engine o directamente en formato JSON:
Formato JSON
Proporciona la conversación de origen directamente en formato JSON si utilizas un almacenamiento de sesiones diferente al de Agent Engine Sessions:
client.agent_engines.memories.generate(
name=agent_engine.api_resource.name,
direct_contents_source={
"events": EVENTS
},
scope=SCOPE,
config={
"wait_for_completion": True
}
)
Haz los cambios siguientes:
- EVENTS: lista de diccionarios de contenido. Por ejemplo:
[
{
"content": {
"role": "user",
"parts": [
{"text": "I'm work with LLM agents!"}
]
}
}
]
- SCOPE: diccionario que representa el ámbito de los recuerdos generados. Por ejemplo,
{"session_id": "MY_SESSION"}
. Solo se tienen en cuenta para la consolidación los recuerdos que tengan el mismo ámbito.
Sesiones de Agent Engine
Con las sesiones de Agent Engine, Memory Bank usa los eventos de sesión como conversación de origen para generar la memoria.
Para acotar las memorias generadas, Memory Bank extrae y usa el ID de usuario de la sesión de forma predeterminada. Por ejemplo, el ámbito de los recuerdos se almacena como {"user_id": "123"}
si el user_id
de la sesión es "123". También puedes proporcionar un scope
directamente, lo que anula el uso del user_id
de la sesión como ámbito.
client.agent_engines.memories.generate(
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
}
)
Haz los cambios siguientes:
SESSION_NAME: el nombre de la sesión.
(Opcional) SCOPE: un diccionario que representa el ámbito de los recuerdos generados. Por ejemplo,
{"session_id": "MY_SESSION"}
. Solo se tienen en cuenta para la consolidación los recuerdos que tengan el mismo ámbito. Si no se proporciona, se usa{"user_id": session.user_id}
.
GenerateMemories
es una operación de larga duración. Una vez completada la operación, el AgentEngineGenerateMemoriesOperation
contendrá una lista de los recuerdos generados, si se ha generado alguno:
AgentEngineGenerateMemoriesOperation(
name="projects/.../locations/.../reasoningEngines/.../operations/...",
done=True,
response=GenerateMemoriesResponse(
generatedMemories=[
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action="CREATED",
),
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action="UPDATED",
),
GenerateMemoriesResponseGeneratedMemory(
memory=Memory(
"name": "projects/.../locations/.../reasoningEngines/.../memories/..."
),
action="DELETED",
),
]
)
)
Cada recuerdo generado incluye la action
que se ha realizado en él:
CREATED
: indica que se ha añadido un nuevo recuerdo, que representa un concepto nuevo que no se había capturado en los recuerdos anteriores.UPDATED
: indica que se ha actualizado una memoria, lo que ocurre si la memoria abarca conceptos similares a la información recién extraída. El dato de la memoria puede actualizarse con información nueva o seguir siendo el mismo.DELETED
: indica que se ha eliminado la memoria porque su información era contradictoria con la nueva información extraída de la conversación.
En el caso de los recuerdos CREATED
o UPDATED
, puedes usar GetMemories
para recuperar el contenido completo del recuerdo. Al recuperar DELETED
recuerdos, se produce un error 404.
Generar recuerdos en segundo plano
GenerateMemories
es una operación de larga duración. De forma predeterminada, client.agent_engines.generate_memories
es una función de bloqueo y seguirá sondeando la operación hasta que se complete. Ejecutar la generación de recuerdos como una operación de bloqueo es útil cuando quieres inspeccionar manualmente los recuerdos generados o cuando quieres informar a los usuarios finales sobre los recuerdos que se han generado.
Sin embargo, en el caso de los agentes de producción, lo habitual es ejecutar la generación de memoria en segundo plano como un proceso asíncrono. En la mayoría de los casos, el cliente no necesita usar el resultado de la ejecución actual, por lo que no es necesario incurrir en una latencia adicional esperando una respuesta. Si quieres que la generación de memoria se ejecute en segundo plano, define wait_for_completion
como False
:
client.agent_engines.memories.generate(
...,
config={
"wait_for_completion": False
}
)
Consolidando recuerdos preextraídos
Como alternativa al proceso de extracción automática de Recuerdos, puedes proporcionar directamente los recuerdos ya extraídos. Los recuerdos de fuentes directas se combinarán con los recuerdos que ya haya del mismo ámbito. Esto puede ser útil cuando quieras que tu agente o un humano sea responsable de extraer recuerdos, pero sigas queriendo aprovechar la consolidación de Memory Bank para asegurarte de que no haya recuerdos duplicados o contradictorios.
client.agent_engines.memories.generate(
name=agent_engine.api_resource.name,
direct_memories_source={"direct_memories": [{"fact": "FACT"}]},
scope=SCOPE
)
Haz los cambios siguientes:
FACT: el hecho preextraído que se debe consolidar con los recuerdos existentes. Puedes proporcionar hasta 5 datos preextraídos en una lista como la siguiente:
{"direct_memories": [{"fact": "fact 1"}, {"fact": "fact 2"}]}
SCOPE: diccionario que representa el ámbito de los recuerdos generados. Por ejemplo,
{"session_id": "MY_SESSION"}
. Solo se tienen en cuenta para la consolidación los recuerdos que tengan el mismo ámbito.