Один из самых редких механизмов в этом проекте связан не с ответами, а с тем, как система постепенно собирает профиль человека.
Здесь профиль не выглядит как анкета, заполненная один раз. Это обновляемая модель присутствия: она уточняется по мере общения и не пересобирается на каждую реплику.
Ключевой узел выглядит так:
if n >= PROFILE_UPDATE_EVERY:
c.execute("UPDATE ann_profile_counters SET since_last_update=0 WHERE user_id=?", (int(user_id),))
queue_profile_update(int(user_id))
• PROFILE_UPDATE_EVERY
Задаёт порог обновления.
Профиль не дёргается после каждого нового сообщения.
• since_last_update
Счётчик показывает, сколько нового материала накопилось с прошлого обновления.
• queue_profile_update(int(user_id))
Пересборка профиля выносится отдельно.
Это значит, что система сначала накапливает наблюдения, а потом обновляет профиль как самостоятельную задачу.
То есть логика здесь не реактивная, а накопительная:
сначала собирается массив новых реплик, потом система решает, что человека уже можно описывать точнее.
Сам профиль хранится отдельно:
CREATE TABLE IF NOT EXISTS ann_profiles(...)
А основания для него ещё в одном слое:
CREATE TABLE IF NOT EXISTS ann_profile_evidence(...)
• ann_profiles
Хранит текущее описание человека внутри системы.
• ann_profile_evidence
Хранит, на чём это описание вообще основано.
Это важный момент.
Проект не просто “формирует впечатление” о пользователе. Он хранит ещё и следы, из которых это впечатление выросло.
Поэтому бот работает не с разовым образом собеседника, а с длительно уточняемым представлением о человеке.
Именно это делает профиль в проекте не декоративной персонализацией, а отдельным операционным слоем системы.
Оглавление темы 📌
Навигация по проектам канала 📍
Все проекты 🎶
#annBot@annsFlow
💻 annFlow