Apply to my task
arXiv:2608.10963 ★ 84 Aug 11, 2026

REAP: Separate Recalling a Fact From Formatting the Answer So the LLM Doesn't Get Confused and Hallucinate

Key result

Ask a model in one request to recall a complex fact and immediately output strict JSON, and it mixes up the two tasks and drops half the list. REAP lets you get complete lists of facts and accurate numbers from an LLM without searching the internet, just through the right request structure. The secret: recalling and formatting go into two separate steps, and before answering, the model first checks whether the question even applies. The result: a list of award winners over 100 years comes back almost complete, not half-finished.

01

TL;DR

REAP is a technique for getting accurate facts out of an LLM without the internet or search. It splits the process into two separate steps: first the model "recalls" the answer in free text through a chain of thought, then a separate request converts it into the format you need (a list, JSON, a table).

When you ask a model in a single request to both recall a complex fact and immediately output it in a strict format, it gets confused. For long lists (every winner of an award over 100 years) it recalls only half. For quantitative facts (a stadium's capacity, an island's area) it mixes up similar objects: instead of the small stadium, it gives the capacity of a big neighboring one with a similar name. And if the fact doesn't exist at all (the person is alive, the company is private), the model makes up an answer instead of saying "I don't know."

The fix is to break the request down by question type: for long lists, ask in chunks (by decade, by compass direction); explicitly tell the model to first check whether the question even applies, and return an empty answer if the fact doesn't exist; and for numbers, check against a reasonable range before the final answer. The format (JSON) is required only at the very end, as a separate step.


Method Blueprint

STEP 1 (recall, free text, may be several sub-queries):
  → Applicability check: "is the person alive? is the company public?" → if not, the answer is "empty"
  → Query decomposition: by year / by compass direction / by category → draft list of facts
  → For numbers: check against a reasonable range of values

STEP 2 (formatting, separate request):
  → Convert the draft into the final format (JSON/table) without losing data

Example in Action

Task: You're writing a piece about the Booker Prize and want the full list of winners since 2006, but in a single request ChatGPT usually "loses" some of the years.

Prompt:

You are an expert on contemporary English-language fiction.

Step 1: Recall the Booker Prize winners for 2006–2012. 
For each year, give the author and the book. If you're not sure, say 
"not sure" outright; don't make things up.

[after the answer, repeat for 2013–2018]
[after the answer, repeat for 2019–2024]

Step 2: Combine all three lists into a single table: year | author | book.

Result: For each time slice the model gives a separate draft list in plain text, flagging uncertainty wherever it doesn't remember exactly. After merging, you get a table that's noticeably more complete than what you'd get from "list every Booker Prize winner" in one go, because focusing on a narrow slice forces the model to "scan" it more carefully.


Why It Works

A model has limited "attention" per answer. If you ask it to recall lots of facts and stick to a strict format at the same time, part of that budget goes to formatting, and recall (how complete the remembered set is) drops.

A model recalls facts well when the question is narrow and specific: "who won the prize in 1985-1995" works better than "list every winner over 100 years."

The method removes the format requirement from the recall stage and slices one big question into small, targeted sub-queries. On top of that, an explicit "does this question apply" check before answering is a direct way to cut hallucinations without relying on the model to "realize" on its own that it doesn't know the answer.

Control knobs: - Number of decomposition sub-queries → increase it for very long lists, drop it for simple questions - The phrase "if you're not sure, write 'not sure'" → reduces fabrication but may leave more blanks; use it when accuracy matters more than completeness - Plausibility range for numbers → set your own ("city population between X and Y thousand") for the specific task - Splitting "recall" and "format" into two requests → skip it if the task is simple and short, to save time


Prompt Template

Step 1. Applicability check
Before answering, check: {criterion for whether the fact exists, e.g. "is the person alive" 
or "is the company public"}. If the fact doesn't exist or you're not sure, 
write "NO DATA" and don't invent an answer.

Step 2. Extraction in parts
Topic: {query topic}
Split the question into {N} parts by {decomposition criterion: years/directions/categories} 
and recall the facts for each part separately. Write in free text, 
and flag uncertainty explicitly.

Part 1: {range 1}
Part 2: {range 2}
...

Step 3. Plausibility check (for numbers)
If the answer is a number, compare it with an object of a similar magnitude. 
Expected range: {range}.

Step 4. Formatting
Combine all the collected facts into {output format: table/JSON list} without losing data.

Fill in: {query topic} is what exactly you're recalling, {criterion for whether the fact exists} is the condition under which there is no answer, {N} and {decomposition criterion} are how you slice the question, {range} is the reasonable bounds for numbers, {output format} is how to shape the final result.

🚀 Quick start: paste this into the chat:

Here's a template for the REAP technique for accurately extracting facts from an LLM. Adapt it to my task: 
{your task}. Ask me questions to fill in the fields.

[paste the template above]

The LLM will ask which "the fact doesn't exist" criterion fits your topic and how best to split the question into parts, because without that the template won't work for your specific task. It will take the pattern and adapt it to your case.


Limitations

⚠️ Rare entities: for obscure facts the method won't save you. The model simply doesn't know the answer, and no prompt structure can make up for that.

⚠️ Exact numbers: even with a range check, exact values (capacity, area) can be off by more than is acceptable, especially for little-known objects.

⚠️ The cost of decomposition: splitting into parts = more requests = more time and tokens. For short lists it's overkill; use it only when you risk losing data.


How They Studied It

The researchers took a competition on building a knowledge base from LLMs: entrants had to answer 6 types of questions (neighboring countries, place of death, stadium capacity, award winners, stock exchanges, territory area) using a model of no more than 32 billion parameters, with no internet and no additional training. They tested three models, first with a simple "single-shot" request, then with the two-stage REAP pipeline.

The plain request gave about 40% accuracy, and REAP raised it to 60–65%, with the effect stronger on the larger model (24 billion parameters), from 43% to 65%, while on the smaller model (9 billion) the gain was more modest. They also checked which element mattered most: without splitting the query into parts, accuracy dropped by 6 points (the model forgot half the list of award winners); without the "does an answer exist" check, by 8 points (the model started making things up); and without the chain of thought at all, by a whopping 22 points. That turned out to be the key element.

The main insight: the technique doesn't replace the model's knowledge; it helps extract what's already there. That's why larger models gain more from structured prompts than small ones.


Resources

REAP: Relation-Aware Elicitation and Parsing for Closed-Book Knowledge Base Construction from LLMs. Thanh-Dan Bui, Thanh-Trung Do, Tuan-Phong Nguyen, VNU University of Engineering and Technology, Hanoi. Code: github.com/yammdd/AKBC-Shared-Task-2026

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

Research digest

Key result

Ask a model in one request to recall a complex fact and immediately output strict JSON, and it mixes up the two tasks and drops half the list. REAP lets you get complete lists of facts and accurate numbers from an LLM without searching the internet, just through the right request structure. The secret: recalling and formatting go into two separate steps, and before answering, the model first checks whether the question even applies. The result: a list of award winners over 100 years comes back almost complete, not half-finished.

Principle

The model is like a student given two tasks at once: remember a date and write it down neatly. It either mixes up the facts or burns its energy on presentation. REAP splits these tasks into different requests: first a rough draft in free text, piece by piece (by year, by direction), then separately a clean copy in the required format. The rule is simple: format is the last step, not the first.

Why it works

A model has a limited supply of attention per answer. Ask it to recall 50 facts and pack them into JSON at the same time, and part of its effort goes into brackets and commas instead of memory. A narrow question gets recalled more accurately than a broad one: 'winners 1985-1995' works better than 'every winner over 100 years.' Breaking the question into parts forces the model to carefully scan each slice, instead of taking one hazy look at the whole history at once.

When to apply

Closed-book questions to an LLM without internet access → specifically for long lists (award winners, champions, participants) and exact numbers (capacity, area, population), especially when the fact might not exist at all: the person is alive, the company is private. Not suited to rare, obscure facts: if the model never saw them in training, no prompt structure will save you.

Mini recipe

1. Check applicability: ask the model up front whether the person is alive, whether the company is public. If not, go straight to 'no data,' no inventing. 2. Break up the question: split the list by year or category, 5-10 items at a time, not 100 years in one go. 3. Recall in free text: no format, with a 'not sure' flag wherever you have doubts. 4. Sanity-check the numbers: compare with a similar object; a 5,000-seat stadium can't weigh in like a 50,000-seat one. 5. Format at the end: gather all the drafts into a single JSON or table in a separate final request.

Examples

[BAD]: `List every Nobel Prize in Physics winner since 1901 in JSON format` [GOOD]: `Step 1: Recall the physics laureates for 1901-1920 in free text, flagging uncertainty explicitly. [repeat for the next 20-year periods]. Step 2: combine all the periods into a single table: year | name | country`

In plain words

The core of REAP is that models aren't databases; they're more like very well-read but absent-minded humanities majors. When you ask an LLM to produce a list of facts straight away in a strict format like JSON or a table, it overloads: brainpower goes into placing brackets, and memory starts glitching. The model ends up either hallucinating or simply "forgetting" half the data. The method fixes this through a division of labor: first we let the model talk it out in free text, and only then make it tidy that stream of thought into a structure.

It's like making a drunk friend retell the plot of a complicated movie while filling out his tax return. He'll either botch the numbers or fib about the plot. Technically the task is done, but the result is garbage. REAP instead lets your friend calmly talk it all into a voice recorder first, then hires a sober stenographer to turn that stream of consciousness into neat bullet points. When the model isn't distracted by "syntactic sugar," it remembers far more details.

Technically, it works through a chain of thought and two-stage parsing. First we ask the model to simply "recall" everything it knows on the topic, with no constraints on form. At this stage recall (how complete the data is) shoots up, because all the attention goes into pulling out knowledge. The second step is a separate request that takes this "raw" text and packs it into the needed format. The researchers proved it: if you don't mix knowledge extraction and formatting, factual accuracy goes up dramatically.

They tested it on building knowledge bases, but the Relation-Aware Elicitation principle applies anywhere you need complex structured output. Whether it's 20 years of Booker Prize winners or the specs of a hundred graphics cards, if you ask for everything at once, the model will "drift." By splitting the process into "recall" and "format," you turn the LLM from an unreliable storyteller into a dependable data source. SEO for data is dying; clean extraction logic is taking its place.

The main takeaway: don't try to get perfect JSON from a single prompt; that's the road to errors. Use a two-phase approach: first pull out the knowledge in free text, then format it. It takes longer and costs a couple of cents more, but you get a reliable knowledge base instead of a pile of random hallucinations. Whoever gets this trick of splitting attention will stop complaining that "the AI is being dumb and losing everything."

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on REAP: Separate Recalling a Fact From Formatting the Answer So the LLM Doesn't Get Confused and Hallucinate arXiv:2608.10963

Sign in to apply this study New accounts get 50 free credits.