Mirwan Akaygün
Mirwan Akaygün

Hallo, ich bin Mirwan.

AI Engineer · München · weltweit remote

KI-Systeme, die in Produktion laufen.
Nicht im Prototyp.

Ich entwerfe, baue und betreibe LLM-Systeme in Python, von Retrieval, Agenten und Evaluation bis zur Infrastruktur darunter. Ein Engineer von der Anforderung bis zum Betrieb rund um die Uhr, jeder Modellaufruf gemessen, gedeckelt und nachvollziehbar.

  • Ab sofort verfügbar
  • 100 % remote, Festanstellung oder Freelance
  • Deutsch und Englisch

Offen für · AI Developer · LLM Engineer · GenAI Engineer · AI Engineer (LLM) · AI Automation Engineer · Prompt Engineer

läuft
question 3a91 → grounded answer
Jede Antwort wird gefiltert, gesucht, neu sortiert, belegt und geprüft, bevor sie rausgeht.

Modelle

Anthropic Claude, OpenAI GPT, Google Gemini, Alibaba Qwen, AWS Bedrock

Kern-Stack

Python, FastAPI, Pydantic, PostgreSQL und pgvector, Docker, Linux

Werkzeuge

Claude Code, Playwright, Langfuse, LangGraph, promptfoo

Arbeitsweise

Structured Outputs, Evals mit Gold-Set, Kostendeckel, Traces bei jedem Lauf

Ein Prompt ist eine Bitte, kein Riegel. Zuverlässigkeit entsteht durch die Struktur um das Modell herum.

Kontext genau auf die anstehende Entscheidung zugeschnitten, ein bewusst begrenzter Werkzeugsatz, erzwungenes Ausgabeschema und eine Prüfstufe, die jedes Ergebnis passieren muss, bevor es weiterläuft. Nach diesen Regeln baue ich.

Ausgewählte Projekte

Systeme im laufenden Betrieb

Eigene Produkte und Kundensysteme, ohne Namen beschrieben. Die Zahlen sind gemessen, nicht geschätzt.

01in Produktion

Unbeaufsichtigte LLM-Pipeline

Inhalte mussten laufend erzeugt, geprüft und ausgeliefert werden, ohne dass ein Mensch dazwischen sitzt.

Mehrstufige Python-Pipeline mit Structured Outputs, Pydantic-Validierung und automatischem Soll-Ist-Vergleich vor jeder Auslieferung. Harte Kostendeckel je Lauf, jeder Modellaufruf protokolliert und bepreist, ein Gold-Rückhalt gegen Überanpassung, automatischer Neustart bei Fehlern.

700+
produktive Läufe
94 %
Erstbestehensquote, vorher 42 %
< 2 ct
je Lauf

Python, Anthropic API, Pydantic, PostgreSQL, Playwright, systemd

02in Produktion

Prozessautomatisierung über mehrere APIs

Bestellungen, Bestände und Sendungsdaten über mehrere Partner- und Lieferantensysteme mussten rund um die Uhr synchron bleiben.

Anbindungen über REST und OAuth 2.0 mit Token-Lebenszyklus, Rate-Limiting, Backoff mit Jitter, Idempotenz-Schlüsseln und Deduplizierung. Automatischer Abgleich über einen sechsstelligen Katalog, ein Modell justiert die Steuerung anhand realer Signale nach.

24/7
unbeaufsichtigter Betrieb
0
manuelle Eingriffe im Tagesbetrieb
6-stellig
Katalog abgeglichen

Python, httpx, OAuth 2.0, SQLite, PostgreSQL, cron

03in Produktion

Web-Extraktion und Browser-Automatisierung

Websites mussten laufend gelesen, geprüft und bearbeitet werden, ohne dass ein Mensch zusieht.

Playwright-Pipelines mit BeautifulSoup-Extraktion, Bildprüfung mit OpenCV und PIL und Selbstprüfung vor jeder Aktion, Abbruch statt Fehlschritt. Jeder Schritt wird protokolliert, ein Fehler wird aus dem Trace diagnostiziert, nicht aus dem Gedächtnis.

Selbstprüfend
Abbruch statt Fehlschritt
Unbeaufsichtigt
läuft ohne Mensch
Nachvollziehbar
jeder Schritt protokolliert

Python, Playwright, BeautifulSoup, OpenCV, PIL

04in Produktion

Eigenbetriebene Produktionsinfrastruktur

Jedes System oben brauchte ein Zuhause, das ich von Anfang bis Ende kontrolliere, ohne verwaltetes Hosting dazwischen.

Ubuntu-Server mit Docker, Caddy mit Wildcard-TLS, vollständiger Mailstack (Postfix, Dovecot, OpenDKIM mit SPF, DKIM und DMARC), fail2ban mit eigenen Filtern, SSH-Härtung, systemd-Dienste, Backups, Logrotation und Monitoring.

Alle
Projekte laufen darauf
Nur Schlüssel
SSH ohne Passwörter
Eigene
Mail, TLS, Monitoring

Linux, Docker, Caddy, Postfix, fail2ban, systemd

So läuft ein Durchlauf

Vom rohen Dokument zur prüfbaren Antwort

Neun Stufen, jede einzeln messbar. Ist eine Antwort falsch, zeigt der Trace, welche Stufe versagt hat, und meistens ist es die Suche, nicht das Modell.

Stufe 01 / 09

  1. 01 · ingest

    Parsen und OCR

    PDF-Layout, Tabellen und Scans werden behandelt, bevor irgendetwas indexiert wird. Eine gescannte Seite ohne OCR ist ein leerer Index ohne sichtbaren Fehler, deshalb wird der Import zuerst an den echten Dokumenten getestet.

  2. 02 · chunk

    Chunking mit Struktur

    Überschriften bleiben bei ihrem Text, Überlappung schützt Satzgrenzen, Elterndokumente bleiben als Kontext erhalten. Die Chunk-Größe wird am Recall gemessen, nicht geraten.

  3. 03 · embed

    Einbetten und indexieren

    pgvector mit HNSW für die semantische Suche, ein tsvector-Index für exakte Codes und Namen. Metadaten tragen Mandant, Sichtbarkeit, Datum und Version je Chunk.

  4. 04 · filter

    Zugriff in der Abfrage durchsetzen

    Sichtbarkeit ist eine WHERE-Bedingung auf den Zeilen, bei jeder Anfrage ausgewertet. Ein Prompt ist eine Bitte, kein Riegel, Rechte hängen also nie am Modell.

  5. 05 · retrieve

    Hybrid-Suche

    BM25 und Vektoren laufen nebeneinander und werden per Reciprocal Rank Fusion zusammengeführt. Einigkeit zweier unabhängiger Verfahren schlägt einen einzelnen Spitzenplatz.

  6. 06 · rerank

    Kandidaten neu sortieren

    Ein Cross-Encoder liest Frage und Abschnitt zusammen und kürzt 50 Kandidaten auf 5. Das ist der Feinfilter, der Ranking-Probleme löst und den Kontext kurz hält.

  7. 07 · generate

    Erzeugen mit Schema und Zitaten

    Das Modell antwortet innerhalb eines Schemas mit einem Zitat je Aussage. Die stärksten Abschnitte stehen am Anfang und Ende des Kontexts, nie in der Mitte.

  8. 08 · verify

    Mechanisch prüfen

    Jedes Zitat wird wörtlich gegen die Quelle geprüft, jedes Feld gegen Pydantic-Regeln. Was durchfällt, gilt als unsicher und geht an einen Menschen statt raus.

  9. 09 · ship

    Tracen, bepreisen, ausliefern

    Jeder Lauf wird mit Prompt, Modellversion, Tokens, Kosten und Dauer aufgezeichnet und asynchron nach Langfuse geschrieben. Jeder Produktionsfehler wird ein neuer Eval-Fall.

Beweis im Code

Die Muster hinter jedem System, das ich ausliefere

Sieben Auszüge aus meiner Arbeitsweise. Extraktion, die nicht raten kann, Wiederholungen, die wissen, was sie wiederholen dürfen, Suche mit Zugriffsrechten in der Abfrage, eine Agentenschleife mit echten Bremsen, Auslieferungsmuster, Evals in CI und ein Image, das in eine Registry gehört.

from datetime import date
from pydantic import BaseModel, Field, model_validator
import anthropic


class Invoice(BaseModel):
    number: str = Field(pattern=r"^[A-Z0-9-]{4,}$")   # visible to the model in the schema
    issued: date
    due: date | None = None          # optional on purpose: a required field forces a guess
    total_gross: float = Field(gt=0)
    evidence: dict[str, str]         # verbatim quote per field, verified below

    @model_validator(mode="after")   # cross-field rule: invisible to the model, so it is in the prompt too
    def due_after_issued(self) -> "Invoice":
        if self.due and self.due < self.issued:
            raise ValueError("due before issued")
        return self


client = anthropic.Anthropic()


def extract(text: str) -> Invoice:
    msg = client.messages.parse(
        model="claude-haiku-4-5",          # smallest model that passes the eval, pinned
        max_tokens=2000,
        system=SYSTEM,                     # "never guess, set null, quote every value verbatim"
        messages=[{"role": "user", "content": text}],
        output_format=Invoice,
    )
    inv = msg.parsed_output
    missing = [k for k, quote in inv.evidence.items() if quote not in text]
    if missing:
        raise Unsure(inv, missing)         # routed to a person, never into the database
    return inv

Stack

Praxis und Kenntnisse, nichts darüber hinaus

Dieselbe Liste wie im Lebenslauf, so geteilt, wie ich es im Gespräch sagen würde. Praxis ist das, was ich täglich betreibe. Kenntnisse heißt, ich habe das Prinzip verstanden und kann die Werkzeuge einordnen und einsetzen.

Praxistäglich im EinsatzKenntnissePrinzip verstanden, Werkzeuge einordbar

KI-Entwicklung (LLM / GenAI)

Praxis

LLM-Integration über API

Anthropic Claude, OpenAI GPT, Google Gemini, Alibaba Qwen (qwen3-vl, qwen3.7), OpenRouter, Vision-Modelle, Whisper (Transkription)

Structured Outputs und Pydantic

Extraktion in erzwungene Schemata, JSON Schema, Tool Calling, Validierung, Halluzinationskontrolle, Streaming (SSE)

Prompt- und Context-Engineering

Systemprompts, Few-Shot, Chain-of-Thought, Prompt Caching, Prompt-Versionierung, temperature 0, gepinnte Modelle und Prompts

LLM-Pipelines in Produktion

mehrstufige Ketten, Kostendeckel je Aufruf und Tag, Token-Budgets, Antwort-Cache, Fehlerklassen-Register

Evals

Gold-Set und Hold-out, Regressionsmessung, Erkennung von Überanpassung, deterministische Prüfungen gegen LLM-as-a-Judge

Halluzinationsfreie Generierung

durch Architektur, das Modell beschreibt, der Code entscheidet, Slots nehmen nur Quell-IDs

Agentic Coding

Claude Code als tägliches Arbeitsmodell, Cursor, GitHub Copilot, Spezifikation, Review, Steuerung von KI-generiertem Code

Web-Extraktion und Browser-Automatisierung

Playwright, BeautifulSoup, Firecrawl, OpenCV und PIL für Bildprüfung

KI-Entwicklung (LLM / GenAI)

Kenntnisse

RAG

Chunking, Embeddings (OpenAI text-embedding-3, Voyage, Cohere, BGE, E5), Vektordatenbanken (pgvector, Qdrant, Weaviate, Pinecone, Milvus, Chroma, FAISS), Hybrid-Suche (BM25 und Vektor, RRF, Elasticsearch, OpenSearch), Reranking (Cohere, bge-reranker), ANN-Indizes (HNSW, IVFFlat), Recall@k, LlamaIndex

Dokumente und OCR

PDF-Parsing (Docling, Unstructured, PyMuPDF), OCR (Tesseract, AWS Textract, Azure Document Intelligence)

Agenten

Tool Calling, Agentenschleife, Leitplanken, Checkpointing, Human-in-the-Loop, Multi-Agent-Muster, MCP (Model Context Protocol, eigene Server mit FastMCP), LangGraph und LangChain, LlamaIndex, Pydantic AI, DSPy, Claude Agent SDK, OpenAI Agents SDK, CrewAI, AutoGen, Temporal

Observability

Langfuse, LangSmith, Arize Phoenix, Helicone, OpenTelemetry, Traces und Spans, Kostenmessung

Eval-Werkzeuge

promptfoo, Ragas, DeepEval, Braintrust

Guardrails

Guardrails AI, NeMo Guardrails, Llama Guard, PII-Maskierung (Presidio, NER)

Modellstrategie

Modell-Routing, Eskalation, Batch-API, Fine-Tuning gegen RAG

Fine-Tuning

LoRA und QLoRA, PEFT, SFT, Distillation, Einordnung Verhalten gegen Wissen

Cloud-KI

AWS Bedrock, Azure OpenAI, Google Vertex AI, Groq, lokale Modelle (Ollama, vLLM, Hugging Face, Llama, Mistral)

Demo-Oberflächen

Streamlit, Gradio

Low-Code-Automatisierung

n8n, Make, Zapier, Einordnung und Grenzen

Backend und Betrieb

Praxis

Python

Python 3, uv, ruff, Pydantic, argparse, asyncio, httpx, pytest

Docker

Dockerfile, Multi-Stage, Compose, non-root, festgenagelte Images

System

Linux und WSL2 (Ubuntu), Bash, Git und GitHub

E-Mail-Infrastruktur

SPF, DKIM, DMARC, Domain-Warm-up, Zustellbarkeitstests, CAN-SPAM

APIs und Dienste

REST, OAuth 2.0, Webhooks, Stripe, Resend, Twilio, Google APIs (Search Console, Gmail), IMAP und SMTP

Web und Mobile

TypeScript, Next.js, React, Tailwind CSS, React Native, Expo

Hosting

Hetzner, Contabo, Vercel, Cloudflare, Caddy

Backend und Betrieb

Kenntnisse

Auslieferung

FastAPI, SSE-Streaming, Health-Checks (Liveness und Readiness), Zustandslosigkeit

Nebenläufigkeit

async und await, Semaphore, Backoff mit Jitter, Idempotenz, Rate Limits

CI/CD

GitHub Actions, Cassette-Tests (VCR.py, pytest-recording)

Betrieb

Kubernetes, AWS (ECS und Fargate, S3, Lambda, IAM), Load Balancer (Nginx, Traefik), Message Queues (Celery, RabbitMQ, SQS)

Architektur

Hexagonal und Clean Architecture, Immutable Infrastructure

Datenbanken

PostgreSQL, MongoDB, MySQL, Redis, Supabase, SQLite

Cloud-Sicherheit

IAM, Least Privilege, Secrets-Management

Prompt Injection

direkt und indirekt, architektonische Abwehr, OWASP Top 10 für LLM-Anwendungen

Recht und Compliance (KI)

Kenntnisse

Datenschutz und Regulierung

DSGVO (AVV, Datenresidenz, Datensparsamkeit), EU AI Act (Risikoklassen), PII-Handling

Frühere Erfahrung

Praxis

Web und Java

Angular, Java, JavaScript (ca. 2016)

Ablauf

So läuft ein Projekt

Asynchron als Standard, auf Deutsch oder Englisch. Funktioniert gleich für eine Zehn-Stunden-Korrektur und ein mehrmonatiges Vorhaben.

  1. Briefing per E-Mail

    Sie schicken den Umfang schriftlich. Ich antworte an Werktagen innerhalb von 24 Stunden mit Rückfragen und mit den Fehlerbildern, die ich erwarte, bevor eine Zeile Code existiert.

  2. Schriftliches Angebot

    Vorgehen, Zeitplan und Stundenaufstellung, oder ein Festpreis für ein klar umrissenes Ergebnis. Modellkosten werden an echten Anfragen gemessen und getrennt ausgewiesen. Kein Kennenlerngespräch nötig.

  3. Wöchentliche Pull Requests

    Code landet in Ihrem Repository mit prüfbaren Diffs, Tests gegen aufgezeichnete Antworten und kurzen Architekturnotizen. Sie prüfen, ich arbeite ein.

  4. Ausliefern und übergeben

    Produktionsreif, dokumentiert, getract und überwacht, mit einer Eval-Suite, die Ihr Team erweitern kann. Keine Abhängigkeit von mir nach der Übergabe, außer Sie wünschen den laufenden Betrieb.

Mirwan Akaygün

Über mich

Zehn Jahre Software, zwei davon für Modelle gebaut

Seit 2016 in der Softwareentwicklung. Ausbildung zum Fachinformatiker für Anwendungsentwicklung bei Crealogix bei München, seit 2019 selbstständig mit eigenen Unternehmen und den Systemen dahinter, seit 2024 in Vollzeit im KI-Engineering. Mehrere eigene Produkte laufen unbeaufsichtigt rund um die Uhr.

Selbstständig in Deutschland gemeldet, Rechnung weltweit, auch offen für eine feste Remote-Stelle.

Häufige Fragen

Was liefern Sie konkret?+

Ein System, das läuft. Die Pipeline oder den Agenten, die Eval-Suite, die beweist, dass es funktioniert, das Tracing, das zeigt, was es kostet, und die Auslieferung, auf der es läuft. Kein Notebook und keine Demo.

Wie verhindern Sie, dass wir an einen Modellanbieter gebunden sind?+

Der Modellzugriff liegt hinter einer Schnittstelle im Code. Anthropic, OpenAI, Bedrock und ein Testdummy sind austauschbare Umsetzungen davon, ein Anbieterwechsel berührt eine Datei, nicht vierzig.

Landen unsere Daten in einem Modell?+

Nein. API-Verkehr wird nicht zum Training verwendet, und RAG funktioniert gerade deshalb, weil Dokumente bei jeder Anfrage frisch in den Prompt kommen und wieder verschwinden. Speicherfristen stehen im AVV, den wir für Ihren Fall gemeinsam lesen.

Wie schnell antworten Sie auf ein Briefing?+

An Werktagen innerhalb von 24 Stunden, mit Rückfragen, den Risiken, die ich sehe, einem schriftlichen Angebot und einem Zeitplan.

Wie rechnen Sie ab?+

Stündlich ab 110 EUR für laufende Arbeit, ein Tagessatz von 880 EUR für ganze Tage, oder ein Festpreis für ein klar umrissenes Ergebnis. Rechnung monatlich, zahlbar in 14 Tagen. Bei Festanstellung Gehaltsvorstellung auf Anfrage.

Unterschreiben Sie NDAs?+

Ja. NDAs, Rahmenverträge und Leistungsbeschreibungen sind Routine. Ich rechne als angemeldeter Selbstständiger in Deutschland mit EU-Umsatzsteuer-ID ab.

Nur remote?+

Ja, vollständig remote. Zeitzonen von Europa bis zur US-Ostküste funktionieren ohne Reibung.

Wem gehört der Code?+

Ihnen. Ihr Repository, Ihre Pipelines, Ihre Infrastruktur. Alles ist so dokumentiert, dass der nächste Engineer übernehmen kann.

Ein Projekt oder eine Stelle im Kopf?

info@akayguen.dev

Schicken Sie den Umfang oder die Stellenbeschreibung per E-Mail. Ich antworte an Werktagen innerhalb von 24 Stunden mit Rückfragen, den Risiken, die ich sehe, und einem schriftlichen Angebot. Kein Anruf nötig.