Тренировка агента

Лайки/дизлайки, training examples, retrieval по embeddings (OpenRouter), session-critique, ручная коррекция.

Тренировка агента

«Промпт + база знаний» хорошо работает на первой версии, но со временем у каждого агента накапливается знание из реальных диалогов — какие вопросы посетители задают, где бот отвечает плохо, какие фразы лучше переформулировать. 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 (Phase 3)

Когда посетитель пишет в чат, сервер:

  1. Считает embedding его сообщения через OpenRouter text-embedding-3-small (если есть OPENROUTER_API_KEY в env).
  2. Делает kNN top-3 по agent_training_examples этого агента — находит похожие прошлые вопросы.
  3. Подмешивает найденные пары в системный промпт под блоком «Похожие примеры из тренировки».
  4. LLM получает контекст «вот так мы отвечали раньше на похожие вопросы» — и опирается на них.

Это активное применение уроков, а не пассивное накопление. Без OPENROUTER_API_KEY retrieval-блок просто не подмешивается — агент работает на обычном промпте + базе.

Session-critique

После завершения долгой сессии (≥ N сообщений) запускается фоновый job, который:

  1. Берёт всю переписку.
  2. Прогоняет через специального агента-аудитора.
  3. Получает на выходе 1-2 предлагаемых training-example'а (что было упущено, что можно улучшить).
  4. Складывает их в очередь на ручной аппрув — в админке.

Это идея «компостирования» опыта: реальные диалоги превращаются в улучшения промпта без вашего ручного разбора.

Аудитор — это обычный Framix-агент (AUDIT_AGENT_ID/AUDIT_AGENT_API_KEY в env). Его расход токенов идёт на баланс владельца того аккаунта, чей email указан при npm run audit-agent:setup. Если эти env-переменные не заданы — session-critique не работает (всё остальное в системе остаётся).

Где это в админке

/account/agents/<id> → вкладка «Тренировка»:

  • Examples — список training examples этого агента (поиск, фильтры, импорт/экспорт).
  • Pending critique — предлагаемые аудитором пары, ожидающие аппрува.
  • Feedback — лайки/дизлайки последних сообщений (фильтр «только дизлайки»).

Что хранится

ТаблицаЧто
agent_training_examplesПримеры user→assistant с embedding'ом
agent_session_critiqueОчередь session-critique (pending/approved/rejected)
ai_message_feedbackЛайки/дизлайки конкретных сообщений

Стоимость

  • Embedding — порядка ~$0.00002 за сообщение посетителя на text-embedding-3-small. Это копейки даже на больших объёмах.
  • Session-critique — обычный диалог с агентом-аудитором, расход зависит от длины сессии. Списывается с баланса юзера, чей AUDIT_AGENT_ID задан в env (по умолчанию — администратора инсталляции).
  • Retrieval-block в основном чате — добавляет ~200-500 input-токенов на запрос. С учётом prompt cache — почти бесплатно после первого раза.

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