Memória gerenciada do agente
Beta
Esse recurso está na versão Beta.
Managed agent memory gives your agents durable, long-term memory that persists across conversations. Databricks stores the memory in Lakebase e gerencia o armazenamento, a indexação e a pesquisa semântica para você, para que seus agentes possam lembrar as preferências do usuário, decisões passadas e contexto acumulado sem que você opere um banco de dados.
During the preview, you are billed for the underlying Lakebase instance that stores your memory entries. No additional charges apply for managed agent memory itself. Preços is subject to change as the preview progresses.
Use a memória gerenciada quando quiser que seus agentes possam:
- Lembre-se de preferências, fatos e decisões do usuário em conversas separadas.
- Personalize as respostas com base no que um agente aprendeu em sessões anteriores.
- Compartilhe o conhecimento acumulado entre agentes e projetos.
- Melhorar a precisão e a eficiência ao longo do tempo.
A memória gerenciada funciona com agentes criados em qualquer framework. Para obter o histórico de conversas de curto prazo em uma única interação, use as sessões de agente gerenciadas.
Como a memória gerenciada funciona
A memória gerenciada possui dois níveis:
- Um armazenamento de memória é o contêiner com escopo de Workspace para as memórias de um agente. Creating a store provisions the backing Lakebase storage automatically. You address a store by its
display_name. - Uma entrada de memória é um pedaço individual de conteúdo em um armazenamento. Cada entrada tem um
contentde texto de formato livre, umdescriptioncurto usado para recuperação e um conjunto de campos que a organizam e particionam:actor_id(obrigatório): quem é o proprietário da memória, como um usuário final ou outro agente.session_id(opcional): registra de qual sessão a memória foi capturada, para rastreamento e procedência. Deixe sem definição para memórias que não estão vinculadas a uma sessão específica.path(obrigatório): um caminho semelhante a um filesystem que organiza entradas dentro de um ator, como/preferences/response-style.md.
Uma entrada é identificada exclusivamente pela combinação de actor_id, session_id e path.
Recuperação
Retrieve memory two ways:
- Listar entradas para um ator, opcionalmente filtradas por
session_idou um prefixopath. Use isto para navegar ou renderizar um índice do que um agente conhece. - Pesquise entradas para um ator com uma query em linguagem natural. A pesquisa retorna as entradas mais relevantes ordenadas por uma pontuação de relevância de texto completo (BM25).
Requisitos
- Instale o Python 3.10 ou acima para usar o AgentKit SDK. O AgentKit SDK é o cliente Python do Databricks para APIs de agentes usado pelos exemplos abaixo. Você também pode chamar a REST API diretamente de qualquer linguagem, sem a exigência do Python.
Começar
Estes exemplos configuram a memória gerenciada para um agente de suporte: eles criam um armazenamento de memória, salvam a preferência de um usuário e a recuperam em uma conversa posterior. Escolha o cliente que se adapta ao seu projeto. O display_name de um armazenamento de memória deve ter entre 3 e 56 caracteres, começar com uma letra minúscula, terminar com uma letra ou um número e conter apenas letras minúsculas, números e hifens.
- AgentKit SDK
- REST API
O AgentKit SDK é o cliente Python do Databricks para APIs de agentes, distribuído no pacote databricks-agentbricks. Ele se autentica com o WorkspaceClient do SDK do Databricks.
-
Instale o AgentKit SDK:
Bashpip install databricks-agentbricks -
Crie um memory store para o seu agente.
AgentKitClientse autentica com suas credenciais doWorkspaceClient:Pythonfrom databricks.sdk import WorkspaceClient
from databricks_agentkit import AgentKitClient
client = AgentKitClient(WorkspaceClient())
memory_store = client.memory_stores.create("support-agent-memory") -
Salve uma memória depois que o agente aprender algo duradouro sobre um usuário.
actor_idé de quem é essa memória,patha organiza dentro desse ator edescriptionmelhora a recuperação:Pythonmemory_store.add(
actor_id="user-123",
path="/preferences/communication.md",
content="Prefers email over phone. Timezone: PST. Enterprise subscription.",
description="User 123 communication preferences",
) -
Recupere as memórias do usuário em uma conversa posterior com uma pesquisa em linguagem natural:
Pythonresults = memory_store.search(actor_id="user-123", query="communication preferences", limit=10)
Os clientes chamam a API REST sob /api/2.0/agents/memory-stores. Chame-o diretamente para linguagens diferentes de Python.
-
Gere um token OAuth com a CLI do Databricks:
Bashdatabricks auth login --host ${DATABRICKS_HOST}
export DATABRICKS_TOKEN=$(databricks auth token | jq -r .access_token) -
Criar um armazenamento de memória para seu agente:
Bashcurl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \
-d '{"display_name": "support-agent-memory", "description": "Support agent memory"}' -
Salve uma entrada de memória para um usuário.
actor_idé de quem é essa memória,patha organiza edescriptionmelhora a recuperação:Bashcurl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \
-d '{"actor_id": "user-123", "path": "/preferences/communication.md", "content": "Prefers email over phone.", "description": "Communication preferences"}' -
Recupere as memórias do usuário com uma pesquisa em linguagem natural:
Bashcurl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries:search" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \
-d '{"actor_id": "user-123", "query": "communication preferences"}'
Forneça ferramentas de memória ao seu agente
To let an agent decide when to save and recall memory, wrap the client operations as tools and instruct the agent on when to use them in its system prompt. Set the actor_id in trusted application code from the verified end-user identity. Never let the model choose whose memory to read or write.
O exemplo a seguir encapsula o SDK do AgentKit memory_store de Introdução como ferramentas para o OpenAI Agents SDK.
from agents import Agent, function_tool
def make_memory_tools(memory_store, actor_id: str):
@function_tool
def search_memory(query: str) -> str:
"""Search long-term memory for relevant facts about the user."""
results = memory_store.search(actor_id=actor_id, query=query, limit=10)
return "\n\n".join(f"{r.memory.path}: {r.memory.content}" for r in results) or "No memory found."
@function_tool
def save_memory(path: str, content: str, description: str = "") -> str:
"""Save a durable, long-term memory about the user."""
memory_store.add(actor_id=actor_id, path=path, content=content, description=description)
return f"Saved memory at {path}"
return [search_memory, save_memory]
agent = Agent(
name="Support agent",
instructions="Save durable user preferences and recall them when relevant.",
tools=make_memory_tools(memory_store, actor_id="user-123"),
)
O mesmo padrão funciona com o Claude Agent SDK e outras estruturas: encapsule as operações de pesquisa e adição do armazenamento como o tipo de ferramenta da estrutura.
Particionar e proteger a memória
Dentro de um armazenamento, actor_id é a forma como você separa as memórias de cada um. Cada lista e pesquisa é escopada para um único actor_id, portanto, escolha a estratégia que corresponde ao que o seu agente precisa lembrar:
-
Private memory for each user: Set
actor_idto the verified end-user identity. Each user gets their own partition, and the agent only recalls that user's entries.- Exemplo: Um agente de suporte lembra-se das preferências de comunicação e dos tíquetes anteriores de um usuário.
-
Shared memory for a group: Set
actor_idto a fixed key you choose, such as a team, project, or organization ID. Everyone reads and writes the same memories.- Exemplo: Um agente de equipe se lembra de um glossário compartilhado de termos da empresa e convenções internas.
-
Memória dividida por outro critério: crie
actor_ida partir de seus próprios valores, como uma ID de tenant ou um composto deuser:project.- Exemplo: Um aplicativo multi-tenant define
actor_idcomo{tenant}:{user}para que os usuários de cada cliente permaneçam isolados uns dos outros.
- Exemplo: Um aplicativo multi-tenant define
Defina actor_id no código do seu aplicativo a partir do contexto do chamador confiável: a identidade verificada do usuário final para memória por usuário, ou uma chave de equipe ou de projeto confiável para memória compartilhada. Nunca permita que o modelo faça a escolha. Se a sua estratégia depender da identidade de um usuário final, rejeite solicitações que não possuam uma em vez de recorrer a um actor_id compartilhado.
actor_id separa memórias, mas não é um controle de acesso. Os armazenamentos de memória gerenciados têm escopo de workspace, portanto, qualquer principal que possa acessar um armazenamento pode ler e gravar todas as entradas em todos os atores. O armazenamento, e não o ator, é o limite de segurança. Para um isolamento rigoroso entre tenants ou usuários, crie um armazenamento de memória separado por limite.
Para permitir que outra entidade principal, como o service principal do seu agente, use um armazenamento, conceda acesso a ele com a operação grant-permission do armazenamento (memory_store.grant_permission(principal_id) no AgentKit SDK).
Limitações
- Managed memory provides long-term memory only. For short-term conversation história, see managed agent sessions.
- A pesquisa é uma operação de texto completo (BM25) classificada por relevância que retorna um conjunto de resultados top-N de até 100 entradas. Ele não oferece suporte à paginação ou à busca por similaridade de vetores.
- Access control is enforced at the store level. Per-entry and per-actor access control are not available.
- O armazenamento
display_nameé imutável após a criação. Apenasdescriptionpode ser atualizado.