惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
G
Google Developers Blog
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
博客园 - 聂微东
V
Visual Studio Blog
博客园_首页
D
DataBreaches.Net
腾讯CDC
I
InfoQ
F
Fortinet All Blogs
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
月光博客
月光博客
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How I Evaluated an AI Model on AWS Without Writing a Sing...
Tidding Rams · 2026-05-09 · via DEV Community

A step-by-step guide to Amazon Bedrock's model evaluation feature from S3 setup to reading real results

Ever wondered whether the AI model you're about to plug into your production system actually knows what it's doing? Me too. That's exactly what Amazon Bedrock's model evaluation feature is built for and after running through it myself, I'm genuinely impressed at how accessible it is.

No PhD. No GPU clusters. No tears. Just AWS, an S3 bucket, and a few JSON prompts.

Let's walk through the whole thing start to finish.

What Even Is Amazon Bedrock?

Amazon Bedrock is AWS's managed Generative AI service. Instead of spending months training, hosting, and scaling foundation models yourself, Bedrock lets you call them like an API. Think of it as the "serverless" moment for AI — the infrastructure complexity disappears and you focus on what actually matters: using the models.

One of its best-kept features is model evaluation a way to run a model against a set of prompts, compare its responses to expected answers, and get a performance score back. It's perfect for building confidence before you commit a model to your workflow.

Here's what we're going to build today:

Prompt Dataset (S3) → Bedrock Evaluation Job → Results (S3) → Insights
The before architecture

The after architecture

Step 1: Log In and Orient Yourself

Head to the AWS Management Console and sign in. Make sure you're in the US West (Oregon) / us-west-2 region model evaluation support varies by region and you want to be where the models live.

Once you're in, you'll use two core services today:

  • Amazon S3 — to store your prompt dataset and receive evaluation results

  • Amazon Bedrock — to run the actual evaluation job

Step 2: Create Your S3 Buckets

You need two S3 buckets — one to hold your prompt dataset, another to receive evaluation results. Let's create both from scratch.
In the AWS search bar, type S3 and open the service. Click Create bucket.

  • Bucket 1: The Prompt Dataset Bucket
    This bucket holds the questions you'll throw at the model.
    Click Create bucket
    Give it a name — something like bedrock-prompt-dataset-yourname-2026. S3 bucket names must be globally unique across all of AWS, so add something personal or random to the end
    Make sure the region is set to us-west-2 (Oregon)
    Leave everything else as default keep Block all public access enabled
    Click Create bucket

  • Bucket 2: The Output Bucket
    This is where Bedrock will write the evaluation results.
    Click Create bucket again
    Name it something like bedrock-eval-output-yourname-2025
    Same region: us-west-2
    Leave defaults, click Create bucket

You should now see both buckets in your S3 console.
Build Your Prompt Dataset

What's in the Prompt Dataset?

The prompt dataset is a .jsonl file (one JSON object per line) where each object has three fields:

json
{"prompt": "The chemical symbol for gold is", "category": "Chemistry", "referenceResponse": "Au"}
{"prompt": "The tallest mountain in the world is", "category": "Geography", "referenceResponse": "Mount Everest"}
{"prompt": "The author of 'Great Expectations' is", "category": "Literature", "referenceResponse": "Charles Dickens"}

Enter fullscreen mode Exit fullscreen mode


Notice the structure:

  • prompt — what you'll send to the model
  • referenceResponse — the ground truth you're checking against
  • category — for grouping results later

In production, you'd replace these general-knowledge questions with prompts that mirror your real use case. Customer support queries. Code generation tasks. Medical summaries. Whatever you're building for.

Add a CORS Configuration to the Dataset Bucket

Bedrock needs cross-origin access to read from your S3 bucket. Here's how to enable it:

  1. Click into your prompt dataset bucket
  2. Go to the Permissions tab
  3. Scroll to Cross-origin resource sharing (CORS)
  4. Click Edit and paste this config: json
[
  {
    "AllowedHeaders": ["*"],
    "AllowedMethods": ["GET", "PUT", "POST", "DELETE"],
    "AllowedOrigins": ["*"],
    "ExposeHeaders": ["Access-Control-Allow-Origin"]
  }
]

Enter fullscreen mode Exit fullscreen mode

  1. Click Save changes

That's it. This tells S3: "Yes, Amazon Bedrock is allowed to read from me." Without this, the evaluation job will fail silently — so don't skip it.

Pro tip: In a real production setup, you'd tighten the AllowedOrigins to specific Bedrock endpoints rather than using "*". For now, this gets us moving.

Step 3: Create the Model Evaluation Job

Back to the AWS search bar — type Bedrock and open Amazon Bedrock.

  1. Expand the left-hand menu (hamburger icon, top-left)
  2. Under Assess, click Evaluations

  1. Click Create Automatic: Programmatic


Now fill in the job configuration:

Model Evaluation Details

Evaluation name: Something unique like my-eval-job-abc123
Model provider: Amazon
Model: Nova Micro
Task type: Question and answer

Metrics

Click Remove on any extra metrics until only one remains. Set it to Accuracy. This metric compares the model's response against your referenceResponse and returns a score.

Prompt Dataset

Select Use your own prompt dataset and enter your S3 path:

s3://your-prompt-dataset-bucket-name/prompt_dataset.json

Enter fullscreen mode Exit fullscreen mode

Evaluation Results

Point this to your output bucket:

s3://your-output-bucket-name/evaluation-results/

Enter fullscreen mode Exit fullscreen mode

IAM Role

Bedrock needs a role to access your S3 buckets on its behalf. Let's create one real quick.
In a new browser tab, go to IAM → Roles → Create role and follow these steps:

  1. Trusted entity Select AWS service, then under Use case search for and select Bedrock. Click Next.
  2. Permissions Attach these two policies: AmazonBedrockFullAccess AmazonS3FullAccess Click Next.
  3. Name and create Name the role something like bedrock-eval-role, then click Create role. Back on the Bedrock evaluation page, under Amazon Bedrock IAM role, select Use an existing role, click the dropdown, and pick bedrock-eval-role.

*In production you'd scope the S3 policy down to only your two specific buckets — but for getting started, AmazonS3FullAccess does the job.

Click Create and watch the job appear with status In progress.

Step 4: Read the Results (This Is the Fun Part)

Once the job completes, head back to S3 and look inside your output bucket under evaluation-results/. You'll find a .jsonl file with one result per prompt. Here's what the raw output looks like:

{
  "automatedEvaluationResult": {
    "scores": [{"metricName": "Builtin.Accuracy", "result": 0.0625}]
  },
  "inputRecord": {
    "prompt": "The chemical symbol for gold is",
    "referenceResponse": "Au",
    "category": "Chemistry"
  },
  "modelResponses": [{
    "response": "The chemical symbol for gold is Au.",
    "modelIdentifier": "us.amazon.nova-micro-v1:0",
    "stopReason": "end_turn"
  }]
}

Enter fullscreen mode Exit fullscreen mode

Breaking Down the Accuracy Scores

Here's a summary of the three prompts from our run:

Looking at the three prompts from our run, the Chemistry question ("The chemical symbol for gold is") scored 0.0625, the Geography question ("The tallest mountain in the world is") came in slightly higher at 0.0870, and the Literature question ("The author of 'Great Expectations' is") landed at 0.0727. All three were answered correctly — Au, Mount Everest, and Charles Dickens respectively yet the scores are nowhere near 1.0.

Wait These Scores Look Low. Is That Bad?

Here's where it gets interesting. The accuracy scores seem low because the scoring algorithm is doing token-level matching between the model's verbose answer and the short reference response.

The model answered correctly in all three cases it said "Au", "Mount Everest", and "Charles Dickens". But it also said a lot of other things (it explained its reasoning step-by-step). Those extra tokens pulled the accuracy score down.

This is a critical lesson: how you write your prompts and reference responses dramatically affects your scores. If you want higher accuracy scores:

// Instead of this reference response:
{"referenceResponse": "Au"}

// Try instructing the model to answer concisely in your prompt:
{"prompt": "Answer in one word only. The chemical symbol for gold is:", "referenceResponse": "Au"}

Enter fullscreen mode Exit fullscreen mode

That's the value of model evaluation — it surfaces these kinds of nuances before you go to production.


What's Next?

Now that you understand the pipeline, here's how to level it up:

  • Swap models — Run the same dataset against Nova Lite, Nova Pro, or even Claude models to compare them head-to-head
  • Use real prompts — Replace the sample dataset with 50-100 prompts from your actual use case
  • Automate — Trigger evaluation jobs via the AWS CLI or SDK as part of your CI/CD pipeline
  • Track over time — Save scores to a database and chart model performance as you update prompts or switch models

Quick Recap

Here's the full flow in one breath:

  1. Upload a .jsonl prompt dataset to S3
  2. Add a CORS config to the S3 bucket so Bedrock can read it
  3. Create a Bedrock model evaluation job pointing at Nova Micro
  4. Wait for it to run, then read the .jsonl results in your output bucket
  5. Interpret the accuracy scores in context — verbose model answers score lower even when correct

Amazon Bedrock's model evaluation feature removes one of the biggest unknowns in AI integration: "Can this model actually answer my questions reliably?" Now you have a repeatable, automated answer.

Go build something confident.


Have questions or want to share your evaluation results? Drop them in the comments below.