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

推荐订阅源

D
DataBreaches.Net
SecWiki News
SecWiki News
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
Project Zero
Project Zero
WordPress大学
WordPress大学
NISL@THU
NISL@THU
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Privacy & Cybersecurity Law Blog
Jina AI
Jina AI
AWS News Blog
AWS News Blog
Scott Helme
Scott Helme
Martin Fowler
Martin Fowler
C
Cybersecurity and Infrastructure Security Agency CISA
Forbes - Security
Forbes - Security
H
Heimdal Security Blog
小众软件
小众软件
I
Intezer
A
Arctic Wolf
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
O
OpenAI News
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
Latest news
Latest news
G
GRAHAM CLULEY
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V2EX - 技术
V2EX - 技术
Stack Overflow Blog
Stack Overflow Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 最新话题
博客园 - Franky
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
P
Proofpoint News Feed
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
F
Full Disclosure
Security Latest
Security Latest

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
Cómo Evaluar Agentes IA: Tutorial de LLM-as-Judge
Elizabeth Fu · 2026-05-27 · via DEV Community

Evalúa la calidad de agentes IA con LLM-as-Judge y análisis de trayectorias. Detecta fallos silenciosos, tokens desperdiciados y alucinaciones antes de producción. Tutorial en Python con código.

Tu agente IA acaba de devolver "BA117 a las 7PM ($450)" - respuesta correcta, calificación 5 estrellas. Lo que no viste: hizo 3 llamadas API innecesarias y alucinó una verificación de precio. Las métricas tradicionales de pasa/falla calificaron esto como "perfecto".

Este es el problema de los fallos silenciosos. Los agentes IA devuelven respuestas plausibles mientras realizan llamadas API innecesarias, alucina hechos, o siguen caminos de razonamiento inseguros. Las métricas binarias no detectan nada de esto.

Este artículo cubre las dos técnicas fundamentales de evaluación que todo agente necesita: LLM-as-Judge para calidad de salida y Evaluación de Trayectorias (el camino paso a paso que toma un agente) para calidad de proceso. Estas forman la base para detectar alucinaciones, evaluar el uso de herramientas, alineación de seguridad y optimización de costos - temas cubiertos en posts posteriores de esta serie.

¿Por qué Strands Agents? Usamos Strands para los ejemplos de código porque proporciona captura automática de trayectorias mediante hooks y un SDK de evaluación dedicado (strands-agents-evals), facilitando demostrar estos patrones. Las técnicas de evaluación mostradas aquí aplican a cualquier framework de agentes - LangGraph, AutoGen, o implementaciones personalizadas.

Sobre el código: Todos los ejemplos provienen del repositorio how-to-evaluate-ai-agents-sample-for-aws - notebooks Jupyter ejecutables con Strands Agents y AWS Bedrock. Cada notebook es autocontenido con explicaciones y ejemplos funcionales.

Lo que aprenderás:

  • Cómo implementar evaluación LLM-as-Judge con rúbricas explícitas (configuración en 5 min)
  • Por qué la evaluación de trayectorias detecta fallos que las métricas de solo salida no capturan
  • Ejemplos de código en Python usando Strands Agents en AWS Bedrock
  • Cómo usar los evaluadores integrados de Amazon Bedrock AgentCore para producción
  • Investigación más reciente de abril de 2026 (WindowsWorld, D3-Gym, framework CARE)

🔗 Ver todos los ejemplos de código en GitHub

Tiempo estimado de lectura: 9 minutos


¿Por Qué Strands Agents Para Evaluar Agentes IA?

Strands Agents proporciona el kit de herramientas de evaluación más completo para agentes IA en producción - combinando captura automática de trayectorias, SDK de evaluación dedicado e integración con AWS Bedrock en un solo framework.

Ventajas clave para evaluación:

  1. SDK de evaluación dedicado (strands-agents-evals) con evaluadores integrados para calidad de salida y puntuación de trayectorias
  2. Organización de suites de pruebas - clases Experiment y Case para ejecutar múltiples escenarios de prueba con generación automática de reportes
  3. Captura automática de trayectorias mediante hooks (HookProvider) - cada llamada a herramienta se registra con estado de éxito/fallo, sin instrumentación manual
  4. Nativo en AWS Bedrock - funciona perfectamente con Claude, Llama y Mistral mediante perfiles de inferencia multi-región, eliminando gestión de claves API
  5. Flexibilidad de modelos - los evaluadores pueden usar cualquier modelo (GPT-4o, Claude Sonnet, etc.) independiente del modelo del agente
  6. Visualización integrada - reports[0].display() muestra resultados formateados instantáneamente, perfecto para notebooks Jupyter
  7. Puntuación ponderada - combina múltiples evaluadores (ej., 60% calidad de salida + 40% trayectoria) para evaluación completa
  8. OpenTelemetry integrado - trazas distribuidas automáticas compatibles con Datadog, Honeycomb y otras plataformas de observabilidad

Por Qué Fallan Las Métricas Binarias

Considera estos dos agentes respondiendo "Encuentra vuelos de NYC a Londres":

Agente A Agente B
Respuesta "BA117 a las 7PM ($450), DL1 a las 9:30PM ($520)" "BA117 a las 7PM ($450), DL1 a las 9:30PM ($520)"
Llamadas a Herramientas search_flights("NYC", "London") search_flights("NYC", "London")
get_currency_exchange()
search_flights("NYC", "London") (duplicado)
Pasa/Falla ✅ Pasa ✅ Pasa

Ambos producen la respuesta correcta. La puntuación pasa/falla los califica por igual. Pero el Agente B desperdició tokens en una herramienta irrelevante y una llamada duplicada. La evaluación de trayectorias detecta esto. La evaluación de solo salida no.

Diagrama del pipeline de evaluación LLM-as-Judge de agentes IA: la salida del agente fluye a través del LLM juez con rúbrica para producir puntuación 0-1 con razonamiento, comparado con evaluación binaria legada de pasa/falla


¿Cómo Funciona la Evaluación LLM-as-Judge?

LLM-as-Judge usa un modelo de lenguaje grande para puntuar salidas de agentes contra criterios definidos, reemplazando la revisión manual. Proporciona puntuaciones continuas (0.0-1.0) con explicaciones, a diferencia del pasa/falla binario. La investigación muestra que rúbricas explícitas con umbrales de puntuación (0.8-1.0 = excelente, 0.5-0.7 = adecuado) producen evaluación consistente y reproducible a escala.

Paper: Autorubric (Marzo 2026)

El Problema con Prompts Vagos

La mayoría de los jueces LLM usan prompts vagos como "¿Es esta una buena respuesta?" Esto produce puntuaciones impredecibles porque el juez decide qué significa "buena". La investigación muestra que rúbricas vagas conducen a sesgo de posición (preferir la primera opción) y sesgo de verbosidad (preferir respuestas más largas).

La Solución: Criterios de Puntuación Explícitos

Define umbrales exactos de puntuación en tu rúbrica:

from strands_evals import Experiment, Case
from strands_evals.evaluators import OutputEvaluator

# Define explicit scoring criteria
evaluator = OutputEvaluator(
    rubric=(
        "Rate the travel agent response on a 0 to 1 scale:\n"
        "- 0.8-1.0: Lists specific flights with airline, flight number, times, and price\n"
        "- 0.5-0.7: Provides some useful information but missing key details\n"
        "- 0.2-0.4: Vague response without actionable information\n"
        "- 0.0-0.1: Contains fabricated information or is completely unhelpful"
    ),
    model="gpt-4o-mini",  # Or use AWS Bedrock: us.anthropic.claude-sonnet-4-20250514-v1:0
)

# Create test cases
cases = [
    Case(name="good", input="Find flights NYC to London", 
         expected_output="Specific flights with details"),
    Case(name="vague", input="Find flights NYC to London",
         expected_output="Specific flights with details"),
]

# Run evaluation
def task(case):
    if case.name == "good":
        return "BA117 at 7PM ($450), DL1 at 9:30PM ($520)"
    return "There are several flights available. Prices vary."

experiment = Experiment(cases=cases, evaluators=[evaluator])
reports = experiment.run_evaluations(task)
reports[0].display()

Enter fullscreen mode Exit fullscreen mode

Salida:

good:  Score 0.95 - Lists specific flights with all required details
vague: Score 0.30 - Missing specific details about airlines and times

Enter fullscreen mode Exit fullscreen mode

Rúbricas Vagas vs Específicas: Una Comparación

El paper Autorubric muestra que la calidad de la rúbrica impacta directamente la confiabilidad de las puntuaciones. Pruébalo tú mismo:

# Vague rubric (produces unreliable scores)
vague_evaluator = OutputEvaluator(
    rubric="Is this a good response?",
    model="gpt-4o-mini",
)

# Specific rubric (produces reliable scores)
specific_evaluator = OutputEvaluator(
    rubric=(
        "Rate 0-1:\n"
        "0.8-1.0: Lists specific flights with airline, number, times, price\n"
        "0.5-0.7: Some useful info but missing key details\n"
        "0.2-0.4: Vague without actionable information\n"
        "0.0-0.1: Contains fabricated information"
    ),
    model="gpt-4o-mini",
)

# Compare on 3 test cases: good, mediocre, hallucinated
responses = {
    "good": "BA117 at 7PM ($450), DL1 at 9:30PM ($520), VS001 at 11PM ($480)",
    "mediocre": "There are several flights available. Prices vary.",
    "hallucinated": "Take AeroFast Premium with our award-winning service.",
}

Enter fullscreen mode Exit fullscreen mode

Resultados:

Vague rubric:
  good: 0.70 | mediocre: 0.50 | hallucinated: 0.60  (spread: 0.20)

Specific rubric:
  good: 0.90 | mediocre: 0.30 | hallucinated: 0.10  (spread: 0.80)

Enter fullscreen mode Exit fullscreen mode

La rúbrica específica produce 4x más separación de puntuaciones, haciendo posible establecer umbrales de calidad significativos.

Mezclando Jueces LLM con Verificaciones Determinísticas

Usa jueces LLM para calidad subjetiva y verificaciones determinísticas para requisitos estrictos:

from strands_evals.evaluators import OutputEvaluator, Contains, ToolCalled

experiment = Experiment(
    cases=cases,
    evaluators=[
        OutputEvaluator(rubric="..."),      # LLM judge: subjective quality
        Contains(value="$"),                 # Deterministic: must mention price
        ToolCalled(tool_name="search_flights"),  # Deterministic: must search
    ],
)

Enter fullscreen mode Exit fullscreen mode

Por qué esto importa: Las verificaciones determinísticas se ejecutan instantáneamente a costo cero. Úsalas para requisitos que pueden verificarse con coincidencia de cadenas (contiene "$", comienza con "Error:", llama a herramienta específica) y jueces LLM para evaluación de calidad que requiere entender contexto.

Hallazgos Clave de la Investigación

El paper Grading Scale (Enero 2026) probó escalas de puntuación desde binaria (0/1) hasta 10 puntos y encontró:

  • Escala 0-5 produce el alineamiento humano-LLM más fuerte (correlación de Pearson 0.89)
  • Las escalas de 10 puntos introducen ruido sin mejorar precisión
  • Las escalas binarias pierden 73% de graduaciones de calidad

Recomendación: Usa una escala 0-5 (mapeada a 0.0-1.0 en código) con criterios explícitos en cada nivel.


¿Qué Es la Evaluación de Trayectorias?

La evaluación de trayectorias puntúa el camino paso a paso que toma un agente para alcanzar una solución, no solo la respuesta final. Detecta llamadas duplicadas a herramientas, acciones irrelevantes y pasos intermedios inseguros que la evaluación de solo salida no captura. Al capturar la secuencia de invocaciones de herramientas, identifica patrones de razonamiento desperdiciados o peligrosos antes de que lleguen a producción.

Paper: TRACE (Febrero 2026)

El Problema: La Evaluación de Solo Salida Está Ciega

La evaluación de solo salida ve la respuesta final. No puede detectar:

  • Llamadas duplicadas a herramientas (tokens desperdiciados)
  • Llamadas irrelevantes a herramientas (camino de razonamiento incorrecto)
  • Pasos intermedios inseguros (violaciones de privacidad, acciones no autorizadas)
  • Orden ilógico de herramientas (get_price antes de search_product)

La Solución: Evalúa el Camino, No Solo el Destino

La evaluación de trayectorias puntúa el camino paso a paso que tomó el agente:

from strands_evals.evaluators import TrajectoryEvaluator

traj_eval = TrajectoryEvaluator(
    rubric=(
        "Rate the tool usage trajectory 0-1:\n"
        "- 0.8-1.0: Only relevant tools called, no duplicates, logical order\n"
        "- 0.5-0.7: Mostly correct but minor inefficiency\n"
        "- 0.2-0.4: Irrelevant tools called or excessive duplicates\n"
        "- 0.0-0.1: Completely wrong tool selection"
    ),
    model="gpt-4o-mini",
)

# Simulate Agent A (efficient) and Agent B (wasteful)
efficient_trajectory = [
    {"name": "search_flights", "args": {"origin": "NYC", "dest": "London"}},
    {"name": "get_weather", "args": {"city": "London"}},
]

wasteful_trajectory = [
    {"name": "search_flights", "args": {"origin": "NYC", "dest": "London"}},
    {"name": "get_currency_exchange", "args": {}},  # irrelevant
    {"name": "search_flights", "args": {"origin": "NYC", "dest": "London"}},  # duplicate
    {"name": "get_weather", "args": {"city": "London"}},
]

cases = [
    Case(name="efficient", input="Find flights and weather", 
         expected_trajectory=["search_flights", "get_weather"]),
    Case(name="wasteful", input="Find flights and weather",
         expected_trajectory=["search_flights", "get_weather"]),
]

def traj_task(case):
    trajectory = efficient_trajectory if case.name == "efficient" else wasteful_trajectory
    return {"output": "BA117 at 7PM, London is 18C", "trajectory": trajectory}

exp = Experiment(cases=cases, evaluators=[traj_eval])
reports = exp.run_evaluations(traj_task)
reports[0].display()

Enter fullscreen mode Exit fullscreen mode

Salida:

efficient: Score 0.95 - Clean trajectory, only relevant tools
wasteful:  Score 0.25 - Contains irrelevant tool and duplicate call

Enter fullscreen mode Exit fullscreen mode

Captura Automática de Trayectorias con Hooks

En producción, no construyes trayectorias manualmente. Usa Strands hooks para capturarlas automáticamente:

from strands import Agent
from strands.hooks import HookProvider, HookRegistry
from strands.hooks.events import AfterToolCallEvent

class TrajectoryPlugin(HookProvider):
    def __init__(self):
        self.trajectory = []

    def on_after_tool_call(self, event: AfterToolCallEvent):
        self.trajectory.append({
            "name": event.tool_use.name,
            "args": event.tool_use.parameters,
            "success": event.exception is None,
        })

tracker = TrajectoryPlugin()
agent = Agent(model="gpt-4o-mini", tools=[...], hooks=[tracker])

# Run the agent
result = agent("Find flights from NYC to London")

# The hook captured everything automatically
print(f"Trajectory: {tracker.trajectory}")
# Output: [{'name': 'search_flights', 'args': {...}, 'success': True}, ...]

Enter fullscreen mode Exit fullscreen mode

Por qué esto importa: Los Strands hooks se ejecutan en cada llamada a herramienta sin configuración. El trazado OpenTelemetry está integrado, dándote trazas distribuidas automáticamente.


Investigación Reciente: ¿Qué Hay de Nuevo en Abril de 2026?

Tres papers publicados este mes avanzan la metodología de evaluación:

1. D3-Gym: Tareas Científicas Ejecutables

Paper: arXiv:2604.27977 (30 de Abril, 2026)

Publicó 565 tareas científicas con entornos ejecutables. Hallazgo clave: 87.5% de concordancia entre evaluación automatizada y estándares de oro anotados por humanos.

Implicación: LLM-as-Judge puede igualar la calidad de evaluación humana cuando las rúbricas están bien definidas y la verdad fundamental es verificable.

2. WindowsWorld: Benchmark de Agentes GUI

Paper: arXiv:2604.27776 (30 de Abril, 2026)

Probó agentes GUI en 181 tareas profesionales multi-aplicación. Resultado: <21% tasa de éxito en tareas multi-app.

Implicación: Incluso los agentes de última generación fallan frecuentemente en tareas complejas de múltiples pasos. La evaluación debe detectar estos fallos antes de producción.

3. CARE: Ingeniería Colaborativa de Razonamiento de Agentes

Paper: arXiv:2604.28043 (30 de Abril, 2026)

Propone metodología con puertas de etapa con compuertas de verificación en cada etapa de desarrollo. Involucra expertos en la materia, desarrolladores y agentes auxiliares.

Implicación: La evaluación no es un paso final—debe ocurrir en cada etapa del desarrollo del agente.


Amazon Bedrock AgentCore: Evaluación Lista para Producción

Si estás desplegando agentes en producción en AWS, Amazon Bedrock AgentCore proporciona capacidades integradas de evaluación y observabilidad diseñadas específicamente para flujos de trabajo de agentes.

Evaluadores Integrados

AgentCore ofrece 13 evaluadores integrados que usan LLMs como jueces:

Evaluador Lo Que Mide
Builtin.Helpfulness Utilidad y claridad de la respuesta
Builtin.GoalSuccessRate Si el agente logró el objetivo del usuario
Builtin.Correctness Exactitud factual de las respuestas
Builtin.ToolSelection Calidad de selección de herramientas/grupos de acción

Observabilidad

AgentCore proporciona captura de trazas y registro integrados para monitoreo de producción.

Cuándo Usar AgentCore vs Strands Evaluation

Escenario Usar AgentCore Usar Strands Evals
Agentes en producción en AWS Bedrock ✅ (compatible)
Evaluación CI/CD antes de despliegue
Comparación multi-modelo (GPT, Claude, Gemini)
Lógica de evaluación personalizada (APIs externas, regex) ✅ (Lambda) ✅ (Python)
Trazado sin configuración ⚠️ (requiere hooks)

Recomendación: Usa evaluadores integrados de AgentCore para monitoreo de producción y Strands Evals para pruebas pre-despliegue y comparaciones multi-framework.

Aprende más:


Combinando LLM-as-Judge y Evaluación de Trayectorias

La evaluación lista para producción usa ambas técnicas:

Escenario Usar LLM-as-Judge Usar Eval de Trayectorias
Agente devuelve respuesta incorrecta ✅ Lo detecta ✅ Puede detectar camino ilógico
Agente devuelve respuesta correcta por camino incorrecto ❌ No lo detecta ✅ Lo detecta
Agente hace paso intermedio inseguro ❌ No lo detecta ✅ Lo detecta
Salida del agente no es profesional/grosera ✅ Lo detecta ❌ No lo detecta

Recomendación: Ejecuta ambos evaluadores en paralelo. Usa LLM-as-Judge para calidad de salida, evaluación de trayectorias para calidad de proceso.

from strands_evals import Experiment

experiment = Experiment(
    cases=cases,
    evaluators=[
        output_evaluator,     # Scores output quality
        trajectory_evaluator,  # Scores process quality
    ],
)

reports = experiment.run_evaluations(task)

# Access both scores
output_score = reports[0].overall_score
trajectory_score = reports[1].overall_score

# Combine scores (weighted average)
final_score = 0.6 * output_score + 0.4 * trajectory_score

Enter fullscreen mode Exit fullscreen mode


Pruébalo Tú Mismo

Prerrequisitos:

  • Python 3.10+
  • OPENAI_API_KEY o acceso a AWS Bedrock

Instalar:

pip install strands-agents strands-agents-evals boto3

Enter fullscreen mode Exit fullscreen mode

Ejecutar las demos:

git clone https://github.com/elizabethfuentes12/how-to-evaluate-ai-agents-sample-for-aws.git
cd how-to-evaluate-ai-agents-sample-for-aws

# LLM-as-Judge demo
cd evaluate-with-llm-judges/01-rubric-based-evaluation
jupyter notebook 01-rubric-based-evaluation.ipynb

# Trajectory evaluation demo
cd ../../evaluate-agent-trajectories/01-trajectory-scoring
jupyter notebook 01-trajectory-scoring.ipynb

Enter fullscreen mode Exit fullscreen mode

Usuarios de AWS Bedrock: Reemplaza gpt-4o-mini con:

from strands.models.bedrock import BedrockModel

model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-20250514-v1:0")

Enter fullscreen mode Exit fullscreen mode


Preguntas Frecuentes

¿Cómo elijo entre LLM-as-Judge y verificaciones determinísticas?

Usa verificaciones determinísticas para requisitos estrictos que pueden verificarse con coincidencia de cadenas o regex. Usa LLM-as-Judge para calidad subjetiva que requiere entender el contexto.

Ejemplo: "Debe mencionar un precio" → verificación determinística. "¿Es la respuesta útil?" → LLM-as-Judge.

¿Qué pasa si mi agente usa más de 50 herramientas? ¿Escala la evaluación de trayectorias?

Sí. La evaluación de trayectorias examina la secuencia de llamadas a herramientas, no detalles individuales de cada herramienta. Una trayectoria de 50 llamadas sigue siendo una sola llamada API al LLM juez.

Costo por evaluación: ~$0.001-0.003 (GPT-4o-mini) o $0.015-0.045 (Claude Sonnet).

¿Puedo usar evaluación de trayectorias con LangGraph o AutoGen?

Sí. La evaluación de trayectorias solo requiere la lista de llamadas a herramientas como entrada. Captúralas con .get_graph().get_state() de LangGraph o el historial de mensajes de AutoGen, luego pásalas a TrajectoryEvaluator.

¿Con qué frecuencia debo ejecutar evaluaciones?

  • CI/CD: Ejecuta en cada commit con una suite pequeña de pruebas (10-20 casos)
  • Staging: Ejecuta suite completa (100-500 casos) antes del despliegue a producción
  • Producción: Muestrea 1-5% del tráfico en vivo y evalúa de manera asíncrona

Puntos Clave

  1. Las métricas binarias pierden 73% de graduaciones de calidad. Usa puntuación continua (0.0-1.0) con rúbricas explícitas.

  2. La evaluación de trayectorias detecta problemas que la evaluación de solo salida no capta: llamadas duplicadas, herramientas irrelevantes, pasos inseguros.

  3. La escala 0-5 produce el alineamiento humano-LLM más fuerte (0.89 correlación de Pearson). Mapea a 0.0-1.0 en código.

  4. Los hooks de Strands capturan trayectorias automáticamente mediante AfterToolCallEvent. No se necesita instrumentación manual.

  5. Combina ambas técnicas. LLM-as-Judge para calidad de salida, evaluación de trayectorias para calidad de proceso.


¿Qué Sigue?

Este post cubrió los fundamentos de evaluación - LLM-as-Judge y análisis de trayectorias. Estas técnicas forman la base para patrones de evaluación más profundos.

Siguiente en esta serie:

  • Parte 3: Detectando Fallos de Agentes3-detecting-failures.md) - Detección de alucinaciones sin ejemplos previos con métricas LSC, monitoreo de seguridad a nivel de trayectoria y barreras en tiempo real con hooks de Strands

  • Parte 4: Métricas de Producción4-production-metrics.md) - Compensaciones costo-calidad con índice compuesto KAMI, validación de corrección de herramientas y observabilidad de AWS Bedrock AgentCore

Todos los ejemplos de código están en el repositorio de GitHub con notebooks Jupyter ejecutables.


Referencias


Gracias!

🇻🇪🇨🇱 Dev.to Linkedin GitHub Twitter Instagram Youtube