Parallax Agents Society

Inspiration

  • Professors are drowning in AI-generated cold emails that look personalized but aren't. No tool helps them see through the noise from their side of the inbox.
  • Every admissions tool serves the applicant. Parallax flips the vantage point: the professor's own publications and declared capacity become the yardstick every candidate is measured against.

What it does

  • Parallax is a reactive triage tool for professors: inbound student outreach email is debated by a society of AI agents against the professor's own publications and lab capacity, returning a grounded decision with references, which I refer to as receipts.
  • A cheap Gatekeeper pass (qwen-turbo) triages every email first, extracting a structured candidate profile and verifiable claims from the body and attached CV, and rejecting mass-mail spam before it costs a debate. Rejections land in a reviewable "Declined" queue, never a silent drop.
  • Survivors go to a moderator-driven debate. The Gatekeeper opens by explaining why it let the candidate through; a Research-Fit Advocate, an Authenticity Auditor, and a Capacity & Funding Assessor then take sequential turns over one shared transcript, each rebutting or conceding what was just said, while a Moderator routes the floor. An Arbitrator judges the full transcript once at the end and drafts the reply.
  • The debaters have names and personas and address each other and the professor by first name, so the transcript reads like a real admissions panel rather than role labels reciting findings:
Persona Role
Kumar Gatekeeper
Leslie Research-Fit Advocate
Karen Authenticity Auditor
Lami Capacity & Funding Assessor
Dumbledore Arbitrator
  • Free-text custom instructions set at onboarding steer the society (e.g., "I want only theory students, no pure-applied ML"). The professor reviews the decision and approves, overrides, or edits the drafted reply no outbound email sends without explicit human approval.
  • Every debate is persisted as a replayable trace: turns, receipts, cross-references between agents, and every tool call each agent made.
  • The replay plays with voice. After a debate, each turn gets a short spoken line, synthesized with a distinct Qwen3-TTS Flash voice per persona so the professor can watch and hear the society deliberate instead of reading a transcript.

How we built it

  • The debate design is grounded in two papers, one of which is indexed in the demo corpus: ChatEval (Chan et al., 2024) a panel of debating LLMs beats any single LLM judge and Liang et al. (2024), which introduced the judge-driven Multi-Agent-Debate (MAD) framework and named the Degeneration-of-Thought (DoT) failure mode. Debaters argue the same candidate, rebutting or conceding; an Arbitrator judges once at the end. Never a supervisor splitting sub-tasks.
  • The engine is a LangGraph StateGraph running MAD's judge-driven debate: a Moderator (qwen3.6-plus) routes the floor to whichever debater can best pressure-test the last turn, while debaters take sequential turns over one append-only transcript. Any debater may PASS, the Moderator can only end once every voice has been heard, and a hard turn cap guarantees termination of the structural defense against DoT.
  • Qwen Cloud, end to end one API key, no non-Qwen model anywhere:
Component Model / service
Triage qwen-turbo
Debaters + Moderator qwen3.6-plus
Arbitrator qwen3.7-plus (via langchain-qwq ChatQwen, structured output + tool calling)
Corpus embeddings text-embedding-v4 into pgvector
Retrieval re-sort qwen3-rerank
Debate replay audio qwen3-tts-flash
Live web lookups DashScope native enable_search
  • Custom Agent Skills follow the open SKILL.md standard with progressive disclosure: claim-verification and capacity-math ship as skill folders whose full procedure loads only when an agent invokes them.
  • Agents ground themselves through typed tools, each recorded on the turn as an AgentAction so the replay shows how each agent grounded itself: RAG over the corpus (RETRIEVAL), the two skills (SKILL), and a live student-visa/mobility lookup over an in-process MCP tool bus (MCP).
  • The backend is hexagonal (ports & adapters): the debate contract lives in the pure domain layer; LangGraph and every Qwen call live in adapters. A compliance guard refuses to construct a client pointed at any non-Qwen-Cloud host, enforced by a test that greps the codebase for stray endpoints.
  • Debate audio is generated off the critical path: a post-debate step reads the saved trace, compresses each turn into a spoken line, and synthesizes it so correctness never depends on TTS, and a synthesis failure degrades to a silent beat rather than breaking the run. The replay stays a deterministic function of one playhead clock, with the audio element slaved to it so scrub/step/speed keep working.

Challenges we ran into

Challenge Fix
qwen3-rerank has no OpenAI-compatible surface the compatible-mode/v1/reranks endpoint 404s, silently emptying every retrieval. Called DashScope's native rerank service on the main host instead.
Rerank has one scarce free-quota model and ran on every retrieval ~10 requests per debate. Cut to ≤1: rerank only the baseline retrieval, skip short queries, cache within a debate.
Thinking mode collides with three features: web search rejects it (HTTP 400), structured output intermittently returns empty, and it defaults ON for flash models a 4k–6k-token hidden stream per turn (95–173s each). Disabled thinking for the visa lookup and all debate roles; the Arbitrator retries structured output. Latency and cost collapsed.
The debate optimized for internal consistency over ground truth: the Advocate could always build a corpus-to-candidate bridge, the Auditor only checked if a quote existed, and the Arbitrator saw only the transcript so it summarized instead of scoring. Grounded Advocate/Auditor scope in what the candidate actually demonstrates; gave the Arbitrator the raw profile/claims plus a mandatory met/unmet scorecard where an unmet hard requirement forces a decline.
One-point-per-turn continuation ([CONTINUES]) risked an unbounded debate ~9-turn debates could spiral past 30 round-trips, invisibly (logs were httpx "200 OK" noise). Capped continuations, decoupled the turn ceiling from the continuation budget, and routed the worker through one loguru sink emitting a per-turn narrative with token/latency and termination reason.
Re-sending the full transcript every turn re-billed one verbose 4,700-token turn on every later prompt quadratic growth to ~138k tokens per debate and re-primed the "live conversation" framing, so a speaker fabricated an interlocutor ("Karen's right…" before Karen spoke). Capped per-turn output, truncated receipt excerpts in the re-sent transcript (originals kept for replay), and prepended a "you are continuing your own statement" directive.
File uploads on the Alibaba ECS instance failed with the HTTP error 413 (request entity is too large) this was caused by the nginx reverse proxy default limit of 1mb. Set the nginx conf client_max_body_size to 25m so a 1 MB PDF plus multipart overhead cannot trip a 413.
  • Keeping the domain layer framework-free meant a hard line: the NegotiationEngine contract depends only on domain models; LangGraph, the tool loop, and prompt rendering live behind it in an adapter.
  • Naming mattered: a debate society (everyone argues the same question, a judge resolves) kept collapsing into task collaboration (a supervisor splitting sub-tasks). We wrote the distinction into the engine's contract.

Accomplishments that we're proud of

  • Every agent claim carries a receipt traced to the professor's actual indexed publications the system cannot hallucinate alignment, only surface or refute it.
  • Every mid-argument tool invocation is captured on its turn (kind, name, arguments, source), so the replay shows how each agent grounded itself, not just what it said.
  • A rejected email is never silently dropped: triage rejections synthesize an overridable decline the professor can reverse in one click.
  • We measured the society against a strong single-agent control same Qwen model, same RAG tool over the same corpus, explicit chain-of-thought, an equal per-call token budget, and the society at real production depth on 19 hand-labeled cases spanning fabricated citations, inflated alignment, capacity mismatches, and adversarial contradictions:
Reliability Metric Single-Agent Baseline Parallax Agent Society
Overall Accuracy 84% (16/19) 90% (17/19)
High-Risk Failures (False Accepts) 2 (Dangerous) 1 (50% Risk Reduction)
Auditability Black-box output Full Debate Transcript & Receipts
Human Labor Efficiency Low (Requires 100% manual audit) High (Review by exception/skim)
Compute-to-Confidence Ratio 1x (Cheap but risky) 5.9x (Investment in correctness)

The "Efficiency Gain" of the Society: While the Society uses more tokens, it solves the "Trust Threshold" problem. An 84% accurate baseline requires the Professor to manually read every inbound email to find errors. By implementing Sequential Rebuttals and Conflict Resolution, Parallax achieved a 50% reduction in catastrophic False-Accepts (cases where a student with fabricated credentials would have been invited).

In a high-stakes academic environment, the "Efficiency" of Parallax is measured in the hours of human auditing saved, as the Society handles the "Critical Pressure Testing" that a single prompt cannot reliably sustain.

What we learned

  • Multi-agent debate needs a hard termination condition from day one. Without a round cap and a decisive arbitrator, the Degeneration-of-Thought failure mode is a real production risk, not a theoretical one.
  • We assumed cadence could stay fixed (simultaneous rounds) with emergence living in the argument content, but debaters speaking simultaneously are blind to each other within a round and never actually respond. Real rebuttal required a moderator-routed sequential debate where each agent sees the turn it is answering.
  • Structured output and free-form tool-calling pull in opposite directions. Splitting them, tool-loop for debaters, structured output for Gatekeeper and Arbitrator verdicts kept both reliable.

What's next for Parallax

  • Integrating with email providers
  • Qwen-VL over the figures and diagrams in the professor's own papers, so the corpus includes what the text alone misses.
  • Potentially partnering with professors from multiple universities.

Built With

Share this project:

Updates