Visão geral
A memória no MongoDB Atlas Agent Engine é configurada no nível do projeto . Todos os agentes em um projeto compartilham o mesmo serviço, armazenamento e configurações de memória. Você pode habilitar ou desabilitar a memória para agentes individuais em seu arquivo agent.yaml.
Para configurar a memória, edite o bloco memory: em seu arquivo project-config.yaml, carregue as chaves de API necessárias como segredos do projeto e implemente seu agente. Após a implantação inicial, você pode atualizar as configurações de memória sem reimplantar.
Para saber mais sobre memória, incluindo como ela é armazenada e extraída durante conversas, consulte o guia Memória do agente.
Pré-requisitos
Certifique-se de ter os seguintes pré-requisitos antes de começar:
Um arquivo
agent.yamle um agente implementado. Para começar, consulte Introdução ao Atlas Agent Engine.A CLI
agentengineinstalada e autenticada. Para saber mais, consulte Instalar e autenticar.Um Atlas Flex (requisito mínimo),
M10,M20ou cluster de nível superior (recomendado) para armazenar seus dados de memória. Para provisionar um cluster, consulte Configurar recursos do Atlas .- Recomendamos implantar um cluster de nível
M10dedicado ou superior para acomodar seus dados de memória e a contagem de índice à medida que eles crescem. Atlas Flex é a camada do cluster mais baixa que pode oferecer suporte ao serviço de memória.
Observação
Se o Atlas cluster vinculado não puder criar os índices de pesquisa e Vector Search que a memória exige, o Atlas Agent Engine interromperá a implantação no estágio Memory: waiting e poderá atingir o tempo limite com uma mensagem de erro Error: context deadline exceeded.
Habilitar memória
Para habilitar memória para seu agente, configure features.memory: true em seu arquivo agent.yaml e adicione as seguintes variáveis ao seu arquivo .env antes de iniciar o ambiente local:
VOYAGE_API_KEY: necessário para gerar incorporações de memória.MONGOMEM_DB_NAME: Opcional. O nome do banco de dados MongoDB no qual o servidor de memória grava. O padrão émdb_memory_<project-id>.
A memória requer a estrutura de projeto de dois níveis descrita na seção a seguir. Se você usar o comando agentengine create para estruturar seu projeto, a CLI gerará essa estrutura para você.
Observação
Os agentes TypeScript ativam a memória usando o mesmo método. Um agente TypeScript acessa o cliente app.memory somente enquanto lida com uma solicitação de plataforma. Para ler ou escrever memória fora desse contexto, use o cliente Memory do pacote@mongodb-js/agent-engine-sdk-memory, que se conecta ao servidor de memória diretamente por HTTP.
Estrutura do projeto para memória
A raiz do seu projeto tem um arquivo project-config.yaml que armazena a configuração de memória. Cada espaço de trabalho, que contém um arquivo agent.yaml, é uma subpasta da raiz do projeto . O exemplo a seguir mostra a estrutura de projeto esperada para a configuração de memória:
my-project/ ├── project-config.yaml └── my-workspace/ └── agent.yaml
O arquivo project-config.yaml tem uma seção memory: que configura o servidor de memória para seu projeto. O exemplo a seguir mostra as opções de configuração de memória disponíveis e suas opções padrão:
memory: # Memory-server log level. One of: debug | info | warning | error | # critical. log_level: info # Voyage AI embeddings. # The Voyage API key is NOT set here — upload it as a project # secret with: # agentengine secret set VOYAGE_API_KEY <value> voyage: model: "voyage-4-large" dimension: 1024 # Short-term memory write-path behavior. short_term: # Embed each turn's content when it is written (only when the # caller supplies no embedding), so it is searchable by # relevance immediately instead of waiting for background # embedding. Adds embedding latency to the write. embed_on_write: false # LLM used for background extraction. # The API key is NOT set here — upload it as a project secret. If # your agent already uses a supported LLM connection, upload that # same key under the shared LLM_API_KEY name so the agent and # extraction reuse one secret: # agentengine secret set LLM_API_KEY <value> # Otherwise, upload a provider-named key instead, for example: # agentengine secret set OPENAI_API_KEY <value> extraction_llm: provider: openai # one of: openai | anthropic | gemini | cerebras model: null # overrides the provider's default model base_url: null # optional: route requests through a gateway # or proxy instead of the provider's default # endpoint. Required only for gateway # connections; omit to call the provider # directly. api_key_secret: null # optional: the name of the project secret # that holds the extraction LLM's API key. # One of: LLM_API_KEY, OPENAI_API_KEY, # ANTHROPIC_API_KEY, GEMINI_API_KEY, or # CEREBRAS_API_KEY. If omitted, extraction # checks provider-named keys before # LLM_API_KEY. auth_header: null # optional: the header the gateway expects for # the API key. One of: authorization (Bearer) # or api-key. Omit for native provider # authentication. background_extraction: snapshot: max_messages: 20 stale_minutes: 3 embed_stm_before_promotion: true topic_shift_enabled: false topic_shift_threshold: 0.35 delete_promoted: false ttl_days: 30 # Extraction pipeline. Add memory types to the 'enabled' list to # turn extraction on, for example: # enabled: # - semantic # - episodic # Valid types: semantic, episodic, taxonomic, entity, preferences, # procedural. # NOTE: Removing the 'enabled' line entirely re-enables ALL types. # Keep it as [] to extract nothing. extraction: enabled: []
Para carregar e sincronizar a configuração de memória de um projeto implementado, consulte Configurar memória.
Migrar estrutura do projeto
Se o seu projeto utilizar uma estrutura plana com agent.yaml na raiz do projeto , migre para a estrutura de dois níveis antes de habilitar a memória. A estrutura plana está obsoleta.
Para migrar sua estrutura plana, execute as seguintes etapas:
Crie um arquivo project-config.yaml na raiz do projeto .
O seguinte arquivo de amostra project-config.yaml mostra a configuração da seção memory::
memory: log_level: info voyage: model: "voyage-4-large" dimension: 1024 short_term: embed_on_write: false extraction_llm: provider: openai model: null base_url: null api_key_secret: null
Configurar memória
Use os comandos agentengine memory para carregar e sincronizar a configuração de memória do seu projeto para projetos implementados. A configuração da memória tem escopo de projeto: um documento de configuração se aplica a todos os agentes do projeto.
Para configurar a memória para desenvolvimento local, consulte Habilitar memória.
Sintaxe do comando de configuração
O comando agentengine memory configure lê um arquivo project-config.yaml do diretório do seu agente , extrai a seção memory: e a carrega no Atlas Agent Engine. O comando confirma o projeto de destino antes de carregá-lo.
Importante
Uma versão futura removerá o suporte para o comando agentengine memory configure. Em vez disso, a plataforma oferecerá suporte ao gerenciamento de memória por meio da interface do usuário.
O exemplo a seguir mostra a sintaxe do comando para fazer upload da configuração de memória:
agentengine memory configure <path> [--project-id <id> --org-id <id> --base-url <url>]
Como alternativa, você pode usar o comando agentic memory configure e passar apenas o sinalizador --context, conforme mostrado no exemplo a seguir:
agentengine memory configure <path> [--context <name>]
Aviso
Se o arquivo project-config.yaml não contiver uma chave memory:, o comando retornará um erro. Uma chave memory: ausente não remove uma configuração existente.
A tabela a seguir descreve os sinalizadores disponíveis:
bandeira | Descrição |
|---|---|
| O nome de um contexto salvo que identifica a URL de base da plataforma de destino , organização e projeto. Para visualizar seus contextos salvos, execute |
| ID do projeto. Se omitido, o comando usa o projeto do seu estado de autenticação local. Se você definir esse sinalizador, também deverá definir os sinalizadores |
| ID da organização. Obrigatório se você usar o sinalizador |
| URL base da plataforma . Obrigatório se você usar o sinalizador |
| Ignore o prompt de confirmação. Use este sinalizador em ambientes de Integração Contínua (CI). |
Observação
A configuração da memória não é um armazenamento secreto. Armazene somente configurações não secretas no arquivo project-config.yaml. Use o comando agentengine secret set para chaves de API, connection strings e outras credenciais. O Atlas Agent Engine rejeita carregamentos que contêm valores correspondentes a padrões secretos comuns.
Configuração inicial de memória
Antes de sua primeira implantação com a memória habilitada, execute as seguintes etapas:
Edite o bloco memory: no seu arquivo project-config.yaml.
Abra o project-config.yaml na raiz do projeto e defina as configurações de memória. Para visualizar as opções disponíveis, consulte Estrutura do projeto para memória.
Carregue os segredos necessários.
Execute os seguintes comandos para carregar os segredos e inclua o sinalizador --project-scope para segmentar segredos com escopo de projeto:
agentengine secret set VOYAGE_API_KEY --project-scope agentengine secret set LLM_API_KEY --project-scope
Se você montou seu projeto com o comando agentic create --llm <provider> --memory e selecionou um provedor de LLM compatível, a CLI já adicionou extraction_llm.api_key_secret: LLM_API_KEY ao seu arquivo project-config.yaml. Este é o mesmo nome secreto que o arquivo .env do seu agente usa, portanto, carregá-lo uma vez fornece a chave para o agente e a extração da memória.
Observação
Você ainda pode usar chaves nomeadas pelo provedor, como OPENAI_API_KEY ou ANTHROPIC_API_KEY. Sem um valor api_key_secret explícito, a extração verifica as chaves nomeadas pelo provedor antes de LLM_API_KEY. Defina o campo api_key_secret explicitamente se a memória exigir uma credencial separada do seu agente ou se você tiver chaves para vários provedores e quiser selecionar um.
Se você definir api_key_secret como um valor diferente de LLM_API_KEY, substitua LLM_API_KEY no comando anterior por esse nome.
Atualizar configuração de memória
As alterações na configuração da memória não exigem a reimplantação do agente. Para aplicar configurações de memória atualizadas a um sistema em execução, execute as seguintes etapas:
Edite o bloco memory: em seu arquivo project-config.yaml com suas novas configurações de memória.
Abra o project-config.yaml na raiz do projeto e defina as configurações de memória. Para visualizar as opções disponíveis, consulte Estrutura do projeto para memória.
Aplique a configuração.
agentengine memory apply
O comando agentengine memory apply reinicia o servidor de memória para que ele registre a nova configuração. A plataforma oferece alterações de configuração de forma assíncrona e as alterações entram em vigor quando o pod é reiniciado ou quando a configuração atualizada é aplicada na inicialização. Se a configuração armazenada ainda não estiver sincronizada, o comando agentengine deploy sincroniza a configuração como parte do próximo processo de sistema.
Declarar tipos de memória personalizada
Os tipos de memória personalizada armazenam registros específicos do domínio que não correspondem aos quatro tipos de memória integrada. Para declarar e usar tipos de memória personalizados, execute as seguintes etapas:
Declare seus tipos personalizados.
Adicione um bloco custom_memory_types: na seção memory: do seu arquivo project-config.yaml. O exemplo a seguir cria um tipo de customer_profile personalizado:
memory: custom_memory_types: # Custom memory types (max 5) - name: customer_profile collection: profiles tags: - name: location - name: tier - name: profile.location # One level of nested tag keys
Cada tipo de memória personalizado tem os seguintes campos:
name: (obrigatório) o nome do tipo. O valor deve começar com uma letra minúscula e conter apenas letras minúsculas, números e sublinhados. Ele não pode usar nenhum dos nomes de tipo internos ou exceder 64 caracteres de comprimento.collection: (Obrigatório) A collection no banco de dados de memória do projeto que armazena os registros do tipo.tags: (Opcional) Chaves de tag filtráveis, até dez por tipo. Uma chave de tag pode usar notação de ponto para aninhar até um nível, comoprofile.location. Os valores da tag devem ser strings não vazias, números ou booleanos.
Provisione os novos tipos.
Execute os seguintes comandos para carregar a configuração atualizada e aplicá-la ao servidor de memória , que provisiona cada novo tipo:
agentengine memory configure agentengine memory apply
Observação
Depois de carregar uma configuração que declara um tipo de memória personalizado, você não poderá editar ou remover a coleção ou conjunto de tags do tipo. Para alterar um tipo, declare um novo nome de tipo.
Leia e grave registros de memória personalizados.
Em seu aplicação, use os métodos save() e retrieve() para escrever e ler registros de memória personalizados:
memory.save( memory_type="customer_profile", content="Prefers direct vendor onboarding contact.", tags={"tier": "gold"}, ) hits = memory.retrieve( memory_type="customer_profile", query="How should we onboard this customer?", tags={"tier": "gold"}, top_k=5, )
Acesse a memória do seu agente
Quando você implanta um agente com a memória ativada, a plataforma fornece o cliente app.memory no objeto de aplicação . Use esse cliente para ler e escrever na memória do seu agente. A plataforma resolve o usuário e a sessão atuais do contexto de tempo de execução, portanto, você não precisa passar argumentos user_id ou session_id explicitamente para app.memory.
Importante
Identidade de memória da conta de serviço
Quando uma conta de serviço invoca um agente implementado, o Atlas Agent Engine utiliza a própria identidade da conta de serviço como a identidade da memória de tempo de execução. A plataforma ignora qualquer valor user_id de usuário final que a solicitação de invocação ou o sinalizador agentengine invoke --user-id forneça.
As operações automáticas de registro, extração, consolidação e app.memory usam essa identidade resolvida. Como resultado, as invocações que autenticam por meio da mesma conta de serviço compartilham um escopo de usuário de memória.
Esta limitação se aplica apenas aos agentes implementados que uma conta de serviço invoca. O serviço de memória autônomo do, com escopo de projeto, não é afetado. Este serviço continua a aceitar valores user_id e session_id explícitos do chamador.
Para isolar a memória pelo usuário final, chame o serviço de memória autônomo do seu aplicação e passe um valor user_id e session_id explícito para cada chamada. Para saber mais, consulte Usar o serviço de memória independente.
Para acessar a memória de um agente agent-engine-sdk-langgraph, execute as etapas a seguir. Cada modelo de agente do Atlas Agent Engine usa o pacoteagent-engine-sdk-langgraph , portanto, essas etapas se aplicam independentemente do caso de uso do seu agente.
Acesse o clienteapp.memory.
Em seu código de agente , recupere o cliente app.memory e use-o para ler e escrever na memória. O exemplo a seguir mostra como acessar este cliente:
from agent_engine_sdk_langgraph import App app = App(app_name="support-agent") def build_graph(): # Your LangGraph state machine. ... # Later, in a request handler for a conversation turn: memory = app.memory
Recupere o contexto relevante para a mensagem do usuário.
Use o método app.memory.build_context() para recuperar a memória relevante para uma mensagem e formatá-la como contexto, conforme mostrado no exemplo a seguir:
def handle_turn(user_message: str) -> str: ctx = memory.build_context( query=user_message, max_tokens=2000, ) prompt = f"{ctx.formatted_context}\n\nUser: {user_message}" return prompt
Observação
Para um agente implementado, a plataforma registra as mudanças na conversa automaticamente. Você não precisa ligar para record_turn() para salvar tentativas de conversa.
Próximos passos
Depois de ativar a memória para o agente, você pode testar o agente localmente e implementá-lo. Para saber como testar seu agente, consulte Testar o agente. Para saber como distribuir seu agente, consulte Sistema.
Para usar a memória de um aplicação executado fora do Atlas Agent Engine, consulte o guia Use o aplicativo de serviço de memória independente.