Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
sift-kg — Convierte cualquier colección de documentos en un grafo de conocimiento. Extrae entidades y relaciones mediante LLM, desduplica con tu aprobación. Mapea dominios, encuentra conexiones ocultas, descubre patrones entre documentos — conocimiento que persiste y se acumula, para ti y tus agentes de IA. Todo desde la CLI. | Kitploit
Herramientas/GitHubGitHub/juanceresa/sift-kg
OSINT (Inteligencia de Fuentes Abiertas)Análisis ForenseRecopilación de InformaciónRecuperación de DatosForensia DigitalPapers e InvestigaciónAprendizaje y Educación
GitHubjuanceresa/sift-kg

sift-kg

Ver Repositorio
66758hace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

Acerca de

Convierte cualquier colección de documentos en un grafo de conocimiento. Extrae entidades y relaciones mediante LLM, desduplica con tu aprobación. Mapea dominios, encuentra conexiones ocultas, descubre patrones entre documentos — conocimiento que persiste y se acumula, para ti y tus agentes de IA. Todo desde la CLI.

Compartir

sift-kg

Convierte cualquier colección de documentos en un grafo de conocimiento.

Sin código, sin base de datos, sin infraestructura — solo una CLI y tus documentos. Ingresa PDFs, artículos, papers o registros — obtén un grafo de conocimiento navegable que muestra cómo todo se conecta, en cuestión de minutos. sift-kg extrae entidades y relaciones mediante LLM, las deduplica con tu aprobación, y genera un visor interactivo que puedes explorar en tu navegador. Mapas conceptuales para todo, al alcance de tu mano.

El mismo grafo que impulsa tus visualizaciones también funciona como un segundo cerebro de IA. Todos pasan meses construyendo bases de conocimiento en Notion y Obsidian. ¿Quién tiene tiempo para eso? sift-kg es la memoria estructurada que construyes en 2 minutos en lugar de 2 años. Solo apunta a tus documentos y tu IA tendrá una comprensión estructurada de cómo todo se conecta.

Demostraciones en vivo → grafos generados completamente por sift-kg```bash pip install sift-kg

sift init # create sift.yaml + .env.example sift extract ./documents/ # extract entities & relations sift build # build knowledge graph sift resolve # find duplicate entities sift review # approve/reject merges interactively sift apply-merges # apply your decisions sift narrate # generate narrative summary sift view # interactive graph in your browser sift export graphml # export to Gephi, yEd, Cytoscape, SQLite, etc.

root@kitploit:~
## Cómo funciona```
Documents (PDF, DOCX, text, HTML, and 75+ formats)
       ↓
  Text Extraction (Kreuzberg, local) — with optional OCR (Tesseract, EasyOCR, PaddleOCR, or Google Cloud Vision)
       ↓
  Schema Discovery (LLM designs entity/relation types from your data — or use a predefined domain)
       ↓
  Entity & Relation Extraction (LLM, using discovered or predefined schema)
       ↓
  Knowledge Graph (NetworkX, JSON)
       ↓
  Entity Resolution (LLM proposes → you review)
       ↓
  Narrative Generation (LLM)
       ↓
  Interactive Viewer (browser) / Export (GraphML, GEXF, CSV, SQLite)

Every entity and relation links back to the source document and passage. You control what gets merged. The graph is yours.

Características

  • Inicio sin configuración — apunta a una carpeta, obtén un grafo de conocimiento. O coloca un sift.yaml en tu proyecto para configuraciones persistentes
  • Cualquier proveedor de LLM — OpenAI, Anthropic, Mistral, Ollama (local/privado), o cualquier proveedor compatible con LiteLLM
  • Sin esquema por defecto — una llamada al LLM muestrea tus documentos y diseña un esquema adaptado al corpus, guardado como discovered_domain.yaml para reutilizar y editar. O usa un dominio estructurado (general, osint, academic) para esquemas fijos, o define el tuyo propio en YAML
  • Intervención humana — sift propone fusiones de entidades, tú las apruebas o rechazas en una interfaz interactiva de terminal
  • Búsqueda CLI — sift search "SBF" encuentra entidades por nombre o alias, con salida opcional de relaciones y descripciones
  • Visor interactivo — explora tu grafo en el navegador con regiones de comunidad (zonas de colores que muestran la estructura del grafo), vista previa al pasar el ratón, modo foco (doble clic para aislar vecindarios), navegación por teclado (flechas para recorrer conexiones), rastro de navegación (ruta persistente que sigue tu exploración — retrocede por cada nodo visitado), búsqueda, filtros de tipo/comunidad/relación, filtro de documento fuente y filtro por grado. Pre-filtra con banderas CLI: --neighborhood, --top, , ,

Casos de uso

  • Investigación y educación — mapea cómo se conectan teorías, métodos y hallazgos a través de un cuerpo de literatura. Genera mapas conceptuales para cursos, revisiones bibliográficas o autoestudio
  • Inteligencia de negocios — añade documentos técnicos de competidores, informes de mercado o documentos internos y observa el panorama
  • Trabajo de investigación — analiza publicaciones FOIA, presentaciones judiciales, registros públicos y filtraciones de documentos
  • Revisión legal — extrae y conecta entidades a través de colecciones de documentos
  • Genealogía — rastrea relaciones familiares a través de registros vitales

Base de conocimiento de IA

sift-kg genera conocimiento estructurado del que los agentes de IA pueden operar directamente.

Apunta sift a tus documentos, notas o archivos de proyecto. La salida — un grafo de conocimiento en JSON — le da a cualquier agente de IA una comprensión estructurada y persistente de cómo se conecta todo en tu mundo. Sin organización manual, sin etiquetado, sin enlaces wiki. La estructura surge del contenido.```bash sift extract ./my-stuff/ sift build sift topology # structural overview (JSON, for agents) sift query "topic" # entity neighborhood subgraph (JSON, for agents) sift search "X" --json # entity lookup (JSON, for agents) sift info --json # project stats (JSON, for agents)

root@kitploit:~
El gráfico persiste entre sesiones y crece incrementalmente — extrae nuevos documentos en el mismo directorio de salida y reconstruye. La deduplicación de entidades asegura que el gráfico se mantenga coherente a medida que crece.

**Lo que esto le da a tu agente:**
- **Estructura** — no solo fragmentos de texto, sino entidades, relaciones, comunidades y cómo se conectan
- **Topología** — qué clústeres de conocimiento existen, qué los conecta, qué está aislado
- **Durabilidad** — el gráfico sobrevive a los reinicios de la ventana de contexto. Tu agente deja de empezar desde cero cada sesión

**Habilidad de agente incluida:** sift-kg incluye una habilidad en `.agents/skills/sift-kg/SKILL.md` que enseña a los agentes cómo usar el gráfico de conocimiento como memoria persistente — orientación de sesión, exploración de entidades, razonamiento de islas de conocimiento enlazadas y generación de sugerencias fundamentadas.

## Dominios Incluidos

sift-kg incluye dominios especializados que puedes usar listos para usar:```bash
sift domains                              # list available domains
sift extract ./docs/ --domain-name osint  # use a bundled domain

Establece un dominio en sift.yaml para no necesitar la bandera cada vez:```yaml domain: academic

root@kitploit:~
| Dominio | Enfoque | Tipos de Entidades Clave | Tipos de Relaciones Clave |
|--------|---------|--------------------------|---------------------------|
| `schema-free` | Descubierto automáticamente de tus datos (predeterminado) | *(Diseños de LLM por corpus)* | *(Diseños de LLM por corpus)* |
| `general` | Análisis general de documentos | PERSON, ORGANIZATION, LOCATION, EVENT, DOCUMENT | ASSOCIATED_WITH, MEMBER_OF, LOCATED_IN |
| `osint` | Investigaciones y FOIA | SHELL_COMPANY, FINANCIAL_ACCOUNT | BENEFICIAL_OWNER_OF, TRANSACTED_WITH, SIGNATORY_OF |
| `academic` | Revisión de literatura y mapeo de temas | CONCEPT, THEORY, METHOD, SYSTEM, FINDING, PHENOMENON, RESEARCHER, PUBLICATION, FIELD, DATASET | SUPPORTS, CONTRADICTS, EXTENDS, IMPLEMENTS, EXPLAINS, PROPOSED_BY, USES_METHOD, APPLIED_TO, INVESTIGATES |

El dominio **academic** mapea el panorama intelectual de un área de investigación — introduce artículos y obtén un grafo de cómo teorías, métodos, sistemas, hallazgos y conceptos se conectan. Distingue ideas abstractas (THEORY, METHOD) de artefactos concretos (SYSTEM — por ejemplo, GPT-2, BERT, GLUE). Diseñado para revisiones de literatura, mapeo de temas y comprensión de dónde las ideas concuerdan, se contradicen o se construyen unas sobre otras.

El dominio **schema-free** (el predeterminado) ejecuta un paso de **descubrimiento de esquemas** antes de la extracción — una llamada LLM muestrea tus documentos y diseña tipos de entidades y relaciones adaptados al corpus. El esquema descubierto se guarda en `output/discovered_domain.yaml` y se reutiliza en ejecuciones posteriores, por lo que los tipos se mantienen consistentes en todos los fragmentos y documentos. Puedes inspeccionar, editar manualmente o copiar el archivo como punto de partida para un dominio personalizado. Usa `--force` para redescubrir. En lugar de forzar relaciones en categorías predefinidas como ASSOCIATED_WITH, produce tipos específicos como FUNDED, TESTIFIED_AGAINST o ENROLLED_AT. Usa un dominio estructurado como `general` o `osint` cuando quieras un esquema fijo que definas de antemano.

El dominio **general** proporciona un esquema fijo con tipos de entidad PERSON, ORGANIZATION, LOCATION, EVENT y DOCUMENT, además de tipos de relación comunes. Útil cuando quieres tipos predecibles y consistentes entre documentos.

El dominio **osint** agrega tipos de entidad para empresas fantasma, cuentas financieras y jurisdicciones offshore, además de tipos de relación para rastrear la propiedad beneficiaria y los flujos financieros.

Nada se fusiona sin tu aprobación — el LLM propone, tú verificas. Cada extracción enlaza de vuelta al documento fuente y al pasaje.

Ve [`examples/transformers/`](https://github.com/juanceresa/sift-kg/blob/HEAD/examples/transformers/) para 12 artículos fundamentales de IA mapeados como un grafo de conceptos (425 entidades, ~$0.72), y [`examples/ftx/`](https://github.com/juanceresa/sift-kg/blob/HEAD/examples/ftx/) para el colapso de FTX (431 entidades de 9 artículos). [**Explora las demostraciones en vivo**](https://juanceresa.github.io/sift-kg/) — sin instalación, sin clave API.

## Civic Table

¿Buscas una plataforma alojada con análisis legal forense y verificación de analistas?

[**Civic Table**](https://github.com/juanceresa/forensic_analysis_platform) es una plataforma de inteligencia forense construida sobre el pipeline sift-kg. Añade un sistema de verificación de 4 niveles donde analistas y JDs validan hechos extraídos por IA antes de que se traten como evidencia, generación de dosieres LaTeX para presentaciones legales, y una interfaz web para compartir resultados con clientes y familias. Construido para restitución de propiedades, periodismo de investigación y cualquier contexto donde la procedencia documental importe.

sift-kg es la CLI de código abierto. Civic Table es la plataforma completa — y donde la producción es examinada por analistas y JDs antes de que tenga peso probatorio.

## Instalación

Requiere Python 3.11+.```bash
pip install sift-kg

Para soporte OCR (PDFs escaneados, imágenes):```bash

Local OCR — install Tesseract on your system

brew install tesseract # macOS sudo apt install tesseract-ocr # Ubuntu/Debian

Then use: sift extract ./docs/ --ocr

root@kitploit:~
Para Google Cloud Vision OCR como backend alternativo (opcional):```bash
pip install sift-kg[ocr]
# Then use: sift extract ./docs/ --ocr --ocr-backend gcv

Para agrupación semántica durante la resolución de entidades (opcional, ~2GB para PyTorch):```bash pip install sift-kg[embeddings]

root@kitploit:~
Para desarrollo:```bash
git clone https://github.com/juanceresa/sift-kg.git
cd sift-kg
pip install -e ".[dev]"

Inicio rápido

1. Inicializar y configurar```bash

sift init # creates sift.yaml + .env.example cp .env.example .env # copy and add your API key

root@kitploit:~
`sift init` genera un archivo de configuración de proyecto `sift.yaml` para que no necesites banderas en cada comando:```yaml
# sift.yaml
domain: domain.yaml           # or a bundled name like "osint"
model: openai/gpt-4o-mini
ocr: true                     # enable OCR for scanned PDFs
# extraction:
#   backend: kreuzberg         # kreuzberg (default, 75+ formats) | pdfplumber
#   ocr_backend: tesseract     # tesseract | easyocr | paddleocr | gcv
#   ocr_language: eng

Establece tu clave de API en .env:``` SIFT_OPENAI_API_KEY=sk-...

root@kitploit:~
O use Anthropic, Mistral, Ollama, o cualquier proveedor de LiteLLM:```
SIFT_ANTHROPIC_API_KEY=sk-ant-...
SIFT_MISTRAL_API_KEY=...

2. Extraer entidades y relaciones```bash

sift extract ./my-documents/ sift extract ./my-documents/ --ocr # local OCR via Tesseract sift extract ./my-documents/ --ocr --ocr-backend gcv # Google Cloud Vision OCR sift extract ./my-documents/ --extractor pdfplumber # legacy pdfplumber backend

root@kitploit:~
Lee más de 75 formatos de documentos — PDFs, DOCX, XLSX, PPTX, HTML, EPUB, imágenes y más. Extrae entidades y relaciones usando tu LLM configurado. Los resultados se guardan como JSON en `output/extractions/`.

La bandera `--ocr` habilita OCR local mediante Tesseract para PDFs escaneados — no se necesitan claves de API ni servicios en la nube. Puedes cambiar de motor OCR con `--ocr-backend`:```bash
sift extract ./docs/ --ocr                          # Tesseract (default, local)
sift extract ./docs/ --ocr --ocr-backend easyocr    # EasyOCR (local)
sift extract ./docs/ --ocr --ocr-backend paddleocr  # PaddleOCR (local)
sift extract ./docs/ --ocr --ocr-backend gcv        # Google Cloud Vision (requires credentials)

Detecta automáticamente qué PDFs necesitan OCR — los PDFs con mucho texto utilizan la extracción estándar, solo las páginas casi vacías recurren al OCR. Seguro para carpetas mixtas. Sin --ocr, sift advertirá si un PDF parece escaneado.

También puede cambiar completamente el backend de extracción con --extractor pdfplumber para el backend heredado de pdfplumber (solo PDF/DOCX/TXT/HTML).

3. Construir el grafo de conocimiento```bash

sift build

root@kitploit:~
Construye un grafo NetworkX a partir de todas las extracciones. Deduplica automáticamente nombres de entidades casi idénticos (plurales, variantes Unicode, diferencias de mayúsculas/minúsculas) antes de que se conviertan en nodos del grafo. Corrige direcciones de arista invertidas cuando el LLM intercambia tipos fuente/destino frente al esquema del dominio. Marca relaciones de baja confianza para revisión. Guarda en `output/graph_data.json`.

### 4. Resolver entidades duplicadas

Consulte [Flujo de trabajo de resolución de entidades](#entity-resolution-workflow) a continuación para obtener la guía completa, especialmente importante para casos de uso genealógicos, legales y de investigación donde la precisión es importante.

### 5. Explorar y exportar

**Visor interactivo** — explore su mapa conceptual en el navegador:```bash
sift view                                              # full graph
sift view --neighborhood "Palantir Technologies"       # 1-hop ego graph around an entity
sift view --neighborhood "Palantir" --depth 3          # 3-hop neighborhood
sift view --top 10                                     # top 10 hubs + their neighbors
sift view --community "Community 1"                    # focus on a specific community
sift view --source-doc palantir_nsa_surveillance       # entities from one document
sift view --min-confidence 0.8                         # hide low-confidence nodes/edges

Abre un gráfico de fuerza dirigida en tu navegador. La vista general muestra regiones de comunidad — envolventes convexas de colores que agrupan entidades relacionadas — para que puedas ver la estructura del gráfico de un vistazo sin saturación de etiquetas. Pasa el cursor sobre cualquier nodo para previsualizar su nombre y conexiones. Incluye búsqueda, alternancias de tipo/comunidad/relación, filtro de documento fuente, filtro de grado y un panel lateral de detalles.

Las banderas de pre-filtrado (--top, --neighborhood, --source-doc, --min-confidence) reducen el gráfico antes de renderizarlo. --community pre-selecciona una comunidad en el panel lateral. --neighborhood acepta IDs de entidad (person:alice) o nombres mostrados (sin distinguir mayúsculas/minúsculas).

Modo enfoque: Haz doble clic en cualquier entidad para aislar su vecindario. Usa las teclas de flecha para recorrer las conexiones una por una — cada par se muestra de forma aislada con aristas etiquetadas. Presiona Enter/Flecha derecha para cambiar el enfoque a un vecino, Retroceso/Flecha izquierda para retroceder en tu camino, Escape para salir. Tu exploración se rastrea como una miga de pan de ruta en el panel lateral — un camino persistente que muestra cada nodo que has visitado y las relaciones entre ellos. Las aristas del rastro permanecen resaltadas en el lienzo para que puedas ver tu camino a través del gráfico. Esta es la forma prevista de explorar gráficos densos — acercarse a lo que importa, trazar conexiones, leer la evidencia.

Búsqueda CLI — consulta entidades directamente desde la terminal:```bash sift search "Sam Bankman" # search by name sift search "SBF" # search by alias sift search "Caroline" -r # show relations sift search "FTX" -d -t ORGANIZATION # descriptions + type filter

root@kitploit:~
**Static exports** — para herramientas de análisis donde desees un diseño, filtrado o estilo personalizados:```bash
sift export graphml           # → output/graph.graphml (Gephi, yEd, Cytoscape)
sift export gexf              # → output/graph.gexf (Gephi native)
sift export sqlite            # → output/graph.sqlite (SQL queries, DuckDB, Datasette)
sift export csv               # → output/csv/entities.csv + relations.csv
sift export json              # → output/graph.json

Usa GraphML/GEXF cuando quieras controlar el tamaño de los nodos, la ponderación de aristas, esquemas de color personalizados o aplicar algoritmos de grafos (centralidad, detección de comunidades) en herramientas especializadas. SQLite es útil para consultas SQL ad-hoc, publicaciones en Datasette o cargar datos en DuckDB.

6. Generar narrativa```bash

sift narrate sift narrate --communities-only # regenerate community labels only (~$0.01)

root@kitploit:~
Produce `output/narrative.md` — un informe en prosa con un resumen, cadenas de relaciones clave entre las entidades principales, una línea de tiempo (cuando existen fechas en los datos) y perfiles de entidades agrupados por comunidad temática (descubierta mediante detección de comunidades Louvain). Las descripciones de entidades están escritas en voz activa con acciones específicas, no resúmenes de roles.

## Configuración del Dominio

sift-kg incluye cuatro dominios empaquetados (consulta [Dominios Empaquetados](#bundled-domains) arriba para más detalles). El valor predeterminado es `schema-free`.

Usar un dominio incluido:```bash
sift extract ./docs/ --domain-name osint

O crea tu propio domain.yaml:```yaml name: My Domain fallback_relation: RELATED_TO # optional — catch-all for relations that don't fit defined types entity_types: PERSON: description: People and individuals extraction_hints: - Look for full names with titles COMPANY: description: Business entities DEPARTMENT: description: Named departments within a company canonical_names: # closed vocabulary — only these values allowed - Engineering - Sales - Legal - Marketing canonical_fallback_type: ORGANIZATION # non-canonical names get retyped relation_types: EMPLOYED_BY: description: Employment relationship source_types: [PERSON] target_types: [COMPANY] OWNS: description: Ownership relationship symmetric: false review_required: true RELATED_TO: # define the fallback type if you use one description: General relationship

root@kitploit:~
**Aplicación del esquema:** Los tipos de entidad y los tipos de relación definidos en su dominio se tratan como un conjunto cerrado — se indica al LLM que utilice solo estos tipos y que no invente otros nuevos. Si se define `fallback_relation`, las relaciones que no encajan en ningún tipo definido se asignan al fallback. Si se omite, el LLM utiliza el tipo definido que más se aproxime con menor confianza. Si ve muchas relaciones que terminan en su tipo de fallback, es probable que su esquema carezca de un tipo de relación que los datos necesitan — agréguelo y vuelva a extraer.

Los tipos de entidad con `canonical_names` aplican un vocabulario cerrado. Los nombres permitidos se inyectan en el mensaje de extracción del LLM para que genere coincidencias exactas. Como red de seguridad, cualquier nombre extraído que no esté en la lista se reclasifica a `canonical_fallback_type` durante la construcción del grafo (o se mantiene tal cual si no hay fallback definido). Útil para taxonomías controladas — departamentos, jurisdicciones, clasificaciones predefinidas.```bash
sift extract ./docs/ --domain path/to/domain.yaml

Library API

Usa sift-kg desde Python — Jupyter notebooks, scripts, aplicaciones web:```python from sift_kg import load_domain, run_extract, run_build, run_narrate, run_resolve, run_export, run_view from sift_kg import KnowledgeGraph from pathlib import Path

domain = load_domain() # or load_domain(bundled_name="osint")

Extract — supports OCR, backend selection, concurrency

results = run_extract( Path("./docs"), "openai/gpt-4o-mini", domain, Path("./output"), ocr=True, ocr_backend="tesseract", # enable OCR for scanned PDFs extractor="kreuzberg", # or "pdfplumber" concurrency=4, chunk_size=10000, )

Build graph

kg = run_build(Path("./output"), domain) print(f"{kg.entity_count} entities, {kg.relation_count} relations")

Resolve duplicates — with optional semantic clustering

merges = run_resolve(Path("./output"), "openai/gpt-4o-mini", domain=domain, use_embeddings=True)

Export — json, graphml, gexf, csv, sqlite

run_export(Path("./output"), "sqlite")

Narrate — or just regenerate community labels cheaply

run_narrate(Path("./output"), "openai/gpt-4o-mini", communities_only=True)

View — with optional pre-filters

run_view(Path("./output")) # full graph run_view(Path("./output"), neighborhood="person:alice", depth=2) # ego graph run_view(Path("./output"), top_n=10) # top hubs

Or run the full pipeline (extract → build → narrate)

from sift_kg import run_pipeline run_pipeline(Path("./docs"), "openai/gpt-4o-mini", domain, Path("./output"))

root@kitploit:~
## Estructura del Proyecto

Después de ejecutar el pipeline, tu directorio de salida contiene:```
output/
├── extractions/               # Per-document extraction JSON
│   ├── document1.json
│   └── document2.json
├── discovered_domain.yaml     # Auto-discovered schema (schema-free mode)
├── graph_data.json            # Knowledge graph (native format)
├── merge_proposals.yaml       # Entity merge proposals (DRAFT/CONFIRMED/REJECTED)
├── relation_review.yaml       # Flagged relations for review
├── narrative.md               # Generated narrative summary
├── entity_descriptions.json   # Entity descriptions (loaded by viewer)
├── communities.json           # Community assignments (shared by narrate + viewer)
├── graph.html                 # Interactive graph visualization
├── graph.graphml              # GraphML export (if exported)
├── graph.gexf                 # GEXF export (if exported)
├── graph.sqlite               # SQLite export (if exported)
└── csv/                       # CSV export (if exported)
    ├── entities.csv
    └── relations.csv

Flujo de Trabajo de Resolución de Entidades

Cuando estás construyendo un grafo de conocimiento a partir de registros familiares, documentos legales o cualquier documento donde la precisión importa, deseas control total sobre qué entidades se fusionan. sift-kg nunca fusiona nada sin tu aprobación.

El flujo de trabajo tiene tres capas, cada una detectando diferentes tipos de duplicados:

Capa 1: Pre-dedup Automático (durante sift build)

Antes de que las entidades se conviertan en nodos del grafo, sift colapsa determinísticamente nombres que son obviamente iguales. Sin LLM involucrado, sin costo, sin necesidad de revisión:

  • Normalización Unicode — "Jose Garcia" y "Jose Garcia" se convierten en un nodo
  • Eliminación de títulos — "Detective Joe Recarey" y "Joe Recarey" se fusionan (elimina ~35 prefijos comunes: Dr., Sr., Juez, Senador, etc.)
  • Singularización — "Companies" y "Company" se fusionan
  • Coincidencia difusa de cadenas — SemHash con un umbral de 0.95 detecta cadenas casi idénticas como "MacAulay" vs "Mac Aulay"

Esto ocurre automáticamente cada vez que ejecutas sift build. Estos son los casos triviales — variantes ortográficas que saturarían tu grafo sin agregar información.

Capa 2: LLM Propone Fusiones (durante sift resolve)

El LLM ve lotes de entidades (todos los tipos excepto DOCUMENT) e identifica aquellas que probablemente se refieren a la misma cosa del mundo real. También detecta duplicados entre tipos (mismo nombre, diferente tipo de entidad) y propone relaciones de variante (EXTENDS) cuando encuentra patrones padre/hijo. Los resultados van a merge_proposals.yaml (fusiones de entidades) y relation_review.yaml (relaciones de variante), todo comenzando como DRAFT:```bash sift resolve # uses domain from sift.yaml sift resolve --domain osint # or specify explicitly

root@kitploit:~
Si tienes un dominio configurado, el LLM usa ese contexto para hacer mejores juicios sobre los nombres de entidades específicos de tu campo.

Esto genera propuestas como:```yaml
proposals:
- canonical_id: person:samuel_benjamin_bankman_fried
  canonical_name: Samuel Benjamin Bankman-Fried
  entity_type: PERSON
  status: DRAFT                    # ← you decide
  members:
  - id: person:bankman_fried
    name: Bankman-Fried
    confidence: 0.99
  reason: Same person referenced with full name vs. surname only.

- canonical_id: person:stephen_curry
  canonical_name: Stephen Curry
  entity_type: PERSON
  status: DRAFT                    # ← you decide
  members:
  - id: person:steph_curry
    name: Steph Curry
    confidence: 0.99
  reason: Same basketball player referenced with nickname 'Steph' and full name 'Stephen'.

Nada se ha fusionado todavía. El LLM está proponiendo, no decidiendo.

Capa 3: Tú Revisas y Decides

Tienes dos opciones para revisar propuestas:

Opción A: Revisión interactiva de terminal```bash sift review

root@kitploit:~
Recorre cada propuesta `DRAFT` una por una. Para cada una, ves la entidad canónica, los miembros de fusión propuestos, la confianza y el razonamiento del LLM. Apruebas, rechazas u omites.

Las propuestas de alta confianza (>0.85 por defecto) se auto-aprueban, y las relaciones de baja confianza (<=0.5 por defecto) se auto-rechazan:```bash
sift review                        # uses defaults: --auto-approve 0.85, --auto-reject 0.5
sift review --auto-approve 0.90    # raise the auto-approve threshold
sift review --auto-reject 0.3      # lower the auto-reject threshold
sift review --auto-approve 1.0     # disable auto-approve, review everything manually

Opción B: Editar el YAML directamente

Abre output/merge_proposals.yaml en cualquier editor de texto. Cambia status: DRAFT por CONFIRMED o REJECTED:```yaml

  • canonical_id: person:stephen_curry canonical_name: Stephen Curry entity_type: PERSON status: CONFIRMED # ← approve this merge members:

    • id: person:steph_curry name: Steph Curry confidence: 0.99 reason: Same basketball player...
  • canonical_id: person:winklevoss_twins canonical_name: Winklevoss twins entity_type: PERSON status: REJECTED # ← these are distinct people, don't merge members:

    • id: person:cameron_winklevoss name: Cameron Winklevoss confidence: 0.95 reason: ...
root@kitploit:~
**Para casos de uso de alta precisión** (genealogía, revisión legal), recomendamos editar el YAML directamente para que puedas estudiar cada propuesta cuidadosamente. El archivo está diseñado para ser legible por humanos.

### Capa 3b: Revisión de Relaciones

Durante `sift build`, las relaciones por debajo del umbral de confianza (por defecto 0.7) o de tipos marcados como `review_required` en tu configuración de dominio se marcan en `output/relation_review.yaml`:```yaml
review_threshold: 0.7
relations:
- source_name: Alice Smith
  target_name: Acme Corp
  relation_type: WORKS_FOR
  confidence: 0.45
  evidence: "Alice mentioned she used to work near the Acme building."
  status: DRAFT                    # ← you decide: CONFIRMED or REJECTED
  flag_reason: Low confidence (0.45 < 0.7)

Mismo flujo de trabajo: revisar con sift review o editar el YAML, luego aplicar.

Capa 4: Aplica tus decisiones

Una vez que hayas revisado todo:```bash sift apply-merges

root@kitploit:~
Esto hace tres cosas:
1. **Fusiones de entidades confirmadas** — las entidades miembro se absorben en la entidad canónica. Todas sus relaciones se recablean. Los documentos fuente se combinan. Los nodos miembro se eliminan.
2. **Relaciones rechazadas** — eliminadas por completo del grafo.
3. **Propuestas BORRADOR** — se dejan intactas. Puedes volver a ellas más tarde.

El grafo se guarda de nuevo en `output/graph_data.json`. Puedes reexportar, narrar o visualizar el grafo limpiado.

### Iteración

La resolución de entidades no siempre es de una sola pasada. Después de fusionar, pueden aparecer nuevos duplicados. Puedes volver a ejecutar:```bash
sift resolve                  # find new duplicates in the cleaned graph
sift review                   # review the new proposals
sift apply-merges             # apply again

Cada ejecución es aditiva: las decisiones previas de CONFIRMED/REJECTED en merge_proposals.yaml se conservan.

Flujo de trabajo recomendado según el caso de uso

Internals de deduplicación

Las técnicas de pre-dedup y agrupación por lotes con LLM están inspiradas en KGGen (NeurIPS 2025) de @stochastic-sisyphus. KGGen utiliza SemHash para la deduplicación determinista de entidades y clustering basado en embeddings para agrupar entidades antes de la comparación con LLM. sift-kg adapta estos métodos a su flujo de trabajo de revisión con intervención humana.

Clustering basado en embeddings (opcional)

Por defecto, sift resolve ordena las entidades alfabéticamente y las divide en lotes superpuestos para la comparación con LLM. Esto funciona bien cuando los duplicados tienen una ortografía similar, pero "Robert Smith" (R) y "Bob Smith" (B) terminan en lotes diferentes y nunca se comparan.```bash pip install sift-kg[embeddings] # sentence-transformers + scikit-learn (~2GB, pulls PyTorch) sift resolve --embeddings

root@kitploit:~
Esto reemplaza el agrupamiento alfabético con clustering KMeans sobre embeddings de oraciones (all-MiniLM-L6-v2). Nombres semánticamente similares se agrupan juntos independientemente de la ortografía.

| | Predeterminado (alfabético) | `--embeddings` |
|---|---|---|
| Tamaño de instalación | Incluido | ~2GB (PyTorch) |
| Sobrecarga de primera ejecución | Ninguna | ~90MB de descarga del modelo |
| Sobrecarga por ejecución | Solo ordenamiento | Codificación (<1s para cientos de entidades) |
| Duplicados entre alfabetos | No detectados si están en distintos lotes | Detectados |
| Grafos pequeños (<100/tipo) | Mismo resultado | Mismo resultado |

Vuelve al agrupamiento alfabético si las dependencias no están instaladas o el clustering falla.

## Licencia

MIT
Descargar herramienta
--community
--source-doc
--min-confidence
  • Exporta a cualquier lado — GraphML (yEd, Cytoscape), GEXF (Gephi), SQLite, CSV, o JSON nativo para análisis avanzado
  • Generación de narrativas — informes en prosa con cadenas de relaciones, líneas de tiempo y perfiles de entidades agrupadas por comunidad
  • Procedencia de fuentes — cada extracción enlaza al documento y pasaje del que proviene
  • Multilingüe — extrae de documentos en cualquier idioma, genera un grafo de conocimiento unificado en inglés. Los nombres propios se mantienen sin cambios, las escrituras no latinas se romanizan automáticamente
  • Más de 75 formatos de documentos — PDF, DOCX, XLSX, PPTX, HTML, EPUB, imágenes y más a través del motor de extracción Kreuzberg
  • OCR para PDFs escaneados — OCR local mediante Tesseract (por defecto), EasyOCR o PaddleOCR (bandera --ocr), con opción de fallback a Google Cloud Vision (--ocr-backend gcv)
  • Controles de presupuesto — establece --max-cost para limitar el gasto en LLM
  • Se ejecuta localmente — tus documentos permanecen en tu máquina
  • Caso de usoEnfoque sugerido
    Exploración rápidasift review --auto-approve 0.85 — aprobar alta confianza, revisar el resto
    Genealogía / registros familiaresEditar YAML manualmente, --auto-approve 1.0 — revisar cada fusión individualmente
    Legal / investigaciónsift resolve --embeddings, editar YAML manualmente, usar sift view para inspeccionar entre rondas
    Corpus grande (1000+ entidades)sift resolve --embeddings para mejor agrupación por lotes, luego revisión interactiva