Agent critic для Text2SQL
Text2SQL copilot возвращает SQL для закрытой продовой базы. Как спроектировать agent critic, который валидирует запрос до запуска?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужен многоступенчатый critic: SQL parser, dry-run/EXPLAIN в безопасном контуре, проверка разрешенных таблиц, schema metadata, semantic judge и confidence/fallback.
Подробный разбор
Хороший critic не должен быть еще одной LLM без ограничений. Первый слой - deterministic checks: SQL parser под нужный диалект, запрет DDL/DML, allowlist таблиц и колонок, лимиты, EXPLAIN или dry-run в sandbox. Второй слой - schema-aware validation: существуют ли таблицы, join keys, типы фильтров, агрегаты и доступы.
Третий слой проверяет соответствие пользовательскому запросу. Можно извлечь из natural language intent, метрики, dimensions, filters, time range и сравнить с SQL AST. Для спорных случаев LLM полезна как judge, но ее ответ должен быть structured и сопровождаться reasons/confidence.
В production нужны fallback: не запускать запрос при низкой уверенности, вернуть пользователю уточняющий вопрос или отправить на human review. Отдельно логируются причины reject/accept, чтобы улучшать copilot и critic.
Типичные ошибки
- Проверять только синтаксис и считать запрос безопасным.
- Не различать runnable SQL и SQL, который отвечает на исходный вопрос.
- Давать агенту прямой доступ к production без sandbox/dry-run.
Как сказать на собеседовании
- Раздели deterministic checks и semantic checks.
- Назови SQL AST, EXPLAIN/dry-run, allowlist и confidence fallback.
Semantic validation SQL vs NL-запрос
Как проверить, что сгенерированный SQL возвращает именно то, что пользователь попросил на человеческом языке?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужно привести NL-запрос и SQL к сопоставимому структурному виду: intent, metrics, dimensions, filters, joins, grouping, ordering и time range.
Подробный разбор
Один практичный путь - строить промежуточное представление. Из пользовательского запроса извлекаем intent: какие сущности нужны, какая метрика, какие измерения, фильтры, период, сортировка и лимит. SQL парсим в AST и извлекаем те же поля: SELECT, WHERE, GROUP BY, JOIN, ORDER BY, LIMIT.
Дальше сравниваем структуры: например, пользователь просил sales volume, а SQL выбирает price; просил клиентов за месяц, а SQL фильтрует по дате заказа без timezone; просил top sellers, а SQL не сортирует по нужной метрике.
LLM может помочь как semantic judge, но лучше просить structured verdict: matched fields, missing constraints, suspicious joins, ambiguity. Для критичных запросов нужны regression examples и golden SQL или хотя бы expected plan.
Типичные ошибки
- Сравнивать NL и SQL строково.
- Не проверять агрегаты, grouping и time filters.
- Не обрабатывать неоднозначность пользовательского запроса.
Как сказать на собеседовании
- Скажи "SQL AST" и "intermediate representation".
- Приведи пример несовпадения: price vs sales volume.
Schema linking и NER в доменной базе
Пользователь пишет естественный запрос к большой корпоративной базе. Как матчить сущности, аббревиатуры, таблицы и колонки?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Нужны data catalog, glossary, aliases, embeddings по описаниям таблиц/колонок, entity extraction и reranking кандидатов с учетом доступа и бизнес-домена.
Подробный разбор
В больших базах названия колонок часто не совпадают с языком пользователя. Поэтому нужен слой metadata: описания таблиц, owner, бизнес-сущности, aliases, аббревиатуры, примеры запросов и ограничения доступа.
Pipeline: извлечь из запроса сущности и намерение, найти candidate tables/columns через lexical и embedding retrieval по catalog, затем rerank с учетом домена, joinability и истории успешных запросов. Для аббревиатур полезны словарь и human feedback от аналитиков.
Важно учитывать безопасность: даже если таблица семантически подходит, пользователь может не иметь доступа. Хороший ответ также упоминает ручную разметку golden examples и continuous improvement по rejected/edited SQL.
Типичные ошибки
- Думать, что LLM сама запомнит всю схему.
- Не учитывать aliases и доменные аббревиатуры.
- Не фильтровать кандидатов по правам доступа.
Как сказать на собеседовании
- Назови data catalog и glossary.
- Раздели retrieval кандидатов и reranking.
BERT: encoder, pretraining и attention
Что такое BERT, чем encoder отличается от decoder и какие pretraining-механизмы у BERT?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
BERT - encoder-only Transformer. Он видит контекст слева и справа, исторически обучался через masked language modeling и next sentence prediction.
Подробный разбор
BERT использует encoder-блоки Transformer: self-attention без causal mask, feed-forward layers, residual connections и normalization. В отличие от autoregressive decoder, encoder может смотреть на всю последовательность сразу, поэтому хорошо подходит для классификации, NER, retrieval embeddings и понимания текста.
Классический pretraining BERT: masked language modeling, где часть токенов маскируется и модель восстанавливает их по контексту, и next sentence prediction в оригинальной статье. В современных вариантах NSP часто заменяли или убирали.
Attention внутри encoder считает Q/K/V для токенов, softmax по scaled dot products и обновляет представления токенов с учетом контекста.
Типичные ошибки
- Называть BERT decoder-only моделью.
- Не упомянуть masked language modeling.
- Говорить про attention без Q/K/V.
Как сказать на собеседовании
- Начни с encoder-only и bidirectional.
- Коротко сравни с GPT через causal mask.
LoRA против классических адаптеров
Опиши механизм LoRA. Если LoRA и classic adapters дают одинаковое качество, что выбрать для inference?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
LoRA замораживает исходные веса и учит low-rank delta. Для inference часто удобнее LoRA, потому что delta можно смерджить в базовые веса и не добавлять слой в forward pass.
Подробный разбор
LoRA представляет изменение матрицы весов как произведение двух низкоранговых матриц. Вместо полного обновления D x D весов обучаются A и B с rank r, где параметров порядка 2Dr. Базовая модель заморожена, поэтому optimizer state и trainable memory сильно меньше.
Classic adapters добавляют отдельные bottleneck layers в сеть. Они тоже parameter-efficient, но на inference остаются дополнительными операциями в forward pass. Если качество одинаковое и нет требований динамически переключать adapters, LoRA часто лучше: ее можно merge-нуть в исходные веса и не платить дополнительную latency.
Если нужно быстро переключать много задач или держать отдельные персонализации, adapters/несмердженные LoRA могут быть удобнее операционно.
Типичные ошибки
- Сказать, что LoRA уменьшает размер базовой модели на inference.
- Не объяснить low-rank decomposition.
- Не сравнить latency adapters и merged LoRA.
Как сказать на собеседовании
- Для матрицы D x D назови порядок параметров 2Dr.
- Отдельно скажи про merge в inference.
Overfitting, regularization и dropout
Как бороться с переобучением модели? Объясните L1/L2, dropout 0.5 и что происходит с dropout на inference.
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Используют validation, early stopping, data augmentation, L1/L2, dropout, smaller model и ensembling. Dropout зануляет активации на train, а на inference обычно отключается.
Подробный разбор
Переобучение контролируют через регуляризацию и корректную валидацию: holdout/CV, early stopping, уменьшение capacity, data augmentation, weight decay/L2, L1 для sparsity, dropout и иногда ensembling.
Dropout с p=0.5 означает, что на train каждая соответствующая активация зануляется с вероятностью 0.5. Модель не может полагаться на один фиксированный путь и учится более устойчивым представлениям. В современных фреймворках обычно используется inverted dropout: на train оставшиеся активации масштабируются на 1 / (1 - p), а на inference dropout отключается без дополнительного scaling.
Градиент и vanishing gradient
Что такое градиент и почему в глубоких сетях возникает затухающий градиент?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Градиент показывает направление роста loss по параметрам; vanishing gradient возникает, когда произведение малых производных почти зануляет сигнал для ранних слоев.
Подробный разбор
Градиент loss по параметрам показывает, как нужно менять параметры, чтобы уменьшать loss. В backprop градиент проходит через цепочку производных слоев.
Если производные или спектральные нормы якобианов меньше единицы, их произведение быстро уменьшается с глубиной. Поэтому ранние слои получают очень слабый сигнал и почти не обучаются. Типичные меры: ReLU/GELU вместо насыщаемых sigmoid/tanh, residual connections, normalization, правильная initialization и gradient clipping для exploding gradient.
Stride и padding в CNN
Что такое stride и padding в сверточной сети, и как они влияют на размер feature map?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Stride задает шаг фильтра по изображению, padding добавляет рамку по краям; вместе они управляют spatial resolution выходной карты.
Подробный разбор
В convolution фильтр скользит по входу. Stride S говорит, на сколько пикселей сдвигать фильтр между позициями: чем больше stride, тем меньше выходная spatial resolution.
Padding P добавляет значения по краям входа, обычно нули, чтобы фильтр мог применяться к граничным пикселям и чтобы контролировать размер выхода. Для одной размерности выход примерно равен floor((N + 2P - K) / S) + 1, где N - размер входа, K - размер kernel.
Skip connection и зачем он нужен
Что такое skip connection и почему residual-связи помогают обучать глубокие сети?
Сначала проговорите ответ вслух или тезисами.
Формулы, план решения, риски и примеры.
Откройте разбор только после своей попытки.
Показать разбор
Короткий ответ
Skip connection добавляет вход блока к его выходу, облегчает поток градиента и позволяет блоку учить поправку F(x), а не всю функцию с нуля.
Подробный разбор
В residual block выход часто имеет вид y = x + F(x). Это дает прямой путь для информации и градиента через сеть, поэтому глубокую модель проще оптимизировать.
Блок может учить не всю трансформацию с нуля, а поправку к входу. Это помогает против vanishing gradient, стабилизирует обучение и позволяет строить существенно более глубокие архитектуры, например ResNet и Transformer-блоки с residual connections.