Гайд · TNWS AI
Как обрабатывать Like и Dislike конкретного ответа нейросети в Gradio Chatbot
Добавляем обработчик Chatbot.like с LikeData и проверяем привязку оценки к конкретной реплике.
Задача и применимость
Русскоязычный вопрос: «как обработать лайк дизлайк ответа gradio chatbot event». Для Gradio Blocks с вложенным ChatInterface и Chatbot; .like() позволяет выполнить собственный callback при пользовательской оценке. Документация по событию сверена 20 сентября 2026 года. Локальный пример печатает только оценку и не формирует архив реальных переписок.
Что подтверждено производителем
Официальный пример Chatbot.like передаёт gr.LikeData с data.liked и data.value; событие прикрепляют к Chatbot в Blocks, а объект chatbot затем передают в ChatInterface. Данные оценки приходят от клиента и не гарантируют истинности или принадлежности определённой учётной записи без дополнительного механизма.
Порядок действий
- Создайте Gradio Blocks и объект Chatbot до ChatInterface.
- Зарегистрируйте chatbot.like с обработчиком gr.LikeData.
- Верните проверяемый ответ из чат-функции.
- Поставьте Like одной реплике и Dislike другой, проверьте оба события.
- Для production добавьте серверный ID беседы и политику хранения вместо распечатки содержимого.
Готовый шаблон
Сохраните пример в отдельном файле Python. В коде нет реального секрета или скрытого вызова модели: если подключён внешний API, его адрес и параметры указаны явно. Установите gradio в отдельном окружении; дополнительные пакеты требуются только там, где они импортированы в примере.
import gradio as gr
def answer(message, history):
return "Вы спросили: " + message
def vote(data: gr.LikeData):
print("Оценка:", "Like" if data.liked else "Dislike")
print("Значение события:", str(data.value)[:80])
with gr.Blocks() as demo:
bot = gr.Chatbot()
bot.like(vote, None, None)
gr.ChatInterface(answer, chatbot=bot)
demo.launch(server_name="127.0.0.1")
Вход и ожидаемый результат
Задайте два вопроса «Артикул AB-17?» и «Срок возврата?»; ответы будут просто эхом. Отметьте Like первого и Dislike второго. Ожидаются две строки оценки в терминале в соответствующем порядке; первые 80 символов значения помогают локальной диагностике, но для продукта даже эти символы могут быть персональными данными и не должны бесконтрольно логироваться.
Проверка контракта
В отличие от общей кнопки «сообщить об ошибке», событие like привязано к конкретному сообщению Chatbot. Это позволяет спросить редактора о фактической корректности отдельной реплики. Но сама data.value — данные события, а не безопасный идентификатор записи в вашем хранилище. Если нужно связать оценку с моделью и источником, заранее создайте серверный message_id и сохраните его в своей схеме, а права пользователя на этот message_id проверьте при принятии оценки.
Работа с данными пользователя
Положительный сигнал может означать удобную формулировку при неверном факте; отрицательный — неприязнь к стилю при верном ответе. Не запускайте автоматическое дообучение на лайках без модерации. Для набора тестов сравнивайте оценку с эталоном: число, цитата из документа, ссылка на источник. Если значение ответа включает внутренние реквизиты, не печатайте его в stdout в production: терминальные журналы часто собираются централизованно.
Что проверить перед развёртыванием
Проверьте повторное нажатие оценок, отмену и два параллельных браузера. Не рассчитывайте, что frontend-контроль остановит подделанный HTTP-запрос к вашей системе учёта оценок. Сервер должен ограничивать частоту и проверять, что оценщик вправе видеть исходный ответ. UI-действие и сохранение аналитики — разные этапы; при сбое хранилища покажите понятный статус и не утверждайте, что отзыв принят.
Шаблон минимального аудита: «ID ответа — модель/версия — тип оценки — категория причины — подтверждающий абзац источника — принято редактором». Для примера со сроком возврата редактор проверяет число в официальном документе и отмечает «ошибка факта» или «нет данных». Тогда продуктовая команда сможет исправить retrieval или prompt отдельно, а не увеличивать случайно temperature, что к точности отношения не имеет.
При объяснении результатов не называйте рейтинг качества «процентом верных ответов»: пользовательские лайки — это иной сигнал. Удобнее вести две оси — подтверждённая точность на эталонных запросах и удовлетворённость интерфейсом. Изменяя модель, пометьте старые голоса версией исходной модели. Если пользователь отозвал оценку, серверный аналитический слой должен корректно пересчитать состояние, а не хранить оба клика как независимых человека. После исправления ответа повторно проверьте исходный вопрос на той же версии корпуса и явно пометьте старые оценки историческими.
Критерии приёмки
- Like и Dislike дают разные значения data.liked.
- Оценка соответствует отмеченной реплике, а не последнему ответу.
- Данные события не логируются целиком в production.
Типичные ошибки и чего не делать
- Не принимать отзыв за доказанный правильный/неправильный ответ.
- Не хранить только текст без ID сообщения.
- Не логировать чувствительный контент без основания.
FAQ
Что получает callback?
Объект gr.LikeData.
Можно ли обойтись без Blocks?
Документированный пример связывает Chatbot и ChatInterface внутри Blocks.
Чем отличается от flagging?
Здесь вы сами обрабатываете событие конкретного сообщения.
Официальные источники
Частые вопросы
Что получает callback?
Объект gr.LikeData.
Можно ли обойтись без Blocks?
Документированный пример связывает Chatbot и ChatInterface внутри Blocks.
Чем отличается от flagging?
Здесь вы сами обрабатываете событие конкретного сообщения.
Читайте также
Как добавить ползунок temperature к AI-чату через additional_inputs в Gradio
Связываем Slider и функцию чат-бота без ошибки порядка аргументов; проверяем значение до вызова нейросети.
Как добавить примеры вопросов в Gradio, не вызывая нейросеть по клику
Настраиваем examples и run_examples_on_click=False, чтобы пользователь отредактировал вопрос перед дорогим вызовом модели.
Как группировать запросы к ML-модели через batch=True в Gradio Interface
Сверяем сигнатуру пакетной функции, tuple of lists и max_batch_size на детерминированном тесте.
Комментарии
Пока тихо. Скажите первое слово