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.