AI Engineering Academy · Урок

Оценка, развёртывание и ретроспектива

Запустите полный набор средств оценки, включая метрики поиска, оценки качества по принципу «LLM в роли судьи» и нагрузочные тесты, разверните систему у облачного провайдера и напишите ретроспективу с полученными уроками.

Урок 4 из 413 шагов

«Оценка, развёртывание и ретроспектива» — бесплатный урок AI Engineering Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Engineering Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Engineering Academy содержит 4 уроков всего.

Последний этап: оценка перед выпуском

Систему нельзя выпускать, пока она не будет оценена сквозным образом в условиях, приближенных к реальным. На заключительном этапе оценки объединяются все изученные в этом разделе методы: метрики извлечения проверяют, что конвейер RAG находит правильные фрагменты, оценки LLM в роли судьи проверяют качество ответов, нагрузочное тестирование проверяет SLA задержки, а сканирование безопасности проверяет усиление системы. До начала развертывания все проверки должны быть пройдены.

Запуск полного комплекса оценок

Выполните полный набор оценок в тестовой среде, используя репрезентативную выборку запросов, похожих на производственные. Запишите все метрики: долю попаданий, MRR и NDCG для извлечения; достоверность и релевантность ответа для генерации; стоимость каждого запроса; задержку p50/p95/p99. Сравните каждую метрику с критериями успеха, определенными на этапе проектирования архитектуры. Не выпускайте систему, пока не будут выполнены все жесткие минимальные требования.

async def final_evaluation(system_url: str, test_set_path: str) -> dict:
    test_cases = load_test_set(test_set_path)
    results = []
    for case in test_cases:
        start = time.perf_counter()
        response = await query_system(system_url, case['question'])
        latency_ms = (time.perf_counter() - start) * 1000
        judge_score = await judge(case['question'], response['answer'], case.get('reference'))
        hit = any(case['relevant_doc'] in s for s in response.get('sources', []))
        results.append({'latency_ms': latency_ms, 'score': judge_score, 'hit': hit, 'cost': response.get('cost_usd', 0)})
    return compute_final_metrics(results)

Нагрузочное тестирование производственной системы

До запуска выполните нагрузочное тестирование, имитирующее реалистичный производственный трафик. Используйте инструмент вроде Locust или k6, чтобы постепенно увеличить нагрузку до ожидаемого пикового числа одновременных пользователей (например, 50) и измерить изменение задержки под нагрузкой. Убедитесь, что Circuit Breaker не срабатывает при нормальной нагрузке, ограничитель частоты возвращает корректные ответы 429 при пакетном трафике, а доля попаданий в Semantic Cache остается выше целевого значения. Перед продолжением устраните все регрессии.

# Locust load test (locustfile.py)
from locust import HttpUser, task, between
import random

QUESTIONS = [
    'What is the return policy?',
    'How do I cancel my subscription?',
    'Where are you located?',
]

class AIUser(HttpUser):
    wait_time = between(1, 3)  # realistic think time

    @task
    def query(self):
        self.client.post(
            '/query',
            json={'question': random.choice(QUESTIONS), 'tenant_id': 'load_test'},
            headers={'Authorization': 'Bearer test_token'}
        )

# Run: locust -f locustfile.py --headless -u 50 -r 5 --run-time 5m

Развертывание в эксплуатации

Выполните развертывание по схеме blue-green: запустите новую версию (green) рядом с существующей (blue), проведите дымовые тесты для green, а затем постепенно перенаправляйте трафик с blue на green. Сначала направьте в green 5% трафика, в течение 10 минут отслеживайте долю ошибок и задержку, затем увеличьте долю до 25%, потом до 50% и наконец до 100%. Если что-то пойдет не так, это позволит мгновенно вернуться к blue без простоя.

# Deployment steps (pseudocode for AWS ECS or K8s):
# 1. Build and push new Docker image
#    docker build -t qa-assistant:v2.0 . && docker push ...
#
# 2. Deploy green (new) version alongside blue (current)
#    kubectl apply -f deploy/green.yaml
#
# 3. Run smoke tests against green
#    pytest tests/smoke/ --base-url https://green.internal
#
# 4. Canary traffic shift (ALB weighted routing)
#    5%  -> green (monitor 10min)
#    25% -> green (monitor 10min)
#    50% -> green (monitor 10min)
#    100% -> green
#
# 5. Decommission blue after 24h stability

Мониторинг после развертывания

После развертывания активно отслеживайте ключевые метрики в течение первых двух часов. Контролируйте долю ошибок (целевое значение <1%), задержку p95 (целевое значение <8 с), долю попаданий в кэш (целевое значение >20%) и стоимость запроса (целевое значение <$0.05). Создайте канал Slack для экстренной координации и подключите всех дежурных инженеров к первому развертыванию. Пересечение метрикой порога предупреждения запускает расследование, а пересечение критического порога — немедленный откат к blue.

# Post-deploy monitoring dashboard queries:
# (Assuming Grafana + Prometheus)

# Error rate (last 5 min):
# rate(http_requests_total{status=~'5..'}[5m]) / rate(http_requests_total[5m])

# p95 latency (last 5 min):
# histogram_quantile(0.95, rate(query_duration_seconds_bucket[5m]))

# Cache hit rate:
# rate(cache_hits_total[5m]) / rate(queries_total[5m])

# Average cost per query:
# rate(llm_cost_usd_total[5m]) / rate(queries_total[5m])

Написание ретроспективы архитектуры

Через неделю после запуска системы напишите документ ретроспективы, в котором зафиксируйте, что сработало, что не сработало и что Вы сделали бы иначе. Хорошая ретроспектива честно описывает сбои и конкретно формулирует извлеченные уроки. Будущим читателям — включая Вас через шесть месяцев — будет полезно понять логику решений, принятых в условиях нехватки времени, и неожиданные препятствия, с которыми пришлось столкнуться.

# RETROSPECTIVE.md structure:
#
# ## What Worked Well
# - Hybrid retrieval improved hit rate from 71% to 89%
# - Semantic cache reduced average cost by 31%
# - LangSmith tracing saved 2 days of debugging
#
# ## What Did Not Work
# - Semantic chunking was 4x slower than recursive chunking
#   with only 3% hit rate improvement -- not worth it
# - Cohere reranker had 400ms latency -- too slow for p95 target
#   Switched to BGE-reranker-v2 running locally
#
# ## What We'd Do Differently
# - Start with pgvector, not Pinecone (migration cost 3 days)
# - Add semantic cache BEFORE building the agent, not after

Документирование эксплуатационных руководств

Напишите руководства по реагированию для каждого оповещения, которое может сработать в эксплуатации. Руководство по реагированию — это пошаговая инструкция по диагностике и устранению конкретного оповещения. В нем должны быть ответы на вопросы: что означает это оповещение, какова вероятная причина, как провести диагностику и как устранить проблему. Руководства сокращают среднее время устранения (MTTR) с часов до минут, поскольку во время напряженного инцидента не приходится заново продумывать этапы диагностики.

# runbooks/latency.md
# ## Alert: p95 Latency > 8000ms
#
# ### Likely Causes
# 1. OpenAI API degraded (check status.openai.com)
# 2. Cohere reranker slow (check Cohere status page)
# 3. pgvector query slow (check DB CPU in CloudWatch)
# 4. Redis cache full (check Redis memory usage)
#
# ### Diagnosis
# curl https://api.openai.com/v1/models -H 'Authorization: Bearer $KEY'
# Check LangSmith traces for which step is slow
# SELECT mean(duration) FROM traces GROUP BY step
#
# ### Fixes
# - If OpenAI slow: circuit breaker should auto-failover to Claude
# - If Cohere slow: disable reranking temporarily (env SKIP_RERANK=1)
# - If DB slow: increase pgvector ef_search from 40 to 20

Измерение влияния на бизнес

Через месяц после запуска в рабочей среде оцените влияние системы на бизнес, не ограничиваясь техническими показателями. Для ассистента по вопросам и ответам: насколько сократилось количество обращений в службу поддержки? Каков уровень удовлетворённости пользователей запросами, на которые ответил ИИ? Сколько запросов обработала система, хотя раньше для этого требовалось участие специалистов службы поддержки? Эти бизнес-показатели оправдывают вложения и помогают расставлять приоритеты между улучшением качества и добавлением новых функций.

# Business impact metrics (month 1):
# Technical:
# - 12,847 queries served, 11,439 (89%) answered without human
# - Avg query cost: $0.031 (within $0.05 budget)
# - System uptime: 99.94%
#
# Business:
# - Support tickets: 1,840/month -> 1,203/month (-35%)
# - Avg resolution time: 4.2h -> 23 seconds for AI-answered
# - User CSAT on AI answers: 4.1/5.0
# - Cost per resolved query: $12 (human) -> $0.031 (AI)
# - ROI: 157% in month 1 at current volumes

Планирование следующей итерации

Запущенная система никогда не бывает полностью завершённой — она служит основой для непрерывного улучшения. Используйте данные оценки, отзывы пользователей и выводы ретроспективы, чтобы спланировать следующую итерацию. В первую очередь улучшайте то, что сильнее всего влияет на наиболее важные показатели: если ограничивающим фактором является доля успешного поиска, вложитесь в более эффективное разбиение на фрагменты или другую модель векторных представлений; если удовлетворённость пользователей низкая, несмотря на хорошие результаты поиска, улучшайте качество инструкций.

# Next iteration priorities (based on first month data):
NEXT_SPRINT = [
    # High impact / high confidence
    {
        'feature': 'Sentence-window retrieval',
        'expected_impact': 'Hit rate 89% -> 93%',
        'effort': 'medium',
        'evidence': '11% of failures due to answer split across chunks'
    },
    # High impact / medium confidence
    {
        'feature': 'Query decomposition for multi-hop questions',
        'expected_impact': 'Multi-hop correctness 61% -> 78%',
        'effort': 'high',
        'evidence': '23% of failures are multi-hop questions'
    },
    # Low effort quick win
    {
        'feature': 'Extend cache TTL from 1h to 24h',
        'expected_impact': 'Cache hit rate 31% -> 38%',
        'effort': 'trivial',
        'evidence': 'Same questions asked daily by different users'
    }
]

Обмен знаниями и документация

Документируйте ключевые неочевидные решения, принятые при реализации системы. К ним относятся: почему был выбран именно такой размер фрагмента (и что показали эксперименты), как был настроен порог сходства семантического кэша, какие шаблоны внедрения фильтр выявляет сейчас, а какие — нет, и как добавлять новые инструменты агенту. Качественная внутренняя документация сокращает время адаптации новых участников проекта и не позволяет случайно отменить принятые решения человеку, который не знает их обоснования.

# INTERNALS.md — key non-obvious decisions:
#
# ## Chunk Size: 800 tokens with 100 token overlap
# We tested 400, 600, 800, 1200 tokens.
# 800 tokens maximizes hit rate (89%) while keeping context
# small enough for 5 chunks to fit comfortably in 4096 token prompt.
# Larger chunks improved recall but degraded precision.
#
# ## Cache Similarity Threshold: 0.92
# Tested 0.85, 0.90, 0.92, 0.95.
# 0.92 gives 31% hit rate with <2% incorrect cache hits.
# 0.85 gives 41% hit rate but 8% incorrect hits (too aggressive).
#
# ## Reranker Top-N: 3 (from initial 10)
# More than 3 chunks causes context stuffing without quality gain.

Что вы создали

Осмыслите всю систему, созданную вами в рамках этого итогового проекта: гибридный конвейер RAG, объединяющий плотный и разреженный поиск с повторным ранжированием; агент с потоковой передачей данных, поддерживающий вызов функций и защитные ограничения; семантический кэш, сокращающий расходы на 30%; механизмы размыкания цепи, обеспечивающие автоматическое переключение на резервную систему; оценивание с помощью LLM в роли судьи, непрерывно выполняющееся в CI/CD; и защиту от внедрения инструкций, предотвращающую атаки с использованием вредоносных входных данных. Это и есть инженерия ИИ в рабочей среде.

# System capabilities summary:
SYSTEM_CAPABILITIES = {
    'retrieval': 'Hybrid BM25+dense with Cohere reranking, 89% hit rate',
    'generation': 'GPT-4o with Claude fallback, circuit breaker, streaming',
    'caching': 'Semantic cache (Redis+embeddings), 31% cache hit rate',
    'security': 'Injection filter (2-stage) + output scanning + tenant isolation',
    'observability': 'LangSmith traces + Prometheus metrics + PagerDuty alerts',
    'evaluation': 'Automated LLM-as-judge in CI, daily full suite, LangSmith evals',
    'reliability': '99.94% uptime, circuit breakers, graceful degradation ladder',
    'cost': '$0.031/query average, model routing saves 67% vs GPT-4o only',
}

Быстрая проверка

Проверьте, насколько вы понимаете развертывание и оценивание систем ИИ в рабочей среде.

Итоги урока

В этом уроке вы узнали: итоговая оценка объединяет показатели поиска, оценки LLM в роли судьи, нагрузочное тестирование и проверку безопасности до начала любого развертывания; сине-зелёное развертывание с постепенным перенаправлением трафика позволяет мгновенно выполнить откат без простоя; а ретроспективы и эксплуатационные инструкции сохраняют накопленные знания организации и сокращают время устранения инцидентов в будущем. Поздравляем с завершением направления «Инженерия ИИ: LLM, RAG и агенты»!

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Оценка, развёртывание и ретроспектива» бесплатный?

Да — полный текст урока «Оценка, развёртывание и ретроспектива» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Engineering Academy, подпишись на CoddyKit PRO. Курс AI Engineering Academy содержит 4 уроков всего.

Чему я научусь в уроке «Оценка, развёртывание и ретроспектива»?

Запустите полный набор средств оценки, включая метрики поиска, оценки качества по принципу «LLM в роли судьи» и нагрузочные тесты, разверните систему у облачного провайдера и напишите ретроспективу с… Ты практикуешь AI Engineering Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Engineering Academy?

Предыдущий опыт не требуется. AI Engineering Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Оценка, развёртывание и ретроспектива»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Engineering Academy?

Да. Каждый урок AI Engineering Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проектирование архитектуры для промышленной эксплуатации
  2. Реализация основных возможностей RAG и агента
  3. Повышение надёжности: безопасность, кэширование и устойчивость
  4. Оценка, развёртывание и ретроспектива
← Назад к AI Engineering Academy