Ewaluacja, wdrożenie i retrospektywa
Uruchom pełny zestaw ewaluacyjny obejmujący metryki wyszukiwania, oceny jakości LLM-as-judge i testy obciążeniowe, wdroż aplikację u dostawcy chmurowego oraz napisz retrospektywę dokumentującą zdobyte doświadczenia.
Ewaluacja, wdrożenie i retrospektywa to bezpłatna lekcja AI Engineering Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Engineering Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Engineering Academy zawiera 4 lekcji w sumie.
Ostatni etap: ewaluacja przed wdrożeniem
System nie jest gotowy do wdrożenia, dopóki nie zostanie oceniony od początku do końca w warunkach zbliżonych do rzeczywistych. Końcowa faza ewaluacji łączy wszystkie techniki poznane w tym cyklu: metryki wyszukiwania weryfikujące, czy potok RAG znajduje właściwe fragmenty, oceny LLM-as-judge weryfikujące jakość odpowiedzi, testy obciążeniowe weryfikujące SLA opóźnień oraz skanowanie bezpieczeństwa weryfikujące zwiększenie gotowości systemu. Wszystkie te elementy muszą przejść pomyślnie przed rozpoczęciem wdrożenia.
Uruchamianie pełnego zestawu ewaluacyjnego
Uruchom kompletny zestaw ewaluacyjny w środowisku stagingowym, korzystając z reprezentatywnej próbki zapytań przypominających zapytania produkcyjne. Zapisz wszystkie metryki: współczynnik trafień, MRR i NDCG dla wyszukiwania; faithfulness i trafność odpowiedzi dla generowania; koszt pojedynczego zapytania; opóźnienia p50/p95/p99. Porównaj każdą metrykę z kryteriami sukcesu zdefiniowanymi na etapie projektowania architektury. Nie wdrażaj systemu, dopóki nie zostaną spełnione wszystkie bezwzględne minima.
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)Testowanie obciążenia systemu produkcyjnego
Przed uruchomieniem systemu wykonaj test obciążeniowy symulujący realistyczny ruch produkcyjny. Użyj narzędzia takiego jak Locust lub k6, aby stopniowo zwiększyć ruch do oczekiwanej maksymalnej liczby jednoczesnych użytkowników (na przykład 50) i zmierzyć zmiany opóźnienia pod obciążeniem. Zweryfikuj, że circuit breakers nie uruchamiają się przy normalnym obciążeniu, ogranicznik liczby żądań zwraca prawidłowe odpowiedzi 429 podczas skokowego ruchu, a współczynnik trafień semantic cache pozostaje powyżej wartości docelowej. Przed kontynuowaniem usuń wszystkie regresje.
# 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 5mWdrażanie na produkcję
Wdróż system w ramach wdrożenia blue-green: uruchom nową wersję (green) obok istniejącej wersji (blue), wykonaj testy dymne dla green, a następnie stopniowo przenoś ruch z blue do green. Zacznij od skierowania 5% ruchu do green, monitoruj współczynniki błędów i opóźnienie przez 10 minut, a następnie zwiększ udział do 25%, 50% i 100%. Pozwala to natychmiast wycofać zmiany do blue w razie problemów, bez przestoju.
# 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 stabilityMonitorowanie po wdrożeniu
Po wdrożeniu aktywnie obserwuj kluczowe metryki przez pierwsze 2 godziny. Monitoruj: współczynnik błędów (cel <1%), opóźnienie p95 (cel <8s), współczynnik trafień pamięci podręcznej (cel >20%) oraz koszt zapytania (cel <$0.05). Na potrzeby pierwszego wdrożenia utwórz kanał war room w Slacku i dodaj do niego wszystkich inżynierów pełniących dyżur. Przekroczenie progu ostrzegawczego przez dowolną metrykę uruchamia dochodzenie, a przekroczenie progu krytycznego — natychmiastowy powrót do 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])Pisanie retrospektywy architektury
Po tygodniu działania systemu napisz dokument retrospektywy opisujący, co zadziałało, co nie zadziałało i co należałoby zrobić inaczej. Dobra retrospektywa szczerze opisuje porażki i konkretnie przedstawia wnioski. Przyszli czytelnicy — w tym Państwo za sześć miesięcy — skorzystają na zrozumieniu przesłanek decyzji podejmowanych pod presją czasu oraz nieoczekiwanych przeszkód, które napotkano.
# 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 afterDokumentowanie runbooków operacyjnych
Napisz runbooki dla każdego alertu, który może pojawić się na produkcji. Runbook to instrukcja krok po kroku dotycząca diagnozowania i rozwiązywania konkretnego alertu. Powinna odpowiadać na pytania: co oznacza ten alert, jaka jest prawdopodobna przyczyna, jak go zdiagnozować i jak go usunąć. Runbooki skracają średni czas rozwiązania problemu (MTTR) z godzin do minut, ponieważ eliminują konieczność samodzielnego opracowywania kroków diagnostycznych podczas stresującego incydentu.
# 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 20Pomiar wpływu biznesowego
Po miesiącu działania na produkcji zmierz wpływ biznesowy systemu, wykraczając poza metryki techniczne. W przypadku asystenta pytań i odpowiedzi: o ile zmniejszyła się liczba zgłoszeń do działu obsługi klienta? Jaki jest poziom satysfakcji użytkowników z odpowiedzi udzielanych przez AI? Ile zapytań obsłużył system, które wcześniej wymagały pomocy pracowników działu obsługi klienta? Te metryki biznesowe uzasadniają inwestycję i pomagają ustalać priorytety między poprawą jakości a dodawaniem nowych funkcji.
# 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 volumesPlanowanie kolejnej iteracji
Wdrożony system nigdy nie jest ukończony — stanowi podstawę ciągłego doskonalenia. Wykorzystaj dane z ewaluacji, opinie użytkowników i wnioski z retrospektywy, aby zaplanować kolejną iterację. Nadaj priorytet usprawnieniom, które mają największy wpływ na najważniejsze metryki: jeśli współczynnik trafień wyszukiwania jest czynnikiem ograniczającym, zainwestuj w lepsze dzielenie tekstu na fragmenty lub inny model embeddingów; jeśli satysfakcja użytkowników jest niska mimo dobrych wyników wyszukiwania, zainwestuj w jakość promptów.
# 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'
}
]Dzielenie się wiedzą i dokumentacja
Udokumentuj najważniejsze, nieoczywiste decyzje implementacyjne dotyczące systemu. Należą do nich: dlaczego wybrano konkretny rozmiar fragmentów (i co wykazały eksperymenty), jak skalibrowano próg podobieństwa pamięci podręcznej semantycznej, jakie wzorce prompt injection filtr obecnie wykrywa, a jakich nie, oraz jak dodawać nowe narzędzia do agenta. Dobra dokumentacja wewnętrzna skraca czas wdrażania nowych współtwórców i zapobiega przypadkowemu odwróceniu decyzji przez osobę, która nie zna ich uzasadnienia.
# 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.Co udało się zbudować
Przeanalizuj kompletny system zbudowany przez Ciebie w ramach tego projektu końcowego: hybrydowy potok RAG łączący wyszukiwanie gęste i rzadkie z ponownym rankingiem, agenta strumieniowego z wywoływaniem funkcji i mechanizmami zabezpieczającymi, pamięć podręczną semantyczną zmniejszającą koszty o 30%, mechanizmy circuit breaker zapewniające automatyczne przełączanie awaryjne, ciągłą ewaluację LLM-as-judge uruchamianą w CI/CD oraz zabezpieczenia przed prompt injection chroniące przed złośliwymi danymi wejściowymi. To właśnie inżynieria AI dla środowiska produkcyjnego.
# 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',
}Szybki test
Sprawdź swoją wiedzę na temat wdrażania i ewaluacji systemów AI w środowisku produkcyjnym.
Podsumowanie lekcji
W tej lekcji nauczyłeś się, że: końcowa ewaluacja obejmuje metryki wyszukiwania, wyniki LLM-as-judge, testy obciążeniowe i skanowanie pod kątem bezpieczeństwa przed rozpoczęciem jakiegokolwiek wdrożenia, wdrożenie blue-green ze stopniowym przekierowywaniem ruchu umożliwia natychmiastowe wycofanie zmian bez przestoju, a retrospektywy i runbooki utrwalają wiedzę organizacyjną, skracając czas rozwiązywania przyszłych incydentów. Gratulacje z okazji ukończenia ścieżki AI Engineering: LLM, RAG and Agents!
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Ewaluacja, wdrożenie i retrospektywa” jest bezpłatna?
Tak — pełny tekst „Ewaluacja, wdrożenie i retrospektywa” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Engineering Academy, przejdź na CoddyKit PRO. Kurs AI Engineering Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ewaluacja, wdrożenie i retrospektywa”?
Uruchom pełny zestaw ewaluacyjny obejmujący metryki wyszukiwania, oceny jakości LLM-as-judge i testy obciążeniowe, wdroż aplikację u dostawcy chmurowego oraz napisz retrospektywę dokumentującą zdobyt… Ćwiczysz AI Engineering Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Engineering Academy?
Nie wymagamy żadnego doświadczenia. AI Engineering Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Ewaluacja, wdrożenie i retrospektywa”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Engineering Academy?
Tak. Każda lekcja AI Engineering Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Projektowanie architektury produkcyjnej
- Implementowanie podstawowych funkcji RAG i agenta
- Wzmacnianie: bezpieczeństwo, buforowanie i niezawodność
- Ewaluacja, wdrożenie i retrospektywa