Бот отвечает не по принципу “увидел сообщение → сразу сгенерировал текст”.
Сначала он решает, нужно ли вообще отвечать. Потом собирает контекст, подтягивает профиль и только после этого строит ответ.
Один из ключевых узлов выглядит так:
ctx = ann_build_context_from_db(chat_id, limit=ANN_CONTEXT_MSG_LIMIT, max_chars=ANN_CONTEXT_MAX_CHARS)
profile_block = _build_profile_prompt_block(last_user_text, base_max_tokens, mention_max_tokens)
messages = [
{"role": "system", "content": system_prompt},
{"role": "system", "content": profile_block},
{"role": "user", "content": ctx},
]
Что здесь важно:
• ann_build_context_from_db(...)
Функция собирает контекст из базы данных.
То есть бот берет не только последнее сообщение, а историю разговора перед ответом.
• chat_id
Контекст собирается для конкретного чата.
Это защита от смешивания разных диалогов.
• limit=ANN_CONTEXT_MSG_LIMIT
Ограничивает, сколько сообщений брать в контекст.
Иначе prompt раздуется и станет шумным.
• max_chars=ANN_CONTEXT_MAX_CHARS
Дополнительно ограничивает размер контекста в символах.
Это нужно, чтобы не перегружать модель.
• _build_profile_prompt_block(...)
Отдельно строит блок профиля пользователя.
То есть бот подмешивает не только историю чата, но и накопленные наблюдения о человеке.
• last_user_text
В профильный блок передаётся последнее сообщение пользователя.
Это помогает выбрать более релевантный тон и факт из профиля.
• messages = [...]
Это уже финальная сборка prompt-пакета перед генерацией.
• {"role": "system", "content": system_prompt}
Главный системный слой.
Здесь лежит общий характер бота, его рамка и поведение.
• {"role": "system", "content": profile_block}
Второй системный слой.
Здесь лежит персонализация: тон, факты, особенности конкретного человека.
• {"role": "user", "content": ctx}
А здесь лежит уже сам собранный контекст разговора.
То есть логика такая:
1. бот не отвечает “вслепую”
2. сначала собирает историю диалога
3. потом добавляет профиль человека
4. потом соединяет это с общей философией и системными правилами
5. и только после этого генерирует ответ
Именно поэтому его ответ держится не на одной последней реплике, а на нескольких слоях сразу:
контекст, профиль, память и системная логика. Бот отвечает не “на сообщение”, а на ситуацию разговора.
Оглавление темы 📌
Навигация по проектам канала 📍
Все проекты 🎶
#annBot@annsFlow
💻 annFlow