Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Инструменты памяти

PRX предоставляет пять инструментов памяти, которые дают агентам возможность сохранять знания между разговорами, вспоминать релевантный контекст и управлять хранилищем долговременной памяти. Эти инструменты заполняют пробел между эфемерными контекстными окнами LLM и постоянными знаниями агента.

Система памяти поддерживает три встроенные категории -- core (постоянные факты), daily (заметки в рамках сессии) и conversation (контекст чата) -- плюс пользовательские категории. Каждый инструмент учитывает ACL: при включённом контроле доступа к памяти операции ограничиваются на основе правил доступа для каждого принципала.

Инструменты памяти зарегистрированы в реестре all_tools() и всегда доступны при запуске агента с полным набором инструментов. Они работают с любым из пяти бэкендов хранения памяти (Markdown, SQLite, PostgreSQL, Embeddings или in-memory).

Конфигурация

Инструменты памяти настраиваются через секцию [memory]:

toml
[memory]
backend = "sqlite"              # "markdown" | "sqlite" | "postgres" | "embeddings" | "memory"
auto_save = true                # Автосохранение ввода разговора в память
acl_enabled = false             # Включить списки контроля доступа
max_recall_items = 20           # Максимум элементов, возвращаемых recall/search
recall_relevance_threshold = 0.3  # Минимальный порог релевантности для recall

# Опционально: семантический поиск на основе эмбеддингов
embedding_provider = "openai"
embedding_model = "text-embedding-3-small"
embedding_dimensions = 1536
vector_weight = 0.7             # Вес векторного сходства в гибридном поиске
keyword_weight = 0.3            # Вес полнотекстового BM25-поиска
min_relevance_score = 0.4       # Минимальный порог для включения в результаты

# Гигиена памяти (автоматическая очистка)
hygiene_enabled = true
archive_after_days = 7
purge_after_days = 30
conversation_retention_days = 3
daily_retention_days = 7

Справочник инструментов

memory_store

Сохраняет факт, предпочтение, заметку или фрагмент знаний в долговременной памяти.

json
{
  "name": "memory_store",
  "arguments": {
    "key": "user_timezone",
    "value": "The user is located in UTC+8 (Asia/Shanghai)",
    "category": "core"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
keystringДа--Уникальный идентификатор записи памяти
valuestringДа--Содержимое для сохранения
categorystringНет"core"Категория: "core", "daily", "conversation" или пользовательская

Категории:

КатегорияХранениеНазначение
coreПостоянное (до явного удаления)Фундаментальные факты, предпочтения пользователя, конфигурация системы
dailyВ рамках сессии, архивируется после archive_after_daysЗадачи на сегодня, контекст, заметки сессии
conversationКратковременное, очищается после conversation_retention_daysТекущий контекст чата, ссылки
ПользовательскаяСледует правилам хранения dailyПользовательские категории для доменно-специфичных знаний

memory_forget

Удаляет конкретную запись из долговременной памяти по ключу.

json
{
  "name": "memory_forget",
  "arguments": {
    "key": "user_timezone"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
keystringДа--Ключ удаляемой записи памяти

memory_get

Извлекает конкретную запись памяти по точному ключу. Учитывает ACL при его включении.

json
{
  "name": "memory_get",
  "arguments": {
    "key": "user_timezone"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
keystringДа--Точный ключ для поиска

Возвращает сохранённое значение при наличии или ошибку, если ключ не существует или доступ запрещён ACL.

memory_recall

Вспоминает записи памяти по ключевым словам или семантическому сходству. Возвращает наиболее релевантные записи, соответствующие запросу. Этот инструмент полностью отключается при memory.acl_enabled = true -- он удаляется из реестра инструментов.

json
{
  "name": "memory_recall",
  "arguments": {
    "query": "user preferences about coding style"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
querystringДа--Поисковый запрос (ключевые слова или естественный язык)
max_resultsintegerНет20Максимальное количество возвращаемых записей

Полнотекстовый и векторный поиск по всем записям памяти. В отличие от memory_recall, этот инструмент остаётся доступным при включённом ACL, но применяет ограничения доступа для каждого принципала к результатам.

json
{
  "name": "memory_search",
  "arguments": {
    "query": "project deadlines",
    "category": "daily",
    "max_results": 10
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
querystringДа--Поисковый запрос
categorystringНет--Фильтр результатов по конкретной категории
max_resultsintegerНет20Максимальное количество возвращаемых записей

При настроенном поиске по эмбеддингам memory_search выполняет гибридный поиск, комбинируя:

  • Векторное сходство (с весом vector_weight) -- семантическое сопоставление через эмбеддинги
  • BM25-поиск по ключевым словам (с весом keyword_weight) -- традиционное полнотекстовое сопоставление

Результаты ниже min_relevance_score фильтруются.

Использование

Типичный сценарий работы с памятью

Во время разговора агент использует инструменты памяти в естественном цикле:

  1. Вспоминание при старте: Перед ответом система вспоминает релевантные воспоминания для внедрения контекста
  2. Сохранение во время разговора: Когда пользователь делится важной информацией, агент её сохраняет
  3. Поиск по запросу: Когда агенту нужны конкретные прошлые знания, он ищет в памяти
  4. Забывание по запросу: Когда пользователь просит удалить информацию, агент забывает её

Взаимодействие через CLI

Состояние памяти можно проверить из командной строки:

bash
# Просмотр статистики памяти
prx memory stats

# Список всех записей памяти в категории
prx memory list --category core

# Поиск в памяти из CLI
prx memory search "project deadlines"

# Экспорт памяти в файл
prx memory export --format json > memories.json

Пример использования агентом

В многоходовом разговоре:

Пользователь: I prefer 4-space indentation in all my code.
Агент: [вызывает memory_store с key="code_style_indent", value="User prefers 4-space indentation", category="core"]
       Понял, запомню, что вы предпочитаете отступы в 4 пробела.

Пользователь: What are my coding preferences?
Агент: [вызывает memory_search с query="coding preferences"]
       Исходя из того, что я помню, вы предпочитаете отступы в 4 пробела во всём вашем коде.

Безопасность

Применение ACL

При memory.acl_enabled = true система памяти применяет контроль доступа:

ИнструментПоведение ACL
memory_storeСохраняет записи с привязкой к текущему принципалу
memory_forgetПозволяет забывать только записи, принадлежащие текущему принципалу
memory_getВозвращает только записи, к которым текущий принципал имеет доступ
memory_recallПолностью отключён (удалён из реестра инструментов)
memory_searchВозвращает только записи, к которым текущий принципал имеет доступ

Инструмент memory_recall отключается при ACL, потому что его широкое сопоставление по ключевым словам может привести к утечке информации между границами принципалов. Более целевые инструменты memory_get и memory_search выполняют проверки доступа для каждой записи.

Взаимодействие с file_read

При включённом ACL инструмент file_read также блокирует доступ к файлам хранилища памяти (markdown-файлам в каталоге памяти). Это предотвращает обход ACL через чтение необработанных файлов памяти с диска.

Обработка конфиденциальных данных

Записи памяти могут содержать конфиденциальную информацию пользователя. Учитывайте следующие практики:

  • Используйте категорию core экономно для действительно постоянных знаний
  • Включите hygiene_enabled для автоматической очистки старых записей
  • Включите acl_enabled в многопользовательских развёртываниях
  • Периодически проверяйте содержимое памяти через prx memory list
  • Используйте memory_forget для удаления конфиденциальных записей, когда они больше не нужны

Журнал аудита

Все операции с памятью записываются в журнал аудита при security.audit.enabled = true, включая имя инструмента, ключ, категорию и статус успешности/неудачи.

Связанные разделы

Released under the Apache-2.0 License.