rag-sanitizer v0.2: escáner de corpus RAG pre-ingestión con embeddings reales y CLIP Pedro Sordo Martínez released rag-sanitizer v0.2, an open-source pre-ingestion scanner that detects poisoned documents in RAG corpora before chunking and embedding. The tool adds real embeddings (MiniLM) and multimodal detection (CLIP) to identify semantic mimicry, entity swaps, and visual contradictions. An independent audit by Claude caught a threshold calibration bug in the CLIP detector, which was fixed and reverified. Detecta documentos poison en un corpus RAG antesdel chunk+embed, no después de la recuperación. v0.2 añade embeddings reales MiniLM y detección multimodal CLIP . La mayoría de la defensa contra envenenamiento de RAG opera post-retrieval o en inferencia . Pero el corpus se puede envenar antes de la ingesta: un documento insertado con texto que imita el estilo del corpus semantic mimicry , sustituye entidades conocidas entity-swap , o lleva una imagen cuyo contenido contradice el texto visual poison . Una vez embebido, el daño ya está en el vector store. rag-sanitizer cubre ese tramo: un escáner determinista y barato que marca o pone en cuarentena el corpus antes de chunk + embed . Tres detectores, combinables: k·sigma . Madrid → Beijing . install pip install -e '. real-embeddings,multimodal ' fast suite Dummy + heurístico, sin descargar modelos rag-sanitizer fixtures/corpus.jsonl --embedder dummy batería real rag-sanitizer fixtures/corpus.jsonl --embedder real --multimodal clip El reporte es por documento: CLEAN / SUSPECT / POISON , con las razones. La salida va por --out .json o .md ; el corpus es un dir, un .jsonl , o un .txt / .md . real embeddings MiniLM + CLIP, contra sentence-transformers / torch : real embeddings se saltan . ruff check y ruff format --check limpios; bandit 0 issues. revision pinneada commit 3d74acf9... de openai/clip-vit-base-patch32 , así la mitigación de B615 es el pin, no un nosec .Documentado en KNOWN ISSUES.md , no oculto: n = 10 documentos de confianza; con menos, el veredicto lleva low confidence y el scanner lo señala en ScanReport.warnings en vez de emitir un veredicto silencioso.El ciclo siguió implementa → audita en clone limpio → corrige → re-audita → aprueba → merge. En la auditoría independiente Claude, sobre SHA 22db1fb apareció un bug real: tras corregir sigmoid logit que saturaba a 1.0 para todos los pares por coseno escalado por temperatura en clip embedder.py , el umbral de ClipMultimodalDetector se había quedado en 0.5 y con la nueva escala match ~0.27–0.32, mismatch ~0.16–0.24 habría marcado SUSPECT prácticamente cualquier imagen. Se recalibró a 0.25, se añadió el test de caso positivo que faltaba, y se reverificó. Ese es el valor de la auditoría externa: atrapa lo que el self-report no ve. | Componente | Uso | |---|---| | Typer | CLI | | sentence-transformers MiniLM | embeddings reales | | transformers + torch | CLIP | | ruff + bandit | calidad y SAST | Licencia: AGPL-3.0-or-later. Autor: Pedro Sordo Martínez.