Тренировка агента
Лайки/дизлайки, training examples, retrieval по embeddings, ручная коррекция, автономное обучение.
Тренировка агента
«Промпт + база знаний» хорошо работает на первой версии, но со временем у каждого агента накапливается знание из реальных диалогов — какие вопросы посетители задают, где агент отвечает плохо, какие фразы лучше переформулировать. Framix позволяет это собирать и применять автоматически.
В системе три слоя обучения:
- Ручное — оператор перехватывает диалог, даёт правильный ответ; системе видно ground-truth.
- Через критику (session-critique) — агент-аудитор разбирает завершённую сессию и предлагает 1-2 эталонных пары для ручного аппрува.
- Автономное (opt-in) — Framix сам анализирует затихшие диалоги и извлекает уроки без вашего участия.
Ручное обучение
Лайки и дизлайки
В каждом сообщении агента посетителю показаны кнопки «👍 / 👎». Клики записываются в ai_message_feedback. В админке /account/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'а (что было упущено, что можно улучшить).
- Складывает их в очередь на ручной аппрув — в админке.
Это идея «компостирования» опыта: реальные диалоги превращаются в улучшения промпта без вашего ручного разбора.
Автономное обучение (opt-in)
Тумблер «Автономное обучение» в /account/agents/<id> → вкладка «Обучение». По умолчанию выключен — вы включаете его сознательно.
Когда включён, Framix каждые 15 минут обходит затихшие диалоги агента (нет новых сообщений 6+ часов, диалог моложе 7 дней) и классифицирует исход каждого:
| Исход | Что это |
|---|---|
Конверсия (converted) | Клиент оставил лид, сделал заказ или запись |
Брошен (abandoned) | Последнее сообщение — от агента, клиент замолчал, лида нет |
Раздражение (frustrated) | В диалоге зафиксированы сигналы злости/фрустрации или дизлайк |
Непонимание (confused) | Клиент повторял вопрос или путался |
Упущенная эскалация (escalation_missed) | Клиент просил человека, но оператор не подключился |
Решено (resolved) | Диалог закончился позитивно, без лида — норма |
Шум (noise) | Слишком короткий диалог без сигналов — пропускается |
Для поучительных исходов (конверсия, провал, фрустрация, непонимание, упущенная эскалация) система вызывает LLM-разбор и пишет урок в тот же agent_training_examples. Если модель считает, что «урока здесь нет» — запись не создаётся (защита от мусора).
Что важно знать:
- Расход — за счёт Framix (не за ваш счёт).
- Лимит: до 50 LLM-разборов на агента в сутки и до 200 активных авто-уроков. Старые авто-уроки с низкой достоверностью деактивируются при переполнении.
- Уроки строго на языке посетителя — если посетитель писал по-английски, урок на английском.
- Ручные уроки оператора приоритетнее — если в сессии уже есть operator-урок, авто-урок для неё не создаётся.
- Авто-уроки видны в списке уроков с бейджем источника (Авто-успех / Авто-провал) и полем confidence. Они редактируемы и удаляемы как обычные.
Почему результаты не сразу
Классификатор обрабатывает сессии, которые «затихли» 6+ часов назад. Если клиент только что завершил диалог — урок появится примерно через полдня.
Где это в админке
/account/agents/<id> → вкладка «Обучение»:
- Уроки — список training examples этого агента (поиск, фильтры по источнику: Оператор / Критика / Авто-успех / Авто-провал, импорт/экспорт). Поле confidence и бейдж источника видны на каждой карточке.
- Ожидают аппрува — предлагаемые аудитором пары (session-critique), ожидающие вашего одобрения.
- Обратная связь — лайки/дизлайки последних сообщений (фильтр «только дизлайки»).
- Тумблер «Автономное обучение» — включить/выключить авто-анализ затихших диалогов.
Что хранится
| Таблица | Что |
|---|---|
agent_training_examples | Примеры user→assistant с embedding'ом |
agent_session_critique | Очередь session-critique (pending/approved/rejected) |
ai_message_feedback | Лайки/дизлайки конкретных сообщений |
Стоимость
- Embedding (FTS) — поиск похожих примеров идёт через Postgres full-text search. Бесплатно, без LLM-вызова.
- Session-critique — LLM-разбор сессии идёт через дешёвую фоновую модель (
deepseek-v4-flashпо OpenRouter), расход зависит от длины сессии. Списывается с баланса владельца агента. - Автономное обучение — LLM-разборы идут за счёт Framix (не за ваш счёт). Виден в системной аналитике платформы.
- Retrieval-block в основном чате — добавляет ~200-500 input-токенов на запрос. С учётом prompt cache — почти бесплатно после первого раза.