@saulwade/swl-ses 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +238 -0
- package/README.md +560 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/.evolved.json +9 -0
- package/agentes/accesibilidad-wcag-swl.md +692 -0
- package/agentes/arquitecto-swl.md +238 -0
- package/agentes/auto-evolucion-swl.md +854 -0
- package/agentes/backend-api-swl.md +470 -0
- package/agentes/backend-csharp-swl.md +418 -0
- package/agentes/backend-go-swl.md +388 -0
- package/agentes/backend-java-swl.md +279 -0
- package/agentes/backend-node-swl.md +477 -0
- package/agentes/backend-python-swl.md +608 -0
- package/agentes/backend-rust-swl.md +362 -0
- package/agentes/backend-workers-swl.md +480 -0
- package/agentes/cloud-infra-swl.md +485 -0
- package/agentes/consolidador-swl.md +539 -0
- package/agentes/datos-swl.md +584 -0
- package/agentes/depurador-swl.md +349 -0
- package/agentes/devops-ci-swl.md +374 -0
- package/agentes/disenador-ui-swl.md +558 -0
- package/agentes/documentador-swl.md +343 -0
- package/agentes/evals/arquitecto-swl.evals.json +56 -0
- package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
- package/agentes/evals/implementador-swl.evals.json +56 -0
- package/agentes/evals/orquestador-swl.evals.json +60 -0
- package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
- package/agentes/evals/red-team-swl.evals.json +59 -0
- package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
- package/agentes/frontend-angular-swl.md +627 -0
- package/agentes/frontend-css-swl.md +720 -0
- package/agentes/frontend-react-swl.md +696 -0
- package/agentes/frontend-swl.md +500 -0
- package/agentes/frontend-tailwind-swl.md +830 -0
- package/agentes/implementador-swl.md +328 -0
- package/agentes/investigador-swl.md +430 -0
- package/agentes/investigador-ux-swl.md +500 -0
- package/agentes/llm-apps-swl.md +276 -0
- package/agentes/migrador-swl.md +417 -0
- package/agentes/mobile-android-swl.md +509 -0
- package/agentes/mobile-cross-swl.md +539 -0
- package/agentes/mobile-ios-swl.md +500 -0
- package/agentes/mobile-testing-swl.md +300 -0
- package/agentes/notificador-swl.md +916 -0
- package/agentes/observabilidad-swl.md +436 -0
- package/agentes/orquestador-swl.md +884 -0
- package/agentes/pagos-swl.md +283 -0
- package/agentes/perfilador-usuario-swl.md +306 -0
- package/agentes/planificador-swl.md +402 -0
- package/agentes/producto-prd-swl.md +587 -0
- package/agentes/red-team-swl.md +216 -0
- package/agentes/release-manager-swl.md +568 -0
- package/agentes/rendimiento-swl.md +714 -0
- package/agentes/resolutor-build-swl.md +243 -0
- package/agentes/revisor-angular-swl.md +276 -0
- package/agentes/revisor-codigo-swl.md +348 -0
- package/agentes/revisor-csharp-swl.md +262 -0
- package/agentes/revisor-go-swl.md +257 -0
- package/agentes/revisor-java-swl.md +255 -0
- package/agentes/revisor-kotlin-swl.md +271 -0
- package/agentes/revisor-nextjs-swl.md +279 -0
- package/agentes/revisor-php-swl.md +269 -0
- package/agentes/revisor-react-swl.md +276 -0
- package/agentes/revisor-rust-swl.md +344 -0
- package/agentes/revisor-seguridad-swl.md +390 -0
- package/agentes/revisor-swift-swl.md +266 -0
- package/agentes/revisor-typescript-swl.md +344 -0
- package/agentes/sre-swl.md +265 -0
- package/agentes/tdd-qa-swl.md +354 -0
- package/agentes/ux-disenador-swl.md +501 -0
- package/bin/lib/bot-comandos.js +1030 -0
- package/bin/lib/bot-discovery.js +182 -0
- package/bin/lib/bot-git.js +142 -0
- package/bin/swl-ses.js +325 -0
- package/bin/swl-telegram-bot.js +442 -0
- package/bin/swl-telegram-bot.plist +21 -0
- package/bin/swl-telegram-bot.service +14 -0
- package/comandos/swl/.evolved.json +23 -0
- package/comandos/swl/actualizar.md +174 -0
- package/comandos/swl/adoptar-proyecto.md +207 -0
- package/comandos/swl/aprender.md +701 -0
- package/comandos/swl/auditar-deps.md +134 -0
- package/comandos/swl/autoresearch.md +170 -0
- package/comandos/swl/ayuda.md +224 -0
- package/comandos/swl/brainstorm.md +50 -0
- package/comandos/swl/checkpoint.md +330 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/configurar-ci.md +227 -0
- package/comandos/swl/contexto.md +112 -0
- package/comandos/swl/contribuir.md +233 -0
- package/comandos/swl/crear-skill.md +292 -0
- package/comandos/swl/cron.md +196 -0
- package/comandos/swl/dashboard.md +146 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +135 -0
- package/comandos/swl/evaluar-skill.md +487 -0
- package/comandos/swl/evolucion-estado.md +142 -0
- package/comandos/swl/evolucionar.md +259 -0
- package/comandos/swl/exportar-vault.md +189 -0
- package/comandos/swl/gateway.md +158 -0
- package/comandos/swl/inbox.md +116 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/instintos.md +86 -0
- package/comandos/swl/mapear-codebase.md +312 -0
- package/comandos/swl/mcp-status.md +175 -0
- package/comandos/swl/metricas.md +270 -0
- package/comandos/swl/modelo.md +102 -0
- package/comandos/swl/notificaciones.md +396 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/plugins.md +256 -0
- package/comandos/swl/reflect-skills.md +125 -0
- package/comandos/swl/release.md +217 -0
- package/comandos/swl/revisar-impacto.md +206 -0
- package/comandos/swl/revisar.md +330 -0
- package/comandos/swl/salud.md +363 -0
- package/comandos/swl/sesiones.md +200 -0
- package/comandos/swl/skill-search.md +113 -0
- package/comandos/swl/verificar.md +585 -0
- package/comandos/swl/wiki.md +620 -0
- package/contextos/dev.md +32 -0
- package/contextos/research.md +30 -0
- package/contextos/review.md +31 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
- package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
- package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
- package/habilidades/agent-browser/SKILL.md +218 -0
- package/habilidades/agentes-como-servicio/SKILL.md +218 -0
- package/habilidades/ai-runtime-security/SKILL.md +273 -0
- package/habilidades/angular-avanzado/SKILL.md +164 -0
- package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
- package/habilidades/angular-moderno/SKILL.md +186 -0
- package/habilidades/angular-moderno/evals/evals.json +45 -0
- package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
- package/habilidades/api-rest-diseno/SKILL.md +191 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
- package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
- package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
- package/habilidades/async-python/SKILL.md +149 -0
- package/habilidades/async-python/evals/evals.json +47 -0
- package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
- package/habilidades/auth-patrones/.evolved.json +9 -0
- package/habilidades/auth-patrones/SKILL.md +413 -0
- package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
- package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
- package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
- package/habilidades/autoresearch/SKILL.md +268 -0
- package/habilidades/autoresearch/evals/evals.json +41 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/azure-cloud/SKILL.md +308 -0
- package/habilidades/azure-cloud/recursos/aks.md +327 -0
- package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
- package/habilidades/backend-production-resilience/SKILL.md +288 -0
- package/habilidades/brainstorming/SKILL.md +295 -0
- package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
- package/habilidades/build-errors-cpp/SKILL.md +270 -0
- package/habilidades/build-errors-csharp/SKILL.md +265 -0
- package/habilidades/build-errors-go/SKILL.md +306 -0
- package/habilidades/build-errors-java/SKILL.md +278 -0
- package/habilidades/build-errors-kotlin/SKILL.md +303 -0
- package/habilidades/build-errors-nextjs/SKILL.md +312 -0
- package/habilidades/build-errors-php/SKILL.md +270 -0
- package/habilidades/build-errors-python/SKILL.md +292 -0
- package/habilidades/build-errors-rust/SKILL.md +284 -0
- package/habilidades/build-errors-swift/SKILL.md +272 -0
- package/habilidades/build-errors-typescript/SKILL.md +369 -0
- package/habilidades/checklist-calidad/SKILL.md +271 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +285 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
- package/habilidades/cloud-aws/SKILL.md +142 -0
- package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
- package/habilidades/compactacion-contexto/SKILL.md +247 -0
- package/habilidades/contenedores-docker/SKILL.md +137 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
- package/habilidades/context-builder/SKILL.md +170 -0
- package/habilidades/control-profundidad/SKILL.md +128 -0
- package/habilidades/csharp-experto/SKILL.md +322 -0
- package/habilidades/csharp-patrones/SKILL.md +316 -0
- package/habilidades/csharp-testing/SKILL.md +286 -0
- package/habilidades/css-moderno/SKILL.md +166 -0
- package/habilidades/css-moderno/evals/evals.json +43 -0
- package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
- package/habilidades/datos-etl/SKILL.md +129 -0
- package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
- package/habilidades/dbml-experto/SKILL.md +339 -0
- package/habilidades/dbml-experto/evals/evals.json +56 -0
- package/habilidades/dependencias-auditoria/SKILL.md +320 -0
- package/habilidades/deprecacion-migracion/SKILL.md +169 -0
- package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
- package/habilidades/design-tokens/SKILL.md +158 -0
- package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
- package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
- package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
- package/habilidades/discutir-fase/SKILL.md +188 -0
- package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
- package/habilidades/diseno-responsivo/SKILL.md +186 -0
- package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
- package/habilidades/django-experto/SKILL.md +205 -0
- package/habilidades/django-experto/recursos/async-django.md +390 -0
- package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
- package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
- package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
- package/habilidades/django-experto/recursos/testing-django.md +415 -0
- package/habilidades/doc-sync/SKILL.md +280 -0
- package/habilidades/drift-detection/SKILL.md +179 -0
- package/habilidades/ejecutar-fase/SKILL.md +468 -0
- package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
- package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
- package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/evaluacion-agentes/SKILL.md +314 -0
- package/habilidades/event-driven/SKILL.md +153 -0
- package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
- package/habilidades/extraccion-documentos/SKILL.md +221 -0
- package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
- package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
- package/habilidades/fastapi-experto/SKILL.md +221 -0
- package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
- package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
- package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
- package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
- package/habilidades/filament-admin/SKILL.md +290 -0
- package/habilidades/frontend-avanzado/SKILL.md +257 -0
- package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
- package/habilidades/gcp-cloud/SKILL.md +260 -0
- package/habilidades/gcp-cloud/recursos/gke.md +234 -0
- package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
- package/habilidades/generacion-mermaid/SKILL.md +229 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
- package/habilidades/go-experto/SKILL.md +305 -0
- package/habilidades/go-patrones/SKILL.md +299 -0
- package/habilidades/go-testing/SKILL.md +291 -0
- package/habilidades/graphql-experto/SKILL.md +323 -0
- package/habilidades/guardrail-semantico/SKILL.md +282 -0
- package/habilidades/harness-claude-code/SKILL.md +299 -0
- package/habilidades/iam-secretos/SKILL.md +265 -0
- package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
- package/habilidades/infra-github-actions/SKILL.md +166 -0
- package/habilidades/instalar-sistema/.evolved.json +9 -0
- package/habilidades/instalar-sistema/SKILL.md +221 -0
- package/habilidades/java-experto/SKILL.md +290 -0
- package/habilidades/java-patrones/SKILL.md +275 -0
- package/habilidades/java-testing/SKILL.md +288 -0
- package/habilidades/kotlin-compose/SKILL.md +278 -0
- package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
- package/habilidades/kotlin-experto/SKILL.md +318 -0
- package/habilidades/kotlin-testing/SKILL.md +267 -0
- package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
- package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
- package/habilidades/langchain-langraph/SKILL.md +386 -0
- package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
- package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
- package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
- package/habilidades/legacy-code-rescue/SKILL.md +267 -0
- package/habilidades/likec4-experto/SKILL.md +412 -0
- package/habilidades/likec4-experto/evals/evals.json +69 -0
- package/habilidades/manejo-errores/.evolved.json +9 -0
- package/habilidades/manejo-errores/SKILL.md +407 -0
- package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
- package/habilidades/mapear-codebase/SKILL.md +275 -0
- package/habilidades/memoria-busqueda/SKILL.md +194 -0
- package/habilidades/memoria-busqueda/evals/evals.json +44 -0
- package/habilidades/meta-skills-estandar/SKILL.md +298 -0
- package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
- package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
- package/habilidades/microservicios/SKILL.md +155 -0
- package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
- package/habilidades/mobile-flutter/SKILL.md +199 -0
- package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
- package/habilidades/mobile-react-native/SKILL.md +176 -0
- package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
- package/habilidades/mongodb-experto/SKILL.md +302 -0
- package/habilidades/monitoring-alertas/SKILL.md +201 -0
- package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
- package/habilidades/nestjs-experto/SKILL.md +307 -0
- package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
- package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
- package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
- package/habilidades/nextjs-experto/SKILL.md +335 -0
- package/habilidades/nextjs-patrones/SKILL.md +303 -0
- package/habilidades/nextjs-testing/SKILL.md +331 -0
- package/habilidades/node-experto/.evolved.json +9 -0
- package/habilidades/node-experto/SKILL.md +266 -0
- package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
- package/habilidades/nuevo-proyecto/SKILL.md +204 -0
- package/habilidades/orquestacion-async/SKILL.md +303 -0
- package/habilidades/paid-media-tracking/SKILL.md +269 -0
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
- package/habilidades/patrones-python/SKILL.md +228 -0
- package/habilidades/patrones-python/evals/evals.json +56 -0
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
- package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
- package/habilidades/perfil-usuario/SKILL.md +200 -0
- package/habilidades/perfil-usuario/evals/evals.json +55 -0
- package/habilidades/performance-baseline/SKILL.md +297 -0
- package/habilidades/php-experto/SKILL.md +291 -0
- package/habilidades/php-patrones/SKILL.md +306 -0
- package/habilidades/php-testing/SKILL.md +280 -0
- package/habilidades/planear-fase/SKILL.md +269 -0
- package/habilidades/postgresql-experto/SKILL.md +151 -0
- package/habilidades/postgresql-experto/evals/evals.json +53 -0
- package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
- package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
- package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
- package/habilidades/privacy-memoria/SKILL.md +141 -0
- package/habilidades/privacy-memoria/evals/evals.json +43 -0
- package/habilidades/prompt-engineering/SKILL.md +518 -0
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
- package/habilidades/rag-arquitectura/SKILL.md +338 -0
- package/habilidades/rails-experto/SKILL.md +237 -0
- package/habilidades/rails-experto/recursos/active-record.md +260 -0
- package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
- package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
- package/habilidades/react-experto/SKILL.md +209 -0
- package/habilidades/react-experto/evals/evals.json +55 -0
- package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
- package/habilidades/react-optimizacion/SKILL.md +174 -0
- package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
- package/habilidades/redis-experto/SKILL.md +305 -0
- package/habilidades/release-semver/.evolved.json +9 -0
- package/habilidades/release-semver/SKILL.md +248 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/rust-experto/SKILL.md +400 -0
- package/habilidades/rust-patrones/SKILL.md +296 -0
- package/habilidades/rust-testing/SKILL.md +311 -0
- package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
- package/habilidades/sql-optimizacion/SKILL.md +200 -0
- package/habilidades/sql-optimizacion/evals/evals.json +54 -0
- package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
- package/habilidades/sre-patrones/SKILL.md +333 -0
- package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
- package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
- package/habilidades/stripe-pagos/SKILL.md +550 -0
- package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
- package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
- package/habilidades/structured-outputs/SKILL.md +343 -0
- package/habilidades/swift-experto/SKILL.md +320 -0
- package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
- package/habilidades/swift-patrones/SKILL.md +313 -0
- package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
- package/habilidades/swift-testing/SKILL.md +254 -0
- package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
- package/habilidades/swl-dashboard/SKILL.md +370 -0
- package/habilidades/swl-markitdown/SKILL.md +285 -0
- package/habilidades/swl-markitdown/evals/evals.json +52 -0
- package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
- package/habilidades/tailwind-experto/SKILL.md +240 -0
- package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
- package/habilidades/tdd-workflow/SKILL.md +293 -0
- package/habilidades/terraform-experto/SKILL.md +321 -0
- package/habilidades/testing-python/SKILL.md +340 -0
- package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
- package/habilidades/threat-model-lite/SKILL.md +246 -0
- package/habilidades/tracing-processor/SKILL.md +212 -0
- package/habilidades/tracking-measurement/SKILL.md +239 -0
- package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
- package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
- package/habilidades/typescript-avanzado/SKILL.md +144 -0
- package/habilidades/typescript-avanzado/evals/evals.json +55 -0
- package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
- package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
- package/habilidades/ux-diseno/SKILL.md +116 -0
- package/habilidades/ux-diseno/evals/evals.json +43 -0
- package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificacion-evidencia/SKILL.md +160 -0
- package/habilidades/verificar-trabajo/SKILL.md +303 -0
- package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
- package/habilidades/wiki-conocimiento/SKILL.md +276 -0
- package/habilidades/wireframes-flujos/SKILL.md +212 -0
- package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
- package/habilidades/workflow-claude-code/SKILL.md +260 -0
- package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
- package/hooks/_run-hook.sh +57 -0
- package/hooks/actualizar-perfil-usuario.js +364 -0
- package/hooks/agente-lifecycle.js +71 -0
- package/hooks/aiisms-detector.js +173 -0
- package/hooks/audit-trail.js +204 -0
- package/hooks/auto-background.js +97 -0
- package/hooks/auto-consolidacion.js +178 -0
- package/hooks/auto-evolucion.js +666 -0
- package/hooks/auto-restaurar-settings.js +360 -0
- package/hooks/calidad-pre-commit.js +929 -0
- package/hooks/calidad-typescript.js +511 -0
- package/hooks/captura-feedback-usuario.js +148 -0
- package/hooks/check-update.js +211 -0
- package/hooks/clasificador-mensajes.js +271 -0
- package/hooks/degradacion-instintos.js +272 -0
- package/hooks/escaneo-secretos.js +389 -0
- package/hooks/extraccion-aprendizajes.js +763 -0
- package/hooks/grafo-contexto.js +129 -0
- package/hooks/graph-update.js +67 -0
- package/hooks/guardrail-modelo.js +247 -0
- package/hooks/inbox-aviso.js +75 -0
- package/hooks/inyeccion-contexto.js +246 -0
- package/hooks/lib/abort-registry.js +214 -0
- package/hooks/lib/agent-backend.js +210 -0
- package/hooks/lib/agent-comms.js +263 -0
- package/hooks/lib/agent-issue-codes.js +284 -0
- package/hooks/lib/agent-matcher.js +189 -0
- package/hooks/lib/async-hook-registry.js +252 -0
- package/hooks/lib/atomic-write.js +130 -0
- package/hooks/lib/auto-consolidator.js +335 -0
- package/hooks/lib/canary-skills.js +187 -0
- package/hooks/lib/consolidation-lock.js +291 -0
- package/hooks/lib/context-builder.js +430 -0
- package/hooks/lib/context-compressor.js +657 -0
- package/hooks/lib/convergence-detector.js +105 -0
- package/hooks/lib/delegation-tracker.js +198 -0
- package/hooks/lib/detectar-package-manager.js +423 -0
- package/hooks/lib/edit-accumulator.js +171 -0
- package/hooks/lib/error-classifier.js +308 -0
- package/hooks/lib/event-bus.js +112 -0
- package/hooks/lib/evolution-tracker.js +442 -0
- package/hooks/lib/execution-state.js +316 -0
- package/hooks/lib/fingerprint-id.js +135 -0
- package/hooks/lib/gateway-notify.js +116 -0
- package/hooks/lib/graph-security.js +75 -0
- package/hooks/lib/guardrail-metrics.js +202 -0
- package/hooks/lib/hook-circuit-breaker.js +206 -0
- package/hooks/lib/loop-detector.js +267 -0
- package/hooks/lib/mcp-health.js +184 -0
- package/hooks/lib/mcp-pool.js +436 -0
- package/hooks/lib/memory-search.js +506 -0
- package/hooks/lib/merkle-audit.js +96 -0
- package/hooks/lib/model-router.js +222 -0
- package/hooks/lib/normalize-error.js +324 -0
- package/hooks/lib/normalize-input.js +65 -0
- package/hooks/lib/nudge-tracker.js +306 -0
- package/hooks/lib/otlp-exporter.js +365 -0
- package/hooks/lib/performance-marks.js +239 -0
- package/hooks/lib/privacy-filter.js +128 -0
- package/hooks/lib/prompt-injection-scanner.js +209 -0
- package/hooks/lib/provenance-tracker.js +183 -0
- package/hooks/lib/rate-limit-tracker.js +253 -0
- package/hooks/lib/reflect-classifier.js +164 -0
- package/hooks/lib/resource-quota.js +122 -0
- package/hooks/lib/retry-jitter.js +165 -0
- package/hooks/lib/risk-engine.js +368 -0
- package/hooks/lib/run-log.js +408 -0
- package/hooks/lib/session-fts.js +379 -0
- package/hooks/lib/session-store.js +293 -0
- package/hooks/lib/singleton-guard.js +159 -0
- package/hooks/lib/skill-auditor.js +588 -0
- package/hooks/lib/sync-status.js +228 -0
- package/hooks/lib/taint-tracker.js +107 -0
- package/hooks/lib/task-service.js +295 -0
- package/hooks/lib/tech-skills-map.js +146 -0
- package/hooks/lib/telegram-cliente.js +159 -0
- package/hooks/lib/telegram-config.js +170 -0
- package/hooks/lib/token-budget.js +156 -0
- package/hooks/lib/token-estimator.js +420 -0
- package/hooks/lib/toon-compressor.js +245 -0
- package/hooks/lib/usage-model.js +183 -0
- package/hooks/lib/variable-resolver.js +230 -0
- package/hooks/linea-estado.js +324 -0
- package/hooks/metricas-evolucion.js +209 -0
- package/hooks/monitor-contexto.js +325 -0
- package/hooks/notificacion-sesion-stop.js +198 -0
- package/hooks/notificacion-telegram-notification.js +4 -0
- package/hooks/notificacion-telegram-subagent.js +4 -0
- package/hooks/notificacion-telegram.js +267 -0
- package/hooks/preservar-estado-pre-compact.js +150 -0
- package/hooks/proteccion-rutas.js +366 -0
- package/hooks/registro-turnos.js +209 -0
- package/hooks/resumen-sesion.js +249 -0
- package/hooks/risk-scoring.js +323 -0
- package/hooks/rotar-audit-auto.js +122 -0
- package/hooks/sugerir-regenerar-inventario.js +170 -0
- package/hooks/telemetria-agentes.js +167 -0
- package/hooks/tracking-costos.js +688 -0
- package/instintos/global.yaml +8 -0
- package/instintos/perfil-usuario.yaml +53 -0
- package/instintos/prompt-appendices.yaml +57 -0
- package/instintos/proyecto.yaml +372 -0
- package/manifiestos/gateway-config.json +77 -0
- package/manifiestos/handoff-context.json +223 -0
- package/manifiestos/hook-profiles.json +44 -0
- package/manifiestos/hooks-config.json +360 -0
- package/manifiestos/modulos.json +1173 -0
- package/manifiestos/perfiles.json +404 -0
- package/package.json +86 -0
- package/plantillas/ESTADO.md +109 -0
- package/plantillas/HOJA-RUTA.md +143 -0
- package/plantillas/PROYECTO.md +122 -0
- package/plantillas/REQUISITOS.md +132 -0
- package/plantillas/auditor-veto-template.md +105 -0
- package/plantillas/github-workflows/README.md +47 -0
- package/plantillas/github-workflows/release-please.yml +44 -0
- package/plantillas/github-workflows/swl-ci.yml +107 -0
- package/plantillas/github-workflows/swl-security.yml +51 -0
- package/plantillas/mcp-mineru.json +13 -0
- package/plantillas/research/ARQUITECTURA.md +220 -0
- package/plantillas/research/FUNCIONALIDADES.md +175 -0
- package/plantillas/research/RESUMEN.md +165 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/TRAMPAS.md +299 -0
- package/plantillas/skill-evals-template.json +44 -0
- package/plugin.json +343 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +352 -0
- package/reglas/brevedad-output.md +124 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +201 -0
- package/reglas/git-workflow.md +245 -0
- package/reglas/gobernanza.md +271 -0
- package/reglas/harness-claude-code.md +213 -0
- package/reglas/hooks.md +186 -0
- package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
- package/reglas/lenguajes/csharp/hooks.md +281 -0
- package/reglas/lenguajes/csharp/patrones.md +226 -0
- package/reglas/lenguajes/csharp/seguridad.md +258 -0
- package/reglas/lenguajes/csharp/testing.md +176 -0
- package/reglas/lenguajes/go/estilo-codigo.md +195 -0
- package/reglas/lenguajes/go/hooks.md +249 -0
- package/reglas/lenguajes/go/patrones.md +249 -0
- package/reglas/lenguajes/go/seguridad.md +225 -0
- package/reglas/lenguajes/go/testing.md +272 -0
- package/reglas/lenguajes/java/estilo-codigo.md +217 -0
- package/reglas/lenguajes/java/hooks.md +251 -0
- package/reglas/lenguajes/java/patrones.md +226 -0
- package/reglas/lenguajes/java/seguridad.md +233 -0
- package/reglas/lenguajes/java/testing.md +238 -0
- package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
- package/reglas/lenguajes/kotlin/hooks.md +245 -0
- package/reglas/lenguajes/kotlin/patrones.md +201 -0
- package/reglas/lenguajes/kotlin/seguridad.md +202 -0
- package/reglas/lenguajes/kotlin/testing.md +236 -0
- package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
- package/reglas/lenguajes/nextjs/hooks.md +186 -0
- package/reglas/lenguajes/nextjs/patrones.md +225 -0
- package/reglas/lenguajes/nextjs/seguridad.md +216 -0
- package/reglas/lenguajes/nextjs/testing.md +193 -0
- package/reglas/lenguajes/php/estilo-codigo.md +228 -0
- package/reglas/lenguajes/php/hooks.md +165 -0
- package/reglas/lenguajes/php/patrones.md +233 -0
- package/reglas/lenguajes/php/seguridad.md +186 -0
- package/reglas/lenguajes/php/testing.md +205 -0
- package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
- package/reglas/lenguajes/rust/hooks.md +240 -0
- package/reglas/lenguajes/rust/patrones.md +250 -0
- package/reglas/lenguajes/rust/seguridad.md +221 -0
- package/reglas/lenguajes/rust/testing.md +194 -0
- package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
- package/reglas/lenguajes/swift/hooks.md +257 -0
- package/reglas/lenguajes/swift/patrones.md +235 -0
- package/reglas/lenguajes/swift/seguridad.md +248 -0
- package/reglas/lenguajes/swift/testing.md +242 -0
- package/reglas/markitdown.md +60 -0
- package/reglas/memoria-consolidada.md +209 -0
- package/reglas/patrones.md +225 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad-agentes.md +351 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +373 -0
- package/reglas/testing.md +193 -0
- package/schemas/agent-contract.json +176 -0
- package/schemas/agent-frontmatter.schema.json +149 -0
- package/schemas/agent-message.schema.json +53 -0
- package/schemas/agent-output-implementacion.schema.json +85 -0
- package/schemas/agent-output-planificacion.schema.json +113 -0
- package/schemas/agent-output-review.schema.json +78 -0
- package/schemas/diary-entry.schema.json +80 -0
- package/schemas/hook-profiles.schema.json +39 -0
- package/schemas/hooks-config.schema.json +74 -0
- package/schemas/instinct.schema.json +115 -0
- package/schemas/modulos.schema.json +29 -0
- package/schemas/perfiles.schema.json +28 -0
- package/schemas/plugin.schema.json +64 -0
- package/schemas/skill-evals.schema.json +95 -0
- package/schemas/skill-frontmatter.schema.json +170 -0
- package/scripts/actualizar.js +145 -0
- package/scripts/audit-skills.sh +78 -0
- package/scripts/auditar-agentes-gaps.js +149 -0
- package/scripts/auditar-cobertura-frameworks.js +241 -0
- package/scripts/auditar-skills-gaps.js +206 -0
- package/scripts/bootstrap-instintos.js +259 -0
- package/scripts/check-update.js +109 -0
- package/scripts/comandos/agents.js +105 -0
- package/scripts/comandos/info.js +108 -0
- package/scripts/comandos/install-asistido.js +186 -0
- package/scripts/comandos/skills.js +211 -0
- package/scripts/configurar-branch-protection.js +418 -0
- package/scripts/daemon-swl.py +388 -0
- package/scripts/desinstalar.js +130 -0
- package/scripts/doctor.js +559 -0
- package/scripts/field-report.js +199 -0
- package/scripts/generar-inventario.js +317 -0
- package/scripts/inbox-tmux-inject.js +161 -0
- package/scripts/inferir-herramientas-permitidas.js +586 -0
- package/scripts/inicializar.js +133 -0
- package/scripts/instalador.js +1031 -0
- package/scripts/instalar-git-hook.js +122 -0
- package/scripts/lib/agp-frontmatter.js +222 -0
- package/scripts/lib/append-con-marcadores.js +199 -0
- package/scripts/lib/artefactos-python.js +43 -0
- package/scripts/lib/audit-query.js +221 -0
- package/scripts/lib/autostart-linux.js +347 -0
- package/scripts/lib/autostart-macos.js +360 -0
- package/scripts/lib/autostart-windows.js +307 -0
- package/scripts/lib/budget-enforcer.js +252 -0
- package/scripts/lib/claude-sessions.js +285 -0
- package/scripts/lib/configurar-ci.js +380 -0
- package/scripts/lib/console-span-exporter.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -0
- package/scripts/lib/dashboard-widgets.js +290 -0
- package/scripts/lib/detectar-runtime.js +279 -0
- package/scripts/lib/detectar-stack.js +187 -0
- package/scripts/lib/diary-entry.js +234 -0
- package/scripts/lib/drift-detector.js +545 -0
- package/scripts/lib/estado.js +124 -0
- package/scripts/lib/gestor-componentes.js +243 -0
- package/scripts/lib/gitignore-manifest.js +305 -0
- package/scripts/lib/graph-analyze.py +556 -0
- package/scripts/lib/graph-builder.py +485 -0
- package/scripts/lib/graph-cluster.py +259 -0
- package/scripts/lib/health-row.js +168 -0
- package/scripts/lib/hooks-settings.js +789 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/mc-client.js +137 -0
- package/scripts/lib/notificaciones-telegram.js +1107 -0
- package/scripts/lib/npm-version.js +261 -0
- package/scripts/lib/paquetes-conocidos.js +50 -0
- package/scripts/lib/preservar-usuario.js +586 -0
- package/scripts/lib/prompt-builder.js +264 -0
- package/scripts/lib/resolver-externo.js +332 -0
- package/scripts/lib/schedule-parser.js +305 -0
- package/scripts/lib/scoring-instintos.js +240 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/lib/selector-interactivo.js +152 -0
- package/scripts/lib/semantic-search.js +242 -0
- package/scripts/lib/skill-discovery.js +234 -0
- package/scripts/lib/skill-metrics.js +246 -0
- package/scripts/lib/skill-normalizer.js +112 -0
- package/scripts/lib/skills-hub.js +340 -0
- package/scripts/lib/span-schema.js +134 -0
- package/scripts/lib/tool-cost-analyzer.js +255 -0
- package/scripts/lib/tracing-processor-interface.js +286 -0
- package/scripts/lib/transformadores/base.js +80 -0
- package/scripts/lib/transformadores/claude.js +124 -0
- package/scripts/lib/transformadores/codex.js +115 -0
- package/scripts/lib/transformadores/copilot.js +106 -0
- package/scripts/lib/transformadores/gemini.js +74 -0
- package/scripts/lib/transformadores/index.js +35 -0
- package/scripts/lib/transformadores/opencode.js +75 -0
- package/scripts/lib/ui.js +259 -0
- package/scripts/limpiar-artefactos-python.js +131 -0
- package/scripts/mcp-orchestrator.py +386 -0
- package/scripts/mcp-pool-manager.py +352 -0
- package/scripts/mcp-telemetry.py +378 -0
- package/scripts/poblar-evolvable.js +226 -0
- package/scripts/publicar.js +287 -0
- package/scripts/reflect-skills.js +403 -0
- package/scripts/rotar-audit-logs.js +185 -0
- package/scripts/run-skill-evals.js +242 -0
- package/scripts/smoke-test.js +374 -0
- package/scripts/token-analysis.py +471 -0
- package/scripts/validar-manifest.js +195 -0
- package/scripts/validar-memoria.js +321 -0
- package/scripts/validar-tests-aislamiento.js +184 -0
- package/scripts/validar-tokens-test.js +208 -0
- package/scripts/validar.js +147 -0
- package/scripts/validate-markdown.py +339 -0
- package/scripts/validate-skills.py +385 -0
- package/scripts/vendor/claude-usage/README.md +116 -0
- package/scripts/vendor/claude-usage/cli.py +334 -0
- package/scripts/vendor/claude-usage/dashboard.py +795 -0
- package/scripts/vendor/claude-usage/scanner.py +467 -0
- package/scripts/vendor/markitdown/cli.py +194 -0
- package/scripts/verificar-evolucion.js +289 -0
- package/scripts/verificar-release.js +494 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# Evaluación de RAG — RAGAS y métricas de producción
|
|
2
|
+
|
|
3
|
+
Guía completa para medir, diagnosticar y mejorar la calidad de pipelines RAG antes
|
|
4
|
+
y después de su despliegue en producción.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## RAGAS — métricas fundamentales
|
|
9
|
+
|
|
10
|
+
RAGAS (Retrieval Augmented Generation Assessment) evalúa el pipeline RAG en cuatro
|
|
11
|
+
dimensiones independientes.
|
|
12
|
+
|
|
13
|
+
| Métrica | Qué mide | Umbral mínimo | Síntoma si es bajo |
|
|
14
|
+
|---------|----------|--------------|-------------------|
|
|
15
|
+
| `faithfulness` | ¿La respuesta está respaldada por el contexto? | > 0.80 | El modelo alucina datos no presentes |
|
|
16
|
+
| `answer_relevancy` | ¿La respuesta responde la pregunta? | > 0.75 | Respuestas genéricas o fuera de tema |
|
|
17
|
+
| `context_precision` | ¿Los chunks recuperados son relevantes? | > 0.70 | El retriever trae ruido |
|
|
18
|
+
| `context_recall` | ¿Se recuperó suficiente contexto? | > 0.70 | Respuestas incompletas por falta de contexto |
|
|
19
|
+
|
|
20
|
+
### Instalación
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip install ragas datasets langchain-openai
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Dataset de evaluación mínimo
|
|
27
|
+
|
|
28
|
+
El dataset requiere al menos: pregunta, respuesta generada, contextos recuperados,
|
|
29
|
+
y ground truth (respuesta correcta esperada).
|
|
30
|
+
|
|
31
|
+
```python
|
|
32
|
+
from datasets import Dataset
|
|
33
|
+
|
|
34
|
+
# Formato requerido por RAGAS
|
|
35
|
+
datos_evaluacion = {
|
|
36
|
+
"question": [
|
|
37
|
+
"¿Cuántos días de vacaciones corresponden al primer año?",
|
|
38
|
+
"¿Cuál es el proceso para solicitar home office?",
|
|
39
|
+
"¿Qué cobertura incluye el seguro médico?",
|
|
40
|
+
],
|
|
41
|
+
"answer": [
|
|
42
|
+
"Según la política de la empresa, los empleados reciben 12 días de vacaciones...",
|
|
43
|
+
"Para solicitar home office debes completar el formulario HR-045...",
|
|
44
|
+
"El seguro cubre consultas médicas, hospitalización y medicamentos genéricos...",
|
|
45
|
+
],
|
|
46
|
+
"contexts": [
|
|
47
|
+
["...texto del chunk recuperado 1...", "...texto del chunk recuperado 2..."],
|
|
48
|
+
["...texto del chunk recuperado 3..."],
|
|
49
|
+
["...texto del chunk recuperado 4...", "...texto del chunk recuperado 5..."],
|
|
50
|
+
],
|
|
51
|
+
"ground_truth": [
|
|
52
|
+
"Los empleados con menos de un año de antigüedad reciben 12 días de vacaciones proporcionales.",
|
|
53
|
+
"El proceso requiere llenar el formulario HR-045 y aprobación del gerente directo con 5 días de anticipación.",
|
|
54
|
+
"El seguro cubre consultas con médicos de la red, hospitalización hasta 30 días y medicamentos del cuadro básico.",
|
|
55
|
+
],
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
dataset = Dataset.from_dict(datos_evaluacion)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Ejecutar evaluación completa
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
from ragas import evaluate
|
|
65
|
+
from ragas.metrics import (
|
|
66
|
+
faithfulness,
|
|
67
|
+
answer_relevancy,
|
|
68
|
+
context_precision,
|
|
69
|
+
context_recall,
|
|
70
|
+
)
|
|
71
|
+
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
|
|
72
|
+
|
|
73
|
+
# RAGAS requiere un LLM para calcular las métricas
|
|
74
|
+
resultado = evaluate(
|
|
75
|
+
dataset=dataset,
|
|
76
|
+
metrics=[faithfulness, answer_relevancy, context_precision, context_recall],
|
|
77
|
+
llm=ChatOpenAI(model="gpt-4o-mini"),
|
|
78
|
+
embeddings=OpenAIEmbeddings(model="text-embedding-3-small"),
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
print(resultado)
|
|
82
|
+
# {'faithfulness': 0.87, 'answer_relevancy': 0.82, 'context_precision': 0.79, 'context_recall': 0.74}
|
|
83
|
+
|
|
84
|
+
# Exportar a DataFrame para análisis
|
|
85
|
+
df = resultado.to_pandas()
|
|
86
|
+
df.to_csv("reporte_ragas.csv", index=False)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Construir el dataset de evaluación desde cero
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
import json
|
|
93
|
+
from pathlib import Path
|
|
94
|
+
|
|
95
|
+
def generar_dataset_evaluacion(
|
|
96
|
+
corpus_path: str,
|
|
97
|
+
num_preguntas: int = 50,
|
|
98
|
+
llm: ChatOpenAI = None,
|
|
99
|
+
) -> Dataset:
|
|
100
|
+
"""
|
|
101
|
+
Genera preguntas y ground truths automáticamente desde el corpus.
|
|
102
|
+
Revisar manualmente el 20% de los pares generados antes de usar.
|
|
103
|
+
"""
|
|
104
|
+
from ragas.testset.generator import TestsetGenerator
|
|
105
|
+
from ragas.testset.evolutions import simple, multi_context, reasoning
|
|
106
|
+
|
|
107
|
+
loader = PyPDFLoader(corpus_path)
|
|
108
|
+
documentos = loader.load()
|
|
109
|
+
|
|
110
|
+
generador = TestsetGenerator.from_langchain(
|
|
111
|
+
generator_llm=llm,
|
|
112
|
+
critic_llm=llm,
|
|
113
|
+
embeddings=OpenAIEmbeddings(),
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
testset = generador.generate_with_langchain_docs(
|
|
117
|
+
documentos,
|
|
118
|
+
test_size=num_preguntas,
|
|
119
|
+
distributions={simple: 0.5, multi_context: 0.3, reasoning: 0.2},
|
|
120
|
+
)
|
|
121
|
+
return testset.to_dataset()
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Hallucination detection
|
|
127
|
+
|
|
128
|
+
Las alucinaciones ocurren cuando el modelo genera información no respaldada en el
|
|
129
|
+
contexto recuperado. Detectarlas antes de producción es crítico.
|
|
130
|
+
|
|
131
|
+
### Síntomas de alucinación
|
|
132
|
+
|
|
133
|
+
- `faithfulness` < 0.7 en RAGAS.
|
|
134
|
+
- La respuesta menciona datos numéricos, fechas o nombres que no aparecen en los chunks.
|
|
135
|
+
- La respuesta dice "según el documento" pero el chunk no contiene esa información.
|
|
136
|
+
|
|
137
|
+
### Validación post-generación
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
from langchain_core.prompts import PromptTemplate
|
|
141
|
+
|
|
142
|
+
PLANTILLA_VERIFICACION = PromptTemplate.from_template("""
|
|
143
|
+
Dado el siguiente contexto y la respuesta generada, determina si CADA afirmación
|
|
144
|
+
de la respuesta está respaldada textualmente en el contexto.
|
|
145
|
+
|
|
146
|
+
Contexto:
|
|
147
|
+
{contexto}
|
|
148
|
+
|
|
149
|
+
Respuesta generada:
|
|
150
|
+
{respuesta}
|
|
151
|
+
|
|
152
|
+
Responde únicamente con JSON:
|
|
153
|
+
{{
|
|
154
|
+
"respaldada": true/false,
|
|
155
|
+
"afirmaciones_sin_respaldo": ["lista de afirmaciones no encontradas en el contexto"]
|
|
156
|
+
}}
|
|
157
|
+
""")
|
|
158
|
+
|
|
159
|
+
async def verificar_faithfulness(contexto: str, respuesta: str, llm) -> dict:
|
|
160
|
+
cadena = PLANTILLA_VERIFICACION | llm
|
|
161
|
+
resultado = await cadena.ainvoke({"contexto": contexto, "respuesta": respuesta})
|
|
162
|
+
return json.loads(resultado.content)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Mitigación de alucinaciones
|
|
166
|
+
|
|
167
|
+
1. **Temperatura = 0**: obligatorio para tareas factuales.
|
|
168
|
+
2. **Prompt con instrucción explícita**: "Responde solo con información del contexto.
|
|
169
|
+
Si no está en el contexto, di exactamente: 'No encontré información sobre esto'."
|
|
170
|
+
3. **Aumentar k en el retriever**: recuperar más chunks (4→8) reduce el riesgo de
|
|
171
|
+
que la información relevante no esté en el contexto.
|
|
172
|
+
4. **Reranking**: usar un modelo de reranking (Cohere Rerank, BGE Reranker) para
|
|
173
|
+
ordenar los chunks por relevancia antes de pasar al LLM.
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
# Ejemplo con Cohere Rerank
|
|
177
|
+
from langchain_cohere import CohereRerank
|
|
178
|
+
from langchain.retrievers import ContextualCompressionRetriever
|
|
179
|
+
|
|
180
|
+
reranker = CohereRerank(model="rerank-multilingual-v3.0", top_n=4)
|
|
181
|
+
retriever_con_rerank = ContextualCompressionRetriever(
|
|
182
|
+
base_compressor=reranker,
|
|
183
|
+
base_retriever=vectorstore.as_retriever(search_kwargs={"k": 10}),
|
|
184
|
+
)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## A/B testing de configuraciones RAG
|
|
190
|
+
|
|
191
|
+
Metodología para comparar variantes de configuración de forma sistemática.
|
|
192
|
+
|
|
193
|
+
### Variables a probar
|
|
194
|
+
|
|
195
|
+
| Variable | Valores a comparar | Métrica de impacto |
|
|
196
|
+
|----------|-------------------|-------------------|
|
|
197
|
+
| chunk_size | 500, 1000, 1500 | context_precision, context_recall |
|
|
198
|
+
| overlap | 0, 100, 200 | context_recall |
|
|
199
|
+
| k (retriever) | 2, 4, 6, 8 | faithfulness, answer_relevancy |
|
|
200
|
+
| Modelo embedding | text-embedding-3-small vs voyage-3 | context_precision |
|
|
201
|
+
| Modelo LLM | gpt-4o-mini vs gpt-4o | faithfulness, answer_relevancy |
|
|
202
|
+
|
|
203
|
+
### Framework de comparación
|
|
204
|
+
|
|
205
|
+
```python
|
|
206
|
+
from dataclasses import dataclass
|
|
207
|
+
from ragas import evaluate
|
|
208
|
+
|
|
209
|
+
@dataclass
|
|
210
|
+
class ConfigRAG:
|
|
211
|
+
chunk_size: int
|
|
212
|
+
chunk_overlap: int
|
|
213
|
+
k_retriever: int
|
|
214
|
+
modelo_embedding: str
|
|
215
|
+
modelo_llm: str
|
|
216
|
+
|
|
217
|
+
def evaluar_configuracion(config: ConfigRAG, dataset: Dataset) -> dict:
|
|
218
|
+
"""Evalúa una configuración RAG y retorna sus métricas."""
|
|
219
|
+
embeddings = OpenAIEmbeddings(model=config.modelo_embedding)
|
|
220
|
+
llm = ChatOpenAI(model=config.modelo_llm, temperature=0)
|
|
221
|
+
|
|
222
|
+
splitter = RecursiveCharacterTextSplitter(
|
|
223
|
+
chunk_size=config.chunk_size,
|
|
224
|
+
chunk_overlap=config.chunk_overlap,
|
|
225
|
+
)
|
|
226
|
+
# Re-indexar con la nueva configuración
|
|
227
|
+
chunks = splitter.split_documents(documentos_corpus)
|
|
228
|
+
vs = PGVector.from_documents(chunks, embeddings, connection_string=DATABASE_URL,
|
|
229
|
+
collection_name=f"test_{config.chunk_size}")
|
|
230
|
+
|
|
231
|
+
# Generar respuestas con esta configuración
|
|
232
|
+
cadena = crear_cadena_rag(vs.as_retriever(search_kwargs={"k": config.k_retriever}), llm)
|
|
233
|
+
respuestas = [cadena.invoke(q) for q in dataset["question"]]
|
|
234
|
+
|
|
235
|
+
# Evaluar
|
|
236
|
+
dataset_con_respuestas = dataset.map(lambda x, i: {**x, "answer": respuestas[i]},
|
|
237
|
+
with_indices=True)
|
|
238
|
+
resultado = evaluate(dataset_con_respuestas,
|
|
239
|
+
metrics=[faithfulness, answer_relevancy, context_precision])
|
|
240
|
+
return {
|
|
241
|
+
"config": config,
|
|
242
|
+
"faithfulness": resultado["faithfulness"],
|
|
243
|
+
"answer_relevancy": resultado["answer_relevancy"],
|
|
244
|
+
"context_precision": resultado["context_precision"],
|
|
245
|
+
"score_global": (resultado["faithfulness"] + resultado["answer_relevancy"]
|
|
246
|
+
+ resultado["context_precision"]) / 3,
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
# Comparar múltiples configuraciones
|
|
250
|
+
configuraciones = [
|
|
251
|
+
ConfigRAG(500, 50, 4, "text-embedding-3-small", "gpt-4o-mini"),
|
|
252
|
+
ConfigRAG(1000, 200, 4, "text-embedding-3-small", "gpt-4o-mini"),
|
|
253
|
+
ConfigRAG(1000, 200, 6, "text-embedding-3-small", "gpt-4o-mini"),
|
|
254
|
+
]
|
|
255
|
+
resultados = [evaluar_configuracion(c, dataset_eval) for c in configuraciones]
|
|
256
|
+
mejor = max(resultados, key=lambda r: r["score_global"])
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Métricas de producción
|
|
262
|
+
|
|
263
|
+
Una vez en producción, monitorear continuamente para detectar degradación.
|
|
264
|
+
|
|
265
|
+
### Latencia
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
import time
|
|
269
|
+
import structlog
|
|
270
|
+
|
|
271
|
+
logger = structlog.get_logger()
|
|
272
|
+
|
|
273
|
+
async def query_rag_con_telemetria(pregunta: str, cadena) -> dict:
|
|
274
|
+
inicio = time.perf_counter()
|
|
275
|
+
|
|
276
|
+
respuesta = await cadena.ainvoke(pregunta)
|
|
277
|
+
|
|
278
|
+
latencia_ms = (time.perf_counter() - inicio) * 1000
|
|
279
|
+
logger.info(
|
|
280
|
+
"query_rag",
|
|
281
|
+
latencia_ms=round(latencia_ms, 1),
|
|
282
|
+
longitud_respuesta=len(respuesta),
|
|
283
|
+
pregunta_hash=hashlib.md5(pregunta.encode()).hexdigest()[:8],
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
return {"respuesta": respuesta, "latencia_ms": latencia_ms}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Indicadores clave de producción
|
|
290
|
+
|
|
291
|
+
| Métrica | Objetivo | Alerta si |
|
|
292
|
+
|---------|----------|-----------|
|
|
293
|
+
| Latencia p50 | < 2 s | > 3 s |
|
|
294
|
+
| Latencia p95 | < 5 s | > 8 s |
|
|
295
|
+
| Tokens por query (promedio) | < 2000 | > 4000 |
|
|
296
|
+
| Tasa de "No encontré información" | < 15% | > 25% |
|
|
297
|
+
| Tasa de rechazo (guardrails) | < 2% | > 5% |
|
|
298
|
+
|
|
299
|
+
### Detección de degradación
|
|
300
|
+
|
|
301
|
+
Ejecutar RAGAS en una muestra aleatoria del 5% de las queries de producción
|
|
302
|
+
cada semana. Si `faithfulness` baja más de 0.05 puntos respecto a la línea base,
|
|
303
|
+
investigar cambios en el corpus o en el modelo.
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
# Registrar muestra aleatoria para re-evaluación periódica
|
|
307
|
+
import random
|
|
308
|
+
|
|
309
|
+
async def query_con_muestreo(pregunta: str, cadena, tasa_muestreo: float = 0.05):
|
|
310
|
+
resultado = await query_rag_con_telemetria(pregunta, cadena)
|
|
311
|
+
|
|
312
|
+
if random.random() < tasa_muestreo:
|
|
313
|
+
# Guardar para evaluación asíncrona posterior
|
|
314
|
+
await cola_evaluacion.enqueue({
|
|
315
|
+
"pregunta": pregunta,
|
|
316
|
+
"respuesta": resultado["respuesta"],
|
|
317
|
+
"timestamp": datetime.utcnow().isoformat(),
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
return resultado
|
|
321
|
+
```
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Modelo de madurez RAG — Crawl → Walk → Run
|
|
2
|
+
|
|
3
|
+
Guía progresiva para implementar sistemas RAG con niveles de sofisticación
|
|
4
|
+
creciente. Cada nivel resuelve las limitaciones del anterior.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Nivel 1: CRAWL — Funcional mínimo
|
|
9
|
+
|
|
10
|
+
**Objetivo**: Demostrar que RAG funciona con tu corpus. Priorizar velocidad
|
|
11
|
+
de prototipo sobre calidad de respuestas.
|
|
12
|
+
|
|
13
|
+
### Stack típico
|
|
14
|
+
|
|
15
|
+
| Componente | Tecnología | Notas |
|
|
16
|
+
|-----------|-----------|-------|
|
|
17
|
+
| Document loading | PyPDFLoader, TextLoader | Extracción básica sin awareness de estructura |
|
|
18
|
+
| Chunking | RecursiveCharacterTextSplitter | chunk_size=1000, overlap=200 |
|
|
19
|
+
| Embeddings | OpenAI text-embedding-3-small, Gemini | Modelo general, dimensiones default |
|
|
20
|
+
| Vectorstore | ChromaDB (local) | Persistencia en disco, sin schema formal |
|
|
21
|
+
| Retrieval | Semantic search top-k | k=5, sin reranking ni filtrado |
|
|
22
|
+
|
|
23
|
+
### Implementación
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
from langchain_community.document_loaders import PyPDFLoader
|
|
27
|
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
28
|
+
from langchain_community.vectorstores import Chroma
|
|
29
|
+
|
|
30
|
+
loader = PyPDFLoader("documento.pdf")
|
|
31
|
+
documentos = loader.load()
|
|
32
|
+
|
|
33
|
+
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
|
|
34
|
+
chunks = splitter.split_documents(documentos)
|
|
35
|
+
|
|
36
|
+
vectorstore = Chroma.from_documents(
|
|
37
|
+
documents=chunks,
|
|
38
|
+
embedding=embeddings,
|
|
39
|
+
persist_directory="./chroma_db",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Búsqueda simple
|
|
43
|
+
resultados = vectorstore.similarity_search("¿Cuál es la política?", k=5)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Limitaciones que motivan avanzar a WALK
|
|
47
|
+
- Chunks cortan oraciones y pierden contexto de headings
|
|
48
|
+
- Sin reranking: el resultado #4 puede ser más relevante que el #1
|
|
49
|
+
- Sin filtrado por score: devuelve basura si no hay match real
|
|
50
|
+
- Metadata limitada: no sabes de qué sección viene cada chunk
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Nivel 2: WALK — Calidad optimizada
|
|
55
|
+
|
|
56
|
+
**Objetivo**: Mejorar precisión de retrieval y calidad de chunks sin
|
|
57
|
+
cambiar de infraestructura (sigue siendo local).
|
|
58
|
+
|
|
59
|
+
### Mejoras sobre CRAWL
|
|
60
|
+
|
|
61
|
+
| Aspecto | CRAWL | WALK |
|
|
62
|
+
|---------|-------|------|
|
|
63
|
+
| Document processing | PyPDFLoader (texto plano) | Docling (preserva estructura, headings, tablas) |
|
|
64
|
+
| Chunking | Por caracteres | HybridChunker (awareness de estructura) |
|
|
65
|
+
| Embeddings | General | Especializados con input_type diferenciado |
|
|
66
|
+
| Vectorstore | ChromaDB dinámico | LanceDB con schema Pydantic |
|
|
67
|
+
| Retrieval | top-k directo | top-k + reranking + threshold adaptativo |
|
|
68
|
+
| Metadata | Solo source | source + heading + page_no |
|
|
69
|
+
|
|
70
|
+
### Reranking con threshold adaptativo
|
|
71
|
+
|
|
72
|
+
El reranking reordena los resultados de semantic search usando un modelo
|
|
73
|
+
especializado. El threshold adaptativo evita devolver resultados irrelevantes
|
|
74
|
+
pero garantiza un mínimo de resultados:
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
import cohere
|
|
78
|
+
|
|
79
|
+
co = cohere.ClientV2()
|
|
80
|
+
|
|
81
|
+
def buscar_con_reranking(
|
|
82
|
+
query: str,
|
|
83
|
+
candidatos: list[dict],
|
|
84
|
+
threshold: float = 0.9,
|
|
85
|
+
min_resultados: int = 3,
|
|
86
|
+
) -> list[dict]:
|
|
87
|
+
"""Semantic search + reranking con threshold adaptativo."""
|
|
88
|
+
# 1. Reranking de candidatos
|
|
89
|
+
reranked = co.rerank(
|
|
90
|
+
query=query,
|
|
91
|
+
documents=[c["text"] for c in candidatos],
|
|
92
|
+
model="rerank-v3.5",
|
|
93
|
+
top_n=10,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# 2. Filtrar por threshold
|
|
97
|
+
filtrados = [
|
|
98
|
+
{**candidatos[r.index], "relevance_score": r.relevance_score}
|
|
99
|
+
for r in reranked.results
|
|
100
|
+
if r.relevance_score >= threshold
|
|
101
|
+
]
|
|
102
|
+
|
|
103
|
+
# 3. Threshold adaptativo: bajar si hay pocos resultados
|
|
104
|
+
while len(filtrados) < min_resultados and threshold > 0.3:
|
|
105
|
+
threshold -= 0.05
|
|
106
|
+
filtrados = [
|
|
107
|
+
{**candidatos[r.index], "relevance_score": r.relevance_score}
|
|
108
|
+
for r in reranked.results
|
|
109
|
+
if r.relevance_score >= threshold
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
return filtrados
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Schema Pydantic para vectorstore
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
from lancedb.pydantic import LanceModel, Vector
|
|
119
|
+
|
|
120
|
+
class DocumentChunk(LanceModel):
|
|
121
|
+
vector: Vector(384) # Dimensión del embedding
|
|
122
|
+
text: str # Contenido del chunk
|
|
123
|
+
source: str # Archivo origen
|
|
124
|
+
heading: str = "" # Heading más cercano
|
|
125
|
+
page_no: int = 0 # Página del documento
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Embeddings con input_type diferenciado
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
# Al indexar: input_type="search_document"
|
|
132
|
+
embeddings_doc = co.embed(
|
|
133
|
+
texts=textos_chunks,
|
|
134
|
+
model="embed-english-light-v3.0",
|
|
135
|
+
input_type="search_document",
|
|
136
|
+
output_dimension=384,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Al buscar: input_type="search_query"
|
|
140
|
+
embedding_query = co.embed(
|
|
141
|
+
texts=[query],
|
|
142
|
+
model="embed-english-light-v3.0",
|
|
143
|
+
input_type="search_query",
|
|
144
|
+
output_dimension=384,
|
|
145
|
+
)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Limitaciones que motivan avanzar a RUN
|
|
149
|
+
- Vectorstore local no escala a millones de documentos
|
|
150
|
+
- Sin guardrails de seguridad (prompt injection, PII)
|
|
151
|
+
- Sin observabilidad de producción (latency, error rate)
|
|
152
|
+
- Mantenimiento manual del índice
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Nivel 3: RUN — Producción
|
|
157
|
+
|
|
158
|
+
**Objetivo**: Escalar, asegurar y operar el sistema RAG en producción
|
|
159
|
+
con SLOs definidos.
|
|
160
|
+
|
|
161
|
+
### Mejoras sobre WALK
|
|
162
|
+
|
|
163
|
+
| Aspecto | WALK | RUN |
|
|
164
|
+
|---------|------|-----|
|
|
165
|
+
| Vectorstore | Local (LanceDB) | Managed (Vertex AI, Pinecone, Weaviate Cloud) |
|
|
166
|
+
| Guardrails | Ninguno | Input sanitization + output validation |
|
|
167
|
+
| Observabilidad | Logs locales | OpenTelemetry + dashboards |
|
|
168
|
+
| Document processing | Local | Pipeline async con cola de procesamiento |
|
|
169
|
+
| Scaling | Máquina única | Horizontal (embedding service separado) |
|
|
170
|
+
|
|
171
|
+
### Guardrails de seguridad (pre-LLM)
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
def guardrail_pre_llm(query: str) -> tuple[bool, str]:
|
|
175
|
+
"""Filtrar queries peligrosos antes de llegar al LLM."""
|
|
176
|
+
# Categorías de filtrado (taxonomía Model Armor):
|
|
177
|
+
# - RAI: Contenido dañino, bias, desinformación
|
|
178
|
+
# - PI: Prompt injection, jailbreak
|
|
179
|
+
# - SDP: Exposición de datos sensibles (PII)
|
|
180
|
+
# - URI: URLs maliciosas en el input
|
|
181
|
+
|
|
182
|
+
import re
|
|
183
|
+
patrones_pi = [
|
|
184
|
+
r"ignore\s+.*instructions",
|
|
185
|
+
r"you\s+are\s+now",
|
|
186
|
+
r"system\s*:\s*you",
|
|
187
|
+
]
|
|
188
|
+
for patron in patrones_pi:
|
|
189
|
+
if re.search(patron, query, re.IGNORECASE):
|
|
190
|
+
return False, "Query bloqueado: posible prompt injection"
|
|
191
|
+
|
|
192
|
+
return True, "OK"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Observabilidad mínima para RAG en producción
|
|
196
|
+
|
|
197
|
+
| Métrica | Qué mide | Alerta si |
|
|
198
|
+
|---------|----------|-----------|
|
|
199
|
+
| retrieval_latency_p95 | Tiempo de búsqueda vectorial | > 500ms |
|
|
200
|
+
| rerank_latency_p95 | Tiempo de reranking | > 200ms |
|
|
201
|
+
| generation_latency_p95 | Tiempo de generación LLM | > 3s |
|
|
202
|
+
| relevance_score_avg | Calidad promedio de resultados | < 0.5 |
|
|
203
|
+
| empty_results_rate | % de queries sin resultados | > 20% |
|
|
204
|
+
| error_rate | Fallos de API/vectorstore | > 1% |
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Criterios para avanzar de nivel
|
|
209
|
+
|
|
210
|
+
| De → A | Avanzar cuando | NO avanzar si |
|
|
211
|
+
|--------|---------------|---------------|
|
|
212
|
+
| CRAWL → WALK | La precisión del retrieval es insuficiente; queries relevantes devuelven resultados irrelevantes | Estás en fase de prototipo y la precisión importa menos que la velocidad |
|
|
213
|
+
| WALK → RUN | Necesitas escala (>100K docs), seguridad (datos sensibles), o SLOs formales | El sistema es interno, bajo tráfico, y la calidad de WALK es suficiente |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Evaluación de calidad RAG por nivel
|
|
218
|
+
|
|
219
|
+
| Nivel | Evaluación mínima |
|
|
220
|
+
|-------|------------------|
|
|
221
|
+
| CRAWL | Manual: 10 queries conocidas, verificar si los chunks devueltos son relevantes |
|
|
222
|
+
| WALK | Semi-auto: relevance_score promedio > 0.7, queries fuera de dominio filtradas |
|
|
223
|
+
| RUN | RAGAS automatizado: faithfulness, context_relevancy, answer_correctness con dataset de evaluación |
|
|
224
|
+
|
|
225
|
+
Para métricas RAGAS detalladas, ver [evaluacion-rag.md](evaluacion-rag.md).
|