Lane-Arena

English | Deutsch

Alle Ausgaben der Lane-Arena · Präsentation · PDF

Lokales Modell gegen Claude und GPT: ein Pilot mit echten Tickets

Ein lokal betriebenes Open-Weight-Modell tritt gegen fünf Cloud-Modelle an: Claude Haiku 5.5, Sonnet 5.5 und Opus 5.5 sowie GPT-6.1-Sol und GPT-6-Luna. Getestet wurde auf zwei echten, offenen Tickets, einer mittleren und einer schweren Aufgabe. Jeder Teilnehmer arbeitet in einem eigenen, isolierten Repository-Klon. Jede Lösung prüft ein frischer Opus-Reviewer, der nicht erfährt, von wem sie stammt. Zusätzlich laufen versteckte Tests.

1. Ergebnis auf einen Blick

Spielregel: Bestanden heißt, der blinde Review liefert accept oder accept_with_notes. Jeder Teilnehmer hat höchstens 3 Runden.

Aufgabe Teilnehmer Bestanden in Runde Implementierungszeit (Summe) Implementierungskosten Review-Kosten
Mittel Lokales Modell (Qwen3.8-Flash-Next) 1 353 s ~0 (lokal) $0.25
Mittel Claude Haiku 5.5 1 57 s $0.01 $0.26
Mittel Claude Sonnet 5.5 1 32 s $0.07 $0.22
Mittel Claude Opus 5.5 1 83 s $0.31 $0.25
Mittel GPT-6.1-Sol 1 75 s $0.085* $0.35
Mittel GPT-6-Luna 1 33 s $0.007* $0.35
Schwer Lokales Modell (Qwen3.8-Flash-Next) 1 491 s ~0 (lokal) $0.64
Schwer Claude Haiku 5.5 2 369 s $0.14 $1.24
Schwer Claude Sonnet 5.5 3 167 s $0.29 $1.82
Schwer Claude Opus 5.5 1 126 s $0.39 $0.55
Schwer GPT-6.1-Sol 2 163 s $0.28* $1.08
Schwer GPT-6-Luna nicht bestanden (3 Runden) 308 s $0.05* $2.16

* Die GPT-Modelle liefen über die Codex CLI mit einem ChatGPT-Abo. Die Werte sind hypothetische API-Listenpreise, aus den protokollierten Token-Zahlen berechnet (siehe Kapitel 7).

Verdikte je Runde (Findings nach Schweregrad):

Aufgabe / Teilnehmer Runde 1 Runde 2 Runde 3
Mittel / Lokal accept_with_notes (2 low)
Mittel / Haiku accept_with_notes (2 low)
Mittel / Sonnet accept_with_notes (5 low)
Mittel / Opus accept_with_notes (3 low)
Mittel / Sol accept_with_notes (3 low)
Mittel / Luna accept_with_notes (5 low)
Schwer / Lokal accept_with_notes (1 medium, 3 low)
Schwer / Haiku fix_required (2 medium, 3 low) accept_with_notes (3 low)
Schwer / Sonnet fix_required (2 medium, 4 low) fix_required (1 high, 3 medium, 2 low) accept_with_notes (1 medium, 5 low)
Schwer / Opus accept_with_notes (3 medium, 1 low)
Schwer / Sol fix_required (2 medium, 3 low) accept_with_notes (1 medium, 3 low)
Schwer / Luna fix_required (2 medium, 3 low) fix_required (1 medium, 4 low) fix_required (1 medium, 3 low)

Alle versteckten Tests waren in jeder Runde für jeden Teilnehmer grün.

2. Setup

2.1 Teilnehmer und Aufrufe

Teilnehmer Aufruf
Lokales Modell opencode run --format json gegen einen lokalen llama-server
Claude Haiku, Sonnet, Opus 5.5 claude --bare -p (Claude Code, headless)
GPT-6.1-Sol, GPT-6-Luna codex exec (Codex CLI 0.162.1, headless)

2.2 Das lokale Modell im Detail

Bereich Stand
Hardware Mac Studio, Apple M5 Max, 18 CPU-Kerne, 40 GPU-Kerne, 128 GB Unified Memory. Dient nur als Inferenz-Server.
Modell Qwen3.8-Flash-Next: MoE mit 125B Parametern, davon 6B aktiv, als 4-Bit-GGUF (UD-IQ4_XS, 93,7 GB).
Spekulatives Decoding MTP-Kopf (Q8_0, 4,1 GB), bis zu 3 Draft-Token
Server llama.cpp mit Metal, 262k Kontext, 2 Slots, Flash Attention.
Sampling temp 1.0, top_p 0.95, top_k 20, min_p 0.0
Thinking / Effort Thinking an, Effort per Template-Default xhigh (siehe Kapitel 6)
Agent opencode, Kontextlimit 235k, Output-Limit 16k Token

Durchsatz, live gemessen (Thinking an, MTP an, ohne Prompt-Cache, je 2 Läufe):

Messung Prompt-Token Prefill Generierung MTP-Akzeptanz
kurzer Prompt, 400 Token Ausgabe 66 (nicht aussagekräftig) 57,4 / 53,6 tok/s 47 % / 41 %
16k-Prompt (Quellcode) 16 259 826 / 827 tok/s (~20 s) 59,3 / 54,7 tok/s 54 % / 48 %

Frühere Messungen ohne MTP und ohne Thinking: Generierung etwa 50 tok/s, Prefill 894 (16k), 862 (64k) und 828 tok/s (128k).

Was das für die Laufzeiten heißt: Ein Agent-Lauf ist eine Kette von Tool-Aufrufen mit wachsendem Kontext. Das lokale Modell brauchte 30 Schritte (mittel) bzw. 43 Schritte (schwer). Jeder Schritt kostet Prefill plus Generierung inklusive Thinking. Das erklärt die 6 bis 8 Minuten pro Lauf.

2.3 Ablauf

Eine Runde besteht aus Implementierung, Sicherung des Diffs, Verifikation mit versteckten Tests und blindem Review. Alle Läufe liefen strikt nacheinander, nie zwei gleichzeitig. In Fix-Runden bekommt derselbe Teilnehmer den unveränderten Brief plus die Findings aus dem vorherigen Review, aber nur die mit Schweregrad critical, high oder medium.

3. Die Aufgaben und warum diese

Beide stammen aus einem echten Ticket-Pool offener Aufgaben.

Mittel: rollenabhängige Bedienelemente (Frontend, React/Next.js)

Schwer: reservierte Benutzernamen (Backend, Express/Prisma, Security)

4. Isolation

Maßnahme Umsetzung Grenzen
Eigener Klon pro Teilnehmer git clone --shared auf denselben fixen Basis-Commit, eigene Abhängigkeiten pro Klon Die Objektdatenbank wird lesend geteilt, geschrieben wird nur im Klon.
Kein Push möglich Remote in jedem Klon entfernt, der Brief verbietet Commit, Push und neue Remotes Keine Betriebssystem-Sandbox. Ein Teilnehmer hätte absichtlich einen Remote anlegen können (nicht beobachtet).
Kein geteilter Kontext Keine MCP-Server, keine Hooks, kein Memory bei allen Teilnehmern. Keine Instruktionsdateien, außer einer globalen Regel zu Chat-Template-Tokens beim lokalen Modell. Die Repos selbst haben keine Agent-Instruktionsdateien.
Ausbrüche aus dem Klon Permission-Bypass für alle Beobachtet: ein Teilnehmer schrieb einmal eine Datei nach /tmp, einer zog per npx einmal ein Paket aus dem Netz. Beides ohne Einfluss aufs Ergebnis. Die Isolation ist "eigener Klon ohne Remote", keine Sandbox.
Blinder Review Klon und Review-Auftrag tragen nur ein Zufalls-Label Teilblind: Der Stil kann den Teilnehmer verraten. Der Reviewer verändert den Klon nachweislich nicht (Diff-Vergleich nach jedem Review).
Versteckte Tests werden erst nach der Diff-Sicherung in den Klon kopiert, laufen dort und werden danach wieder gelöscht

5. Briefs, Tests und Protokolle

6. Reasoning-Effort

Methode: Die Aufrufe wurden gegen einen lokalen Proxy wiederholt, der den Request-Body mitschneidet. Für das lokale Modell kamen Direkt-Requests an den Server und ein Blick ins Chat-Template dazu.

Rolle Tatsächlicher Effort
Claude Haiku, Sonnet, Opus (Implementierung) medium, adaptives Thinking
Claude Opus (Review) medium
Lokales Modell xhigh (Template-Default, Thinking an)
GPT-6.1-Sol Modell-Default low
GPT-6-Luna Modell-Default medium

7. Zeit und Kosten

8. Beobachtungen

9. Fazit

Was die Daten zeigen:

  1. Die mittlere Aufgabe bestanden alle sechs Teilnehmer in Runde 1. Auf der schweren Aufgabe schafften das nur das lokale Modell und Opus. Haiku und GPT-6.1-Sol brauchten zwei Runden, Sonnet drei, GPT-6-Luna schaffte es in drei Runden nicht.
  2. Das lokale Modell ist gegenüber Runde 1 der anderen 3,9- bis 11-mal langsamer (bis zur Abnahme der schweren Aufgabe 1,3- bis 3,9-mal) und verursacht praktisch keine API-Kosten. Die Kosten einer Aufgabe bestimmt vor allem der Review, also die Zahl der Runden.
  3. Nur die Lösung des lokalen Modells hält den bestehenden Datenbank-Test grün, ohne ihn zu ändern.
  4. Das lokale Modell lief mit dem höchsten Reasoning-Effort. Ein Teil seines Abschneidens kann daran liegen.

Was die Daten nicht zeigen:

Einordnung: Für mittlere Aufgaben ist ein lokales Modell auf guter Hardware ein ernstzunehmender Implementierer: In diesem Pilot war es langsamer, aber nicht schlechter. Für sicherheitskritische Aufgaben reicht ein einzelnes gutes Ergebnis nicht, um die Cloud-Modelle zu ersetzen. Ein nächster Lauf sollte mehr Aufgaben umfassen, den Effort für alle gleich setzen, zwei Reviews pro Lösung fahren und versteckte Tests verwenden, die auch die weichen Kanten prüfen.

Beide Aufgaben wurden anschließend auf Basis der Pilot-Lösungen regulär ausgeliefert, nach einem weiteren Review und Nacharbeit, und laufen in Produktion.