AI-опыт · cv.beltsov.ru
Роман БельцовAI в QA и QA для AI
Руководитель QA. Внедрил LLM в тестирование в Kaspersky и сам выпустил Android-приложение с локальной LLM: eval, guardrails, ~1000 автотестов.
- 25 минвместо 4 ч на тест-кейс — LLM по внутренней документации
- 1 месяцвместо года — 100% API под автотестами
- 2 свместо 24–28 с — ответ LLM на телефоне, без сервера
- +30%загрузки дорогих тестовых стендов без закупок
Kaspersky — LLM в работе QA-команды
Руководитель группы тестирования · 2025–2026 · команда до 15 человек
- Тест-дизайн: 4 ч → 25 мин на кейс
- 100% API (40 эндпоинтов, 500+ тестов) под автотестами за месяц — вручную это год
- RAG по внутренней документации: локальный LightRAG (chunking, embedding, reranker) + MCP, данные не уходят наружу
- Мониторинг стендов против «забыл освободить»: +30% загрузки
- Замер отдачи e2e: доли процента дефектов → проверки перенесены вниз по пирамиде
Как сделано
- Как устроена генерация
- Локальный LightRAG по внутренней документации (chunking, embedding, reranker), подключён к LLM через MCP.
- LLM находит требования в документации и пишет по ним тест-кейсы и API-автотесты.
- Каждый результат проверяет инженер: LLM ускоряет, решает человек.
- Qwen3.6-35B локально на MacBook (oMLX) — когда данные нельзя отдавать в облако.
- Стенды
- Мониторинг занятости и бронирование (React + FastAPI). Стенды больше не простаивают забытыми.
«Я слышу: наедине с собой» — Android-приложение с локальной LLM
Свой продукт · соло с AI-агентами · 2026 — н.в.
Опубликовано в Google Play ↗- LLM (Gemma) и распознавание речи работают на телефоне, без сервера
- Оптимизация инференса LLM: ответ 24–28 с → 1,5–2,6 с
- Evaluation-driven development: регрессия качества LLM, LLM-as-a-Judge, эталонные наборы тестовых диалогов, DeepEval
- Guardrails в коде: кризисные реплики, утечка промпта
- 646 коммитов, 30+ релизов, 207 требований, ~1000 автотестов: код пишут AI-агенты (Claude Code), я принимаю по тестам
- Продуктовые метрики в GA4 без текста пользователя
Как сделано
- Скорость
- Замер показал: 60–80% времени — повторная обработка системного промпта на каждой реплике.
- GPU с откатом на CPU, кэш контекста (первое слово за 0,5–1,2 с), кэш инициализации GPU (12,7 → 4,6 с), прогрев.
- Gemma 4 E4B считалась доступной только на устройствах с 12 ГБ памяти. Проверил: на 8 ГБ она работает через GPU (ответ за 5–14 с) — порог по памяти заменил проверкой GPU.
- Оценка качества
- Матрица «промпты × параметры» одной командой, пересчёт только изменившихся ячеек.
- Судья читает разговор трижды и решает большинством; модель судьи зафиксирована.
- Правила-счётчики без судьи: пересказ, клише, голый вопрос вместо ответа.
- Стоимость судьи снижена в 4–5 раз: кириллица уходила экранированной.
- Эксперименты с промптами
- Одна переменная за раз, замороженные сценарии, повторы.
- Короткий промпт-контекст вместо пустого: ответ 2164 → 281 знак, 4–6 побед из 6 у слепого судьи.
- Гипотезы, ухудшившие метрики, отвергнуты (пересказы 10 → 47).
- Процесс и гейт качества
- OpenSpec: 207 требований, каждый тест ссылается на требование, CI не пропускает тест без него.
- 868 unit, 136 e2e на устройстве, 5 Maestro-флоу; перед релизом — прогон релизной сборки.
- GA4: 42 из 47 «пользователей» вычищены как роботы и тест-устройства.
Инструменты
Оценка LLM
- Evaluation-driven development
- регрессия качества LLM
- LLM-as-a-Judge
- DeepEval
- эталонные наборы тестовых диалогов
- Python
LLM и RAG
- RAG
- LightRAG
- MCP
- OpenRouter
- prompt engineering
- оптимизация инференса
- Sherpa-ONNX
Локальные и облачные LLM
- Qwen
- Gemma 3/4
- Llama
- Mistral
- oMLX
- LM Studio
- llama.cpp
- LiteRT-LM
- Claude (Opus, Sonnet, Haiku)
- MiniMax
- GLM
Разработка с ИИ
- AI-агенты
- Claude Code
- Codex
- OpenCode
- Hermes Agent
- OpenClaw
- MiniMax Code
- OpenSpec
Тесты и релизы
- JUnit
- Maestro
- PyTest
- Google Play API
- GA4
- Crashlytics
Как я тестирую ИИ
- Наборы случаев и судья с повторами, а не assert на равенство
- Сначала замер, потом решение
- Одна переменная за раз, модель судьи зафиксирована
- Границы модели держит код, а не промпт
- Малая выборка — направление, а не результат