Введите пароль


Неверный пароль

Как мы решаем задачи с LLM

Реальные кейсы из платёжной системы НПК

Роман Бармин
АО «НАТ Казахстан»

Наша реальность

Что мы обслуживаем

  • MSPD — международная система платёжных документов (RTGS)
  • MK/SMK — межбанковский клиринг
  • SMEP — мгновенные платежи
  • SOBS — обмен банковскими сообщениями

Масштаб

  • 10+ микросервисов на K8s
  • Oracle — таблицы по 12M+ записей
  • Kafka — потоки платежей между сервисами
  • 400+ автотестов каждую ночь
  • 3 стенда (dev, stage, 2015) × Ansible + CI/CD

Типичные проблемы

  • Утром 400 тестов красные — где копать?
  • K8s upgrade ночью — containerd не стартует
  • SQL тормозит — explain plan на 200 строк
  • Consumer lag в Kafka растёт — платежи стоят
  • OIDC invalid_grant — в каком сервисе проблема?

Вопрос: Как эффективно закрывать всё это каждый день? LLM — инструмент, который реально ускоряет работу команды.

Мой рабочий стек

⌨️

LLM-агент в терминале

Основной инструмент. Видит файлы, SSH, kubectl, git. Кидаю задачу — правит конфиги, коммитит, пушит. K8s, Ansible, CI/CD — всё через него.

🤖

CoderBot (своя разработка)

Telegram-бот + Mini App: пишешь задачу в чат — агент идёт в нужный проект, правит код, стримит прогресс в реальном времени. 15+ проектов, до 5 агентов параллельно.

🔗

N8N + LLM

Автоматизация: daily TODO из Telegram, контроль рабочих часов, парсинг уведомлений из GitLab.

🎙️

Whisper (транскрипция)

Бот заходит на совещание, пишет стенограмму, LLM делает summary и action items.

Как это работает

  • Облачные LLM через API — платишь за использование
  • Агент в терминале видит весь проект, SSH, kubectl, git
  • CoderBot — делегируешь задачу в Telegram, агент работает сам
  • N8N связывает всё в автоматические пайплайны

Что это даёт

  • Рутина (скрипты, конфиги, шаблоны) — в 3–5 раз быстрее
  • Диагностика — минуты вместо часов
  • Документация — пишется сама по ходу работы
  • Код-ревью — второе мнение на каждый коммит

Кейс: K8s Upgrade

K8s + Ansible Kubernetes 1.32 → 1.33 через kubespray на CentOS 8

Проблема

Обновляли K8s через Kubespray — containerd падает с GLIBC_2.32 not found, Ansible валится на dict evaluation. Три вложенных проблемы за одну ночь.

Что нашла LLM

  • Разобрала ошибки Ansible — root cause: ansible-core 2.16 по-другому работает с dict
  • Решение: добавить все *_binary_checksum переменные явно
  • GLIBC — предложила static binary containerd
  • Сгенерировала готовые фиксы для inventory
# Ошибка
TASK [download : download_file | Set URL]
fatal: 'cni_binary_checksum' is undefined
# Причина: ansible-core 2.16 evaluates
# ENTIRE 'downloads' dict → needs ALL vars

# Решение — добавить в inventory:
cni_binary_checksum: "sha256:..."
containerd_archive_checksum: "sha256:..."
crictl_checksum: "sha256:..."
# containerd fix:
containerd_static_binary: true

Кейс: Утренний AI-отчёт

Cron + LLM + Telegram Автоматический анализ 400+ тестов каждое утро

Как было

Каждое утро: зайти на 3 монитора по SSH, прочитать логи, понять что упало и почему. 30–60 минут ручной работы, ещё до первого кофе.

Как стало

  • Cron в 9:00 → LLM-агент заходит на 3 стенда по SSH
  • Собирает логи тестов MSPD, MK, SMEP
  • Семантический анализ — не regex, а понимание контекста
  • Находит root cause, предлагает fix-команды
  • Шлёт готовый отчёт в Telegram
# ai-morning-report.sh (cron 9:00)
# LLM заходит на мониторы:
ssh monitor.npck.nat.kz
ssh stage-monitor.npck.nat.kz
ssh dev-k8s-monitor.nat.kz

# Анализирует логи:
Connection refused → titanium
→ kubectl get pods: CrashLoopBackOff
→ logs: OOMKilled
→ ROOT CAUSE: memory limit

# Отправляет в Telegram:
MSPD: 380/400 ✅ | 20 ❌
Fix: kubectl set resources
  --limits memory=4Gi

Кейс: 400 тестов красные — что делать?

Oracle + K8s + MongoDB Реальный сценарий — утро понедельника

Типичная ситуация

Утром 76 из 132 тестов красные. Ошибки разные: «ПС не сформирован», invalid_grant, Connection refused. Вручную разбирать каждый — полдня.

Что делает LLM

  • Кидаю terminal.log → группирует по root cause
  • «ПС не сформирован» → проверь CURRENTSTATUS в Oracle, должен быть 0
  • invalid_grant → passwordExpired=true в MongoDB, сбрось
  • Connection refused → pod в CrashLoopBackOff, смотри OOM
  • Даёт готовые команды для каждого фикса
# Кидаю лог в LLM, получаю:

# Группа 1: 58 тестов
"ПС не сформирован"
SELECT CURRENTSTATUS FROM SYSTEMSTATUS;
-- Если ≠ 0:
UPDATE SYSTEMSTATUS SET CURRENTSTATUS=0;

# Группа 2: 12 тестов
"invalid_grant"
mongosh --eval "db.mongo_users
  .updateMany({username:/^NATTEST/},
  {$set:{passwordExpired:false}})"

# Группа 3: 6 тестов
"Connection refused: titanium"
kubectl rollout restart deploy/titanium -n mspd

Кейс: VoiceBot — GPU в аренду

ML + vast.ai Обучение нейросети на арендованных видеокартах

Задача

Обучить TTS-модель для синтеза речи. Нужны мощные GPU, но покупать карту за $2000+ ради экспериментов — не вариант.

Решение: vast.ai

  • Маркетплейс GPU серверов — арендуешь карту на час/день
  • A5000 (24GB VRAM) — от $0.15/час
  • 4x A5000 для обучения — дешевле чем одна карта в магазине
  • LLM помогла: Dockerfile, конфигурация, SSH-тоннели
  • Результат: рабочий Telegram-бот (@notvoicesdev_bot)
# vast.ai — аренда GPU
# Выбираем карту:
A5000 24GB VRAM — $0.15/час
A100 80GB VRAM — $0.80/час
H100 80GB VRAM — $2.00/час

# Поднял сервер за 2 минуты:
$ vastai create instance \
  --image pytorch/pytorch:latest \
  --gpu "4x A5000" --disk 100

# SSH доступ сразу:
$ ssh -p 22222 root@vast-instance
$ nvidia-smi
4x NVIDIA A5000 (96GB total)

10 000 строк логов — спрашиваешь, а не читаешь

Troubleshooting Поиск причин падения тестов и сервисов
📋

Анализ stack trace

Вставляешь кусок лога, пишешь «что здесь пошло не так» — получаешь структурированный разбор за 30 секунд вместо 30 минут ручного grep'а.

🔍

Массовые падения тестов

«400 тестов упало с "ПС не сформирован"» → описываешь архитектуру, LLM сразу говорит: CURRENTSTATUS в Oracle ≠ 0, сбрось операционный день.

🔑

Проблемы аутентификации

«invalid_grant при OIDC» → LLM сразу даёт чеклист: expired password, нет client registration, кривой scope. Экономит часы дебага.

Важно: LLM работает на паттернах — всегда проверяй предложенный фикс перед тем как катить на прод!

Кейс: Код — WebConsole + инфраструктура

React + Python + K8s Реальные задачи, которые решаем каждую неделю

WebConsole (LLM-агент)

  • Nx монорепо: 5 приложений, 8+ библиотек
  • React + TypeScript + Redux Toolkit
  • LLM видит весь проект — пишет компоненты, рефакторит, чинит типы
  • Ускорение: таблицы, формы, фильтры — в 3–5 раз быстрее

Инфраструктура (CLI-агент)

  • 8 000+ строк Python (pydefs) — генерация K8s манифестов
  • Секреты, конфиги, Jinja2-шаблоны
  • Агент правит конфиги → коммитит → пушит → деплоит
  • Ansible playbooks, CI/CD пайплайны GitLab

LLM — не замена ревью. Пишет хорошо для конкретных задач, плохо для абстрактных. Бизнес-логику платёжной системы не знает — объясняешь каждый раз.

Безопасность — что можно, что нельзя

Можно кидать в облако

  • Публичную документацию и open-source код
  • Общие вопросы по технологиям
  • Stack trace без бизнес-данных
  • Шаблоны K8s/Ansible без секретов
  • Описание архитектуры в общих терминах

Нельзя

  • Пароли, токены, ключи API
  • Персональные данные клиентов (ИИН, счета)
  • Конфигурации с реальными IP/доменами
  • Банковские транзакции и суммы
  • Внутреннюю документацию заказчика

Замени реальные данные на заглушки — и работай спокойно. IP, пароли, ИИН — маскируй перед отправкой в облако.

На чём я обжёгся

🎭

Уверенно врёт

Генерирует несуществующие флаги CLI, «придумывает» параметры конфигов. Выглядит убедительно, но в доке такого нет. Правило: любой совет LLM → проверка по доке.

📅

Знания устаревают

Подсунула deprecated K8s API (extensions/v1beta1 вместо apps/v1). Версии меняются быстро — LLM не всегда успевает.

🧠

Не знает наш контекст

Бизнес-логику платёжной системы LLM не знает. CURRENTSTATUS, операционный день, BIC-маршрутизация — это надо объяснять каждый раз.

Слепое доверие опасно

LLM — это джун с энциклопедией: делает быстро, но без ревью в прод нельзя. Я использую как ускоритель, а не как замену головы.

Как правильно спрашивать

Плохо

«Напиши деплоймент для K8s»

Хорошо

«Напиши K8s Deployment для Spring Boot сервиса titanium: образ repo-cache.nat.kz/kisc/titanium:latest, порт 8080, liveness на /actuator/health, 2 реплики, лимит 512Mi RAM»

Плохо

«Почему тесты падают?»

Хорошо

«400 тестов падают с ошибкой "ПС не сформирован". Система: Oracle + K8s, есть таблица CURRENTSTATUS. Что проверить?»

Принципы хорошего промпта

  • Контекст — что за проект, стек, окружение
  • Конкретика — версии, имена, порты, пути
  • Формат — «в виде YAML», «как bash-скрипт»
  • Ограничения — «без внешних зависимостей», «CentOS 8»
  • Пример — покажи желаемый результат

Чем точнее задача — тем полезнее ответ. Потрать 30 секунд на формулировку — сэкономишь 30 минут на итерациях.

Итого

3–5x
ускорение рутинных задач
30с
диагностика вместо 30 мин
$200
подписка в месяц — окупается за дни
400+
тестов анализируются автоматически
💡

Главный takeaway

LLM — не замена инженера, а усилитель. Не хайп, не революция — просто инструмент, который экономит часы каждую неделю. Кто начнёт раньше — тот в плюсе.

Вопросы?

Готов показать живую демонстрацию и помочь настроить

Роман Бармин
Telegram: @barm_in