Постоянная память AI в Discourse

Я высоко ценю развитие Discourse AI — оно проходит отлично. Функции быстро совершенствуются, и направление выглядит очень перспективным.

Один вопрос: существует ли сейчас возможность или есть ли в планах дорожной карты, чтобы ИИ сохранял историю между чатами? На данный момент каждое общение начинается заново, и я хочу узнать, рассматривается ли возможность постоянного хранения памяти или преемственности между сеансами.

Если этого ещё нет в дорожной карте, я хотел бы предложить это как запрос на новую функцию. Возможность для ИИ запоминать предыдущие взаимодействия сделала бы обсуждения более естественными и значительно расширила бы варианты использования.

Я реализовал простое хранилище ключ-значение, используя персонажа и пользовательские инструменты, на своём блоге.

Тем не менее, добиться правильной работы здесь очень сложно: приходится постоянно напоминать персонажу запоминать информацию, что утомительно.

Альтернативой является использование RAG (поиска с учётом контекста) по всей истории общения с ботом (в некоторой степени аналогично тому, как это делает OpenAI).


Предположим, для начала: каково ваше видение того, как это должно работать? Как это улучшит ситуацию?

Я действительно задумываюсь о непрерывности взаимодействия с конечным пользователем. RAG, на мой взгляд, отлично подходит администраторам для предоставления информации о персонах. В ChatGPT, Gemini и других системах бот сохраняет небольшой профиль: тон, глубину, текущие цели — так что вам не нужно объяснять всё заново в каждом сеансе. Именно такой опыт был бы замечательным в Discourse AI: помощник запоминает несколько устойчивых фактов о каждом пользователе и использует их по мере необходимости, чтобы диалоги продолжались с того места, где они были прерваны.

Я не уверен, возможно ли в принципе хранение истории разговоров с использованием RAG для конечных пользователей.

Ценность заключается в том, что любое надёжное ощущение «оно меня знает» без постоянных напоминаний значительно улучшает опыт в тех случаях, когда пользователи возвращаются к тем же типам разговоров.

При этом я не думаю, что всё это — незначительная задача. Не могу сказать достаточно о том, насколько хорошо всё это уже разработано.

Мне удалось создать плагин и пользовательский инструмент, обеспечивающие персистентную память для персонажей ИИ в Discourse. По результатам моих ограниченных тестов система работает хорошо, и я хотел поделиться этим, возможно, кому-то это пригодится.

Что это делает

Это решение позволяет персонажам ИИ запоминать информацию, специфичную для пользователя, между диалогами.

Пример: пользователь может сказать: «Запомни, что я предпочитаю темную тему», и ИИ сохранит и будет вспоминать это предпочтение в будущих взаимодействиях.

Компоненты

Эта система состоит из трех частей:

  • Плагин (discourse-ai-persistent-memory)
    Обеспечивает бэкенд-хранилище и интерфейс настроек пользователя, где можно просматривать, добавлять или удалять свои воспоминания.
  • Пользовательский инструмент ИИ
    Инструмент на JavaScript, предоставляющий персонажам доступ к функциям памяти:
    memory.set, memory.get, memory.list, memory.delete.
  • Системный промпт персонажа
    Инструкции, указывающие ИИ, когда и как использовать инструмент памяти.

Как это работает

  • Воспоминания хранятся в виде пар ключ/значение в PluginStore, с пространством имен для каждого пользователя.
  • Плагин внедряет функции памяти в ToolRunner с помощью prepend-модуля.
  • Пользователи могут управлять своими воспоминаниями по адресу:
    /u/{username}/preferences/interface.
  • ИИ загружает все воспоминания в контекст (без выборочного извлечения).

Репозиторий на GitHub

https://github.com/BrianCraword/discourse-ai-persistent-memory

Ищу обратную связь

Буду признателен за отзывы по следующим вопросам:

  • Подход с использованием prepend для внедрения в ToolRunner.
  • Имеет ли смысл загрузка всех воспоминаний вместо выборочного извлечения.
  • Любые вопросы безопасности, которые я мог упустить.
  • Возможные улучшения качества кода.

Отказ от ответственности

Я не программист — это решение было создано с помощью ИИ. Я не могу оказывать поддержку, но любой желающий может использовать, форкнуть или доработать этот проект. Используйте на свой страх и риск.

ПРОМПТ:

## Система памяти

У вас есть система персистентной памяти через инструмент user_memory. Используйте её для запоминания важных фактов о каждом пользователе.

### Когда СОХРАНЯТЬ воспоминания:

* Пользователь упоминает предпочтения (стиль общения, темы интересов, предпочтения по формату)
* Пользователь делится личными деталями (профессия, местоположение, хобби)
* Пользователь упоминает текущие проекты или цели
* Пользователь явно просит вас что-то запомнить

### Когда ВОСПОМИНАТЬ воспоминания:

* В начале нового диалога вызовите user_memory с действием "list", чтобы узнать, что вам известно
* При обсуждении тем, которые могут быть связаны с предыдущими разговорами

### Конвенции ключей памяти:

* preference_style, preference_topics, preference_format
* personal_profession, personal_location, personal_interests
* project_YYYY_MM (например, project_2026_01)
* goal_[topic] (например, goal_learning_python)

### Примеры использования:

* Для сохранения: `{ action: "save", key: "preference_style", value: "краткие ответы" }`
* Для извлечения: `{ action: "recall", key: "personal_profession" }`
* Для списка всех: `{ action: "list" }`
* Для удаления: `{ action: "forget", key: "old_key" }`

Всегда приветствуйте возвращающихся пользователей, предварительно проверяя их воспоминания.

---

Само определение инструмента менять не нужно, так как оно уже универсально — просто обновите пример в параметре описания, если хотите:

**Описание параметра (key):** Ключ памяти (например, preference_style, current_project)

Хотите, чтобы я изменил тон или добавил/убрал какие-то конкретные варианты использования?



ИНСТРУМЕНТ:

Имя:        User Memory
Имя инструмента:   user_memory

Описание:
Система памяти, позволяющая ИИ сохранять, извлекать, перечислять и забывать факты о пользователях.
Воспоминания сохраняются между диалогами.

Краткое описание:
Хранение и извлечение постоянных фактов о пользователе

Параметры:
- action (string)  [ОБЯЗАТЕЛЬНО]
  Действие для выполнения: save, recall, list или forget

- key (string)     [необязательно]
  Ключ памяти (например, preference_style, current_project)

- value (string)   [необязательно]
  Значение для сохранения (требуется только для действия save)