Das Problem: Solo-Agent ohne Gegenpol. Wer mit einem einzigen LLM-Agenten arbeitet, kennt das Risiko: Halluzinationen, Familien-Bias, fehlende Schritte. Ein einzelnes Modell — egal wie gut — kann seine eigenen Schwächen nicht sehen.
Die naheliegende Lösung: ein zweites Modell dazustellen. Ein "Critic". Aber die meisten Setups scheitern an drei Stellen:
- Latenz und Kosten — jedes Review kostet Token und Wartezeit
- Trigger-Mechanik — wann feuert der Critic, wann nicht?
- Fallback — was, wenn der Critic selbst ausfällt?
Was wir gebaut haben: Council v3 (Single-Critic-Mode)
In HAL3000 läuft ein dreistufiger Aufbau:
┌──────────────────┐ spawn ┌──────────────────┐
│ HAL3000 │─────────────▶│ GLM-5.2:cloud │
│ minimax-M3 │ │ (Critic) │
│ Slot 1 │ │ Slot 2 │
└──────────────────┘ └──────────────────┘
Orchestrator Adversarial Reviewer
- HAL3000 (
minimax-M3:cloud) liefert die erste Antwort - GLM-5.2 (
Z.ai/GLM-5.2:cloud) reviewt kritisch - Beide laufen parallel auf zwei der drei Cloud-Slots der Ollama Pro Subscription
Warum Single-Critic und nicht Multi-Reviewer?
Ein Council mit drei oder vier Modellen klingt erstrebenswert, scheitert aber in der Praxis oft an denselben Punkten:
| Setup | Pro | Contra |
|---|---|---|
| 4 Reviewer | Maximale Diversität | Sprengt Ollama-Pro-Limits, hohe Token-Kosten |
| 2 Reviewer | Gute Coverage | Tie-Break-Logik nötig, doppelte Latenz |
| 1 Critic (Council v3) | Schlank, schnell, vorhersagbar | Echte Diversität nur durch andere Familie |
Die Entscheidung fiel auf GLM-5.2 als Critic. HAL3000 stammt aus der minimax-Familie (chinesisch-trainiert), GLM-5.2 aus Z.ai — eine andere Familie, andere Trainingsdaten, andere Bias-Achse.
Der Code: council.py
import asyncio
from openclaw import sessions_spawn
COUNCIL = [
{
"name": "GLMCritic",
"model": "ollama/glm-5.2:cloud",
"role": (
"Du bist GLM-5.2 Critic. Prüfe kritisch: logische "
"Widersprüche, faktische Fehler, fehlende Annahmen, "
"Familien-Bias. Sei direkt. Max 200 Token."
),
}
]
async def review(text: str, timeout: int = 25) -> dict:
member = COUNCIL[0]
prompt = f"{member['role']}\n\nZu prüfen:\n---\n{text}\n---"
return await asyncio.wait_for(
sessions_spawn(
task=prompt,
taskName=f"council_v3_{datetime.now():%H%M%S}",
model=member["model"],
runtime="subagent",
cleanup="delete",
),
timeout=timeout,
)
Echter asyncio.gather-Aufruf, kein Mock, automatischer Cleanup.
Die erste echte Kritik
Beim ersten Live-Test haben wir GLM-5.2 auf die eigene Architektur angesetzt. Ergebnis: 6/10 und fünf handfeste Befunde:
- Bias-Argument dünn — beide Modelle (minimax + GLM) sind CN-trainiert, teilen wahrscheinlich überlappende Datenmuster
- Hidden Cost — JEDER Output doppelt = Geldverbrennung ohne Trigger-Filter
- SPOF — kein Fallback bei GLM-Ausfall
- Selbstreferenz — ein Critic ist "noch ein LLM-Pass", nicht Meta-Sicherheit
- Slot-Math — sequentiell vs. parallel falsch gerechnet
Zwei der fünf Befunde wurden aufgenommen (Trigger-Filter, GPT-OSS-Fallback), drei abgelehnt — bewusst, weil die Architektur-Entscheidungen explizit getroffen wurden.
Was Council v3 NICHT löst
Ehrliche Einschränkung:
- Kein Meta-Critic — GLM-5.2 irrt auch, ohne zweite Review-Stufe
- Pseudo-Diversität — CN-vs-CN-Bias-Bruch ist schwächer als westlich-vs-CN
- Cost-Guardrail fehlt noch — Heartbeats und OK-Antworten würden den Critic unnötig triggern
- Kein automatischer Trigger — Council feuert bisher nur manuell
Was als Nächstes kommt
- Trigger-Filter — Critic nur bei High-Stakes (Code, Fakten, externe Writes)
- GPT-OSS-120b als Fallback — wenn GLM-5.2 nicht antwortet
- Council-Audit-Log — jede Kritik festhalten, Score-Trend über Zeit
Fazit
Council v3 ist kein Allheilmittel. Es ist ein einzelner Gegenpol — schlank, schnell, andere Familie. Wer mehr Diversität braucht, muss entweder tiefer in den Geldbeutel greifen (mehr Cloud-Slots, westliche Modelle) oder mit der Begrenzung leben, dass ein zweiter CN-trainierter Critic nur teilweise Entbiasing leistet.
Der wichtigste Schritt war am Ende nicht technisch, sondern disziplinierter: sich für einen Critic zu entscheiden und die Trigger-Mechanik später nachzuziehen — statt ein Ensemble zu basteln, das im ersten Last-Test zusammenbricht.
Wir helfen Ihnen dabei, kritische AI-Loops mit zweiten Modell-Familien abzusichern — von der Architektur bis zum adversariellen Review-Layer.
Beratungsgespräch anfragen →