The STORM Method · lesson 2 of 4
The STORM Pipeline, Stage by Stage
STORM is implemented as four modules run in sequence:
KnowledgeCuration → OutlineGeneration → ArticleGeneration → ArticlePolishing
Knowledge curation covers persona discovery and simulated conversations (stages A–B below); the remaining modules map to stages C–E.
Stage A — Persona discovery
- FindRelatedTopic — the LM proposes topics related to the input topic.
- Structural exemplars — STORM scrapes the tables of contents of related Wikipedia articles. TOCs are cheap, high-signal summaries of how humans organize similar subjects.
- GenPersona — given topic + exemplar TOCs, the LM is prompted to "select a group of Wikipedia editors… each represents a different perspective" on the topic.
Two hard-coded behaviors:
- A default "Basic fact writer" persona is always prepended, guaranteeing baseline factual coverage even if generated personas are all exotic.
max_perspective=3by default — three generated personas plus the basic fact writer.
Stage B — Simulated conversations
Each persona runs its own conversation in parallel (compare subagents fan-out), capped at max_conv_turn=3 question/answer rounds. Each conversation pairs two roles:
| Role | LM tier | Job |
|---|---|---|
| WikiWriter | cheap | Asks exactly one question per turn, in persona; conversation history is compressed to keep context small |
| TopicExpert | grounded | Answers only from retrieved sources |
The TopicExpert is itself a three-step chain:
- QuestionToQuery — decompose the question into search-engine queries.
- Retrieve — run the queries, keep
search_top_k=3results each (see rag-fundamentals). - AnswerQuestion — synthesize an answer from those snippets under an explicit "do not hallucinate" grounding instruction; if retrieval comes back empty, the expert refuses to answer rather than improvising.
That refusal rule is the pipeline's core anti-hallucination valve: no source, no claim.
Stage C — Outline generation
Two passes:
- Draft outline from the LM's parametric knowledge alone — a skeleton of what the model already "knows" the topic should cover.
- Refine the draft using the Stage B conversation transcripts, injecting the retrieved specifics the parametric draft could not know.
Draft-then-refine outperforms outlining directly from transcripts: the parametric draft supplies global structure, the transcripts supply grounded detail.
Stage D — Article generation
- All sources collected during Stage B form a topic-local corpus.
- For each outline section, STORM runs semantic retrieval over that corpus (section heading as query) to gather the most relevant snippets.
- Sections are written in parallel, each grounded in its own retrieved snippets, with inline numeric citations (
[1],[2]) pointing back to sources.
Stage E — Article polishing
- Generate the lead section (the summary paragraph Wikipedia puts above the fold) — written last, once the full body exists.
- Deduplicate repeated content across sections, a natural artifact of sections being drafted independently.
Multi-LM cost strategy
STORM deliberately splits work across model tiers — the same economics that motivate prompt-caching and model routing elsewhere:
| Task | Tier | Why |
|---|---|---|
| Question asking (WikiWriter) | cheap/fast LM | High call volume, low difficulty per call |
| Outline, article, polish | strong LM | Low call volume, quality-critical |
Key terms
- KnowledgeCuration — STORM's first module: persona discovery plus retrieval-grounded simulated conversations that gather sources and Q&A transcripts.
- GenPersona — the step that generates editor personas from related-article tables of contents; prompt framing: "select a group of Wikipedia editors, each representing a different perspective."
- Basic fact writer — the default persona always prepended to the generated persona list to guarantee baseline factual coverage.
- WikiWriter — the cheap-LM conversational role that asks one persona-flavored question per turn over compressed history.
- TopicExpert — the grounded conversational role: QuestionToQuery → retrieve → AnswerQuestion, refusing to answer when retrieval returns nothing.
- QuestionToQuery — decomposition of a natural-language question into one or more search-engine queries before retrieval.
- max_conv_turn / max_perspective / search_top_k — the three headline knobs: turns per conversation (default 3), generated personas (default 3), and retrieved results per query (default 3).
- Draft-then-refine outlining — producing an outline from parametric knowledge first, then revising it against conversation transcripts.
- ArticlePolishing — the final module: write the lead section and deduplicate content repeated across independently-drafted sections.
See also
- storm-overview — thesis, results, failure modes
- storm-for-exams — the same skeleton retargeted at exam items
- rag-fundamentals — retrieval mechanics under the TopicExpert