Тренировка бота
Лайки/дизлайки, training examples, retrieval по embeddings, ручная коррекция, автономное обучение.
Тренировка бота
«Промпт + база знаний» хорошо работает на первой версии, но со временем у каждого бота накапливается знание из реальных диалогов — какие вопросы посетители задают, где бот отвечает плохо, какие фразы лучше переформулировать. Framix позволяет это собирать и применять автоматически.
В системе три слоя обучения:
- Ручное — оператор перехватывает диалог, даёт правильный ответ; системе видно ground-truth.
- Через критику (session-critique) — бот-аудитор разбирает завершённую сессию и предлагает 1-2 эталонных пары для ручного аппрува.
- Разбор переписки по кнопке — вы сами просите Framix разобрать конкретный диалог и извлечь урок; фоновый автоматический обход выключен, работает только по вашему запросу.
Ручное обучение
Лайки и дизлайки
В каждом сообщении бота посетителю показаны кнопки « / ». Клики записываются в ai_message_feedback. В админке /agents/<id> → вкладка «Диалоги» видны дизлайки на конкретных ответах — можно открыть сессию, посмотреть, что бот ответил не так, и:
- переписать системный промпт;
- добавить пример в training set;
- обновить базу знаний;
- вручную ответить тому посетителю в режиме оператора.
Training examples
agent_training_examples — таблица «эталонных пар» вход→ответ.
| Поле | Описание |
|---|---|
userMessage | Что спросил посетитель (или паттерн вопроса). |
assistantMessage | Как должен ответить бот. |
notes | Контекст, почему так. |
embedding | Векторное представление userMessage (см. ниже). |
Откуда они берутся:
- Вручную в админке: открыли дизлайк-сессию → «Добавить пример».
- Полуавтомат: через session-critique (отдельный шаг бота-аудитора, который читает завершённую сессию и предлагает 1-2 эталонных пары).
- Автономно: через модуль автономного обучения (см. ниже).
- Импорт из CSV для опытных пользователей.
Retrieval по embeddings
Когда посетитель пишет в чат, сервер:
- Считает embedding его сообщения через OpenRouter
text-embedding-3-small(если естьOPENROUTER_API_KEYв env). - Делает kNN top-3 по
agent_training_examplesэтого бота — находит похожие прошлые вопросы. - Подмешивает найденные пары в системный промпт под блоком «Похожие примеры из тренировки».
- LLM получает контекст «вот так мы отвечали раньше на похожие вопросы» — и опирается на них.
Это активное применение уроков, а не пассивное накопление. Без OPENROUTER_API_KEY retrieval-блок просто не подмешивается — бот работает на обычном промпте + базе.
Уроки, полученные через автономное обучение, также участвуют в retrieval. Positive-уроки («что привело к заявке») и failure-уроки («где клиент ушёл») рендерятся в подсказку боту по-разному — чтобы он понимал, что воспроизводить, а чего избегать.
Session-critique (критика сессии)
После завершения долгой сессии (≥ N сообщений) запускается фоновый job, который:
- Берёт всю переписку.
- Прогоняет через специального бота-аудитора.
- Получает на выходе 1-2 предлагаемых training-example'а (что было упущено, что можно улучшить).
- Складывает их в очередь на ручной аппрув — в админке.
Это идея «компостирования» опыта: реальные диалоги превращаются в улучшения промпта без вашего ручного разбора.
Разбор переписки по кнопке
Фоновый автоматический обход диалогов выключен — раньше Framix сама каждые 15 минут просматривала затихшие диалоги, но это оказалось избыточным для большинства ботов. Осталась кнопка «Разобрать эту переписку» в карточке конкретного диалога — доступна с тарифа «Бизнес» и старше, с суточным лимитом разборов на бота.
Нажатие кнопки — и есть ваше согласие на разбор именно этого диалога. Framix классифицирует исход:
| Исход | Что это |
|---|---|
Конверсия (converted) | Клиент оставил лид, сделал заказ или запись |
Брошен (abandoned) | Последнее сообщение — от бота, клиент замолчал, лида нет |
Раздражение (frustrated) | В диалоге зафиксированы сигналы злости/фрустрации или дизлайк |
Непонимание (confused) | Клиент повторял вопрос или путался |
Упущенная эскалация (escalation_missed) | Клиент просил человека, но оператор не подключился |
Решено (resolved) | Диалог закончился позитивно, без лида — норма |
Шум (noise) | Слишком короткий диалог без сигналов — пропускается |
Для поучительных исходов (конверсия, провал, фрустрация, непонимание, упущенная эскалация) система вызывает LLM-разбор и пишет урок в тот же agent_training_examples. Если модель считает, что «урока здесь нет» — запись не создаётся (защита от мусора).
Что важно знать:
- Расход — за счёт Framix (не за ваш счёт).
- Суточный лимит разборов на бота — после исчерпания кнопка временно недоступна, попробуйте на следующий день.
- Уроки строго на языке посетителя — если посетитель писал по-английски, урок на английском.
- Ручные уроки оператора приоритетнее — если в сессии уже есть operator-урок, авто-урок для неё не создаётся.
- Уроки из разбора видны в списке уроков с бейджем источника (Авто-успех / Авто-провал) и полем confidence. Они редактируемы и удаляемы как обычные.
Результат приходит сразу по клику — фонового ожидания больше нет.
Где это в админке
/agents/<id> → вкладка «Обучение»:
- Уроки — список training examples этого бота (поиск, фильтры по источнику: Оператор / Критика / Авто-успех / Авто-провал, импорт/экспорт). Поле confidence и бейдж источника видны на каждой карточке.
- Ожидают аппрува — предлагаемые аудитором пары (session-critique), ожидающие вашего одобрения.
- Обратная связь — лайки/дизлайки последних сообщений (фильтр «только дизлайки»).
- Кнопка «Разобрать эту переписку» — в карточке каждого диалога на вкладке «Диалоги», не здесь.
Стоимость
- Embedding (FTS) — поиск похожих примеров идёт через Postgres full-text search. Бесплатно, без LLM-вызова.
- Session-critique — LLM-разбор сессии идёт через дешёвую фоновую модель (
deepseek-v4-flashпо OpenRouter), расход зависит от длины сессии. Списывается с баланса владельца бота. - Разбор переписки по кнопке — LLM-разборы идут за счёт Framix (не за ваш счёт). Виден в системной аналитике платформы.
- Retrieval-block в основном чате — добавляет ~200-500 input-токенов на запрос. С учётом prompt cache — почти бесплатно после первого раза.
Не нашли ответ? Напишите в поддержку — отвечаем по будням.