Ищу первую работу — Python, junior. Вместо «рассмотрите мою кандидатуру» расскажу, что у меня НЕ сработало в пет-проекте. По-моему, это честнее и полезнее.

Проект: локальный поиск по своей документации и коду. 60 файлов, 1661 чанк, документы и C++ в одном индексе. Всё на своей машине — без ключей и сетевых вызовов.

1. Эмбеддинги проиграли BM25. Начал так, как советуют: multilingual-e5-small и векторный поиск. Померил на размеченном наборе из 30 вопросов — плотный поиск дал R@1 = 0.333, R@5 = 0.667. Потом написал руками BM25-Okapi, ~60 строк со своим анализатором под русский: R@5 = 0.867. На кодовом корпусе разрыв двукратный — 0.40 против 0.80. Объяснение, как я его понимаю: когда корпус набит идентификаторами, запрос «где вызывается такой-то метод» — это поиск по строке, а не по смыслу. Плотный вектор такое усредняет, BM25 находит.

2. Кросс-энкодер выброшен. Переранжирование стоило 3606 мс против 21 — в 170 раз дороже. Прирост качества — ноль. Убрал.

3. Самое неудобное. Аудит вскрыл настоящий баг: 10.6% чанков молча обрезались лимитом модели. Починил, стало 0.5%. И recall при этом упал: 0.900 → 0.867 — чтобы влезть в окно, чанки пришлось дробить. Правку оставил, но улучшением её не называю. В отчёте так и написано.

Сразу про границы, чтобы не выглядело солиднее, чем есть. 30 вопросов — мало для устойчивой статистики. Размечал я сам, значит есть смещение: вопросы формулировал тот, кто знает, где ответ. Генерации ответа пока нет — система возвращает найденные фрагменты с указанием источника. Это осознанно: качество RAG определяется поиском, а не пересказом, поэтому и мерил я retrieval.

Чего у меня нет: коммерческого опыта. 3 курс РЭУ им. Плеханова, моделей не обучал, эмбеддинги брал готовые. Что есть: Python, Django и DRF с код-ревью и CI, PostgreSQL, Docker, свой VPS на Ubuntu — systemd, nginx, TLS. И привычка проверять собственные числа, а не только чужие.

Ищу первую работу или стажировку: Python-разработка, удалённо или Москва. Резюме под постом. Совету буду рад не меньше, чем вакансии.