Michał KrzewicaBackend Developer & AI Engineer

Projektuję i rozwijam systemy backendowe oraz rozwiązania AI, które sprawdzają się nie tylko na etapie prototypu, ale przede wszystkim w codziennej pracy produkcyjnej.

Pracuję zarówno nad API i architekturą systemów opartych na zdarzeniach, jak i aplikacjami wykorzystującymi LLM oraz workflowami agentowymi tworzonymi z użyciem LangGraph.

5+ lat doświadczenia w tworzeniu systemów produkcyjnych · Backend · LLM · AWS

Jak pracuję

Nie zaczynam od kodu, ale od problemu, który trzeba rozwiązać. Najpierw poznaję wymagania i ograniczenia, później projektuję rozwiązanie, wdrażam je i sprawdzam, jak zachowuje się w praktyce. Jeśli coś nie działa tak, jak powinno, wracam do wcześniejszych założeń i szukam lepszego podejścia.

Mój proces przypomina graf workflowu — poszczególne etapy są ze sobą powiązane, ale nie zawsze trzeba przechodzić przez nie w jednej, niezmiennej kolejności. Podobnie projektuję systemy agentowe, w których każdy krok ma określoną rolę.

jak-pracuje.graph gotowy

krok 03a · backend

Zbudowanie Rdzenia

Nawet najbardziej zaawansowana funkcja AI potrzebuje solidnego zaplecza. Dlatego dużą wagę przykładam do jakości API, obsługi procesów i infrastruktury, na której działa aplikacja.

  • Tworzę usługi i API z przewidywalnymi, spójnymi kontraktami.
  • Obsługuję długotrwałe zadania za pomocą kolejek i funkcji serverless.
  • Wdrażam usługi w kontenerach Docker na AWS ECS, dbając o ich monitoring i diagnostykę.
PythonFastAPIPHPSymfonySQSLambdaDocker
@router.post("/jobs", status_code=202)
async def create_job(cmd: CreateJob) -> JobAccepted:
    job = await jobs.create(cmd)
    await queue.publish(JobQueued(job.id))
    return JobAccepted(id=job.id)
› naciśnij Start, aby uruchomić graf

O mnie

Backend to moja baza. AI wykorzystuję tam, gdzie ma sens.

Od ponad pięciu lat zajmuję się tworzeniem i rozwijaniem systemów backendowych. Pracuję z API, modelowaniem danych, architekturą event-driven i infrastrukturą chmurową.

Od 2025 roku rozwijam się również w obszarze inżynierii AI. Tworzę systemy oparte na LLM, workflowy agentowe, rozwiązania niezależne od dostawcy modelu oraz mechanizmy oceny i monitorowania jakości działania aplikacji.

Interesuje mnie przede wszystkim to, jak takie rozwiązania sprawdzają się w praktyce — kiedy muszą obsługiwać rzeczywisty ruch, radzić sobie z błędami i pozostać zrozumiałe dla osób, które będą je dalej rozwijać.

W projektach stawiam na czytelną architekturę, możliwość diagnozowania problemów, rozsądne podejście do prywatności i rozwiązania, które można rozwijać bez niepotrzebnego komplikowania systemu.

backend

Backend & API

Projektuję i rozwijam usługi, API oraz modele danych dopasowane do potrzeb aplikacji. Dbam o spójne kontrakty i przewidywalną komunikację między komponentami. Tam, gdzie ma to uzasadnienie, wykorzystuję również streaming.

chmura

Chmura & wdrażanie

Pracuję z infrastrukturą AWS, dobierając usługi do konkretnego zastosowania. Wykorzystuję Lambda i SQS do zadań asynchronicznych, Docker i ECS do uruchamiania usług backendowych, a S3 i CloudFront do przechowywania oraz dostarczania plików.

backend

Architektura event-driven i asynchroniczność

Projektuję mechanizmy obsługi zadań, które nie powinny blokować standardowego cyklu żądania HTTP. Wykorzystuję kolejki, funkcje serverless i przetwarzanie wsadowe, aby lepiej zarządzać czasem wykonania, obciążeniem i kosztami.

ai

Systemy LLM i agenci

Buduję workflowy agentowe, integracje z różnymi modelami językowymi i pipeline’y RAG. Zależy mi na tym, żeby logika działania była przejrzysta, a poszczególne elementy można było niezależnie rozwijać i testować.

ai

Ewaluacja i obserwowalność

Dbam o możliwość sprawdzania jakości i diagnozowania działania systemów AI. Wykorzystuję zestawy danych referencyjnych, ewaluację LLM-as-a-Judge oraz śledzenie poszczególnych wywołań modeli.

ai

Prywatność i bezpieczeństwo

Zwracam uwagę na walidację danych wejściowych, zabezpieczenia przed prompt injection i moderację generowanych treści. Ważne jest dla mnie również ograniczanie ilości zbieranych i przechowywanych danych do rzeczywiście potrzebnego minimum.

Wybrane projekty

Kilka przykładów rozwiązań, nad którymi pracowałem.

Pokazuję tu różne aspekty mojej pracy — od architektury backendowej i przetwarzania zdarzeń po aplikacje wykorzystujące modele językowe. Skupiam się nie tylko na tym, co robią, ale również na rozwiązaniach technicznych, które stoją za ich działaniem.

01 · Workflowy agentowe

Workflowy wieloagentowe z LangGraph

Usługa oparta na LLM, która generuje rozbudowane, ustrukturyzowane dokumenty. Poszczególne zadania wykonywane są równolegle, a użytkownik na bieżąco widzi postęp pracy w przeglądarce.

Najważniejsze elementy rozwiązania:

  • Zagnieżdżone grafy LangGraph z równoległym wykonywaniem zadań, walidacją i ponawianiem operacji na poszczególnych etapach. Checkpointy zapisywane w MongoDB pozwalają wznowić pracę po błędzie.
  • Integracje z modelami niezależne od dostawcy dzięki LangChain. Prompty są zarządzane poza kodem aplikacji, a dodatkowe mechanizmy chronią przed prompt injection i niepożądanymi wynikami.
  • Ewaluacja na przygotowanych zestawach danych pozwala wychwytywać spadki jakości i podejmować decyzje dotyczące zmian w promptach oraz logice workflowu.
PythonFastAPILangGraphLangChainSSEMongoDBLangfuse
GET /documents/stream text/event-stream
event: node_started data: {"node":"plan"}
event: fan_out data: {"branches":3}
event: node_done data: {"node":"section_1"}
event: validation_failed data: {"node":"section_2","retry":1}
event: node_done data: {"node":"section_3"}
event: node_done data: {"node":"section_2"}
event: complete data: {"checkpoint":"saved"}

02 · Event-driven backend

Przetwarzanie wsadowe tekstu i audio

Asynchroniczny pipeline do przetwarzania dłuższych dokumentów i nagrań audio z wykorzystaniem LLM. Zamiast czekać na zakończenie całej operacji w jednym żądaniu HTTP, użytkownik może zlecić zadanie, które jest realizowane w tle.

Najważniejsze elementy rozwiązania:

  • Wykorzystanie API Batch zamiast wywołań w czasie rzeczywistym. W odpowiednich scenariuszach pozwala to obniżyć koszty API o około 50%.
  • Obsługa audio nagrywanego w przeglądarce i przesyłanego we fragmentach. Fragmenty są łączone za pomocą ffmpeg, a następnie trafiają do transkrypcji z rozpoznawaniem mówców. Pliki audio nie są trwale przechowywane.
  • Rejestrowanie każdego wywołania AI, w tym użytego modelu, liczby tokenów i wersji promptu. Obserwowalność zapewniają Langfuse i OpenTelemetry, a jakość wyników jest dodatkowo sprawdzana przez LLM-as-a-Judge.
AWS LambdaSQSPHPLangfuse

Jak wygląda przetwarzanie audio?

  1. 1Przeglądarka — nagranie audio jest przesyłane w mniejszych fragmentach.
  2. 2ffmpeg — otrzymane fragmenty są łączone w jedno nagranie.
  3. 3Transkrypcja — nagranie jest zamieniane na tekst z rozpoznawaniem poszczególnych mówców.
  4. 4Przetwarzanie LLM — zadania trafiają do kolejki SQS i są obsługiwane przez AWS Lambda.
  5. 5Wynik i monitoring — rezultat jest zapisywany, przebieg operacji można prześledzić, a pliki audio są usuwane.

Koszt za zadanie

API w czasie rzeczywistym 1×
API Batch ≈ 0,5×

Stack technologiczny

Technologie dobieram do problemu.

Nie ma jednego zestawu narzędzi, który sprawdzi się w każdym projekcie. Wybieram technologie na podstawie wymagań aplikacji, rodzaju przetwarzanych danych i przewidywanego obciążenia.

Poniżej przedstawiam główne elementy mojego stacku i sposób, w jaki wykorzystuję je w praktyce.

01Edge

  • Przeglądarkaklient SSE
  • CloudFrontCDN

02API

  • Python / FastAPI
  • PHP 8 / Symfony
  • RESTkontrakty
  • SSEpostęp na żywo

03Async

  • SQSkolejki
  • AWS Lambdaworkery
  • ECS · Dockerusługi

04LLM

  • LangGraphagenci
  • LangChain
  • Dowolny dostawca LLMmodel-agnostic
  • API Batch≈ ½ kosztu
  • RAG
  • Guardrailsinjection · moderacja

05Dane i jakość

  • MongoDBdane · checkpointy
  • S3pliki
  • Langfusetracing
  • OpenTelemetry
  • Evalsgolden datasets

Cały stack · 19 narzędzi

Backend stanowi podstawę systemu. Tam, gdzie przynosi to realną korzyść, dokładam warstwę LLM, a zadania wymagające więcej czasu przenoszę do przetwarzania asynchronicznego. Istotnym elementem całości jest również monitoring wywołań AI, który pozwala analizować ich jakość, koszty i zachowanie.

Kontakt

Masz pomysł na ciekawy projekt?

Chętnie porozmawiam o nowych wyzwaniach — niezależnie od tego, czy chodzi o zaprojektowanie skalowalnego backendu, wdrożenie funkcji opartych na LLM, czy połączenie obu tych obszarów w jednym systemie.

Jeśli szukasz osoby, która potrafi spojrzeć na projekt zarówno od strony backendu, jak i inżynierii AI, napisz do mnie.