Why are agentic systems shifting toward lazy retrieval via search tools?
Eager retrieval fires one query at turn start and guesses what the question needs; lazy retrieval lets the model issue queries during reasoning so context grows on demand, which is what multi-hop questions actually
Imagine asking a research assistant to answer a complicated question. The eager approach is to hand them one folder of articles at the start and say go. The lazy approach is to let them walk to the library, grab a book, read it, decide what to look up next, and walk back for more. For a simple fact-lookup the folder is fine. For a question like which papers cited the same theorem as this one, the assistant needs to walk back to the library several times because each visit tells them what to look for next. Lazy retrieval lets the model do that walking. The cost is a few extra trips; the benefit is finding things one trip could never have found.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Retrieval used to happen exactly once per turn, before the model saw anything. That shape works for single-hop questions and breaks for everything else. The 2026 trend is to let the model decide when retrieval happens, to expose search as a tool the model calls during reasoning. This card walks through what eager retrieval cannot do, what lazy retrieval costs, and the hybrid pattern most production research-style products have settled on.
The eager-retrieval information problem
Eager retrieval runs once at turn start. The system takes the user's question, derives a query (often a paraphrase or an LLM-rewrite), runs the retriever, and concatenates the top-k chunks into the context block. The model only sees the question after the chunks have already been chosen.
This pipeline assumes the right chunks can be predicted from the surface query. For single-hop factual questions that assumption is fine. For multi-hop questions it is not.
Why multi-hop breaks the assumption
A multi-hop question is one whose answer depends on facts that are themselves discovered during reasoning. 'Which papers cited the same theorem as paper X' decomposes into: identify paper X, identify the theorem it relies on, search for other papers citing that theorem. The second-hop query,'papers citing theorem T', cannot be issued at turn start because the system does not yet know T.
Eager pipelines try to work around this with query expansion (paraphrasing the surface question into several variants and retrieving for each). Expansion helps when the right chunk uses different vocabulary than the query, but it does nothing for genuine multi-hop, because the second hop is not a paraphrase of the first.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
search_tool = {
"name": "search_kb",
"description": "Search the knowledge base. Returns top-5 chunks with [S<n>] tags.",
"input_schema": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
},
}
# Lazy retrieval loop (Anthropic SDK shape)
def run_lazy(user_question: str, max_iterations: int = 8):
messages = [{"role": "user", "content": user_question}]
for _ in range(max_iterations):
resp = client.messages.create(
model="claude-opus-4-7",
tools=[search_tool],
messages=messages,
)
if resp.stop_reason != "tool_use":
return resp.content # final answer
for block in resp.content:
if block.type == "tool_use":
result = kb.search(block.input["query"])
messages.append({"role": "assistant", "content": resp.content})
messages.append({"role": "user", "content": [
{"type": "tool_result", "tool_use_id": block.id, "content": result}
]})Real products, models, and research that use this idea.
- OpenAI's Deep Research (released 2025, default in ChatGPT Pro 2026) runs an iterative search and read loop with the model calling web search as a tool, sometimes for dozens of rounds.
- Anthropic's Claude 4.7 research mode and Projects feature expose file_search and web_search as tools the model invokes during reasoning.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow do you bound the cost of lazy retrieval in production?
Cap max iterations per turn (8-15 is typical), set per-call token budgets, monitor tool-call distributions, and alert on outliers.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Treating eager and lazy retrieval as either-or rather than per-workload. Single-hop fact lookups want eager; multi-hop research wants lazy. Many production systems do both.
60 second bullets to scan on the way to the call.
Distinguish eager retrieval (fires before model thinks) from lazy retrieval (model decides when to fire)
Explain why multi-hop questions break eager retrieval
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.