Uso de IA en el trabajo

Comprobar un resumen de IA frase por frase frente a la fuente

Divide un resumen de IA en afirmaciones individuales, vincula cada una con frases concretas de la fuente y marca las afirmaciones sin respaldo o exageradas antes de reutilizarlas. Un pequeño documento sintético muestra por qué incluso los resúmenes fluidos necesitan comprobación de evidencia.

Ver el índice

La traducción se ha realizado con IA. Comprueba el código, las unidades y los valores junto con el original. La revisión por hablantes nativos de cada idioma aún no se ha completado. English

Para quién esEsta guía es para personas que usan IA para resumir informes, notas o material de investigación y quieren una revisión trazable frase por frase.

Preparación
  • Python 3.12 y un comando de terminal que inicie esa versión.
  • Un editor de texto que pueda guardar archivos de texto y CSV en UTF-8.
  • Una carpeta de trabajo donde el script pueda crear una nueva carpeta dentro de outputs.
  • Solo se necesita la biblioteca estándar de Python: csv y pathlib.

01Trata cada frase del resumen como una afirmación

Un resumen de IA puede estar gramaticalmente bien escrito y, aun así, cambiar una causa, omitir una limitación o añadir una conclusión que la fuente nunca formuló. Por eso, una revisión útil plantea una pregunta sencilla para cada frase del resumen: ¿qué parte exacta de la fuente respalda esta afirmación?

Este tutorial utiliza tres veredictos. SUPPORTED significa que la fuente respalda directamente la frase. PARTIAL significa que solo una parte está respaldada o que falta una condición importante. UNSUPPORTED significa que la fuente no respalda la afirmación o la contradice.

02Crea un documento fuente sintético y un resumen de IA

La fuente y el resumen siguientes son sintéticos y se escribieron específicamente para este artículo. Guarda el primer bloque como source.txt y el segundo como ai_summary.txt.

text
S1|The pilot processed 20 test cases.
S2|Eighteen cases completed successfully.
S3|Two cases stopped during input validation before the solver started.
S4|Among the 18 completed cases, the median runtime was 42 seconds.
S5|The test was performed on one workstation under the same software configuration.
S6|No production deployment or long-term reliability test was performed.
text
A1|The pilot processed 20 cases, and 18 completed successfully.
A2|Two cases failed because the solver crashed.
A3|The median runtime for completed cases was 42 seconds.
A4|The results show that the automation is reliable enough for production use.

La fuente contiene 6 frases. El resumen de IA contiene 4 frases. Los valores son deliberadamente pequeños para poder comprobarlos sin software.

03Compara cada frase del resumen con la fuente

A1 está respaldada por S1 y S2. A2 contradice S3: la fuente dice que los dos casos se detuvieron durante input validation antes de que comenzara el solver, no por fallos del solver. A3 está respaldada directamente por S4. A4 va más allá de la evidencia porque S6 indica explícitamente que no se realizó ningún production deployment ni long-term reliability test.

ID del resumenVeredictoEvidenciaMotivo
A1SUPPORTEDS1;S2El número de casos y las finalizaciones correctas coinciden con la fuente.
A2UNSUPPORTEDS3La fuente atribuye las detenciones a input validation antes del inicio del solver.
A3SUPPORTEDS4Se indica una median runtime de 42 segundos para los 18 casos completados.
A4UNSUPPORTEDS6La preparación para producción no se probó.

Por lo tanto, la revisión esperada contiene 2 frases SUPPORTED y 2 UNSUPPORTED. Ninguna de las cuatro frases sintéticas requiere la etiqueta PARTIAL.

04Registra la revisión en un CSV trazable

Guarda lo siguiente como summary_review.csv. La columna evidence contiene IDs de frases de la fuente en lugar de párrafos copiados, lo que mantiene la revisión compacta sin perder trazabilidad.

csv
summary_id,verdict,evidence,reason
A1,SUPPORTED,S1;S2,The case count and successful completions match the source.
A2,UNSUPPORTED,S3,The source attributes the stops to input validation before solver start.
A3,SUPPORTED,S4,The 42-second median is stated for the 18 completed cases.
A4,UNSUPPORTED,S6,Production readiness was not tested.

Esta revisión sigue siendo un juicio humano. El siguiente script no decide si una afirmación es verdadera. Comprueba que cada frase del resumen de IA haya recibido un veredicto válido y que cada ID de fuente citado exista realmente.

05Comprueba que todas las frases fueron revisadas

Guarda el siguiente script como check_summary_review.py. Lee la fuente, el resumen y el CSV de revisión completado, verifica los IDs y los veredictos y escribe un nuevo informe validado sin modificar ningún archivo de entrada.

python
import csv
from pathlib import Path

SOURCE = Path("source.txt")
SUMMARY = Path("ai_summary.txt")
REVIEW = Path("summary_review.csv")
OUTPUT_DIR = Path("outputs") / "summary_source_check"
OUTPUT = OUTPUT_DIR / "validated_review.csv"
VALID_VERDICTS = {"SUPPORTED", "PARTIAL", "UNSUPPORTED"}


def read_id_text(path: Path) -> dict[str, str]:
    result = {}
    with path.open("r", encoding="utf-8") as stream:
        for line_number, line in enumerate(stream, start=1):
            line = line.rstrip("\n")
            if not line:
                continue
            item_id, separator, text = line.partition("|")
            if not separator or not item_id or not text:
                raise ValueError(f"Invalid line {line_number} in {path}.")
            if item_id in result:
                raise ValueError(f"Duplicate ID {item_id} in {path}.")
            result[item_id] = text
    return result


def main() -> None:
    for path in (SOURCE, SUMMARY, REVIEW):
        if not path.is_file():
            raise FileNotFoundError(f"Missing input: {path}")
    if OUTPUT_DIR.exists():
        raise FileExistsError(f"Output folder already exists: {OUTPUT_DIR}")

    source = read_id_text(SOURCE)
    summary = read_id_text(SUMMARY)

    reviewed = {}
    with REVIEW.open("r", encoding="utf-8-sig", newline="") as stream:
        reader = csv.DictReader(stream)
        required = {"summary_id", "verdict", "evidence", "reason"}
        if reader.fieldnames is None or not required.issubset(reader.fieldnames):
            raise ValueError("Review CSV is missing a required column.")

        for row in reader:
            summary_id = row["summary_id"].strip()
            verdict = row["verdict"].strip()
            evidence_ids = [x.strip() for x in row["evidence"].split(";") if x.strip()]

            if summary_id not in summary:
                raise ValueError(f"Unknown summary ID: {summary_id}")
            if summary_id in reviewed:
                raise ValueError(f"Duplicate review: {summary_id}")
            if verdict not in VALID_VERDICTS:
                raise ValueError(f"Invalid verdict for {summary_id}: {verdict}")
            if not evidence_ids:
                raise ValueError(f"No evidence listed for {summary_id}.")
            unknown = [item for item in evidence_ids if item not in source]
            if unknown:
                raise ValueError(f"Unknown source IDs for {summary_id}: {unknown}")
            if not row["reason"].strip():
                raise ValueError(f"Missing reason for {summary_id}.")

            reviewed[summary_id] = {
                "summary_id": summary_id,
                "summary_text": summary[summary_id],
                "verdict": verdict,
                "evidence": ";".join(evidence_ids),
                "reason": row["reason"].strip(),
            }

    missing = [item for item in summary if item not in reviewed]
    if missing:
        raise ValueError(f"Summary sentences not reviewed: {missing}")

    OUTPUT_DIR.parent.mkdir(parents=True, exist_ok=True)
    OUTPUT_DIR.mkdir()
    fields = ["summary_id", "summary_text", "verdict", "evidence", "reason"]
    with OUTPUT.open("x", encoding="utf-8", newline="") as stream:
        writer = csv.DictWriter(stream, fieldnames=fields)
        writer.writeheader()
        for summary_id in summary:
            writer.writerow(reviewed[summary_id])

    counts = {verdict: 0 for verdict in VALID_VERDICTS}
    for row in reviewed.values():
        counts[row["verdict"]] += 1

    print(f"Summary sentences checked: {len(summary)}.")
    print(
        f"Supported: {counts['SUPPORTED']}; partial: {counts['PARTIAL']}; "
        f"unsupported: {counts['UNSUPPORTED']}."
    )
    print(f"Output: {OUTPUT.as_posix()}")


if __name__ == "__main__":
    main()

06Comprueba el resultado esperado

En la revisión sintética anterior, las 4 frases del resumen tienen un veredicto válido y referencias válidas a la fuente. La salida de consola esperada se muestra abajo. Se obtuvo manualmente y no es un registro de ejecución.

text
Summary sentences checked: 4.
Supported: 2; partial: 0; unsupported: 2.
Output: outputs/summary_source_check/validated_review.csv
  • Confirma que cada A-ID aparezca exactamente una vez en la revisión.
  • Confirma que cada S-ID citado exista en source.txt.
  • Confirma que las afirmaciones UNSUPPORTED no se hayan reescrito silenciosamente como SUPPORTED.
  • Mantén sin cambios el resumen original de IA para que la revisión siga siendo auditable.
  • Vuelve a ejecutar el script sin cambiar OUTPUT_DIR. Debe detenerse con FileExistsError en lugar de sobrescribir la validación anterior.

07Reconoce errores comunes y límites

ProblemaQué hacer
Una frase del resumen contiene dos afirmaciones distintasDivide la frase en unidades del tamaño de una afirmación o revisa cada afirmación por separado.
La evidencia solo respalda parte de la fraseUsa PARTIAL y escribe la condición que falta en la columna reason.
La fuente no dice nada sobre una conclusiónMárcala como UNSUPPORTED en vez de tratar una inferencia plausible como un hecho respaldado por la fuente.
Se cita una frase de la fuente, pero en realidad no respalda la afirmaciónCorrige la revisión humana; tener IDs válidos por sí solo no demuestra respaldo semántico.
Distintas fuentes discrepanRegistra explícitamente el desacuerdo en vez de forzar una única conclusión sin respaldo.

El script de Python valida que la revisión esté completa y que los IDs de referencia sean válidos, no la verdad de las afirmaciones. El respaldo semántico sigue requiriendo lectura humana o un proceso separado de evaluación de evidencia. Un veredicto humano incorrecto puede superar el comprobador estructural.

Para informes largos, usa números de página, IDs de párrafo, números de tabla o ubicaciones concretas de citas en lugar de referencias informales. También distingue entre afirmaciones directas de la fuente, cálculos, interpretaciones y conocimiento externo. Un resumen no debe convertir silenciosamente una categoría en otra.

Registro de ejecución y verificación

2026-09-20 · ejemplo revisado manualmente · objetivo: Python 3.12 · biblioteca estándar: csv, pathlib · sin ejecución

  • Se comprobaron manualmente 4 frases sintéticas del resumen frente a 6 frases sintéticas de la fuente.
  • A1 y A3 se clasificaron como SUPPORTED y A2 y A4 como UNSUPPORTED.
  • Se confirmó que A2 entra en conflicto con S3 porque la fuente dice que input validation detuvo los casos antes de que comenzara el solver.
  • Se confirmó que A4 va más allá de la fuente porque S6 dice que no se probaron production deployment ni long-term reliability.
  • Se calcularon manualmente los recuentos esperados de veredictos: 2 supported, 0 partial y 2 unsupported.
  • Se revisó el script para detectar revisiones faltantes, IDs duplicados, veredictos no válidos, IDs de fuente desconocidos, protección frente a colisiones de salida y generación del informe.
Límites de la verificación
  • El autor de esta respuesta no ejecutó el código; no se creó ningún CSV de validación.
  • El comprobador estructural no determina si una fuente citada respalda semánticamente una afirmación.
  • Solo se revisaron la fuente y el resumen sintéticos mostrados aquí; no se probaron documentos largos, tablas, figuras ni fuentes en conflicto.
  • Las URL de la documentación oficial se proporcionaron desde ubicaciones conocidas, pero no se comprobaron en tiempo real.

Criterios de redacción y verificación de todo el sitio

Fuentes de referencia

Las explicaciones y los ejemplos son de elaboración propia. Puedes consultar los comportamientos y conceptos relacionados en las siguientes fuentes oficiales.