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

推荐订阅源

T
Threatpost
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
L
LINUX DO - 最新话题
博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
C
Cisco Blogs
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
罗磊的独立博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
A
About on SuperTechFans
G
GRAHAM CLULEY
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
D
DataBreaches.Net
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
I
InfoQ
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 叶小钗
Project Zero
Project Zero

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 Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
How I Evaluated an AI Model on AWS Without Writing a Single Line of Training Code
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.