Обратная связь: ментор, ИИ-ревьюер и сообщество
Как получать обратную связь, когда учитесь сами: ИИ-помощник в режиме ментора по правилам homework/AGENTS.md, ревью домашней работы командой homework/review.py через чат, локальную модель на vLLM или Ollama либо облачный API, проверка каждого замечания ИИ тестом, вопросы в сообществах с минимальным воспроизводимым примером, учебный напарник, ментор и объяснение другим.
Зачем это нужно
Заголовок раздела «Зачем это нужно»Пока вы шли по курсу, обратная связь приходила сама. Квиз сразу показывал ошибку и отправлял её в
тетрадь ошибок, автогрейдер check.py за секунды говорил «Medium, до Strong не хватает двух тестов»,
у каждого задания были подсказки. После курса этого не будет. Ваш проект никто не проверяет, у статьи, которую вы
воспроизводите, нет автотестов, а в рабочем коде ошибки находят пользователи.
Без обратной связи рост медленный по простой причине: вы не знаете, чего не знаете. Можно месяц писать код с одной и той же ошибкой в понимании — например, считать softmax по всей матрице вместо строк — и ни разу этого не заметить. Опытные инженеры растут быстрее не потому, что больше читают, а потому, что их код каждый день смотрят другие люди: на код-ревьюкод-ревьюEN code reviewПроверка изменений кода другим инженером до слияния в основную ветку — на корректность, читаемость, тесты и производительность., в обсуждениях, на разборах инцидентов.
Этот урок о том, как собрать такую систему самому. Источников три: ИИ-помощник (быстрый, всегда под рукой, но ошибается), живые люди (медленнее, зато видят то, чего не видит модель) и вы сами через тесты и журнал.
Три петли обратной связи
Заголовок раздела «Три петли обратной связи»flowchart LR A["Ваше решение"] --> B["check.py<br/>секунды"] B --> C["review.py + ИИ<br/>минуты"] C --> D["Проверка замечаний<br/>тестом или запуском"] D --> E["Напарник, ментор,<br/>сообщество<br/>часы и дни"] E --> F["Журнал и тетрадь ошибок"] F --> A
| Источник | Скорость | Что ловит | Чего не ловит |
|---|---|---|---|
Автотесты (check.py, свои тесты) | секунды | неверный результат на проверяемых случаях | непроверенные случаи, читаемость, «зачем так» |
| ИИ-ревьюер | минуты | краевые случаи, читаемость, типичные ошибки; задаёт вопросы на понимание | ошибается, соглашается с вами, сам код не запускает |
| Учебный напарник | дни | непонятные места в объяснении, «а почему не так?»; держит ритм | глубокие ошибки может пропустить, как и вы |
| Ментор, опытный инженер | недели | выбор направления и приоритетов, как это делают в индустрии | времени у него мало, мелочи — не к нему |
| Сообщество | часы и дни | конкретные баги и вопросы с хорошим примером | расплывчатые вопросы просто игнорируют |
Правило из таблицы: каждый вопрос — в самую быструю петлю, которая способна на него ответить. Опечатку в формуле ловит тест, а не ментор. Выбор между инференсом и пост-трейнингом — тема для человека, а не для автотеста.
ИИ-ментор: правила курса
Заголовок раздела «ИИ-ментор: правила курса»Что лежит в homework/AGENTS.md
Заголовок раздела «Что лежит в homework/AGENTS.md»В папке homework/ лежит файл AGENTS.md — правила «режима ментора» для ИИ-помощников. AGENTS.md —
общепринятое имя файла с инструкциями для агентов программирования: его читают Codex, Cursor и другие. Claude Code
читает свой CLAUDE.md, поэтому рядом лежит homework/CLAUDE.md из одной строки @AGENTS.md. Это импорт: Claude Code
подставит содержимое AGENTS.md. Те же правила review.py отправляет модели как системный промпт.
Суть правил — сократический диалогсократический диалог (обучение вопросами)EN Socratic method (Socratic questioning)Наставник не сообщает ответ, а задаёт вопросы, по которым ученик приходит к нему сам: «что вернёт функция на пустом входе?», «какая форма у тензора после этой строки?». На этом построен «режим ментора» ИИ-помощников курса (homework/AGENTS.md).: помощник ведёт вас к ответу вопросами, а не выдаёт ответ. Что ему можно и чего нельзя:
| Помощник делает | Помощник не делает |
|---|---|
| Объясняет понятия, формулы, сообщения об ошибках, ссылается на уроки и README задания | Не пишет и не дописывает функции задания в homework/<id>/code/ |
| Задаёт наводящие вопросы: «Что вернёт функция на пустом входе?» | Не открывает и не пересказывает эталоны из solutions/ до сдачи |
| Подсказывает по лестнице, от слабой подсказки к сильной | Не меняет тесты, чтобы они проходили |
| Пишет вспомогательный код: отладочный вывод, свой тест на краевой случай, скрипт для графика | Не выдаёт догадку за факт: числа и поведение кода проверяет запуском |
| Делает ревью по рубрике из README: 1–3 главные проблемы, сильные стороны, 3 вопроса, оценка уровня |
Почему так строго? Если помощник решит задание, вы получите зелёные тесты и ничего не узнаете. На странице «Как учиться» мы разбирали наблюдение за 26 000 школьников: те, кто брал у ИИ готовые ответы, потом заметно хуже сдали экзамены, а те, кто работал с ним как с репетитором, не потеряли ничего. После курса правило то же, только ставки выше: на собеседовании и на работе ИИ за вас думать не будет.
Лестница подсказок
Заголовок раздела «Лестница подсказок»Правила требуют начинать с самой слабой подсказки и переходить к следующей, только если вы попробовали сами
и просите ещё. Пример — функция causal_mask из ДЗ s4-hw02-attention, у которой маска выровнена не по тому углу:
| Ступень | Что говорит помощник |
|---|---|
| 1. Вопрос | «Что должна вернуть causal_mask(2, 5)? Сколько ключей видит последний запрос?» |
| 2. Где искать | «Сравните свою маску с примером из таблицы README: она выровнена по левому верхнему углу или по правому нижнему?» |
| 3. Идея словами | «Когда в кэше уже лежат прошлые позиции, запрос видит ключи до позиции включительно» |
| 4. Псевдокод на других данных | Пример для : маска [[1, 1, 1]] — единственный новый запрос видит всё |
Чаще всего хватает первой или второй ступени. Если вы сразу просите четвёртую, вы пропускаете ту часть работы, ради которой задание и написано.
Как пользоваться на практике
Заголовок раздела «Как пользоваться на практике»- Запускайте помощника так, чтобы он увидел правила. Надёжнее всего — из папки
homework/. Проверьте: спросите «по каким правилам ты работаешь с этой папкой?». Если в ответе нет лестницы подсказок, правила не подхватились. - Приходите с попыткой. «Вот мой код, вот ошибка, вот что я уже проверил» — и просите конкретную ступень лестницы.
- Правила ослабляются в трёх случаях. Задание уже сдано, и вы просите сравнить решение с эталоном. Вопрос не про задание: драйверы, git, сервер модели. Или пользователь говорит, что он автор курса и правит задания. Последняя оговорка нужна авторам. Если вы скажете эту фразу сами, правила выключатся, но обманете вы только себя.
ИИ-ревью: homework/review.py
Заголовок раздела «ИИ-ревью: homework/review.py»Ревью — это взгляд на готовое решение целиком. Чтобы не собирать промпт руками, в курсе есть скрипт
homework/review.py. Что он делает:
-
Читает
homework/<id>/README.mdи берёт из раздела «ИИ-ревью» первый блок с промптом. Если раздела нет, берёт общий шаблон: оценить по рубрике, назвать 1–3 главные проблемы, задать 3 вопроса, оценить уровень. -
Подставляет вместо заглушек вида «вставьте код» разделы «Что нужно сделать» и «Уровни», ваши файлы из
code/(по спискуfilesвtask.yaml; каждый файл обрезается до 40 000 символов) и свежий вывод автогрейдера: скрипт сам запускаетcheck.py. Если в промпте задания есть место для отчёта (как вs11-hw06-grokking), туда подставляется вашREPORT.md. -
Дописывает чек-лист «глазами опытного инженера»: имена и структура, численная устойчивость и краевые случаи, векторизация, свои тесты и документация. Сильные стороны ревьюер тоже должен назвать.
-
Дальше два пути. Без
--apiпечатает промпт и сохраняет его вjournal/reviews/<id>_<дата>_prompt.md— вставьте его в чат с Claude, DeepSeek или Qwen. С--apiотправляет промпт на сервер с API, совместимым с OpenAI, вместе с правилами ментора как системным промптом, печатает ответ и сохраняет его в…_review.md.
Вот начало и конец настоящего вывода для первой домашней работы курса. Флаг --no-tests пропускает запуск
автогрейдера: так быстрее, когда вы просто смотрите на промпт.
$ python homework/review.py s0-hw01-python-warmup --no-testsТы — преподаватель курса ChinaAI. Я начинающий программист, это моя первая домашняя работа на Python:функции анализа текста (tokenize, top_words, char_counts, bigrams, cyrillic_ratio).Вот мой код:### homework/s0-hw01-python-warmup/code/textstats.py```python"""ДЗ 0.3 — разминка на Python. Заполните функции. Проверка: python homework/check.py s0-hw01"""...```.1) Проверь правильность и читаемость, укажи краевые случаи, которые я мог пропустить.2) НЕ переписывай код за меня и не давай готовое решение — только подсказки и вопросы.3) Задай мне 3 вопроса на понимание (например, почему Counter быстрее ручного подсчёта, как работает key в sorted).
Условие и рубрика (из README.md):## Что нужно сделать...Вывод автогрейдера:```text(автогрейдер не запускался: флаг --no-tests)```
Дополнительно посмотри на решение глазами опытного инженера на код-ревью (коротко, 3–5 пунктов):...— Промпт сохранён: journal/reviews/s0-hw01-python-warmup_2026-10-06_08-34_prompt.mdТри способа отправить промпт:
| Способ | Команда | Когда брать |
|---|---|---|
| Чат | python homework/review.py s4-hw02-attention, затем вставить промпт в чат | быстро и сильной моделью; код уходит провайдеру чата |
| Свой сервер | … --api http://localhost:8000/v1 --model Qwen/Qwen3-32B-AWQ (vLLM) или --api http://localhost:11434/v1 --model qwen3:30b (Ollama) | бесплатно, приватно, без лимитов; модель слабее топовых |
| Облачный API | CHINAAI_REVIEW_KEY=<ключ> python homework/review.py s4-hw02-attention --api https://api.deepseek.com --model deepseek-flash | сильная модель без чата; платно за токены |
Скрипт сам добавляет к адресу /chat/completions, поэтому для DeepSeek указывается корневой адрес. Имена моделей
у провайдеров меняются: актуальный список отдаёт сам сервер (GET /models), подробности — в
путеводителе по API DeepSeek. Чтобы не писать флаги каждый раз,
задайте переменные окружения CHINAAI_REVIEW_API, CHINAAI_REVIEW_MODEL и CHINAAI_REVIEW_KEY. Тогда
python homework/review.py <id> сразу отправит промпт на сервер.
Как читать и проверять замечания ИИ
Заголовок раздела «Как читать и проверять замечания ИИ»Почему ИИ ошибается в ревью
Заголовок раздела «Почему ИИ ошибается в ревью»- Галлюцинации. Модель уверенно пишет о проблеме, которой нет, или о функции библиотеки, которой не существует (галлюцинациягаллюцинацияEN hallucination).
- Угодничество. Возразите ревьюеру — и он часто согласится, даже если был прав (sycophancyугодничество (sycophancy)EN sycophancyСклонность модели соглашаться с пользователем и льстить ему вместо правдивого ответа — частый побочный эффект RLHF., урок 6.3.2). Вопрос «правда ведь, мой код верный?» почти гарантирует «да».
- Ревьюер не запускает код.
review.pyдаёт модели вывод автогрейдера, но собственных опытов модель не ставит. Всё, что она говорит о поведении кода, — предсказание. - «Теоретические» баги. Модели любят находить проблемы, которые на практике почти не случаются. Авторы transformers прямо пишут об этом в своём CONTRIBUTING: агенты для программирования часто цепляются за баги, найденные чтением кода, которые редко или никогда не проявляются.
- Маленькая локальная модель ошибается чаще большой. 8B хватает, чтобы задать хорошие вопросы, но не чтобы судить о тонкостях численной устойчивости.
Протокол: ни одной правки без проверки
Заголовок раздела «Протокол: ни одной правки без проверки»-
Переформулируйте замечание в проверяемое утверждение. «Код неустойчив» — не утверждение. «На входе
[1000, 1001]функция вернётnan» — утверждение. -
Напишите самый маленький запуск или тест, который его проверяет. Проверяйте ровно одно: если в тексте теста и заглавные буквы, и знаки препинания, вы не поймёте, что из них сработало.
-
Прогоните на своём коде и на заведомо верном варианте. Если тест «находит проблему» и в эталонной реализации, ошибка в тесте, а не в коде.
-
Вынесите вердикт. Подтверждено → исправить и добавить тест в свой набор. Опровергнуто → записать, что ревьюер ошибся. Вкусовое (имена, стиль, «лучше взять scipy») → решить самому и не тратить на это время, пока не закрыты подтверждённые.
-
Запишите итог в конец файла ревью в
journal/reviews/. Подтверждённые ошибки уходят вjournal/mistakes.mdс полем «как не повторить».
Пример. Ученик написал softmax, а ревьюер оставил два замечания:
import numpy as np
def softmax(x): # код ученика, который ревьюит ИИ e = np.exp(x - x.max()) return e / e.sum()
# Замечание 1: «на больших числах exp переполнится и вернёт nan»print("1:", softmax(np.array([1000.0, 1001.0])))
# Замечание 2: «для батча нормирует по всей матрице, а не по строкам»batch = np.array([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]])print("2: суммы по строкам =", softmax(batch).sum(axis=1))
def softmax_rows(x): # заведомо верный вариант для сравнения e = np.exp(x - x.max(axis=-1, keepdims=True)) return e / e.sum(axis=-1, keepdims=True)
print(" эталон: ", softmax_rows(batch).sum(axis=1))1: [0.26894142 0.73105858]2: суммы по строкам = [0.5 0.5] эталон: [1. 1.]Первое замечание опровергнуто: вычитание максимума как раз защищает от переполнения (урок 1.3.2), и на
[1000, 1001] всё считается. Модель увидела np.exp и выдала типичное замечание, не проследив код. Второе
подтверждено: суммы по строкам равны 0.5, а должны быть 1. Это настоящий баг, который проявится
в первом же батче. Без проверки вы могли бы «исправить» первое и не заметить второе.
Полезно вести счёт: сколько замечаний ревьюера подтвердилось. Если у локальной 8B из десяти замечаний подтверждаются два, ей можно поручать вопросы на понимание, но не вердикты.
Живые люди: сообщества
Заголовок раздела «Живые люди: сообщества»ИИ не скажет, какие навыки сейчас ценят в командах, не порекомендует вас на работу и не заметит, что вы третью неделю решаете не ту задачу. Это делают люди. Вот сообщества, где новичку отвечают по делу:
| Сообщество | Язык | Что там | Для чего вам |
|---|---|---|---|
| Open Data Science — ods.ai | RU | Одно из крупнейших русскоязычных сообществ по данным и ML: учебные треки, соревнования, проекты, конференция Data Fest; с ним связан открытый курс mlcourse.ai | вопросы на русском, единомышленники, доклады, рекомендации на работу |
| Kaggle — форумы Discussions | EN | Обсуждения у каждого соревнования, общий форум, ноутбуки с кодом | вопросы по соревнованиям и данным, чтение чужих решений (урок 11.4.3) |
| Hugging Face — Discord и форум | EN | Каналы по библиотекам и курсам, форум с поиском | «это баг в transformers или в моём коде?» |
| Хабр — habr.com и Хабр Q&A | RU | Технические статьи с обсуждением в комментариях, раздел вопросов и ответов | писать посты о проектах, читать разборы |
| Форумы и трекеры проектов — например, форум vLLM и GitHub Issues | EN | Пользователи и разработчики конкретной библиотеки | вопросы по vLLM, SGLang, verl и т. п. (урок 11.4.2) |
| Datawhale — github.com/datawhalechina | ZH | Открытые курсы (happy-llm, self-llm, hello-agents) и учебные сезоны группового обучения | материалы и формат групповой учёбы |
| Чжиху — zhihu.com | ZH | Вопросы-ответы и авторские колонки; разборы китайских моделей появляются там в день релиза | читать разборы через переводчик (урок «Как читать китайские источники») |
Много живого общения идёт в мессенджерах, но названия чатов меняются быстрее, чем выходят курсы. Ищите действующие ссылки на официальных сайтах и в README сообществ, а не в случайных подборках.
Как задавать вопросы
Заголовок раздела «Как задавать вопросы»Основы вы знаете с уроков 0.0.3 и 0.2.5: цель, минимальный воспроизводимый примерминимальный воспроизводимый примерEN minimal reproducible example (MRE)Самый короткий код (обычно 10–20 строк), который воспроизводит ошибку без ваших файлов и данных, плюс версии библиотек и полный traceback. Главное содержимое хорошего issue и вопроса на форуме., полный текст ошибки, что ожидали, что пробовали. На уровне инженера добавляются три вещи.
1. Окружение. Половина багов в LLM-стеке — несовпадение версий. Шаблон баг-репорта vLLM требует вывод
скрипта collect_env.py, а transformers — команды transformers env. Для PyTorch есть python -m torch.utils.collect_env.
2. Пример, который можно скопировать и запустить. Мейнтейнеры vLLM пишут об этом прямо: мы скопируем ваш код и ожидаем получить тот же результат, поэтому никаких внешних данных. Файл на 2 ГБ заменяется тремя строками в коде, а модель на 32B — самой маленькой, на которой ошибка ещё воспроизводится.
3. Правильное место. Не уверены, чья ошибка — ваша или библиотеки? Авторы transformers просят сначала спросить на форуме или в Discord, а в GitHub Issues нести то, что точно баг библиотеки. Перед вопросом поищите: такой вопрос часто уже задавали.
Пример вопроса на форуме vLLM:
Заголовок: vLLM 0.x зависает на старте с --tensor-parallel-size 2 на двух RTX 4080 (без NVLink)
Окружение: вывод python collect_env.py — под спойлером. Ubuntu 24.04, драйвер …, 4× RTX 4080, PCIe.
Команда (воспроизводится каждый раз): CUDA_VISIBLE_DEVICES=2,3 vllm serve Qwen/Qwen3-0.6B --tensor-parallel-size 2
Ожидал: сервер стартует, как с одной картой.Получил: после строки «… NCCL …» нет вывода 10+ минут; полный лог — под спойлером.
Что пробовал:- с одной картой (без -tp) — стартует за 40 с;- NCCL_P2P_DISABLE=1 — стартует; без неё — зависает;- nvidia-smi topo -m показывает PHB между картами 2 и 3.Вопрос: это ожидаемо на GeForce без P2P или стоит открыть issue?Модель 0.6B вместо 32B — тоже часть минимальности: ошибка в инициализации NCCL от размера модели не зависит, а ждать загрузки меньше. И не забудьте предупреждение из того же шаблона vLLM: перед публикацией уберите из логов ключи, токены и внутренние адреса.
Этикет. Не пишите мейнтейнерам в личные сообщения. Не задавайте один вопрос в пять мест одновременно, а если перенесли его в другое место, оставьте ссылку. Когда проблема решилась, напишите, что помогло: следующий человек с той же ошибкой найдёт ваш ответ поиском.
Учебный напарник и ментор
Заголовок раздела «Учебный напарник и ментор»учебный напарникучебный напарникEN study buddy (accountability partner)Человек, с которым вы договорились регулярно отчитываться друг другу о занятиях: раз в неделю обменяться ссылками на коммиты, сделать ревью домашней работы, провести пробное собеседование. Учить можно разное — важен общий ритм и данное слово. — самый дешёвый источник регулярной обратной связи. Договоритесь о простом ритме:
- раз в неделю 30 минут созвона: что сделал, где застрял, что дальше;
- обмен ссылками на коммиты журнала: пропуск сразу виден, а это лучший стимул не пропускать;
- ревью домашних работ друг друга по той же рубрике из README, что получает ИИ;
- пробные собеседования (урок 11.3.1): один интервьюер, другой кандидат.
Учить можно разное — важен общий ритм. Где искать: учебные треки ODS, соревнования на Kaggle (команды часто собираются в обсуждениях), коллеги, однокурсники по другим курсам. Три–пять человек с общим планом — уже учебная группагрупповое обучение, учебная когортаEN study group, learning cohortФормат Datawhale — группа проходит открытый курс по расписанию 2–4 недели, с заданиями и ежедневной отметкой о занятиях.. Формат сезонов на 2–3 недели с заданиями Task01…TaskN разобран в уроке «Учиться по-китайски».
Ментор — человек на 3–10 лет опытнее, который раз в месяц помогает выбирать направление. Чаще всего наставники находятся среди коллег, среди мейнтейнеров проектов, куда вы отправляли pull request (урок 11.4.2), и среди людей, с которыми вы познакомились на митапах и в сообществах. Просьба «будьте моим ментором» пугает. Конкретная просьба — нет:
Здравствуйте! Я прошёл курс по LLM и выбираю между инференсом и пост-трейнингом.Мой журнал и проекты: <ссылка>. Можно ли раз в месяц на 30 минут показать вам план и задать3–4 вопроса? Вопросы пришлю заранее, за два дня.Ведущий в этих отношениях — вы: готовите вопросы, после встречи пишете, что сделали по советам. Тогда ментору интересно продолжать.
Учить других
Заголовок раздела «Учить других»Самая надёжная проверка понимания — объяснить тему другому. метод Фейнманаметод ФейнманаEN Feynman techniqueПроверка понимания объяснением: изложить тему простыми словами так, будто учите новичка, найти места, где объяснение буксует или держится на непонятом термине, вернуться к источнику и упростить ещё раз. Назван по имени физика Ричарда Фейнмана. устроен так: изложить простыми словами, найти места, где объяснение буксует или держится на непонятом термине, вернуться к источнику, объяснить ещё раз проще. Слушатель — тоже обратная связь: он задаёт вопросы, которых вы себе не задавали. «А что будет без деления на ?» — и выясняется, что этого вы не знаете.
Форматы — от лёгкого к трудному:
- Ответы на чужие вопросы на форумах Kaggle и Hugging Face, в обсуждениях ODS. Начните с вопросов по темам ступеней 0–3: их задают больше всего, и вы уже знаете ответ.
- Ревью кода напарника. Хорошее замечание конкретно («строка 14: на пустом списке будет деление на ноль»), обосновано (тест или ссылка) и помечено: блокирует оно или «по вкусу». Так же вы хотели бы получать замечания от ИИ.
- Пост о своём проекте. Например, «Воспроизвёл гроккинг на RTX 4080: что совпало со статьёй и что нет» — по плану отчёта из урока 11.4.1: задача, установка, числа, расхождения, выводы. Как писать технический текст для портфолио — в уроке 11.3.6.
- Доклад на митапе или внутреннем семинаре — когда пост уже написан и обсуждён.
Публикация — бесплатное ревью от десятков людей. Критика в комментариях неприятна, но каждое обоснованное замечание — то, что вы не нашли бы сами. Перед публикацией проверьте числа запуском: ошибка в посте живёт дольше, чем ошибка в журнале.
Практика
Заголовок раздела «Практика»Задание в браузере: проверяем замечания ИИ-ревьюера
Заголовок раздела «Задание в браузере: проверяем замечания ИИ-ревьюера»Перед вами решение tokenize и top_words из первой домашней работы курса и четыре замечания ИИ-ревьюера. Два
из них верны, два — нет. Напишите для каждого замечания проверку — функцию, которая принимает любую
реализацию и говорит, относится ли к ней замечание. Тесты подставят и код ученика, и исправленные версии,
и версии с другими ошибками. Поэтому проверка, которая смешивает два фактора (например, «ё» и заглавные буквы),
не пройдёт.
"""Проверяем замечания ИИ-ревьюера запуском, а не верой.
Ниже — решение ученика из ДЗ s0-hw01 (функции tokenize и top_words) и четыре замечания, которые оставил
ИИ-ревьюер. Часть замечаний верна, часть — нет. Для каждого замечания напишите проверку: функцию, которая
принимает реализацию и возвращает True, если замечание к ней относится (проблема есть), и False, если нет.
Проверки должны работать для ЛЮБОЙ реализации с той же сигнатурой: тесты подставят и код ученика,
и исправленные варианты, и варианты с другими ошибками. Поэтому каждая проверка должна проверять ровно одно.
"""
import re
from collections import Counter
# ── Код ученика (не меняйте) ───────────────────────────────────────────────────────────────
def student_tokenize(text):
"""Слова в нижнем регистре: кириллица, латиница, цифры."""
return re.findall(r"[a-zа-я0-9]+", text.lower())
def student_top_words(text, k):
"""k самых частых слов; при равной частоте — по алфавиту."""
counts = Counter(student_tokenize(text))
return sorted(counts.items(), key=lambda pair: -pair[1])[:k]
# ── Замечания ИИ-ревьюера ─────────────────────────────────────────────────────────────────
CLAIMS = {
"A": "tokenize теряет букву «ё»: из слова «ёж» получится «ж»",
"B": "top_words падает с IndexError, если k больше числа разных слов",
"C": "при равной частоте top_words расставляет слова не по алфавиту",
"D": "tokenize не приводит регистр: «Мир» и «мир» считаются разными словами",
}
def claim_a(tokenize):
"""True, если tokenize теряет «ё». Проверяйте на строчном слове «ёж» — без заглавных букв
и знаков препинания, чтобы на результат не влияло ничего, кроме самой «ё»."""
# TODO
...
def claim_b(top_words):
"""True, если top_words падает с IndexError, когда k больше числа разных слов.
Ловите только IndexError: другие исключения — уже другая проблема, пусть падают."""
# TODO
...
def claim_c(top_words):
"""True, если при равной частоте порядок слов НЕ алфавитный.
Возьмите текст, где все слова встречаются по одному разу, а впервые появляются не по алфавиту,
и сравните только порядок слов."""
# TODO
...
def claim_d(tokenize):
"""True, если tokenize считает «Мир» и «мир» разными словами.
Текст — без знаков препинания: проверяем только регистр."""
# TODO
...
def verdicts():
"""Словарь {"A": bool, "B": bool, "C": bool, "D": bool} — вердикты по коду ученика.
Не пишите ответы руками: вызовите свои проверки на student_tokenize и student_top_words."""
# TODO
...
if __name__ == "__main__":
print(student_tokenize("Ёжик и мир, Мир!")) # посмотрите глазами, что делает код ученика
print(student_top_words("в б а в б а", 3))
print(verdicts())
Локально: первое ИИ-ревью и первый вопрос
Заголовок раздела «Локально: первое ИИ-ревью и первый вопрос»-
Возьмите домашнюю работу, которую вы сдали на Strong или Boss, например
s11-hw06-grokkingилиs4-hw02-attention. Запуститеpython homework/review.py <id>и отправьте промпт удобным способом: в чат, своему серверу или по API. -
Для каждого замечания заполните таблицу в конце файла ревью в
journal/reviews/:| # | Замечание | Проверка (тест или запуск) | Вердикт ||---|---|---|---|| 1 | «на пустом входе деление на ноль» | test_empty_input в tests/my_tests.py | подтверждено → исправил || 2 | «лучше векторизовать цикл» | timeit: 1.2 мс против 0.9 мс на 10⁴ элементах | вкусовое → оставил | -
Ответьте ревьюеру на его три вопроса на понимание — письменно, в том же файле. На какой не смогли ответить, тот и есть тема для повторения.
-
Если запускаете локальную модель — сделайте то же самое второй моделью и сравните, сколько замечаний подтвердилось у каждой.
-
Задайте один вопрос живым людям: в обсуждении ODS, на форуме Hugging Face или напарнику. Подойдёт вопрос, на который не ответил ИИ, или просьба посмотреть README вашего проекта.
-
Запишите в журнал дня строку «ИИ: …» (какие вопросы задавали) и строку «Люди: …» (кому и что).
Проверь себя
Заголовок раздела «Проверь себя»- Обратная связь приходит из трёх петель: тесты (секунды), ИИ-ревьюер (минуты) и люди (дни). Каждый вопрос — в самую быструю петлю, которая способна на него ответить.
homework/AGENTS.mdпереводит ИИ-помощника в режим ментора: объясняет, спрашивает, подсказывает по лестнице и не решает задание за вас.homework/review.pyсобирает промпт ревью из README, вашего кода и вывода автогрейдера и отправляет его в чат, в свой vLLM или Ollama либо в облачный API.- Замечание ИИ — гипотеза. Проверка ровно одного фактора на вашем коде и на верном варианте, затем вердикт: подтверждено, опровергнуто или вкусовое. Правки — только по подтверждённым.
- Живые люди — в ODS, на форумах Kaggle и Hugging Face, на Хабре, в Datawhale и на Чжиху. Вопрос с окружением, минимальным примером и тем, что вы уже пробовали, получает ответ. Напарник держит ритм, ментор помогает с направлением.
- Объяснять другим — лучшая проверка понимания и самый быстрый способ получить ревью от многих людей сразу.
Дальше: урок 11.4.5 — план на год после курса: четыре траектории, цели по кварталам, недельный ритм, ежемесячный обзор в журнале и чек-лист «я готов к первой работе».