TL;DR
Promptfoo es un framework de evaluación y red-teaming de LLM de código abierto para que los desarrolladores prueben aplicaciones de IA de forma sistemática. Compatible con más de 90 proveedores de modelos, más de 67 plugins de ataque de seguridad y ejecución 100% local para máxima privacidad. Con más de 1.6 millones de descargas en npm y uso en producción en empresas con más de 10 millones de usuarios, se ha posicionado como estándar para pruebas de LLM. Instálelo con:
npm install -g promptfoo
promptfoo init --example getting-started
Introducción
¿Has pasado semanas construyendo un chatbot IA que funcionaba perfecto en desarrollo y luego en producción los usuarios logran que filtre datos sensibles, eluda medidas de seguridad o entregue respuestas inconsistentes? No eres el único. Lanzar aplicaciones LLM sin pruebas automatizadas produce vulnerabilidades y pérdidas de calidad difíciles (y costosas) de detectar post-lanzamiento.
Promptfoo resuelve este problema con pruebas automatizadas y sistemáticas para aplicaciones LLM. Permite evaluar prompts en múltiples modelos, hacer pruebas de "red team" de seguridad y detectar regresiones antes que lleguen a los usuarios.
En esta guía, aprenderás cómo configurar evaluaciones, escanear seguridad, integrar con CI/CD y evitar errores comunes. Al final, tendrás un set de pruebas funcional y podrás lanzar tu app LLM con confianza.
💡 Si trabajas con pruebas de API o necesitas validar el comportamiento de APIs junto con tus pruebas LLM, Apidog ofrece una plataforma unificada para diseño, pruebas y documentación de APIs. Usa promptfoo para LLM y Apidog para la capa de API.
¿Qué es Promptfoo y por qué lo necesitas?
Promptfoo es una CLI y librería Node.js para evaluar y hacer red-teaming de aplicaciones LLM. Es un framework de testing hecho para los retos propios de la IA generativa.
Las herramientas tradicionales de testing no funcionan con LLM porque los resultados no son deterministas. Promptfoo soluciona esto con:
- Aserciones semánticas que validan significado, no texto exacto.
- Evaluaciones por LLM: un modelo califica la salida de otro.
- Comparación multi-modelo: ejecuta el mismo prompt en GPT-4, Claude, etc.
- Plugins de seguridad: ejecuta ataques automáticos para encontrar vulnerabilidades.
Ejecuta localmente: tus datos nunca salen de tu entorno salvo que actives funciones cloud.
El problema que resuelve Promptfoo
La mayoría de equipos hace pruebas LLM manuales (enviando prompts y revisando resultados). Esto falla por:
- No detecta regresiones: actualizaciones pueden romper funcionalidades existentes.
- Cobertura incompleta: los casos límite y adversarios se omiten.
- Sin métricas: no hay forma objetiva de medir o comparar.
Promptfoo automatiza la evaluación. Defines los casos una vez y los corres en cualquier modelo, obteniendo tasas de éxito/fallo, costos y métricas de latencia.
Quién usa Promptfoo
Con 1.6M de descargas npm, Promptfoo potencia aplicaciones para más de 10M de usuarios finales. Casos de uso:
- Chatbots de soporte con respuestas consistentes.
- Pipelines de generación de contenido.
- Apps de salud/finanzas con requisitos estrictos.
- Sistemas sensibles a la seguridad.
Desde marzo 2026, Promptfoo es parte de OpenAI, sigue siendo open-source y con licencia MIT.
Primeros pasos: Instala y ejecuta tu primera evaluación
Puedes instalar promptfoo globalmente o usarlo con npx.
Instalación
# Instalación global recomendada
npm install -g promptfoo
# O ejecútalo sin instalar
npx promptfoo@latest
# En macOS vía Homebrew
brew install promptfoo
# En Python vía pip
pip install promptfoo
Configura tus claves API como variables de entorno:
export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
Crea tu primera evaluación
Inicializa un proyecto de ejemplo:
promptfoo init --example getting-started
cd getting-started
Esto crea promptfooconfig.yaml con prompts, proveedores y pruebas de ejemplo.
Ejecuta la evaluación:
promptfoo eval
Visualiza los resultados en la interfaz web:
promptfoo view
La UI abre en localhost:3000 y muestra comparaciones lado a lado y estado de aprobado/fallado por aserción.
Comprendiendo el archivo de configuración
El promptfooconfig.yaml define tu suite de evaluación:
description: "Mi primera suite de evaluación"
prompts:
- prompts/greeting.txt
- prompts/farewell.txt
providers:
- openai:gpt-4o
- anthropic:claude-sonnet-4-5
tests:
- vars:
input: "Hola"
assert:
- type: contains
value: "Hola"
- type: latency
threshold: 3000
- prompts: Archivos o texto inline.
- providers: Modelos a evaluar.
- tests: Casos de prueba y aserciones.
Escala a cientos de pruebas. Versiona tu configuración y ejecútala en CI en cada pull request.
Funciones principales: Qué puede hacer Promptfoo
1. Evaluaciones automatizadas
Define casos de prueba y resultados esperados. Promptfoo los ejecuta contra tus modelos.
Tipos de aserción
Más de 30 tipos integrados:
| Aserción | Propósito |
|---|---|
contains |
Salida incluye una subcadena |
equals |
Coincidencia exacta de cadena |
regex |
Patrón de expresión regular |
json-schema |
Valida estructura JSON |
javascript |
Función JS personalizada |
python |
Función Python personalizada |
llm-rubric |
LLM califica la salida |
similar |
Similitud semántica |
latency |
Tiempo de respuesta bajo umbral |
cost |
Costo por solicitud bajo umbral |
Ejemplo con varias aserciones:
tests:
- vars:
question: "¿Cuál es la capital de Francia?"
assert:
- type: contains
value: "París"
- type: javascript
value: output.length < 100
- type: latency
threshold: 2000
- type: cost
threshold: 0.001
Evaluaciones por LLM
llm-rubric permite que un LLM califique la salida de otro, útil para tono o utilidad:
assert:
- type: llm-rubric
value: "La respuesta debe ser útil, inofensiva y honesta"
Puedes usar un modelo económico para calificar y ahorrar costos.
2. Red Teaming y pruebas de seguridad
El módulo de "red team" genera entradas adversarias automáticamente para detectar vulnerabilidades.
Vectores de ataque soportados
| Categoría | Lo que prueba |
|---|---|
| Inyección de Prompts | Inyección directa, indirecta, de contexto |
| Jailbreaks | DAN, cambio de persona, bypass de rol |
| Exfiltración de Datos | SSRF, extracción de prompts del sistema, fuga de prompts |
| Contenido Nocivo | Discurso de odio, autolesión, actividades peligrosas |
| Cumplimiento | Fuga de PII, HIPAA, datos financieros |
| Audio/Visual | Inyección de audio y ataques visuales |
Ejecutando un escaneo de "red team"
Inicializa configuración:
promptfoo redteam init
Ejecuta el escaneo:
promptfoo redteam run
Ver informe:
promptfoo redteam report [directorio]
redteam run genera sondas de ataque y evalúa vulnerabilidades, con calificaciones de severidad y recomendaciones.
Ejemplo de salida:
Resumen de Vulnerabilidades:
- Crítica: 2 (fuga de PII, extracción de prompt)
- Alta: 5 (jailbreaks, inyecciones)
- Media: 12 (sesgo, respuestas inconsistentes)
- Baja: 23 (violaciones menores de políticas)
Soluciona problemas críticos antes de desplegar. Repite los escaneos tras cada cambio.
3. Escaneo de código en pull requests
Integración con GitHub Actions para escanear PRs:
# .github/workflows/promptfoo-scan.yml
name: Escaneo de código Promptfoo
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: promptfoo/promptfoo/code-scan-action@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Detecta claves API expuestas, prompts inseguros, falta de validación y vectores de inyección.
4. Comparación de modelos
Compara resultados lado a lado:
promptfoo eval
promptfoo view
La UI muestra tasas de éxito/fallo, costos, latencia y diferencias cualitativas por modelo.
Proveedores soportados: Más de 90 integraciones LLM
Promptfoo soporta más de 90 proveedores. Prueba el mismo prompt en OpenAI, Anthropic, Google, Amazon y modelos locales sin cambiar código.
Principales proveedores
| Proveedor | Modelos principales |
|---|---|
| OpenAI | GPT-4, GPT-4o, GPT-4o-mini, o1, o3 |
| Anthropic | Claude 3.5/3.7/4.5/4.6, Thinking |
| Gemini 1.5/2.0, Vertex AI | |
| Microsoft | Azure OpenAI, Phi |
| Amazon | Bedrock (Claude, Llama, Titan) |
| Meta | Llama 3, 3.1, 3.2 (vía varios proveedores) |
| Ollama | Modelos locales (Llama, Mistral, Phi) |
Proveedores personalizados
Escribe proveedores propios en Python o JavaScript.
Ejemplo Python:
# custom_provider.py
from typing import Any
class CustomProvider:
async def call_api(self, prompt: str, options: dict, context: dict) -> dict:
response = await my_async_api.generate(prompt)
return {
"output": response.text,
"tokenUsage": {
"total": response.usage.total_tokens,
"prompt": response.usage.prompt_tokens,
"completion": response.usage.completion_tokens
}
}
Ejemplo JavaScript:
// customProvider.js
export default class CustomProvider {
async callApi(prompt) {
return {
output: await myApi.generate(prompt),
tokenUsage: { total: 50, prompt: 20, completion: 30 }
};
}
}
Regístralos en la configuración:
providers:
- id: file://custom_provider.py
config:
api_key: ${MY_API_KEY}
Interfaz de línea de comandos: Comandos esenciales
La CLI cubre todo lo necesario para flujos diarios.
Comandos principales
# Ejecutar evaluaciones
promptfoo eval -c promptfooconfig.yaml
# Abrir interfaz web
promptfoo view
# Compartir resultados online
promptfoo share
# Pruebas de "red team"
promptfoo redteam init
promptfoo redteam run
# Configuración
promptfoo init
promptfoo validate [config]
# Gestión de resultados
promptfoo list
promptfoo show <id>
promptfoo delete <id>
promptfoo export <id>
# Utilidades
promptfoo cache clear
promptfoo retry <id>
Banderas útiles
--no-cache # Desactiva caché para resultados frescos
--max-concurrency <n> # Limita llamadas paralelas
--output <file> # Escribe resultados en JSON
--verbose # Activa logs detallados
--env-file <path> # Carga variables de entorno desde archivo
--filter <pattern> # Ejecuta pruebas específicas
Ejemplo: Evaluación con configuración personalizada
promptfoo eval \
-c promptfooconfig.yaml \
--no-cache \
--max-concurrency 3 \
--output results.json \
--env-file .env
Integración CI/CD: Automatiza tus pruebas LLM
Integra promptfoo en tu pipeline CI/CD para detectar regresiones antes de desplegar.
Ejemplo GitHub Actions
name: Pruebas LLM
on: [push, pull_request]
jobs:
eval:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm install -g promptfoo
- run: promptfoo eval -c promptfooconfig.yaml
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Puertas de calidad
Establece umbrales de éxito/fallo:
commandLineOptions:
threshold: 0.8 # Requiere 80% de aprobados
CI fallará si no se cumple el umbral.
Caché en CI
Acelera ejecuciones con caché:
- uses: actions/cache@v4
with:
path: ~/.cache/promptfoo
key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}
Interfaz web: Visualiza y comparte resultados
La UI (promptfoo view) permite analizar evaluaciones de forma interactiva.
Características
- Matriz de evaluación: comparación lado a lado.
- Filtrado: busca casos concretos por estado o proveedor.
- Vista de diferencias: muestra cambios entre ejecuciones.
- Compartir: enlaces compartibles para revisión en equipo.
- Actualizaciones en tiempo real: sigue las evaluaciones en vivo.
Acceso y seguridad
Por defecto en localhost:3000 con protección CSRF. No expongas el servidor a redes no confiables. Usa promptfoo share para compartir en la nube o autoalójalo con autenticación.
Base de datos y caché
Ubicación de la caché
-
macOS/Linux:
~/.cache/promptfoo -
Windows:
%LOCALAPPDATA%\promptfoo
Usa la caché para acelerar ejecuciones repetidas. Usa --no-cache para resultados frescos.
Ubicación de la base de datos
-
Todas las plataformas:
~/.promptfoo/promptfoo.db(SQLite)
No elimines este archivo salvo que quieras perder datos históricos.
Modelo de seguridad: ¿En qué puedes confiar?
Promptfoo opera bajo modelo de confianza por configuración.
Entradas de confianza (tratadas como código)
- Archivos de configuración (
promptfooconfig.yaml) - Aserciones personalizadas JS/Python/Ruby
- Configuración de proveedores
- Funciones de transformación
Entradas no confiables (solo datos)
- Texto del prompt
- Variables de pruebas
- Resultados del modelo
- Contenido remoto obtenido durante testings
Recomendaciones de endurecimiento
- Ejecuta en contenedor/VM con privilegios mínimos.
- Usa API keys de bajo privilegio.
- No incluyas secretos en prompts/config.
- Restringe salida de red para código externo.
- No expongas el server web a redes no confiables.
Rendimiento: Optimiza tus evaluaciones
Consejos de optimización
- Usa caché para acelerar ejecuciones repetidas.
-
Ajusta concurrencia con
--max-concurrency. -
Filtra pruebas con
--filterdurante desarrollo. -
Subconjuntos de pruebas con
--repeatpara iterar rápido.
Escalado para grandes evaluaciones
- Usa el scheduler (
src/scheduler/) para ejecuciones distribuidas. - Generación remota para descargar cómputo.
- Exporta resultados a Google Sheets para visibilidad.
Extensibilidad: Construye funciones personalizadas
Aserciones personalizadas
Crea aserciones propias para tu dominio:
// assertions/customCheck.js
export default function customCheck(output, context) {
const pass = output.includes('expected');
return {
pass,
score: pass ? 1 : 0,
reason: pass ? 'Output matched' : 'Missing expected content'
};
}
Úsalo en la configuración:
assert:
- type: file://assertions/customCheck.js
Servidor MCP
Promptfoo incluye servidor MCP para integrar con asistentes IA:
promptfoo mcp
Permite a agentes IA:
- Ejecutar evaluaciones desde chat.
- Acceder a capacidades de red team.
- Consultar resultados almacenados.
- Generar casos de prueba.
Casos de uso en el mundo real
Chatbot de soporte al cliente
- 500 pruebas de preguntas comunes.
- Comparación GPT-4 vs Claude.
- Escaneos de red team para PII y jailbreaks.
- CI bloquea despliegues si fallan evaluaciones.
- Resultado: 90% menos issues reportados tras automatizar pruebas.
Pipeline de generación de contenido
- LLM evalúa tono y estilo.
- Umbrales de latencia.
- Monitoreo de costos.
- Comparación de proveedores.
- Resultado: Voz de marca consistente y 40% menos costos API.
Aplicación de atención médica
- Escaneos de red team para HIPAA.
- Aserciones personalizadas para precisión médica.
- Ejecución local para privacidad.
- Registros de auditoría.
- Resultado: Auditoría SOC 2 aprobada usando promptfoo como evidencia.
Conclusión
Promptfoo lleva el testing sistemático a las aplicaciones LLM, reemplazando pruebas manuales por evaluaciones automatizadas que detectan regresiones, seguridad y calidad antes de desplegar.
Resumen de acciones:
- Instala con
npm install -g promptfooy arranca conpromptfoo init. - Usa aserciones que validan más allá del texto exacto.
- Ejecuta escaneos de "red team" para seguridad.
- Integra con CI/CD y bloquea regresiones.
- Compara modelos objetivamente.
- Usa proveedores y aserciones personalizadas para máxima flexibilidad.
El futuro del desarrollo IA es data-driven. Promptfoo te da las herramientas para construir, probar y asegurar aplicaciones LLM a escala.
Si también trabajas con APIs, considera usar Apidog junto con promptfoo. Apidog cubre diseño, pruebas y documentación de APIs; promptfoo se enfoca en LLM. Juntos cubren el stack completo de pruebas para aplicaciones modernas.
Preguntas frecuentes
¿Para qué se utiliza promptfoo?
Para probar y evaluar aplicaciones LLM: ejecuta pruebas automatizadas contra prompts, compara resultados entre modelos y realiza escaneos de seguridad tipo "red team".
¿Es promptfoo gratuito?
Sí, es open source bajo licencia MIT. Gratis para uso personal y comercial. Funcionalidades cloud/soporte empresarial pueden ser de pago.
¿Cómo instalo promptfoo?
npm install -g promptfoo para instalar globalmente, o npx promptfoo@latest, brew install promptfoo, o pip install promptfoo para Python.
¿Qué modelos soporta promptfoo?
Más de 90 proveedores, incluyendo OpenAI (GPT-4, GPT-4o, o1), Anthropic (Claude 3.5/4/4.5), Google (Gemini), Microsoft (Azure OpenAI), Amazon Bedrock y modelos locales vía Ollama.
¿Cómo ejecuto un escaneo de "red team"?
promptfoo redteam init para crear la config, luego promptfoo redteam run para ejecutar, y promptfoo redteam report para ver resultados.
¿Puedo usar promptfoo en CI/CD?
Sí. Instala promptfoo en tu pipeline y ejecuta promptfoo eval con tu configuración. Aplica puertas de calidad (threshold) para que CI falle si no se cumple el mínimo de aprobados.
¿Promptfoo envía mis datos a servidores externos?
No. Por defecto todo se ejecuta localmente. Solo si activas funciones cloud tus datos salen de tu máquina. Archivos de caché y DB son locales.
¿Cómo comparo modelos con promptfoo?
Agrega varios proveedores en tu config y ejecuta promptfoo eval. Visualiza comparaciones en la UI web (promptfoo view) con datos de éxito, costo y latencia por modelo.


Top comments (0)