Wiki / Core Features / Ответы ИИ / Память ИИ

Память ИИ

Обновлено Maxime_48 · 1 час назад · Просмотры: 239

Языки: English Français Deutsch Español Português (Brasil) Italiano Nederlands Polski Türkçe Русский 日本語 한국어 中文

Память ИИ позволяет YAWBDB хранить полезный контекст сервера, чтобы ответы ИИ со временем становились последовательнее.

Писать в неё могут двое: вы из панели и бот, который отмечает то, что узнаёт из разговоров в Discord. Система памяти управляется из панели, и ничто в ней никогда не удаляется автоматически.

Страница памяти ИИ со списком действующих и снятых фактов сервера и карточкой с разбивкой по типам памяти над таблицей


🧠 Для чего нужна память

Память помогает ИИ запоминать такую информацию, как:

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

Цель - чтобы ответы ИИ лучше «знали» сервер.


📒 Страница памяти

Страница памяти даёт уполномоченным пользователям полный обзор сохранённых записей.

На этой странице можно:

  • Просматривать записи по серверам
  • Искать по ключу или содержимому
  • Добавлять новые записи вручную
  • Изменять существующие записи
  • Удалять устаревшие записи
  • Просматривать значения достоверности

🔎 Фильтрация и постраничный вывод

Память можно фильтровать по серверу и мгновенно искать по ней.

Большие объёмы записей разбиваются на страницы, чтобы страница оставалась удобной.


✍️ Записи, добавленные вручную

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

Примеры:

  • server_theme: Этот сервер посвящён ретрогеймингу.
  • bot_tone: Ответы должны быть дружелюбными и краткими.
  • important_rule: Не оказывать поддержку в публичных каналах; направлять пользователей в тикеты.

Пишите короткие и понятные записи. Не вставляйте огромные абзацы без необходимости.


✏️ Изменение памяти

Можно изменять:

  • Ключ
  • Содержимое
  • Достоверность

Изменяйте запись, если она всё ещё полезна, но требует исправления.

Удаляйте её, если она устарела или потеряла актуальность.


♻️ Ничего не забывается за вашей спиной

Записи никогда не удаляются автоматически. Нет ни срока давности, ни задачи очистки: факт остаётся, пока сам бот не решит, что он больше не верен, или пока кто-то не удалит его на этой странице.

Вы управляете тем, сколько из этого доходит до ИИ. Параметр «Максимум добавляемых воспоминаний» на странице настроек AI Responses задаёт, сколько фактов отправляется в качестве контекста: от 1 до 1000, по умолчанию 20. Чем больше значение, тем больше материала у ИИ; чем меньше, тем компактнее ответы. В обоих случаях ничего не удаляется, так что значение можно свободно менять в любую сторону.

Возраст - не повод забывать. Факт «Этот сервер говорит по-французски» остаётся верным и через два года, и никто больше его не повторит.

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

Каждый факт, отправленный модели, несёт свой номер, который в получаемом ею контексте выглядит как [#12]. Когда бот приходит к выводу, что что-то больше не верно (правило изменилось, кто-то передумал), он отвечает этим номером, и запись перестаёт использоваться. Будет ли она удалена или останется для чтения, зависит от типа памяти (см. ниже).

Он может убрать только тот факт, который ему действительно показали в этом обмене. Если он назовёт номер, которого перед ним не было, ничего не произойдёт: угаданный номер не может затронуть факт из другого разговора, даже реально существующий на том же сервере.

Поэтому параметр «Максимум добавляемых воспоминаний» важен вдвойне. Факт, который никогда не доходит до модели, она не сможет пересмотреть: он остаётся, пока кто-то не удалит его на этой странице. С архивом с поиском это перестаёт быть тупиком: факт, который бот нашёл поиском, он может и поправить.


🧭 Выбор типа памяти

Тип памяти - это один выбор на сервер, который делается на этой странице памяти, а не на странице настроек AI Responses. Он определяет, как бот хранит то, что знает, и как это извлекает, и сохраняется сразу после нажатия. Это не выпадающий список: нажмите на поле, и шесть типов раскроются поверх страницы рядом друг с другом, у каждого описано, что он делает, что меняет, что сдвинется при переходе на него и где почитать подробнее.

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

Страница настроек AI Response по-прежнему содержит параметры, которые идут вместе с активным типом: веса ранжирования (свежесть, важность, релевантность), сколько фактов передаётся, а также модели для фонового прохода консолидации и для семантических эмбеддингов. Эта страница подсказывает, где именно находится каждый из них, так что искать их не придётся.

Classic - то, что работает сегодня и является значением по умолчанию. Сервер, который никогда не открывал это поле, ведёт себя ровно так, как всегда: простой список фактов, в каждый ответ попадают самые недавно обновлённые, ничего не удаляется само.

Каждый из остальных пяти добавляет одну вещь к предыдущему, и они создаются по порядку:

  • Journal - доступен сейчас. Факт, переставший быть верным, снимается, а не стирается, так что можно по-прежнему прочитать, что в нём было. См. следующий раздел.
  • Архив с поиском - доступен сейчас. Бот может найти что-то, а не только использовать переданные ему факты, поэтому то, что осталось за пределом лимита передачи, перестаёт быть невидимым. См. раздел после следующего.
  • Ранжированная память - доступна сейчас. Места достаются наиболее полезным фактам, а не просто самым свежим.
  • Консолидированная память - доступна сейчас. Фоновый проход объединяет дубликаты и переписывает сводку, пока на сервере тихо, и предлагает каждое такое изменение вам на утверждение.
  • Семантическая память - сопоставление по смыслу, а не по словам, так что «он говорит по-французски» находит «язык сервера - французский». Самый сильный из шести типов и единственный, за который выставляется счёт.

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

Если выбран один сервер, страница памяти сообщает, что именно сдвинет изменение, в цифрах, до того, как вы его сделаете.


📓 Journal - ничего не стирается, только снимается

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

Появляется и соответствующий ход. Вместо того чтобы только убирать [#12], бот может сказать «это больше не верно, вот что приходит на замену», и ему прямо сообщают, что прежняя формулировка сохранится. Исправление, которое он считает разрушительным, - это исправление, которое он делает неохотно.

Чтение истории

Как только что-то снято, над таблицей появляются три вкладки:

  • Действующие - то, что бот реально видит. Это вкладка по умолчанию и настоящий ответ страницы на вопрос «что знает бот?».
  • Снятые - то, что раньше было верным. Зачёркнуто, с датой, причиной (если бот её указал) и заменой.
  • Все - и то и другое в одном списке.

Отмена ошибочного решения

Бот иногда ошибается. Кнопка Восстановить в снятой строке открывает её снова одним щелчком: именно ради этого строка сохранена, а не удалена. Замена, если она была, намеренно не трогается: два факта могут быть верны одновременно, и какой из них оставить, решаете вы, а не панель.

Кнопка Удалить по-прежнему удаляет, в снятой строке так же, как и в любой другой. Если человек удаляет факт на этой странице, он уже принял решение; ничто его не оспаривает.

Переключение туда и обратно

Включение Journal ничего не перемещает. Каждый имеющийся у вас факт считается по-прежнему верным (так оно и было) и сохраняет дату создания.

При возврате к Classic всё, что было снято за это время, остаётся на месте: по-прежнему на этой странице и по-прежнему не видно боту. Если вы хотите вернуть всё это ИИ, страница памяти предлагает «Восстановить все снятые факты» для этого сервера, и это действие записывается в журнал аудита. Само оно никогда не выполняется: то, что журнал снял, он снял не просто так.


🔎 Архив с поиском - бот может искать

У Classic-памяти есть один настоящий предел, и это не количество хранимых фактов. Всё, что выходит за «Максимум добавляемых воспоминаний», невидимо для ИИ, каким бы верным оно ни было. Единственный рычаг - увеличить лимит, но это удорожает каждое сообщение.

Архив с поиском даёт боту второй рычаг. Недавние факты передаются ему как обычно, а сверх того он может запросить факт по названию: «найти в памяти: день рождения Пола». То, что он находит, передаётся ему до того, как он ответит.

Сколько это стоит

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

Сам поиск - полнотекстовый, выполняемый базой данных. Никаких эмбеддингов, векторов, вычислений на каждое сообщение и никаких сторонних служб.

До чего он дотягивается

До каждого действующего факта этого сервера в обеих областях: факты о сервере и факты об участниках. Это сделано намеренно: «день рождения Пола» - факт о человеке, который не тот, кто говорит, и поиск, способный находить только факты самого говорящего, пропустил бы большинство стоящих вопросов.

Недоступно ему следующее: всё снятое в журнале (закрыть период действия факта - это как раз решение не отдавать его обратно) и всё, что находится в канале, где чтение памяти не разрешено. Поиск - это чтение, и он подчиняется той же настройке «Каналы, где память может быть ПРОЧИТАНА».

Факт, найденный поиском, бот тоже может исправить, на тех же условиях, что и переданные ему.

Перед включением: пробный расчёт

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

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


🏅 Ранжированная память - места достаются тем фактам, которых они стоят

Classic-память передаёт модели последние N изменённых фактов. Иначе говоря: правило, по которому ваш сервер живёт уже год, теряет своё место из-за вчерашней болтовни, потому что болтовню трогали позже.

Ранжированная память оценивает каждый факт-кандидат по трём признакам и передаёт лучшие N:

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

Это ранжирование, а не фильтр. Ничто не откладывается навсегда, и факт, не попавший в выборку на одном сообщении, снова становится кандидатом на следующем.

Веса задаёте вы

Три параметра на странице AI Responses (свежесть, важность, релевантность) определяют, сколько весит каждый признак, отдельно для каждого сервера. Серверу, где память в основном состоит из постоянных правил, захочется, чтобы важность весила больше свежести; оживлённому общительному серверу - наоборот.

Достоверность, уже хранящаяся у каждого факта, тоже учитывается. Она работает как множитель и только в сторону уменьшения: факт, в котором бот был не уверен, не обгонит факт, в котором он был уверен.

Переключение ничего не стоит

Нет ни миграции, ни счёта. Факт, которому ещё никто не поставил оценку, ранжируется посередине, а не последним, поэтому ранжирование работает с первого сообщения на том, что у вас уже есть, а важность заполняется сама по мере того, как бот переписывает факты.

Пробный расчёт показывает, у скольких ваших фактов уже есть оценка, и какие из них получили бы место, а какие потеряли бы его.


🧩 Консолидированная память - порядок наводится, пока на сервере тихо

Растущая память в итоге дважды говорит одно и то же под двумя названиями: language с одной стороны, lang с другой. До сих пор разбираться с этим можно было только вручную.

Консолидированная память добавляет фоновый проход по памяти сервера, на котором стало тихо. Он никогда не запускается посреди ответа и, что важно, сам ничего не применяет.

Он предлагает, вы решаете

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

  • Объединить - принять предложение прохода.
  • Объединить в обратную сторону - оставить вместо него другой факт. Когда два факта противоречат друг другу, именно вы знаете, какой из них всё ещё верен.
  • Оставить оба - отклонить. Проход не спросит снова, пока один из двух фактов не будет переписан.

Пока не нажато одно из этого, ничего не меняется.

«Да» ничего не стирает

Объединение - это замена в смысле журнала. Факт, уступающий место, закрывает свой период действия со ссылкой на тот, что остался, отображается на этой странице зачёркнутым, с датой и причиной, а Восстановить возвращает его. Объединение отменяется точно так же, как любое другое снятие.

Противоречия никогда не объединяются. Два факта, говорящие противоположное, помечаются, чтобы человек разобрался. Ничто в проходе не знает, какой из них всё ещё верен.

Сводка переписывается

Сводка - единственная строка памяти, которую бот читает целиком каждый раз, а значит, она же и устаревает первой. Она была написана один раз, по тому, что было известно тогда.

Проход составляет черновик того, что он сказал бы сегодня, по фактам всего сервера, и страница показывает оба варианта рядом: что ваш бот читает сегодня и что он читал бы вместо этого. Правило то же, что и при объединении: ничто не заменяет её без вашего «да», а прежняя формулировка снимается, а не удаляется.

Собственная модель

Этот проход не соревнуется с ответом в Discord, поэтому он может работать на более сильной или более дешёвой модели, отличной от той, что отвечает в канале, - с собственным эндпоинтом и собственным ключом, как и любое поле модели в панели.

Он работает и вообще без модели. Без неё проход всё равно находит и предлагает все пары; объединение просто сохраняет побеждающий факт слово в слово, а не переписывает два в одно предложение. Модель пишет только предлагаемую формулировку и черновик сводки.

Когда он запускается

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

Перед включением: пробный расчёт

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

Включение ничего не перемещает. Первый проход предлагает, решаете вы.


🧠 Семантическая память - смысл вместо слов

Каждый из предыдущих типов по сути отвечает на один и тот же вопрос: есть ли у двух текстов общие слова? Для «он говорит по-французски» и «язык сервера - французский» ответ отрицательный: одно общее слово, и оно не то, что нужно.

Семантическая память превращает каждый факт в эмбеддинг: направление, а не строку. Два факта с одинаковым смыслом смотрят в одну сторону, какими бы словами они ни были написаны, и близость между ними - число, которое панель может сравнивать.

Что на самом деле меняется

Две вещи, и вторую вы ощущаете каждый день.

Поиск перестаёт промахиваться. Когда бот ищет факт, которого ему не передали, он больше не зависит от того, использовал ли участник то же слово, что и тот, кто записал факт.

Ранжирование перестаёт зависеть от слов сообщения. В Ranked факт получает оценку релевантности по тому, где он оказался в результатах поиска. В Semantic оценка зависит от того, насколько он на самом деле близок к тому, что сейчас говорится: разница между «этот факт нашёлся» и «этот факт об этом».

Сколько это стоит

Это единственный тип, который по расписанию отправляет ваши данные наружу, поэтому о стоимости стоит сказать прямо:

  • Один вызов эмбеддинга на каждый записанный факт, один раз. Факт, формулировка которого не менялась, никогда не векторизуется дважды.
  • Один вызов на каждое сообщение, достаточно длинное, чтобы с ним сравнивать. Короче двенадцати символов ничего не отправляется: у «lol» нет ничего, с чем можно сопоставлять.
  • Само сравнение выполняется в панели, а не в базе данных, поэтому этот тип комфортно работает с несколькими тысячами фактов на сервере и ненамного больше.

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

Он сам переключается на запасной вариант

Модель не указана, эндпоинт отказывает, догоняющий проход ещё не выполнился или вы только что сменили модель эмбеддингов: во всех этих случаях поиск возвращается к сопоставлению слов вместо того, чтобы сломаться. В ответе указано, какой из двух вариантов реально сработал, так что тихий откат остаётся заметным.

Смена модели эмбеддингов приводит к повторной векторизации всего, и пока этот проход не завершён, сервер ищет по словам. Тем временем ничего не ломается.

Перед включением: пробный расчёт

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

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


🧹 Очистка памяти

Удалять записи по одной хорошо, когда ошибочен один факт. Для двух других случаев есть «Очистить память» - рядом с фильтром сервера, как только выбран один сервер:

  • Всё об этом сервере - когда память ушла так далеко, что начать заново лучше, чем делать двадцать исправлений.
  • Всё об одном участнике - когда человек ушёл или просит, чтобы о нём забыли. Введите его Discord ID пользователя.

Очистка выполняется сразу и необратима, а бот начинает учиться снова с ближайшего разговора. Каждая очистка записывается в ваш журнал аудита от имени того, кто её сделал, с указанием, сколько записей удалено.


🔑 Управление доступом

Записи памяти видны всем, у кого есть доступ к команде, которой принадлежит сервер.

Изменение - это другое право: добавление, редактирование, удаление и очистка требуют разрешения настраивать сервер, того же, что нужно для настроек функций. Без него список вам по-прежнему доступен для чтения, а кнопки «Очистить память» просто нет.

Не храните в памяти ИИ секреты, пароли, закрытые токены и конфиденциальную информацию.


🧵 Ветки

Чтение и запись памяти подчиняются настройкам «Каналы, где память может быть ПРОЧИТАНА» и «Каналы, где память может быть ЗАПИСАНА», а ветка не является ни одним из этих каналов, даже если канал, в котором она открыта, является. По умолчанию память в ветках не читается и не записывается. Параметр «Включать ветки» в AI Response (по умолчанию выключен) позволяет ветке следовать за каналом, в котором она создана; см. AI Response. Оставьте его выключенным, если ветка может быть открыта для людей, которым не следует видеть то, что хранится в памяти.


✨ Память и качество ответов

Больше памяти - не всегда лучше.

Слишком много нерелевантных фактов может сделать ИИ менее сосредоточенным.

Хорошая память должна быть:

  • Краткой
  • Точной
  • Релевантной
  • Актуальной
  • Простой для понимания

💡 Рекомендации

  • Просматривайте память после крупных изменений на сервере.
  • Удаляйте устаревшие факты.
  • Очищайте записи участника, когда он просит о нём забыть, вместо того чтобы искать его строки по одной.
  • Формулируйте важные правила чётко и явно.
  • Не храните личные данные пользователей без веской причины и разрешения.
  • Используйте память, чтобы улучшать контекст, а не заменять модерацию или решения персонала.