Uso de IA en el trabajo

Cómo preguntar a una IA sobre un documento y verificar citas por línea

Las respuestas de IA sobre documentos son más fáciles de verificar cuando cada afirmación incluye citas con números de línea. Esta guía usa una nota sintética pequeña, pide respuestas con citas a un asistente de IA y comprueba automáticamente cada rango con Python.

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 esPara personas que usan un asistente de chat con IA para responder preguntas sobre informes, notas, políticas u otros documentos de texto y quieren un flujo simple para comprobar las citas.

Preparación
  • Python 3.12
  • Un documento de texto plano cuyos números de línea puedan mantenerse estables durante la revisión

01Por qué exigir citas con números de línea

Cuando un asistente de chat con IA responde preguntas sobre un documento, el problema principal no es si la respuesta suena fluida. Lo importante es comprobar si cada afirmación está respaldada por el documento proporcionado. Exigir citas con números de línea permite volver directamente a la fuente sin tener que buscar manualmente por todo el archivo.

Un flujo útil separa dos comprobaciones. Primero, el software puede verificar que cada cita apunta a números de línea reales y volver a mostrar esas líneas. Después, una persona comprueba si el texto citado respalda realmente la afirmación. La comprobación automática detecta referencias rotas o imposibles, pero por sí sola no demuestra que exista apoyo semántico suficiente.

02Crea un documento sintético pequeño

Considera esta nota sintética de proyecto. Guarda exactamente las siete líneas mostradas en un archivo de texto plano llamado project_note.txt. Como el ejemplo es intencionadamente pequeño, cada respuesta y cada cita se pueden comprobar también a mano.

LíneaTexto
L1Project Atlas weekly note
L2Prototype test moved from 12 Sep to 16 Sep.
L3Reason: replacement sensor arrived late.
L4Analysis owner: Mina.
L5Draft results due 18 Sep.
L6Final review meeting scheduled 21 Sep.
L7Budget status unchanged.

Supongamos que la pregunta es: ¿Qué calendario cambió, por qué cambió y qué plazos vienen después? La fuente indica claramente que la prueba del prototipo pasó del 12 Sep al 16 Sep, que el motivo fue la llegada tardía de un sensor de reemplazo, que los resultados preliminares vencen el 18 Sep y que la reunión final de revisión está programada para el 21 Sep.

03Exige un formato de cita estricto en el prompt

No te limites a pedir a la IA que cite el documento. Define un formato exacto para que un script pueda analizar después la respuesta. En este ejemplo, cada frase factual debe terminar con una cita como [L2-L3] o [L5].

  1. Indica a la IA que use únicamente el documento proporcionado.
  2. Exige citas en el formato exacto [Lx] o [Lx-Ly].
  3. Pide que no cite líneas que no respalden directamente la afirmación anterior.
  4. Indica que debe decir que el documento no ofrece una respuesta cuando falte evidencia.
  5. Mantén sin cambios el archivo fuente durante la revisión para conservar estables los números de línea.

04Inspecciona una respuesta típica con citas

Una respuesta adecuada podría ser: La prueba del prototipo pasó del 12 Sep al 16 Sep porque el sensor de reemplazo llegó tarde. [L2-L3] Los resultados preliminares vencen el 18 Sep y después está prevista la reunión final de revisión para el 21 Sep. [L5-L6]

Esta respuesta contiene dos rangos de citas. El primero debe corresponder a las líneas 2 y 3, y el segundo a las líneas 5 y 6. Antes de confiar en la respuesta, un verificador puede confirmar que esos rangos existen y mostrar el texto fuente exacto asociado a cada cita.

05Comprueba automáticamente cada cita con Python

Guarda la respuesta de la IA en ai_answer.txt. El siguiente script lee project_note.txt y ai_answer.txt, extrae las citas con una expresión regular, rechaza rangos no válidos y escribe un informe de revisión en outputs/citation_check.txt. Nunca modifica el documento original ni la respuesta de la IA, y se detiene si el informe de salida ya existe.

python
import re
from pathlib import Path

DOCUMENT_FILE = Path("project_note.txt")
ANSWER_FILE = Path("ai_answer.txt")
OUTPUT_DIR = Path("outputs")
OUTPUT_FILE = OUTPUT_DIR / "citation_check.txt"

CITATION_RE = re.compile(r"\[L(\d+)(?:-L?(\d+))?\]")


def main():
    if not DOCUMENT_FILE.is_file():
        raise SystemExit(f"Document not found: {DOCUMENT_FILE}")

    if not ANSWER_FILE.is_file():
        raise SystemExit(f"AI answer not found: {ANSWER_FILE}")

    if OUTPUT_FILE.exists():
        raise SystemExit(f"Output already exists: {OUTPUT_FILE}")

    lines = DOCUMENT_FILE.read_text(encoding="utf-8").splitlines()
    answer = ANSWER_FILE.read_text(encoding="utf-8")
    matches = list(CITATION_RE.finditer(answer))

    if not matches:
        raise SystemExit("No citations found in AI answer.")

    report = []
    report.append(f"document_lines={len(lines)}")
    report.append(f"citations_found={len(matches)}")
    report.append("")

    invalid_count = 0

    for index, match in enumerate(matches, start=1):
        start = int(match.group(1))
        end = int(match.group(2)) if match.group(2) else start
        citation = match.group(0)

        valid = 1 <= start <= end <= len(lines)
        report.append(f"citation_{index}={citation}")
        report.append(f"valid_range={valid}")

        if not valid:
            invalid_count += 1
            report.append("source=INVALID LINE RANGE")
            report.append("")
            continue

        for line_number in range(start, end + 1):
            source_text = lines[line_number - 1]
            report.append(f"L{line_number}: {source_text}")

        report.append("")

    report.append(f"invalid_citations={invalid_count}")

    OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
    OUTPUT_FILE.write_text("\n".join(report) + "\n", encoding="utf-8")
    print(f"Wrote: {OUTPUT_FILE}")


if __name__ == "__main__":
    main()

06Compara cada afirmación con las líneas extraídas

Para la respuesta sintética, el verificador debería encontrar dos citas y cero rangos de cita no válidos. [L2-L3] corresponde al cambio de fecha de la prueba y al retraso del sensor de reemplazo. [L5-L6] corresponde al plazo de los resultados preliminares y a la reunión final de revisión.

CitaLíneas esperadasConclusión manual
[L2-L3]L2 y L3Respalda la fecha modificada de la prueba y el motivo indicado.
[L5-L6]L5 y L6Respalda el plazo de los resultados preliminares y la fecha de revisión final.

Ahora prueba deliberadamente una cita incorrecta como [L8]. Como el documento sintético solo tiene siete líneas, el script debería marcar ese rango como no válido. Esto ayuda a detectar citas que parecen convincentes dentro de la respuesta pero que no pueden apuntar realmente a la fuente.

07Evita errores comunes y entiende los límites

  • No edites el documento fuente después de generar la respuesta de la IA; añadir o eliminar líneas cambia la numeración.
  • No aceptes nombres de página o expresiones vagas como citas si tu verificador espera la sintaxis [Lx].
  • No supongas que una línea existente demuestra una afirmación solo porque el rango citado es válido.
  • Comprueba si la IA combina dos hechos de partes distintas del documento pero cita solo uno de ellos.
  • Exige que la IA indique cuándo el documento no contiene evidencia, en vez de completar los huecos con conocimiento general.
  • En documentos largos, conserva una copia estable de la fuente para que otros revisores puedan reproducir la misma numeración de líneas.

Este método funciona bien con texto plano, pero los PDF, las hojas de cálculo, la salida de OCR y los documentos generados dinámicamente pueden no tener límites de línea estables. En esos casos, puede ser más fiable usar otra unidad de cita, como número de página, ID de párrafo, ID de sección o celda de tabla.

Por tanto, el flujo tiene dos capas: validación automática de la sintaxis y los rangos de las citas, seguida de una verificación humana de si cada fragmento citado respalda realmente la respuesta. Usadas juntas, estas dos comprobaciones hacen que las preguntas sobre documentos sean más auditables que una respuesta de IA sin citas.

Registro de ejecución y verificación

2026-09-21 · hand-checked example · Python 3.12

  • El documento sintético contiene exactamente 7 líneas, tal como se muestra en el artículo.
  • La respuesta de ejemplo contiene exactamente 2 rangos de citas: [L2-L3] y [L5-L6].
  • [L2-L3] se comprobó manualmente contra la fuente sintética y contiene el cambio de fecha de la prueba del prototipo y el motivo indicado.
  • [L5-L6] se comprobó manualmente contra la fuente sintética y contiene el plazo de los resultados preliminares y la fecha de la reunión final de revisión.
  • Una cita a [L8] queda fuera del documento de 7 líneas y, por tanto, debería marcarse como rango no válido con la lógica mostrada.
  • La expresión regular acepta las formas previstas [L2], [L2-L3] y [L2-3].
Límites de la verificación
  • El código Python no fue ejecutado por el autor de este artículo; su comportamiento se revisó manualmente.
  • El script valida la sintaxis de las citas y si existen los rangos de líneas referenciados; no determina si una afirmación está semánticamente respaldada por esas líneas.
  • El ejemplo supone una numeración estable en texto plano y no aborda errores de OCR, cambios de diseño en PDF, tablas ni documentos cuyas líneas se reformatean entre pasos de revisión.

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.