Por Qué las Reglas Son el Arma Secreta
de la Revisión de Código con IA

Cómo las reglas estructuradas transforman la revisión de código con IA de sugerencias inconsistentes a resultados deterministas y predecibles

20 de diciembre de 2025
10 min de lectura

Si alguna vez has intentado usar ChatGPT o Claude para revisión de código, probablemente hayas experimentado esto: el mismo código recibe retroalimentación diferente dependiendo de cómo formules tu pregunta, qué conversación hubo antes, o qué humor parece tener la IA ese día. Esa inconsistencia no es solo molesta — es un problema fundamental que hace que la revisión de código con IA no sea confiable para uso en producción.

En diffray, resolvimos esto con reglas estructuradas. Déjame mostrarte por qué son la clave para que la revisión de código con IA realmente funcione.

El Problema: La Dilución de Contexto Mata el Rendimiento de la IA

Cuando vuelcas un PR completo en un LLM con un prompt como "revisa este código", varias cosas salen mal:

La señal se ahoga en el ruido

La IA intenta verificar seguridad, rendimiento, pruebas, documentación, estilo — todo a la vez. ¿El resultado? Análisis superficial que pasa por alto problemas críticos.

El efecto del "medio perdido"

La investigación muestra consistentemente que la información en el medio de contextos largos se ignora. Tu archivo más importante podría estar enterrado donde la IA no puede procesarlo efectivamente.

Resultados inconsistentes

Ejecuta la misma revisión dos veces, obtén hallazgos diferentes. Eso no es aceptable para una herramienta de la que dependen los equipos.

Explosión de falsos positivos

Sin enfoque, la IA marca patrones genéricos que realmente no son problemas en tu codebase. Los estudios muestran que los enfoques de volcado de contexto producen tasas de falsos positivos del 60-80%.

La Solución: Reglas Estructuradas

Una regla estructurada no es solo un prompt — es una especificación completa que le dice a la IA exactamente qué buscar, dónde buscar y cómo reportar hallazgos.

Así es como se ve una regla:

rules:
  - id: sec_sql_injection
    agent: security
    title: "Inyección SQL vía concatenación de strings"
    description: "Input de usuario concatenado en queries SQL permite ejecutar SQL arbitrario"
    importance: 9

    match:
      file_glob:
        - "src/api/**/*.ts"
        - "src/routes/**/*.ts"
        - "!**/*.test.ts"
      content_regex:
        - "query.*\$\{|\+.*query"

    checklist:
      - "Encuentra todos los lugares donde se usa input de usuario en queries SQL"
      - "Verifica si se usan queries parametrizadas o prepared statements"
      - "Verifica que NO se use concatenación de strings para construir queries"

    examples:
      bad: |
        const query = `SELECT * FROM users WHERE id = ${userId}`;
        await db.execute(query);
      good: |
        const query = 'SELECT * FROM users WHERE id = ?';
        await db.execute(query, [userId]);

Esta estructura habilita tres capacidades críticas que hacen que la revisión de código con IA realmente funcione.

1. Resultados Deterministas Mediante Targeting Preciso

¿Notas la sección match? Eso es pattern matching que determina cuándo se ejecuta la regla.

Sin pattern matching, revisar un PR de 50 archivos significa analizar todos los 50 archivos para cada posible problema. Con pattern matching:

Sin pattern matching

  • 50 archivos × todas las reglas = prompt masivo
  • ~500,000 tokens por revisión
  • Resultado: Lento, costoso, sin enfoque

Con pattern matching

  • 5 archivos API × reglas de seguridad API
  • ~50,000 tokens por revisión
  • Resultado: Rápido, económico, preciso

90%

Ahorro de tokens mediante pattern matching preciso

Si un PR tiene 5 archivos API que contienen queries SQL, solo esos 5 archivos se envían para verificación de inyección SQL. La IA ve exactamente lo que necesita evaluar — nada más.

Esta precisión elimina la aleatoriedad que plagaba los intentos anteriores de revisión de código con IA. Mismo código + mismas reglas = mismos hallazgos. Siempre.

2. Arquitectura Multi-Agente: El Experto Correcto para Cada Problema

Aquí es donde se pone interesante. diffray no usa una IA para revisar todo — usa 31 agentes especializados, cada uno enfocado en lo que hace mejor:

Experto en Seguridad

Vulnerabilidades, autenticación, exposición de datos

Especialista en Rendimiento

Queries N+1, memory leaks, cuellos de botella

Cazador de Bugs

Null pointers, condiciones de carrera, edge cases

Agente React

Patrones de hooks, ciclo de vida, gestión de estado

Agente TypeScript

Type safety, generics, patrones de strict mode

Asesor de Arquitectura

Patrones de diseño, acoplamiento, escalabilidad

Cada agente tiene un system prompt especializado con expertise de dominio. Un agente de seguridad conoce OWASP Top 10. Un agente React entiende las reglas de hooks. Esta especialización mejora dramáticamente la calidad de detección.

Pero aquí está la clave: las reglas determinan qué agente maneja qué.

- id: react_useeffect_cleanup
  agent: react              # Manejado por especialista React
  match:
    file_glob: ["**/*.tsx"]
    content_regex: ["useEffect"]
  checklist:
    - "Verifica si useEffect retorna una función de cleanup"
    - "Verifica que los event listeners y subscriptions se limpien"

Esta regla solo va al agente React, solo para archivos TSX, solo cuando useEffect está presente. El agente recibe contexto enfocado sobre exactamente una cosa — no 50 preocupaciones diferentes compitiendo por atención.

3. Curación de Contexto: El Secreto para No Diluir la Atención de la IA

Los LLMs modernos pueden manejar más de 200k tokens. Pero la investigación muestra que el rendimiento práctico alcanza un tope alrededor de 25-30k tokens para razonamiento complejo. Más allá de eso, estás pagando por tokens que el modelo no puede usar efectivamente.

El sistema de gestión de contexto de diffray asegura que cada agente reciba precisamente la información que necesita:

AgenteRecibeExcluye
Experto en SeguridadFlujos de auth, endpoints API, manejo de datosComponentes UI, estilos
Especialista en RendimientoHot paths, bucles, estructuras de datosDocumentación, configs
Agente ReactComponentes, hooks, gestión de estadoCódigo backend, SQL

Cada agente recibe exactamente lo que necesita para hacer su trabajo. Nada más. El resultado: atención enfocada, mejores hallazgos, menos falsos positivos.

4. Flexibilidad: Reglas Específicas de Proyecto y Equipo

Aquí es donde las reglas realmente brillan para equipos. Cada codebase tiene convenciones que las herramientas genéricas desconocen:

Tus librerías internas:

- id: use_internal_http_client
  agent: consistency
  title: "Usar wrapper interno de cliente HTTP"
  match:
    file_glob: ["src/**/*.ts"]
    content_regex: ["\\bfetch\\(", "axios\\."]
  checklist:
    - "Encuentra llamadas raw de fetch() o axios"
    - "Verifica si el código debería usar httpClient de @/lib/http-client"
  examples:
    bad: |
      const response = await fetch('/api/users');
    good: |
      import { httpClient } from '@/lib/http-client';
      const data = await httpClient.get('/api/users');

Tus patrones específicos de dominio:

- id: money_use_decimal
  agent: bugs
  title: "Usar Decimal para valores monetarios"
  match:
    content_regex: ["(price|amount|total)\\s*:\\s*(number|float)"]
  checklist:
    - "Encuentra campos monetarios usando tipos float/number"
    - "Verifica que el almacenamiento use centavos (integer) o tipo Decimal"

Tus requisitos de cumplimiento:

- id: pii_logging_check
  agent: compliance
  title: "Nunca loguear PII directamente"
  tags: [compliance-gdpr, compliance-hipaa]
  match:
    content_regex: ["log.*(email|phone|ssn|password)"]

Colócalas en .diffray/rules/ y estarán activas en el próximo PR. Sin cambios de infraestructura, sin actualizaciones de herramientas — solo agrega YAML y tu revisor de IA aprende tus estándares.

¿Por Qué YAML? La Estructura Habilita la Inteligencia

Podrías preguntarte por qué usamos YAML estructurado en lugar de solo escribir prompts. La estructura habilita capacidades que los prompts de forma libre no pueden:

Pattern Matching y Filtrado

La sección match se procesa antes de que algo vaya a la IA. Esto sucede en código, no en prompts — es determinista, rápido y preciso.

Organización Semántica

Las reglas tienen id, agent, importance, tags. Esto permite filtrado ("Solo ejecutar reglas de seguridad en este PR"), priorización ("Mostrar problemas críticos primero") y reportes ("¿Cuántos problemas de seguridad vs. calidad?").

Control de Versiones y Revisión

Las reglas son código. Viven en tu repo, pasan por revisión de PR, tienen historial de git. Cuando alguien pregunta "¿por qué la IA marca esto?", la respuesta está en un archivo YAML que cualquiera puede leer.

Uso Entre Fases

Diferentes partes de una regla se usan en diferentes fases: match para filtrado de archivos (sin necesidad de IA), checklist + examples para revisión con IA, id + importance para deduplicación y priorización.

Un prompt plano no puede proporcionar esta separación de responsabilidades.

El Resultado: Revisión de Código con IA que Realmente Funciona

Cuando combinas reglas estructuradas con arquitectura multi-agente y gestión inteligente de contexto, obtienes:

Resultados deterministas

Mismo código, mismas reglas, mismos hallazgos

Análisis enfocado

Cada agente hace una cosa excepcionalmente bien

Bajos falsos positivos

El matching preciso elimina el ruido

Personalización de equipo

Agrega tus estándares sin cambios de infraestructura

Esto es lo que marca la diferencia entre "revisión de código con IA" como demo y revisión de código con IA como infraestructura en la que tu equipo realmente confía.

Vélo en Acción

Instala diffray y abre un PR. Es gratis para repos públicos e incluye un generoso tier gratuito para repos privados.

Related Articles