Uso de IA no trabalho

Como perguntar à IA sobre um documento e verificar citações por linha

Respostas de IA sobre documentos ficam mais fáceis de verificar quando cada afirmação inclui citações com números de linha. Este guia usa uma pequena nota sintética, pede respostas com citações a um assistente de IA e verifica automaticamente cada intervalo com Python.

Ver o sumário

A tradução foi feita com IA. Confira o código, as unidades e os valores junto com o original. A revisão por falantes nativos de cada idioma ainda não foi concluída. English

Para quem éPara quem usa um assistente de chat com IA para responder perguntas sobre relatórios, notas, políticas ou outros documentos de texto e quer um fluxo simples para verificar as citações.

Preparação
  • Python 3.12
  • Um documento em texto simples cuja numeração de linhas possa permanecer estável durante a revisão

01Por que exigir citações com números de linha

Quando um assistente de chat com IA responde perguntas sobre um documento, o principal problema não é se a resposta parece fluida. O importante é verificar se cada afirmação é realmente sustentada pelo documento fornecido. Exigir citações com números de linha permite voltar diretamente à fonte sem precisar procurar manualmente em todo o arquivo.

Um fluxo útil separa duas verificações. Primeiro, o software pode confirmar se cada citação aponta para números de linha reais e mostrar novamente essas linhas. Depois, uma pessoa verifica se o texto citado realmente sustenta a afirmação. A verificação automática detecta referências quebradas ou impossíveis, mas sozinha não comprova suporte semântico suficiente.

02Crie um pequeno documento sintético

Considere esta nota sintética de projeto. Salve exatamente as sete linhas mostradas em um arquivo de texto simples chamado project_note.txt. Como o exemplo é intencionalmente pequeno, cada resposta e cada citação também podem ser conferidas manualmente.

LinhaTexto
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.

Suponha que a pergunta seja: qual cronograma mudou, por que mudou e quais prazos vêm depois? A fonte informa claramente que o teste do protótipo passou de 12 Sep para 16 Sep, que o motivo foi a chegada tardia de um sensor de reposição, que os resultados preliminares vencem em 18 Sep e que a reunião final de revisão está marcada para 21 Sep.

03Exija um formato de citação estrito no prompt

Não peça apenas que a IA cite o documento. Defina um formato exato para que um script consiga analisar a resposta depois. Neste exemplo, cada frase factual deve terminar com uma citação como [L2-L3] ou [L5].

  1. Diga à IA para usar somente o documento fornecido.
  2. Exija citações exatamente no formato [Lx] ou [Lx-Ly].
  3. Peça que ela não cite linhas que não sustentem diretamente a afirmação anterior.
  4. Diga que deve informar quando o documento não fornece uma resposta em vez de inventar uma.
  5. Mantenha o arquivo de origem inalterado durante a revisão para preservar a numeração das linhas.

04Inspecione uma resposta típica com citações

Uma resposta adequada poderia ser: O teste do protótipo passou de 12 Sep para 16 Sep porque o sensor de reposição chegou atrasado. [L2-L3] Os resultados preliminares vencem em 18 Sep, seguidos pela reunião final de revisão em 21 Sep. [L5-L6]

Essa resposta contém dois intervalos de citação. O primeiro deve corresponder às linhas 2 e 3, e o segundo às linhas 5 e 6. Antes de confiar na resposta, um verificador pode confirmar que esses intervalos existem e mostrar o texto de origem exato associado a cada citação.

05Verifique automaticamente cada citação com Python

Salve a resposta da IA em ai_answer.txt. O script abaixo lê project_note.txt e ai_answer.txt, extrai as citações com uma expressão regular, rejeita intervalos inválidos e grava um relatório de revisão em outputs/citation_check.txt. Ele nunca modifica o documento original nem a resposta da IA e para se o relatório de saída já existir.

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()

06Compare cada afirmação com as linhas extraídas

Para a resposta sintética, o verificador deve encontrar duas citações e zero intervalos inválidos. [L2-L3] corresponde à mudança da data do teste e ao atraso do sensor de reposição. [L5-L6] corresponde ao prazo dos resultados preliminares e à reunião final de revisão.

CitaçãoLinhas esperadasConclusão manual
[L2-L3]L2 e L3Sustenta a mudança da data do teste e o motivo informado.
[L5-L6]L5 e L6Sustenta o prazo dos resultados preliminares e a data da revisão final.

Agora teste deliberadamente uma citação incorreta como [L8]. Como o documento sintético tem apenas sete linhas, o script deve marcar esse intervalo como inválido. Isso ajuda a detectar citações que parecem convincentes no texto, mas que não podem apontar para a fonte real.

07Evite erros comuns e entenda os limites

  • Não edite o documento de origem depois de gerar a resposta da IA; inserir ou remover linhas altera a numeração.
  • Não aceite nomes de página ou expressões vagas como citações se o verificador espera a sintaxe [Lx].
  • Não suponha que uma linha existente comprove uma afirmação apenas porque o intervalo citado é válido.
  • Verifique se a IA combina dois fatos de partes diferentes do documento, mas cita apenas um deles.
  • Exija que a IA informe quando o documento não contém evidência, em vez de preencher lacunas com conhecimento geral.
  • Em documentos longos, preserve uma cópia estável da fonte para que outros revisores possam reproduzir a mesma numeração de linhas.

Esse método funciona bem com texto simples, mas PDFs, planilhas, saída de OCR e documentos gerados dinamicamente podem não ter limites de linha estáveis. Nesses casos, pode ser mais confiável usar outra unidade de citação, como número da página, ID do parágrafo, ID da seção ou célula da tabela.

Portanto, o fluxo tem duas camadas: validação automática da sintaxe e dos intervalos das citações, seguida por verificação humana para saber se cada trecho citado realmente sustenta a resposta. Usadas em conjunto, essas duas verificações tornam perguntas sobre documentos mais auditáveis do que respostas de IA sem citações.

Registro de execução e verificação

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

  • O documento sintético contém exatamente 7 linhas, como mostrado no artigo.
  • A resposta de exemplo contém exatamente 2 intervalos de citação: [L2-L3] e [L5-L6].
  • [L2-L3] foi conferido manualmente com a fonte sintética e contém a mudança da data do teste do protótipo e o motivo informado.
  • [L5-L6] foi conferido manualmente com a fonte sintética e contém o prazo dos resultados preliminares e a data da reunião final de revisão.
  • Uma citação a [L8] fica fora do documento de 7 linhas e, portanto, deve ser marcada como intervalo inválido pela lógica apresentada.
  • A expressão regular aceita os formatos previstos [L2], [L2-L3] e [L2-3].
Limites da verificação
  • O código Python deste artigo não foi executado pelo autor; seu comportamento foi revisado manualmente.
  • O script valida a sintaxe das citações e se os intervalos de linhas referenciados existem; ele não determina se uma afirmação é semanticamente sustentada por essas linhas.
  • O exemplo pressupõe numeração estável em texto simples e não aborda erros de OCR, mudanças de layout em PDF, tabelas ou documentos cujas linhas sejam reformatadas entre etapas de revisão.

Princípios de redação e verificação de todo o site

Fontes de referência

As explicações e os exemplos são de elaboração própria. Os comportamentos e conceitos relacionados podem ser consultados nas fontes oficiais abaixo.