Skip to main content
The debate arena lets you engage in structured 1v1 debates with AI opponents. Unlike the Q&A discussions, debates are focused, time-bounded exchanges with automatic synthesis at the end.

How debates work

Debates provide an immersive experience:
1

Choose your topic

Enter any topic you want to debate - from technology trends to philosophical questions
2

Meet your opponent

The system selects an AI expert opponent based on the topic’s domain
3

Exchange arguments

5 rounds of back-and-forth with real-time streaming responses
4

Receive synthesis

AI analyzes the debate and generates a comprehensive report with winner determination

Debate structure

Data model

interface Debate {
  id: string;
  topic: string;
  userProfile: {
    name: string;
    avatar: string;
    bio?: string;
  };
  opponentProfile: {
    name: string;
    avatar: string;
    bio?: string;
  };
  messages: DebateMessage[];
  synthesis?: DebateSynthesis;
  status: 'pending' | 'in_progress' | 'completed';
  userId: string;
  createdAt: Date;
  updatedAt: Date;
}

interface DebateMessage {
  role: 'user' | 'opponent';
  name: string;
  content: string;
  timestamp: number;
}

Status lifecycle

Initial state when debate is created but not yet started. Opponent is being selected.

Real-time streaming

Debates use Server-Sent Events (SSE) for real-time content delivery:

SSE event types

// Opponent initialization
{ event: 'init', data: { opponent: AIExpert } }

// Turn indication
{ event: 'start', data: { speaker: 'opponent' | 'user' } }

// Streaming content chunks
{ event: 'chunk', data: { content: string } }

// Complete message
{ event: 'message', data: { role, name, content, timestamp } }

// Synthesis generation started
{ event: 'synthesizing', data: {} }

// Final synthesis
{ event: 'synthesis', data: DebateSynthesis }

// Debate completion
{ event: 'done', data: {} }

// Error handling
{ event: 'error', data: { message: string } }
The streaming format enables character-by-character rendering for a natural conversation feel.

Client implementation

const eventSource = new EventSource('/api/debate');

eventSource.addEventListener('init', (e) => {
  const { opponent } = JSON.parse(e.data);
  displayOpponent(opponent);
});

eventSource.addEventListener('chunk', (e) => {
  const { content } = JSON.parse(e.data);
  appendToCurrentMessage(content);
});

eventSource.addEventListener('synthesis', (e) => {
  const synthesis = JSON.parse(e.data);
  displaySynthesisReport(synthesis);
});

eventSource.addEventListener('done', () => {
  eventSource.close();
});

Debate synthesis

After all rounds complete, an AI judge analyzes the debate:
interface DebateSynthesis {
  consensus: string[];        // Points both sides agreed on
  disagreements: string[];    // Core areas of disagreement
  winner: 'user' | 'opponent' | 'tie';
  winnerReason: string;       // Explanation of victory
  conclusion: string;         // Overall takeaway
  recommendations: string[];  // Suggested next steps or readings
}

Synthesis example

{
  "consensus": [
    "AI will significantly impact employment",
    "Regulation is necessary for safety"
  ],
  "disagreements": [
    "Timeline for AGI development",
    "Role of government vs. industry self-regulation"
  ],
  "winner": "opponent",
  "winnerReason": "Provided more concrete evidence and addressed counterarguments systematically",
  "conclusion": "Both perspectives highlight the complexity of AI governance. A balanced approach combining innovation with safety measures appears most viable.",
  "recommendations": [
    "Study the EU AI Act for regulatory frameworks",
    "Explore multi-stakeholder governance models"
  ]
}
The synthesis is generated by GPT-4o-mini analyzing the full debate transcript with structured prompting.

Debate configuration

Debates are configured with specific parameters:
  • Rounds: 5 exchanges (user speaks, opponent responds)
  • Response length: 100-200 characters per turn
  • Model: gpt-4o-mini for all responses
  • Temperature: 0.7 for natural variation
  • Timeout: 8 requests per minute rate limit
Debates cannot be resumed once completed. Each debate is a single-session experience.

Debate history

All your debates are saved and accessible:
// GET /api/debate/history
{
  debates: Debate[];  // Last 20 debates, sorted by newest
}
Each saved debate includes:
  • Complete message transcript
  • Synthesis report
  • Timestamps and metadata
  • Opponent profile
Review past debates to track your argumentation improvement and explore how different opponents approach the same topic.

Opponent selection

The system intelligently matches you with relevant opponents:
  1. Analyzes your debate topic keywords
  2. Scores AI experts based on expertise overlap
  3. Selects an expert with relevant background
  4. Injects their personality into debate responses
const opponent = selectBestOpponent(topic);
// Returns expert with highest relevance score

Use cases

Test arguments

Stress-test your ideas against expert counterarguments

Learn perspectives

Understand how different experts approach the same issue

Practice rhetoric

Improve your argumentation and debate skills

Explore topics

Deep-dive into subjects through dialectic exchange

Differences from Q&A discussions

FeatureDebatesQ&A Discussions
StructureFixed 5 roundsOpen-ended threads
Participants1v1 onlyMultiple users + experts
DurationSingle sessionOngoing
SynthesisAuto-generatedManual interpretation
FocusDialectic exchangeCollaborative knowledge

Next steps

AI experts

Meet the expert opponents

API Reference

Build with the Debate API

Build docs developers (and LLMs) love