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 на равенство
  • Сначала замер, потом решение
  • Одна переменная за раз, модель судьи зафиксирована
  • Границы модели держит код, а не промпт
  • Малая выборка — направление, а не результат