Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Эта функция доступна в бета-версии.
Память агента даёт вашим агентам долгосрочную память, которая сохраняется между разговорами. Azure Databricks хранит память в Lakebase и управляет хранением, индексацией и поиском, чтобы ваши агенты могли запоминать пользовательские предпочтения, прошлые решения и накопленный контекст без необходимости управлять базой данных.
Note
Во время предварительного просмотра вам выставляется счет за базовый экземпляр Lakebase, который хранит ваши записи памяти. За саму память агента дополнительная плата не взимается. Цены могут меняться по мере прохождения предварительного просмотра.
Используйте память агента, когда хотите, чтобы ваши агенты могли:
- Помните предпочтения пользователей, факты и решения в разных разговорах.
- Персонализируйте ответы, исходя из того, что агент узнал на предыдущих сессиях.
- Делитесь накопленными знаниями между агентами и проектами.
- Повышение точности и эффективности с течением времени.
Память агентов работает с агентами, построенными на любом фреймворке. Для краткосрочной истории разговоров в одном взаимодействии используйте сессии агента.
Requirements
- Установите Python 3.10 или выше, чтобы использовать AgentKit SDK. AgentKit SDK — это Databricks Python-клиент для API агентов, которые используются в приведённых ниже примерах. Вы также можете вызвать REST API напрямую с любого языка, без необходимости использовать Python.
- Чтобы использовать
memory_store.put()илиmemory_store.list(path=...), установитеdatabricks-agentbricksверсии 0.6.0 и выше.
Как работает память агента
Память агента имеет два уровня:
- Хранилище памяти — это контейнер воспоминаний агента в рамках рабочего пространства. Создание магазина автоматически обеспечивает резервное хранилище Lakebase. Вы обращаетесь к магазину по ID магазина, который выбираете при создании магазина.
-
Запись памяти — это отдельный элемент контента в магазине. Каждая запись содержит текст произвольного формата
content, короткийdescription, используемый для поиска, и набор полей, которые упорядочивают и разделяют её:-
actor_id(требуется): кому принадлежит память, например, конечному пользователю или другому агенту. -
session_id(по желанию): сессия, к которой принадлежит memory. Оставьте его неустановленным, если эта память действует во всех сеансах актёра. -
path(требуется): путь, похожий на файловую систему, который организует записи внутри актора, например/preferences/response-style.md.
-
Запись однозначно определяется сочетанием actor_id, session_id и path. Один и тот же путь под двумя разными сессиями или под одной сессией и без неё содержит две отдельные записи.
Записи попадают в хранилище двумя способами: ваш агент или приложение записывает их напрямую, либо конвейер памяти выделяет их из разговоров в сессионном хранилище.
Возвращение
Восстановить память двумя способами:
-
Перечисляет записи для актора, по желанию отфильтрованные по
session_id,pathпрефиксу или точномуpath. Используйте это, чтобы просматривать или отображать индекс того, что агент знает. - Ищите записи об актёре с помощью запроса на естественном языке. Поиск возвращает наиболее релевантные записи, ранжированные по показателю релевантности.
Фильтр session_id в любой из двух операций возвращает только те записи, сохранённые в этой сессии. Он не возвращает записи, сохранённые без сессии.
Get started
Эти примеры настраивают память агента для агента поддержки: они создают хранилище памяти, сохраняют предпочтения пользователя и вспоминают его в последующем разговоре. Выбирайте клиента, который подходит вашему проекту. ID памяти должен иметь от 3 до 56 символов, начинаться с строчной буквы, заканчиваться буквой или цифрой и содержать только строчные буквы, цифры и дефисы.
AgentKit SDK
AgentKit SDK — это Databricks Python-клиент для API агентов, распространяемый в пакетеdatabricks-agentbricks. Он аутентифицируется с помощью SDK WorkspaceClientDatabricks .
Установите SDK AgentKit:
pip install databricks-agentbricksСоздайте хранилище памяти для вашего агента.
AgentKitClientАутентифицируется с вашимиWorkspaceClientучетными данными:from databricks.sdk import WorkspaceClient from databricks_agentkit import AgentKitClient client = AgentKitClient(WorkspaceClient()) memory_store = client.memory_stores.create("support-agent-memory")Сохраняйте память после того, как агент узнает что-то устойчивое о пользователе.
actor_id— чья память это есть,pathорганизует её внутри этого актора иdescriptionулучшает извлечение:memory_store.add( actor_id="user-123", path="/preferences/communication.md", content="Prefers email over phone. Timezone: PST. Enterprise subscription.", description="User 123 communication preferences", )add()завершается с ошибкойALREADY_EXISTS, если запись уже существует по этому пути. Чтобы создать запись или обновить существующую, вызовитеmemory_store.put()с теми же аргументами.Вспомните воспоминания пользователя в последующем разговоре с помощью поиска на естественном языке:
results = memory_store.search(actor_id="user-123", query="communication preferences", limit=10)
API REST
Клиенты вызывают REST API под /api/2.0/agents/memory-stores. Вызывайте его напрямую для языков, отличных от Python.
Генерируйте токен OAuth с помощью CLI Databricks:
databricks auth login --host ${DATABRICKS_HOST} export DATABRICKS_TOKEN=$(databricks auth token | jq -r .access_token)Создайте хранилище памяти для вашего агента:
curl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores?managed_memory_store_id=support-agent-memory" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \ -d '{"description": "Support agent memory"}'Сохраните запись памяти для пользователя.
actor_id— чья память это есть,pathорганизует её иdescriptionулучшает восстановление:curl -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"}'Если запись уже существует по этому пути, запрос завершается ошибкой
ALREADY_EXISTS(HTTP 409). Чтобы обновить существующую запись, найдите её по пути. Запрос возвращает записи пути для каждой сессии, так что выбирайте тот, чейsession_idсовпадает. Последний сегмент егоname— это идентификатор записи:curl -G "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \ --data-urlencode "actor_id=user-123" --data-urlencode "path=/preferences/communication.md"Затем обновите содержимое записи по её ID:
curl -X PATCH "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries/<entry-id>?update_mask=content" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \ -d '{"content": "Prefers email over phone. Timezone: PST."}'Вспомните воспоминания пользователя с помощью поиска на естественном языке:
curl -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"}'
Дайте агенту инструменты памяти
Чтобы агент мог решать, когда сохранять и отзывать память, оберните клиентские операции как инструменты и дайте указания агенту, когда их использовать в системной подсказке. Установите actor_id в коде доверенного приложения на основе проверенных идентификационных данных конечного пользователя. Никогда не позволяйте модели выбирать, чью память читать или записывать.
Следующий пример оборачивает AgentKit SDK memory_store из раздела Начало работы в виде инструментов для 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, replacing any memory at the same path."""
memory_store.put(actor_id=actor_id, path=path, content=content, description=description or None)
return f"Saved memory at {path}"
@function_tool
def list_memories() -> str:
"""List the paths and descriptions of the user's long-term memories."""
memories = memory_store.list(actor_id=actor_id)
return "\n".join(f"{m.path}: {m.description}" if m.description else m.path for m in memories) or "No memory found."
@function_tool
def forget_memory(path: str) -> str:
"""Delete the long-term memory at a path, such as when the user asks you to forget it."""
memories = list(memory_store.list(actor_id=actor_id, path=path))
for memory in memories:
memory.delete()
return f"Forgot memory at {path}" if memories else f"No memory at {path}"
return [search_memory, save_memory, list_memories, forget_memory]
agent = Agent(
name="Support agent",
instructions="Save durable user preferences, recall them when relevant, and forget them when the user asks.",
tools=make_memory_tools(memory_store, actor_id="user-123"),
)
put() создаёт запись или заменяет содержимое записи, уже существующей по этому пути. Чтобы добавить контент в виде новых строк, вместо этого передайте append=True.
put() не является атомарным, поэтому параллельные записи на один и тот же путь могут перезаписывать друг друга.
list(path=...) возвращает записи по этому точному пути в каждой сессии, поэтому forget_memory также удаляет любую запись, сохранённую по этому пути в рамках сессии.
Та же схема работает с Claude Agent SDK и другими фреймворками: оберните операции поиска, записи, получения списка и удаления хранилища в тип инструмента фреймворка.
Если вы также запускаете пайплайн памяти на том же хранилище, пайплайн может перезаписывать, объединять, разделять или удалять записи, которые ваш агент сохраняет для любого актёра, которого он обрабатывает.
Раздел и защищённая память
В пределах магазина actor_id — это то, с помощью чего различают, кому какие воспоминания принадлежат. Каждый список и каждый поиск привязаны к одному actor_id, поэтому выберите стратегию, которая соответствует тому, что вашему агенту нужно запоминать:
-
Приватная память для каждого пользователя: Установите
actor_idна проверенную идентификацию конечного пользователя. Каждый пользователь получает свой отдельный раздел, и агент вспоминает только записи этого пользователя.- Пример: Агент поддержки запоминает предпочтения пользователя в коммуникации и прошлые заявки.
-
Общая память для группы: Установите
actor_idна выбранный вами фиксированный ключ, например, ID команды, проекта или организации. Все читают и пишут одни и те же воспоминания.- Пример: Агент команды запоминает общий глоссарий терминов компании и внутренних конвенций.
-
Разделение памяти по другому признаку: Создайте
actor_idна основе собственных значений, таких как идентификатор арендатора или составной объектuser:project.-
Пример: Мультитенантное приложение устанавливает
actor_idв значение{tenant}:{user}, чтобы пользователи каждого клиента оставались изолированными друг от друга.
-
Пример: Мультитенантное приложение устанавливает
Задайте actor_id в коде приложения, используя контекст доверенного вызывающего компонента: проверенный идентификатор конечного пользователя для памяти для каждого пользователя или доверенный ключ команды или проекта для общей памяти. Никогда не позволяйте модели выбирать это. Если ваша стратегия зависит от идентичности конечного пользователя, отклоняйте запросы, которые её не содержат, вместо того чтобы возвращаться к общему actor_id.
Предупреждение
actor_id разделяет области памяти, но не является средством контроля доступа. Хранилища памяти ограничены рабочим пространством, поэтому любой принципал, имеющий доступ к хранилищу, может читать и записывать каждую запись во всех акторах. Магазин, а не актёр, — это граница безопасности. Для строгой изоляции между арендаторами или пользователями создайте отдельное хранилище памяти для каждой границы.
Чтобы другой принципал, например сервисный директор вашего агента, использовал хранилище, предоставьте ему доступ с помощью операции предоставления разрешения (memory_store.grant_permission(principal_id) в SDK AgentKit). Доступ может предоставить только создатель магазина или администратор рабочего пространства.
Limitations
- Память агента предоставляет только долгосрочную память. Сведения о краткосрочной истории разговоров см. в сессиях агента.
- Поиск ранжирует записи по релевантности, сочетая полнотекстовый поиск (BM25) и семантическое сопоставление по содержанию и описанию каждой записи. Он возвращает до 100 записей и не поддерживает пагинацию.
- Контроль доступа осуществляется на уровне магазина. Контроль доступа за вход и для каждого участника недоступен.
- Контроль доступа к магазину распространяется на входы в магазин. Любой пользователь рабочего пространства может просматривать и получать хранилища Memory, включая их идентификаторы и описания.
- Вы не можете изменить ID магазина после его создания. Можно обновить только
description.