~/tools / Embeddings e busca (RAG) / RAG Citation Checker
RAG Citation Checker — Confira números de fonte e citações de uma resposta RAG com as fontes
Confira as citações de uma resposta RAG com as fontes que você enviou: cada número de fonte deve existir, cada trecho citado deveria aparecer na sua fonte, e a ferramenta lista as frases sem número de fonte, as fontes que nunca foram citadas e as respostas que foram cortadas. Lê respostas do /api/chat do Ollama (inclusive em streaming), respostas compatíveis com a OpenAI e texto simples. Nada sai do seu navegador.
A resposta do exemplo foi escrita à mão para mostrar um trecho citado que não está na sua fonte.
4 fontes (um array JSON de strings). Resposta lida como uma resposta do /api/chat do Ollama, na forma de JSON com citações.
Tokens do prompt (prompt_eval_count): 306
- O trecho citado da citação #2 não está na fonte [4].
Citações
| Fonte | Trecho citado | Resultado |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | Encontrado exatamente |
| [4] | 4 bytes per dimension plus 8 | Não está nesta fonte |
Isto só verifica se os números e os trechos coincidem com as fontes. Não consegue dizer se a resposta está correta nem se uma fonte realmente sustenta uma frase.
Formato da resposta conforme a referência da API e o código-fonte do Ollama, conferido no Ollama 0.40.11 em 2026-11-05. Ollama API: /api/chat
Tudo roda no seu navegador. A ferramenta não se conecta a nada.
Quando um modelo responde com base em fontes numeradas, as citações podem ser verificadas de forma mecânica. Cole as mesmas fontes que você enviou, no mesmo formato do RAG Prompt Builder (um array JSON de strings ou de objetos, ou texto separado por linhas --- ou por linhas em branco; elas são numeradas a partir de [1] da mesma forma), e cole a resposta. A resposta pode ser a resposta completa do /api/chat do Ollama (a ferramenta usa message.content; uma resposta em streaming com um objeto JSON por linha é juntada), uma resposta compatível com a OpenAI (choices[0].message.content) ou apenas o texto. Se a resposta for um JSON com uma resposta e uma lista de citações, como o RAG Prompt Builder pede, a ferramenta verifica cada citação: o número da fonte deve ser um dos números das fontes, e o trecho citado deveria aparecer nessa fonte, exatamente ou ignorando diferenças de espaços, maiúsculas e minúsculas, caracteres de largura total e aspas curvas. Se a resposta for texto, a ferramenta coleta os números entre colchetes, como [2] ou [1, 3], informa os números que não correspondem a nenhuma fonte e lista as frases que não têm número. Nos dois casos, ela lista as fontes que nunca foram citadas e avisa quando não há nenhuma citação, ou quando done_reason é "length", o que significa que a resposta foi cortada por num_predict. O que ela não consegue fazer é julgar se a resposta está certa. No nosso teste com qwen2.5:7b, uma resposta citou palavra por palavra a regra correta da sua fonte e mesmo assim deu um número errado, e outra resposta disse que não sabia, mas citou uma fonte sem relação. Uma citação que passa aqui apenas mostra que o texto citado está na fonte.
A lógica principal desta ferramenta é de código aberto, sob a licença MIT. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
Casos de uso
- Verificar se a resposta de um modelo local só cita fontes que realmente foram enviadas, com trechos que realmente estão nelas
- Encontrar frases de uma resposta que não têm fonte, antes de mostrar a resposta aos usuários
- Comparar prompts ou modelos nas mesmas perguntas pela frequência com que as citações se sustentam
Como usar
- Cole as fontes que você enviou com a pergunta, na mesma ordem.
- Cole a resposta: a resposta completa do /api/chat, uma resposta compatível com a OpenAI ou o texto da resposta.
- Leia a tabela de citações, as frases sem número de fonte e as fontes que não foram citadas.
FAQ
Um trecho citado aparece como não encontrado. A resposta está errada?
Não necessariamente. O modelo pode ter parafraseado a fonte em vez de copiá-la. Mas um trecho que não está na fonte não pode ser verificado, então trate essa afirmação como sem respaldo até ler a fonte.
Todas as citações passam. A resposta está correta?
Não necessariamente. A ferramenta só verifica se os números e os trechos coincidem com as fontes. No nosso teste, o modelo citou a regra correta (4 vezes as dimensões mais 8 bytes) e mesmo assim respondeu 1552 bytes em vez de 1,544 para um vetor de 384 dimensões.
Por que as fontes precisam estar na mesma ordem?
Os números na resposta se referem à ordem em que as fontes foram enviadas. Se a ordem for diferente, [2] aponta para outro texto e a verificação não tem sentido.
Como a ferramenta divide a resposta em frases?
Nas quebras de linha, depois de . ! ? seguidos de um espaço, e depois de 。!? de largura total. Um número que vem logo após o fim de uma frase, como "… here. [1]", vale para essa frase. Abreviações como e.g. podem dividir uma frase em duas.
O que significa done_reason "length"?
No código-fonte do Ollama, é o motivo informado quando a resposta atingiu o limite de tokens (num_predict) em vez de parar por conta própria. O final da resposta, e possivelmente as citações, está faltando.
Meus dados são enviados para algum lugar?
Não. A verificação roda no seu navegador. A ferramenta nunca se conecta ao Ollama nem a qualquer outro serviço.
Artigos relacionados
- Guarde e pesquise embeddings do Ollama no PostgreSQL com o pgvectorGuarde embeddings do Ollama no PostgreSQL com o pgvector, pesquise-os com HNSW ou IVFFlat e passe os resultados para o /api/chat para que a resposta cite suas fontes.
- Embeddings com o Ollama: o básico para busca e RAGCrie embeddings com o /api/embed do Ollama: os modelos e seus tamanhos, truncate e dimensions, vetores de comprimento unitário e similaridade de cosseno, segundo a documentação oficial.