AgentC Arena.
Een AI-debatarena.
Twee researcher-agents, twee debater-agents, een moderator, een jury. Instelbare persoonlijkheden. Vier battle-formats, van een formeel debat tot een roast. Het gaat minder over het onderwerp dan over wat er nodig is om een multi-agent-systeem coherent te laten argumenteren.
Vier formats, één multi-agent-vorm.
Elke mode is dezelfde graaf van agents met een andere prompt + scoringsrubriek. De arena behandelt "debate" en "roast" als varianten van hetzelfde structurele probleem: twee kanten, bewijs, rondes, een moderator, een jury. Verander de rubriek, verander het format — houd de engine.
| Mode | Format | Toelichting |
|---|---|---|
| Debate | Klassiek gestructureerd debat | Pro + Con bouwen op bewijs gefundeerde argumenten, de moderator beoordeelt elke ronde. |
| Rap Battle | Lyrische strijd met rijm + woordspel | Dezelfde multi-agent-vorm, een andere prompt + scoringsrubriek. |
| Roast | Comedy-roast | De agents leunen op toon; de moderator scoort op dichtheid van de punchlines in plaats van op degelijkheid. |
| Pitch Off | Startup-pitchwedstrijd | Pro pitcht het idee, Con pitcht ertegen; de jury kiest de term sheet. |
Zes rollen, één coördinator.
Een debatcoördinator draait de workflow. Sub-agents nemen de rollen hieronder op zich; elk is een ADK-agent met een eigen set instructies en een strak afgebakende toolbox, zodat het model niet afdwaalt.
| Rol | Wie | Wat het doet |
|---|---|---|
| Researchers (Pro + Con) | Twee funderende agents | Genereren het bewijs dat de debaters kunnen gebruiken. Accepteren bestandsuploads (PDF / DOCX / TXT) en injectie van eigen brondata, zodat het debat gefundeerd kan zijn op je eigen corpus, niet alleen het publieke web. |
| Debaters (Pro + Con) | Twee argumenterende agents | Nemen het onderzoek en verdedigen de eigen kant. De persoonlijkheidsknoppen werken hier — hetzelfde bewijs, een andere stem. |
| Moderator | Beoordelaar + commentator per ronde | Leest de ronde, scoort hem op de actieve rubriek (verandert per battle-mode), levert commentaar voor het live transcript. |
| Judge | Scheidsrechter aan het einde van het debat | Maakt de eindsamenvatting en wijst de winnaar aan. Ondersteunt drempels voor een vroege winnaar, zodat een eenzijdige ronde het debat kan beëindigen zonder extra beurten te verbranden. |
Drie schuifregelaars. Hetzelfde bewijs, een andere stem.
Persoonlijkheid leeft op de debater-laag, niet op de researcher-laag. De Pro- en Con-debaters nemen hetzelfde onderzochte bewijs en verdedigen het anders, afhankelijk van drie knoppen. Dat is de schoonste reden waarom de rap-battle-mode überhaupt werkt: het onderliggende bewijs is degelijk; de toon laat het klinken als een rap.
| Knop | Bereik | Uitersten |
|---|---|---|
| Expertise | 1–10 | Beginner ↔ argumentatie op promovendusniveau |
| Toon | 1–10 | Beleefd / klinisch ↔ agressief / gepassioneerd |
| Breedsprakigheid | 1–10 | Bondig ↔ uitvoerig |
De minder voor de hand liggende beslissingen.
- De workflow ligt strikt vast
- Initializer → Research Phase → Debate Loop → Final Judge. De debater-agents argumenteren niet zonder onderzoek binnen bereik; dat wordt afgedwongen bij de coördinator, niet alleen gehoopt bij de prompt.
- Validatie op minimuminhoud aan de grens
- Minimaal 100 tekens voor onderzoek, 50 voor argumenten. Witruimte wordt weggesneden en achteraf gevalideerd, zodat een model dat een lege string teruggeeft niet stilletjes een ronde laat vallen.
- Sessietoestand op één plek
- Alle debattoestand leeft in `DebateSession`-objecten die worden beheerd door een `SessionManager`-singleton. Het rondenummer wordt opgehaald via `get_debate_state()` — beide debaters raadplegen dezelfde bron van waarheid voordat ze argumenteren.
- WebSocket als live oppervlak
- Elke gebeurtenis — onderzoek dat binnenkomt, een argument dat landt, scores van de moderator, het oordeel van de jury — stroomt over WebSocket, zodat de arenapagina rendert terwijl het debat gebeurt, niet erna.
- Cloud Run-timeout van 30 minuten
- Lange debatten schieten ruim voorbij de standaardtimeout van 5 minuten; de deploy is ingesteld op maximaal 30. Dat ruimere budget dan standaard is de dragende verandering die meerderrondeformats haalbaar maakt.
- Injectie van eigen brondata
- Naast bestandsuploads accepteren de researchers gestructureerde payloads met eigen bronnen, zodat een bedrijfsbriefing of een privécorpus de ronde kan funderen zonder de bron aan het publieke web bloot te stellen.
Wat eronder draait.
- Google ADK — het agent-framework. De debatcoördinator + sub-agents zijn allemaal ADK-constructies; tool-resolutie en het afbakenen van instructies per agent zijn de dragende primitieven.
- Gemini 2.5 Flash, 2.5 Pro, 3 Pro Preview — Flash voor het funderen en de antwoorden per ronde, Pro en 3 Pro Preview (met thinking modes) voor de zwaardere redeneerstappen bij het oordelen.
- FastAPI + WebSocket — Python-backend. De arena rendert live over WebSocket; overgangen tussen rondes, binnenkomend onderzoek en commentaar van de moderator stromen allemaal als events binnen.
- Vanilla JS-frontend — geen framework aan de paginakant. Het setup-formulier post de configuratie, de arenapagina abonneert zich op de WebSocket en rendert events zodra ze binnenkomen.
- Google Cloud Run — serverless container, timeout van 30 minuten, automatische deploys via GitHub-push.
Argumenteren is een vaardigheid waarin ik modellen beter wil maken, geen gimmick. De arena bestaat omdat de multi-agent-vorm (researcher / debater / moderator / jury) generaliseert: zodra je hem hebt, kun je de rubriek omwisselen en compleet andere formats verkennen — strategische briefing, boardroom-debrief, post-mortem — op dezelfde engine. Dat is hetzelfde instinct als bij Luminary: scheid de engine van de prompt die hem aanstuurt, zodat de engine op de volgende vraag kan worden gericht zonder de orkestratie te herschrijven.