В первой версии квиза в режиме multiple choice была проблема с качеством вопросов. Предложения генерировались на ходу дешёвой моделью Qwen Flash. Было заметно несколько проблем:
* Вопросы часто повторялись. Это известная проблема в изучении языков в целом – грамматические конструкции часто демонстрируют одними и теми же предложениями
* Среди вариантов ответов можно было найти несколько правильных, а иногда ни один не выглядел правильным
* Нельзя было выбрать, что именно ты хочешь практиковать
Вместо генерации вопросов на ходу я решил сделать много хороших вопросов заранее и выдавать их пользователю из базы данных. Попросил агента сделать мне следующий пайплайн:
1. Генерируется n вопросов на каждую тему. Вместо flash модели использовал Qwen Plus. На этом этапе все кандидаты складываются в специальную таблицу, где они ожидают дальнейшей обработки.
2. Высчитываются фичи. Спрашиваем LLM, есть ли какие-то проблемы с вопросом и просим построить embedding. Embedding-и складываем в
pgvector, чтобы потом искать дупликаты.
3. Отфильтровываем плохие кандидаты и оставляем только хорошие. Если находится другой пример с косинусным расстоянием ниже порога, то такой кандидат выбрасывается.
Ещё была проблема с тем, что слишком много примеров выбрасывалось из-за повторов. После первого прогона осталось всего 6% сгенерированных примеров. Я (курсор) засемплировал 50 предложений и сделал так, чтобы пайплайн генерации избегал тех же тем, что и в сэмплах. Второй прогон уже допустил 26% примеров.