12 November 2026

Evaluating Amazon Bedrock Knowledge Bases

Jess Wang12 min
Key takeaways
Bedrock found the expected source page for 95–96% of questions, but supporting chunks for only 73–78%
Bedrock often found the right page but missed the part that supported the answer.
More retrieved chunks produced 33 improvements and 31 regressions
Increasing retrieval depth from 5 to 10 chunks produced no consistent improvement in factuality.
Factuality ranged from 33% to 66% across models and settings
With the corpus, embeddings, and chunking fixed, factuality and abstention still varied across models and settings.

Amazon Bedrock Knowledge Bases is AWS's managed RAG service that lets customers use business documentation and data to make AI smarter about their business. Ring uses it to create a customer-facing support chatbot for troubleshooting documentation. Miro uses it to enrich software bug reports with internal Jira tickets and source code.

The point of this eval is to measure how well Amazon Bedrock Knowledge Bases answers factual questions. How well does it retrieve usable evidence, generate a correct answer, include citations, and abstain when it does not have enough information?

Nova 2 Lite answered the most questions correctly and left the fewest unanswered. But when the expected source page was missing, it gave 28 of the 36 answers that weren’t supported by the sources it cited. Nova Lite v1 left the most questions unanswered, even when the retrieved text contained the answer.

Methodology

We used the KILT dataset, which is a frozen snapshot of Wikipedia from 2019, paired with questions and answers based on those pages. For each question, it also records the Wikipedia page that should contain the supporting information.

To run the evaluation, we ingested 100,000 pages from KILT's Wikipedia corpus into Amazon Bedrock Knowledge Bases. In this ingestion process, Bedrock:

  1. Splits each Wikipedia source document into overlapping text chunks. We used 300-token chunks with 20% overlap.
  2. Uses Amazon Titan Text Embeddings V2 to turn every chunk into a numerical embedding.
  3. Stores each embedding in an Amazon S3 Vectors index.

We then selected a fixed set of 100 answerable KILT questions and verified that each question’s expected Wikipedia source page was among the 100,000 pages we ingested. So, when a user asks a question like "is a bee an animal or an insect?", this is what happens:

  1. Bedrock embeds the question using the same embedding model.
  2. It searches the vector index for the k chunks most semantically similar to the question.
  3. RetrieveAndGenerate gives the retrieved k chunks to the selected generation model.
  4. The model generates an answer based on the context.

Once the answer is generated, we score it against these main criteria:

  1. Factuality: Did the answer correctly answer the question?
  2. Claim support: What fraction of the answer's factual statements are directly supported by its cited evidence?
  3. Gold-page recall: Did any of the Retrieve chunks come from the expected Wikipedia source page?
  4. Supporting-chunk recall: Did any of the Retrieve chunks contain enough information to answer the question?
  5. Generation response status: Did the system answer, abstain, produce bad output with or without a usable final answer, or hit a request error?[1]

We used Amazon Nova Lite v1, Amazon Nova 2 Lite, and Claude Sonnet 4.6 for our generation models. We chose these models because they were available through Bedrock. Accessing other models required additional permissions and sales approval.

GPT-OSS-120B was the primary LLM judge for factuality and claim support because it was cost-effective, and we wanted to avoid having the same models generate and judge their own output. For each generation model, we tested two retrieval depths, k=5 and k=10, and two answer styles. Natural allowed a normal-length response, while concise required the shortest direct answer.[2]

Loading the 100 questions…

Analysis

Model performance

Task factuality measures accuracy across all questions, including those the model declined to answer. Answer-conditional factuality measures accuracy only among questions with a usable answer.

Overall model comparison

Nova Lite v1
Task factuality45.5%
Answer-conditional factuality76.2%
Claim support91.6%
Abstained37.3%
Nova 2 Lite
Task factuality64.0%
Answer-conditional factuality71.5%
Claim support88.5%
Abstained10.5%
Claude Sonnet 4.6
Task factuality60.5%
Answer-conditional factuality69.3%
Claim support87.5%
Abstained12.8%
  • Nova Lite v1 is the least robust model. Its task factuality[3] is 45.5%, compared with 64.0% for Nova 2 Lite and 60.5% for Sonnet.[4] It abstains on 37.3% of questions on average, versus 10.5% for Nova 2 Lite and 12.8% for Sonnet. In a production RAG pipeline, that means it will leave a large share of answerable questions unanswered.
  • Nova Lite v1 has the highest answer-conditional factuality at 76.2%. This means that although the model abstains more, it is more correct for the questions it decides to answer.
  • Nova 2 Lite has the highest observed task factuality. It scores 62–66% task factuality, abstains on only 8–12% of questions, and includes citations with source text in 89–97% of responses. For a production pipeline, it is the strongest starting model, though we will evaluate its robustness later in the blog.

With the corpus, embeddings, and chunking held fixed,[5] factuality, claim support, inclusion of citations, and abstention behavior still varied substantially across models.

Judge agreement

We also ran a small additional check on how well our judge was performing. On a sample of 120 responses, half marked correct and half incorrect[6], we swapped in DeepSeek R1 as a judge and found 86.7% agreement with our original judge, with Cohen's κ of 0.733.

DeepSeek was slightly more permissive. Of the 16 disagreements, it gave credit to 14 answers that GPT-OSS marked incorrect, while GPT-OSS gave credit to two answers that DeepSeek marked incorrect.

Retrieval depth and factuality

Retrieving more chunks did not reliably improve the main factuality result.

How retrieval depth changes outcomes

Factuality0%25%50%75%100%Supporting-chunk recall0%25%50%75%100%Abstained0%25%50%75%100%Nova Lite v1 · conciseNova Lite v1 · concise, Factuality, k=5: 33%Nova Lite v1 · concise, Factuality, k=10: 32%3332Nova Lite v1 · naturalNova Lite v1 · natural, Factuality, k=5: 58%Nova Lite v1 · natural, Factuality, k=10: 57%5857Nova 2 Lite · conciseNova 2 Lite · concise, Factuality, k=5: 64%Nova 2 Lite · concise, Factuality, k=10: 66%6466Nova 2 Lite · naturalNova 2 Lite · natural, Factuality, k=5: 62%Nova 2 Lite · natural, Factuality, k=10: 64%6264Sonnet 4.6 · conciseSonnet 4.6 · concise, Factuality, k=5: 63%Sonnet 4.6 · concise, Factuality, k=10: 63%6363Sonnet 4.6 · naturalSonnet 4.6 · natural, Factuality, k=5: 58%Sonnet 4.6 · natural, Factuality, k=10: 58%5858Nova Lite v1 · conciseNova Lite v1 · concise, Supporting-chunk recall, k=5: 74%Nova Lite v1 · concise, Supporting-chunk recall, k=10: 76%7476Nova Lite v1 · naturalNova Lite v1 · natural, Supporting-chunk recall, k=5: 73%Nova Lite v1 · natural, Supporting-chunk recall, k=10: 77%7377Nova 2 Lite · conciseNova 2 Lite · concise, Supporting-chunk recall, k=5: 74%Nova 2 Lite · concise, Supporting-chunk recall, k=10: 78%7478Nova 2 Lite · naturalNova 2 Lite · natural, Supporting-chunk recall, k=5: 74%Nova 2 Lite · natural, Supporting-chunk recall, k=10: 78%7478Sonnet 4.6 · conciseSonnet 4.6 · concise, Supporting-chunk recall, k=5: 73%Sonnet 4.6 · concise, Supporting-chunk recall, k=10: 75%7375Sonnet 4.6 · naturalSonnet 4.6 · natural, Supporting-chunk recall, k=5: 74%Sonnet 4.6 · natural, Supporting-chunk recall, k=10: 78%7478Nova Lite v1 · conciseNova Lite v1 · concise, Abstained, k=5: 57%Nova Lite v1 · concise, Abstained, k=10: 53%5753Nova Lite v1 · naturalNova Lite v1 · natural, Abstained, k=5: 22%Nova Lite v1 · natural, Abstained, k=10: 20%2220Nova 2 Lite · conciseNova 2 Lite · concise, Abstained, k=5: 12%Nova 2 Lite · concise, Abstained, k=10: 11%1211Nova 2 Lite · naturalNova 2 Lite · natural, Abstained, k=5: 10%Nova 2 Lite · natural, Abstained, k=10: 8%108Sonnet 4.6 · conciseSonnet 4.6 · concise, Abstained, k=5: 12%Sonnet 4.6 · concise, Abstained, k=10: 10%1210Sonnet 4.6 · naturalSonnet 4.6 · natural, Abstained, k=5: 9%Sonnet 4.6 · natural, Abstained, k=10: 11%911k=5k=10

In the paired comparison, 33 answers to the same questions under the same model and answer style changed from incorrect at k=5 to correct at k=10. Twelve of those 33 improvements, or 36%, gained a new answer-supporting chunk at ranks 6 through 10.

However, these 12 improvements came from two repeated questions across the six configurations, so this is a very narrow benefit.

There were also 31 regressions, meaning an answer that was correct at k=5 is now incorrect at k=10. The top five standalone Retrieve chunks were identical for all 31 regressions, and 27 still had an answer-supporting chunk at both depths. In these cases, the model may choose a different answer, decide to abstain, or include different unsupported details after it sees the additional ranks 6 through 10.[5]

Abstention behavior

What evidence was available when the system abstained?

Support + no citation
72 · 29.8%
No support + citation
41 · 16.9%
No support + no citation
125 · 51.7%
  • Across the 1,200 responses, 944 returned valid answers, 242 abstained, 2 had formatting errors but a usable answer, and 12 had formatting errors with no usable answer.
  • For 166 of 242 abstentions, no top-k chunk was judged sufficient to answer the question by the supporting-chunk recall scorer.[7] In those cases, abstaining makes sense given the retrieved text. The expected source page was ingested for every question, so the pattern suggests a retrieval or chunk-ranking miss rather than evidence that the answer was absent from the corpus.
  • For the other 76 abstentions, the separate search returned an answer-supporting chunk. Nova Lite v1 accounts for 73 of those 76 cases, or 96.1%. Nova 2 Lite accounts for one and Sonnet for two. Nova Lite v1 also made 149 of all 242 abstentions, so abstentions where evidence is available are overwhelmingly a Nova Lite v1 response pattern.
  • Forty-five of 242 abstentions (18.6%) cited at least one chunk even though the system abstained. Forty-one of those 45 had no answer-supporting chunk in the returned k chunks, so the citations were often related context used to explain the abstention. For example, one case cited an article introduction that named the relevant entity without containing the needed fact.

Concise versus natural answers

Concise versus natural on shared answered questions

Configuration
Answer-conditional factuality
Nova Lite v1 · k=5
Nova Lite v1 · k=10
Nova 2 Lite · k=5
Nova 2 Lite · k=10
Sonnet 4.6 · k=5
Sonnet 4.6 · k=10

Averages across all 100 questions mix answer style with whether the model answered at all. This chart includes only questions where both concise and natural produced valid answers, so it compares answer style rather than abstention behavior.[8]

In this graph, each bar represents natural minus concise in percentage points. Positive values favor natural, and negative values favor concise.

Concise factuality was equal or higher in all six matched comparisons. A plausible explanation for the factuality pattern is that a shorter direct answer gives the model fewer chances to add an incorrect or irrelevant factual claim.

Model performance by question type

We grouped questions by type to identify patterns in what the system struggled to answer. One question can belong to more than one category.

  • Multi-part answer: Requires multiple entities, like “who were the 3 presidents that died on july 4th.”
  • Comparing or combining facts: Requires comparing entities or combining facts, like “real madrid or barcelona who has more trophies.”
  • Role / relation: Requires precise knowledge of a relationship, like “who played dr. loveless in the wild wild west.”
  • Ambiguous subject: The wording could refer to several people, like “who wrote something in the way she moves.”
  • List / table evidence: The answer is likely buried in a list or table, like “how many episodes of the secret circle are there.”
  • Time-sensitive answer: The answer depends on time, like “when is the next maze runner film coming out.”
  • Fact near the start of the page: This group tests relatively easy retrieval, like “is a bee an animal or an insect.”

Performance by question type

Fact near the start of the page
n=30
Time-sensitive answer
n=32
List / table evidence
n=8
Role / relation
n=28
Ambiguous subject or title
n=10
Comparing or combining facts
n=11
Multi-part answer
n=5
  • Facts near the start of the page are easiest on average. They have the highest answer-conditional factuality at 65.3%, the strongest answer-supporting retrieval at 89.7%, and the lowest abstention rate at 11.7%. The answer is often near the beginning of a source, so retrieval is more likely to surface a self-contained answer. For a production pipeline, this is the baseline case. Failures here are a signal to inspect ingestion or retrieval before tuning generation.
  • Comparison and multi-part questions are the hardest types of questions to answer. Comparison has only 54.5% supporting-chunk recall and 44.7% answer-conditional factuality. Multi-part answers have 36.7% answer-conditional factuality. Comparisons often require retrieving evidence about more than one entity, while multi-part questions require combining several facts into one complete answer. A production pipeline may need query decomposition, separate retrieval per entity, or explicit completeness checks for these cases.
  • Roles and relationships are another group of questions the models struggle with. Their answer-conditional factuality is 48.5%, despite 69.3% supporting-chunk recall. This gap points to a mix of retrieval difficulty and model interpretation difficulty. Supporting evidence was often present, but the system still answered incorrectly, suggesting that the model struggles to identify or use the precise relationship the question asks about. These questions are good candidates for stricter extraction prompts or a verification step.

Which questions are universally easy or hard?

Hover over a question to see it.

Another way to assess question difficulty is to compare the questions that all models struggled to answer with the questions that all models answered correctly.

Twenty-five questions, or 25% of the set, received zero answers that GPT-OSS judged factually correct in all four configurations of each model. In other words, every attempt for those questions either abstained, produced unusable output, or gave an answer GPT-OSS judged incorrect. At the other extreme, 20 questions, or 20% of the set, were correct in all four configurations of every model. These two groups help separate questions that are likely difficult across configurations from questions that are consistently easy, while the remaining 55 questions show where model and answer style change the outcome.

Abstention when the expected source page is missing

Nova 2 Lite concise at k=10 had the highest observed factuality on the 100 answerable questions. That is useful, but it is only one side of the decision. This experiment design rewards a system for answering when it has the required source. We also wanted to test whether the system could recognize when required evidence is missing and correctly abstain instead of hallucinating.

To test that behavior, we ran a separate 50-question negative control. For every question, we verified that its expected Wikipedia source page was excluded from the ingested corpus. Abstention is the conservative default outcome, although duplicate evidence can still appear on another ingested page.

Results with the expected source page missing

“Supported” and “unsupported” apply to the 94 answers, not to the 506 abstentions.

Nova Lite v1

200 responses in the control test93% abstained

Nova 2 Lite

200 responses in the control test73% abstained

Sonnet 4.6

200 responses in the control test87% abstained

Of the 600 responses, 506 (84.3%) abstained and 94 (15.7%) had an answer. Of the 94 answers, 58 were supported, meaning that although their expected Wikipedia source page was not in the corpus, other ingested articles contained enough evidence to answer the question. The other 36 (38.3%) were unsupported.[9]

Those 36 unsupported answers are 6.0% of all 600 responses in the control test. They are the strongest candidates for a failure to abstain because their cited sources contained no supporting evidence. Of these 36, 28 (77.8%) were from Nova 2 Lite. On the answerable set, Nova 2 Lite's willingness to answer contributed to its strong factuality and low abstention rate. In this control test, the same tendency produced most of the unsupported answers.

Loading the negative-control explorer…

Considerations for deployment

Retrieval and generation can fail separately. We evaluated the generation portion of the pipeline, but a further iteration could test retrieval by varying chunk sizes and overlap settings, the embedding model, or by using hybrid search instead of semantic search.

It's also important to test questions whose expected source page was missing. Other pages may still contain enough evidence to answer, so check whether the cited sources support the response.

How readily the system should answer depends on the product you're building. An internal research assistant for analysts may reasonably answer more aggressively, as long as it shows citations and a person can verify them. A medical-triage tool should lean toward abstention when the evidence is insufficient. In those settings, a confident unsupported answer can have bad consequences.

If you want to evaluate a RAG system like AWS Bedrock Knowledge Bases, try Braintrust for free.

Footnotes

  1. 1.
    BAD_OUTPUT means the Bedrock request returned successfully, but its final text did not follow the requested answer format. For example, it could be empty or look like a leaked tool call rather than an answer. REQUEST_ERROR means the request itself did not return a usable model result, such as a service, authorization, or transport failure. The scoring correction marks a response BAD_OUTPUT_WITH_ANSWER only when it finds the known marker separating the final answer from the copied concise prompt. It preserves the raw output and evaluates only the answer after that marker. If it cannot reliably identify a final answer, the response is marked BAD_OUTPUT_NO_ANSWER and receives no answer-quality credit. The two affected Nova Lite v1 concise responses still have formatting errors, but their final answers match the KILT reference answers and therefore count as correct.
  2. 2.
    The two custom templates shared the same evidence rules: use only the retrieved search results, make claims only when the sources state or entail them, use the same exact abstention sentence when sources are insufficient, and never output a tool call or reasoning. Their one intentional difference was the successful-answer instruction. Natural said to answer fully and naturally. Concise said to give only the shortest direct answer that fully answers the question, normally a phrase or one short sentence, with no extra background.
  3. 3.
    Task factuality includes all 100 questions in each configuration. Answer-conditional factuality uses only usable answers, including reliably extracted final answers from BAD_OUTPUT_WITH_ANSWER. Claim support uses only answers with cited evidence, so it is not an end-to-end success rate. Answer-conditional factuality can use a Wilson 95% confidence interval because it is a correct-or-incorrect proportion across usable answers. Claim support does not use a Wilson interval because it is an average of per-answer support fractions rather than a proportion of individual factual claims.
    View results for all 12 configurations and definitions of response types
    Hover or focus a column label for its definition. Hover or focus a percentage to see its Wilson 95% confidence interval, where available.
    Generation modelAnswer stylekTask factualityAnswer-conditional factualityClaim supportGold-page recall@kSupporting-chunk recall@kAbstainedStatus S / A / B+ / B− / E
    Nova Lite v1Concise534%34/42 (81.0%)94.7% across 41 answers with cited evidence95%74%55%41 / 55 / 1 / 3 / 0
    Nova Lite v1Natural558%58/78 (74.4%)89.8% across 78 answers with cited evidence95%73%22%78 / 22 / 0 / 0 / 0
    Nova 2 LiteConcise564%64/88 (72.7%)86.6% across 88 answers with cited evidence95%74%12%88 / 12 / 0 / 0 / 0
    Nova 2 LiteNatural562%62/89 (69.7%)90.4% across 90 answers with cited evidence95%74%11%89 / 11 / 0 / 0 / 0
    Claude Sonnet 4.6Concise563%63/88 (71.6%)86.1% across 88 answers with cited evidence95%73%12%88 / 12 / 0 / 0 / 0
    Claude Sonnet 4.6Natural558%58/87 (66.7%)87.4% across 91 answers with cited evidence95%74%13%87 / 13 / 0 / 0 / 0
    Nova Lite v1Concise1033%33/41 (80.5%)97.5% across 40 answers with cited evidence96%76%52%40 / 52 / 1 / 7 / 0
    Nova Lite v1Natural1057%57/78 (73.1%)88.6% across 78 answers with cited evidence96%77%20%78 / 20 / 0 / 2 / 0
    Nova 2 LiteConcise1066%66/89 (74.2%)87.6% across 89 answers with cited evidence96%78%11%89 / 11 / 0 / 0 / 0
    Nova 2 LiteNatural1064%64/92 (69.6%)89.5% across 92 answers with cited evidence96%78%8%92 / 8 / 0 / 0 / 0
    Claude Sonnet 4.6Concise1063%63/88 (71.6%)89.7% across 90 answers with cited evidence96%75%12%88 / 12 / 0 / 0 / 0
    Claude Sonnet 4.6Natural1058%58/86 (67.4%)86.7% across 89 answers with cited evidence96%78%14%86 / 14 / 0 / 0 / 0
  4. 4.
    This chart includes four configurations for each model: concise and natural answer styles at k=5 and k=10. For task factuality and abstention, each configuration contributes equally to the displayed rate. Because every configuration uses the same 100 questions, that is equivalent to calculating the rate over all 400 responses for the model. For answer-conditional factuality and claim support, the chart combines the answers that qualify for each metric before calculating the rate. Configurations with more qualifying answers therefore contribute more to those two measures. Error bars are Wilson 95% confidence intervals for task factuality across the 400 responses.
  5. 5.
    For every response, we logged both a standalone Retrieve call and a RetrieveAndGenerate call. The standalone call gives us a ranked list of retrieved chunks. RetrieveAndGenerate returns the final answer and any citations included with that answer, but not its complete retrieval context. We therefore cannot prove that both endpoints used the same chunks in the same order. However, 99.91% of returned citation blocks in RetrieveAndGenerate, and 100% of their cited chunk references, matched the standalone Retrieve top-k list. The standalone call helps us check retrieval, but does not show exactly what the answering model saw.
  6. 6.
    DeepSeek R1 independently rescored a deliberately balanced sample of 120 responses from the 1,200 responses to answerable questions. It included 60 that GPT-OSS marked correct and 60 that GPT-OSS marked incorrect. GPT-OSS remains the declared primary judge. We do not show a DeepSeek score for each configuration because DeepSeek did not rescore every response for every configuration, and this deliberately balanced sample would not represent the averages for those configurations. This checks how the choice of scoring model affects the results; GPT-OSS remains the primary judge. Cohen's kappa asks how much agreement remains after accounting for the agreement we would expect if each judge simply preserved its own overall tendency to say correct or incorrect. A value of 0 means no agreement beyond that baseline, while 1 means perfect agreement beyond it.
    View the scoring-model agreement heatmap

    Scoring-model agreement heatmap

  7. 7.
    answer_supporting_chunk_recall_at_k is judged from the question, accepted KILT answer set, and ranked standalone Retrieve chunks. It is 1 only when at least one returned chunk independently states or entails the answer. It measures the separate search results, not the full context received by RetrieveAndGenerate.
  8. 8.
    The concise-versus-natural chart includes only questions where both answer styles produced valid answers marked SUCCEEDED. The question counts are 41 and 40 for Nova Lite v1 at k=5 and k=10, 88 and 89 for Nova 2 Lite, and 86 and 84 for Claude Sonnet 4.6. It shows answer-conditional factuality, calculated as correct answers divided by those questions with valid answers from both styles. Abstentions and malformed outputs are excluded to isolate answer style from differences in how often each style answered.
  9. 9.
    All 94 answers included citations. DeepSeek judged 53 as supported by their cited evidence, 35 as unsupported, and 6 as ambiguous. A blind human review resolved the ambiguous cases as 5 supported and 1 unsupported.
Share

Read more evals

Jev, Clef, and Liquid AI for aerial image classification
29 October 2026
Evaling decision models for risk and harm classification
22 October 2026
Muse, Instinct, and Dots as personal shopping agents
12 October 2026

Subscribe to the Department of Evals

A newsletter for unfiltered thoughts on eval methodology, analysis, and failures

Subscribe