Skip to content

AI Agents

Atlas

An agentic retrieval system that decomposes a question, routes across five source types and returns an answer with paragraph-level citations.

The problem

Single-shot RAG fails on questions that need more than one lookup. "How did our churn in EMEA compare to the forecast we set in Q2, and what did the support tickets say?" is three retrievals and a synthesis step, not one.

Architecture

A planner decomposes the query into sub-questions, a router picks the right source for each, and a synthesiser merges the results with citations preserved end to end.

class Plan(BaseModel):
    steps: list[Step]
    merge_strategy: Literal["synthesise", "compare", "rank"]

async def answer(question: str) -> Answer:
    plan = await planner.decompose(question)
    results = await asyncio.gather(*(route_and_fetch(s) for s in plan.steps))
    return await synthesiser.merge(question, results, strategy=plan.merge_strategy)

What actually moved the numbers

Change Accuracy Notes
Baseline single-shot RAG 61.2% 400-token fixed chunks
+ semantic chunking 68.9% Biggest single win
+ cross-encoder rerank 79.1% Cost +40 ms
+ query decomposition 88.3% Only helps multi-hop
+ citation verification 91.4% Rejects unsupported claims

The lesson: retrieval quality dominated. Two-thirds of the total gain came from changes upstream of the model.