Overview
El servicio de memoria de MongoDB Atlas Agent Engine puede ejecutarse como un servicio independiente, separado de una implementación completa del agente. Utilice esta guía para configurar el servidor de memoria para un proyecto de memoria y use el kit de desarrollo de software (SDK) de Python agent-engine-sdk-memory para registrar y recuperar el contexto de la conversación desde una aplicación externa.
Puede ejecutar el servicio de memoria en uno de los siguientes modos:
Alojado: El servidor de memoria se ejecuta en el motor de agente de Atlas, y su aplicación se conecta a él mediante un token de acceso a la cuenta de servicio. Utilice este modo para una aplicación desplegada.
Local: El servidor de memoria se ejecuta en contenedores Docker locales gestionados por la CLI
agentengine, y su aplicación se conecta directamente a él. Utilice este modo para desarrollar y realizar pruebas localmente.
Servicio de memoria alojada
En el modo alojado, el SDK agent-engine-sdk-memory se conecta a la puerta de enlace de memoria alojada mediante un token de acceso a la cuenta de servicio. La puerta de enlace lee la organización y el proyecto de la cuenta de servicio. Para cada conversación, se pasan los valores user_id y session_id al SDK para limitar el alcance de la memoria de la conversación a ese usuario y sesión.
Tip
Para obtener más información sobre la memoria, consulte la guía de memoria del agente.
Las siguientes funciones están disponibles en el modo alojado:
record_turn()Métodos SDKbuild_context()ysearch()para grabar y recuperar el contexto de la conversación.Búsqueda semántica, episódica, procedimental y taxonómica
Operaciones directas de creación y lectura, en forma de
save_*,get_*olist_*.Tipos de memoria personalizados, utilizando los métodos genéricos
save()yretrieve().
Servicio de memoria local
En modo local, el SDK agentic-platform-memory se conecta directamente a un proxy local de Orchestration Engine (oe) que el comando agentengine dev up inicia en su máquina. Debe establecer el valor base_url en la URL local oe. No establezca project_id ni un token de acceso para la conexión.
Las siguientes funciones están disponibles en modo local:
record_turn()Métodos SDKbuild_context()ysearch()para grabar y recuperar el contexto de la conversación.Búsqueda semántica, episódica, procedimental y taxonómica
Operaciones directas de creación y lectura, en forma de
save_*,get_*olist_*.
No se pueden utilizar tipos de memoria personalizados en modo local.
Para obtener más información sobre los diferentes tipos de memoria, consulte la guía de memoria del agente.
Configurar el servicio de memoria alojada
Esta sección muestra cómo crear un proyecto que solo utilice memoria y que esté alojado en el motor de agentes de Atlas.
Requisitos previos
Antes de comenzar este tutorial, asegúrese de tener los siguientes recursos:
La interfaz de línea de comandos
agentenginese instaló y autenticó correctamente. Para obtener más información, consulte Instalación y autenticación.Acceda al motor del agente de Atlas ejecutando
agentengine auth login.Una clave API de Voyage AI para generar incrustaciones de memoria.
Una clave API para un proveedor de modelos de lenguaje grandes (LLM), como
ANTHROPIC_API_KEY.pipouvinstalado para instalar el SDK de Python.Se requiere un clúster Atlas Flex (requisito mínimo),
M10,M20o de nivel superior (recomendado) para almacenar los datos de memoria. Para configurar un clúster, consulte la sección "Configurar recursos de Atlas".Esta guía requiere una cadena de conexión para su clúster de Atlas. Para obtener información sobre cómo recuperar su cadena de conexión, consulte la guía Conectarse a un clúster.
Recomendamos implementar un clúster dedicado de nivel
M10o superior para dar cabida a sus datos de memoria y al número de índices a medida que aumenten. Atlas Flex es el nivel de clúster más bajo que admite el servicio de memoria.La lista de acceso IP de su clúster debe permitir el tráfico desde el plano de datos del motor de agentes de Atlas. Para obtener información sobre cómo agregar las direcciones IP del plano de datos, consulte la sección Configurar el acceso a la red de Atlas.
Nota
Si el clúster de Atlas vinculado no puede crear los índices de búsqueda y búsqueda vectorial que requiere la memoria, el motor del agente de Atlas detiene la implementación en la etapa Memory: waiting y podría agotar el tiempo de espera con un mensaje de error Error: context deadline exceeded.
Pasos
Crea un proyecto que solo utilice memoria.
Ejecuta el siguiente comando para generar un proyecto que solo utilice memoria. Reemplaza "My Project" con el nombre de tu proyecto.
agentengine create --memory-only --name "My Project"
El comando genera un directorio de proyecto que contiene solo un archivo project-config.yaml, sin ningún archivo agent.yaml ni espacio de trabajo.
Crea y selecciona el proyecto en la plataforma.
Ejecute el siguiente comando para registrar el proyecto. El comando imprimirá el nuevo ID del proyecto:
agentengine project create "My Project" Seleccione el nuevo proyecto como activo. Reemplace
<project-id>con el ID del proyecto impreso por el comando anterior:agentengine auth login --project-id <project-id>
Configurar los ajustes de memoria.
Abra el archivo
project-config.yamly configure sus nombres secretos y el proveedor de extracción en el bloquememory:.Ejecute los siguientes comandos para configurar los secretos necesarios para su proyecto:
agentengine secret set MONGODB_URI --value "<value>" --project-id <project-id> agentengine secret set VOYAGE_API_KEY --value "<value>" --project-id <project-id> agentengine secret set ANTHROPIC_API_KEY --value "<value>" --project-id <project-id> Reemplace los siguientes valores de marcador de posición:
<value>: Valor del secreto.MONGODB_URI: Cadena de conexión de su clúster Atlas.VOYAGE_API_KEY: Tu clave de IA de viaje.ANTHROPIC_API_KEY: Su clave de proveedor de LLM.
<project-id>: ID del objeto del proyecto devuelto por el comandoagentengine project create. Este indicador es necesario porque el flujo de trabajo que solo utiliza memoria no incluye un archivoagents.yaml.
Si utiliza un proveedor de LLM diferente, sustituya
ANTHROPIC_API_KEYpor el nombre de la clave correspondiente.Almacenar la configuración de memoria:
agentengine memory configure
Nota
El aprovisionamiento falla si no se establece un secreto MONGODB_URI o si el servicio de memoria no puede acceder al clúster al que apunta la cadena de conexión. Si el aprovisionamiento falla, confirme que la lista de acceso IP del clúster incluye las direcciones IP del plano de datos de Atlas Agent Engine.
Cree una cuenta de servicio y obtenga un token de acceso.
Ejecute el siguiente comando para crear una cuenta de servicio para el proyecto:
agentengine service-account create memory-service --project-id <project-id> --role PROJECT_OWNER Sustituya el marcador de posición
<project-id>por el ID de su proyecto. Guarde el ID de cliente y el secreto de cliente que aparecen en la salida del comando. El motor del agente Atlas muestra el secreto de cliente solo una vez.Ejecute el siguiente comando para intercambiar el ID de cliente y el secreto de cliente por un token de acceso:
export ACCESS_TOKEN=$(curl --fail-with-body --silent --show-error \ --user <client-id> \ --data grant_type=client_credentials \ "https://agentengine.mongodb.com/api/v1/oauth/token" | jq -er .access_token) Reemplace el marcador de posición
<client-id>con su ID de cliente.curlsolicita el secreto del cliente sin mostrarlo.Tip
El token de acceso es válido durante una hora. Solicite un nuevo token antes de que caduque el actual.
Instala el SDK de Python.
Instale el paquete agent-engine-sdk-memory desde el registro privado de la plataforma, utilizando el token de acceso que exportó en el paso anterior:
pip install agent-engine-sdk-memory \ --extra-index-url "https://ignore:$ACCESS_TOKEN@agentengine.mongodb.com/api/v1/packages/python/simple"
uv pip install agent-engine-sdk-memory \ --extra-index-url "https://ignore:$ACCESS_TOKEN@agentengine.mongodb.com/api/v1/packages/python/simple"
La URL utiliza el formato username:password. ignore es un nombre de usuario de marcador de posición, ya que el registro se autentica utilizando únicamente el token de acceso en el campo de contraseña. $ACCESS_TOKEN se resuelve al token de acceso que exportó en el paso anterior.
Registra y recupera el contexto de la conversación.
En tu aplicación, agrega el siguiente código para crear un cliente, vincular una identidad de usuario, registrar los turnos a medida que ocurren y recuperar el contexto relevante en conversaciones posteriores:
from agent_engine_sdk_memory import ( Memory, MemoryRequestContext, ) # Create the client using your access token. memory = Memory(service_account_token="<your-access-token>") # Bind the user and session for this conversation. chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) # Record turns as they happen. chat.record_turn( role="user", content="I always fly out of Boston.", ) chat.record_turn( role="assistant", content="Got it, Boston is saved as your home airport.", ) # In a later conversation, recall what matters. later = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_456", ) ) context = later.build_context( query="Where should the flight book from?" ) hits = later.search("home airport", top_k=5)
Nota
Registrar un turno no genera inmediatamente una memoria a largo plazo. El servicio de memoria consolida los turnos en memorias a largo plazo de forma asíncrona. Un turno registrado puede no aparecer en los resultados search() o build_context() inmediatamente después de su escritura.
Actualizar la configuración de memoria
Para actualizar la configuración de memoria sin reaprovisionar el servidor, siga los siguientes pasos:
Edita el bloque
memory:en tu archivoproject-config.yaml.Desde el directorio de tu proyecto, ejecuta
agentengine memory configurepara cargar la configuración de memoria.Ejecute
agentengine memory applypara aplicar la configuración.
Para obtener información sobre cómo configurar la memoria en la plataforma, consulte Configurar la memoria.
Configurar el servicio de memoria local
Esta sección muestra cómo estructurar, iniciar y conectarse a una pila de memoria local.
Requisitos previos
Antes de comenzar este tutorial, asegúrese de tener los siguientes recursos:
Se instaló la interfaz de línea de comandos
agentengine. Para obtener más información, consulte Instalación y autenticación.Una clave API de Voyage AI para generar incrustaciones de memoria.
Una clave API para un proveedor de modelos de lenguaje grandes (LLM), como
ANTHROPIC_API_KEY, si habilita la extracción en segundo plano.pipouvinstalado para instalar el SDK de Python.
Pasos
Impulsar un proyecto de memoria local.
Ejecute el siguiente comando para generar un proyecto que solo utilice memoria para el desarrollo local. Reemplace "My Project" con el nombre de su proyecto:
agentengine create --memory-only --name "My Project"
El comando escribe un archivo project-config.yaml que establece memory_only en true y especifica el esquema de configuración de memoria.
Este comando no genera un archivo agent.yaml, un directorio agents/ ni código de ejecución del agente. No se puede combinar la bandera --memory-only con las banderas --template, --llm, --memory o --open-egress.
Configura las variables de entorno.
Crea un archivo .env en el directorio de tu proyecto y, a continuación, configura las siguientes variables en dicho archivo:
VOYAGE_API_KEY: Requerido para las incrustaciones de Voyage AIClave del proveedor LLM, como
ANTHROPIC_API_KEY: Requerida si la extracción en segundo plano está habilitada enproject-config.yaml.
No es necesario configurar la variable MONGODB_URI. El comando agentengine dev up aprovisiona y se conecta automáticamente al contenedor local de MongoDB incluido. Si prefiere usar una instancia externa de MongoDB, configure esta variable.
Inicie la pila local.
Desde el directorio del proyecto, ejecute el siguiente comando para iniciar la pila de memoria local:
agentengine dev up
Para un proyecto que solo utiliza memoria, este comando inicia únicamente los siguientes contenedores:
mongodb: Una instancia local de MongoDB compatible con Atlasmemory-server: El servicio de tiempo de ejecución de memoriaoe: El proxy del motor de orquestación local al que se conecta el SDK a través de
La salida del comando incluye las URL de los servicios locales oe y memory-server. Copie la URL oe para usarla en un paso posterior.
Utilice los siguientes comandos para administrar la pila local:
Comando | Descripción |
|---|---|
| Muestra el estado de la pila local. |
| Transmite registros para todos los servicios. Pase |
| Detiene la pila local sin eliminar los contenedores. |
| Detiene la pila local y elimina los contenedores y volúmenes. |
Conecte el SDK a la pila local.
Navegue hasta el directorio de su aplicación Python. Este directorio puede ser diferente del directorio del proyecto que creó en el primer paso.
Luego, conéctese a la pila local agregando el siguiente código a su aplicación. Reemplace http://localhost:<oe-port> con la URL que copió de la salida del comando agentengine dev up.
from agentic_platform_memory import Memory, MemoryRequestContext # Set the base_url to the local oe URL printed by "agentengine dev up". memory = Memory(base_url="http://localhost:<oe-port>") # Bind conversation identity. session = memory.bind( MemoryRequestContext( user_id="user_123", session_id="session_456", ) ) # Record a turn. session.record_turn(role="user", content="I prefer window seats on flights.") # Build context. context = session.build_context( query="What seat preferences are known?", enabled_sources={"stm", "semantic", "episodic"}, ) print(context.formatted_context)
Solucionar problemas de conexión local
Al ejecutar una pila de memoria local, es posible que vea un error MemoryRouteNotFoundError (404). Para solucionar este error, asegúrese de no establecer el valor project_id.
El SDK utiliza el valor project_id para identificar la ruta URL que recibe las solicitudes. Cuando project_id no está configurado, como ocurre con las conexiones locales, el SDK envía las solicitudes a una ruta que gestiona el proxy local oe. Cuando project_id está configurado, el SDK envía las solicitudes a una ruta específica del proyecto que solo gestiona el motor del agente Atlas alojado. Una pila local no gestiona esta ruta específica del proyecto, por lo que una solicitud enviada a esta ruta genera un error.
Si la variable de entorno AGENTIC_MEMORY_PROJECT_ID está obsoleta en su shell desde el flujo de trabajo alojado, el SDK solicita una ruta con ámbito de proyecto, que devuelve una MemoryRouteNotFoundError contra una pila local. Antes de conectarse a una pila local, elimine esta variable ejecutando el siguiente comando:
unset AGENTIC_MEMORY_PROJECT_ID
Próximos pasos
Para habilitar la memoria para un agente que se ejecuta en el motor de agentes Atlas, consulte la guía Agregar memoria a su agente.