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

I appreciate the development on Discourse AI which has been excellent. The features are maturing quickly, and the direction looks very promising.

One question: is there currently a way, or any roadmap plans, for the AI to retain history between chats? At the moment each conversation starts fresh, and I’m wondering if persistent memory or continuity between sessions is being considered.

If it’s not already on the roadmap, I’d like to raise it as a feature request. Having the option for AI to remember past interactions would make discussions more natural and significantly expand use cases.

2 лайка

I implemented a basic key/value store using a persona and custom tools on my blog.

That said, this is very hard to get right, you got to keep nudging personas to remember stuff which is annoying.

The alternative is to just use RAG over all of your history with the bot (somewhat similar to how Open AI does this)


I guess for starters, what is your vision on how this would work? How would it improve things?

1 лайк

I’m really thinking about the end-user continuity experience, RAG I consider great for admins to provide info for persona. With ChatGPT/Gemini/others, the bot carries a small profile forward—tone, depth, ongoing goals—so you don’t have to re-explain each session. That’s the experience that would be great in Discourse AI: the assistant remembers a few durable things about each user and uses them when relevant, so conversations pick up where they left off.

I have no understanding if end user RAG history for conversations is possible in any way.

The value is that any reliable “it knows me” feel without constant prompting greatly enhances the experience for use cases where the same type conversations are revisited by users.

That being said I don’t think any of this is a minor undertaking. I can’t say enough about how well all this has been developed already.

Мне удалось создать плагин и пользовательский инструмент, обеспечивающие персистентную память для персонажей ИИ в 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)

2 лайка