Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sift-kg — 将任何文档集合转化为知识图谱。通过LLM提取实体和关系,经你审批去重。映射领域,发现隐藏关联,跨文档识别模式——为你和你的AI代理沉淀并累积的知识。全部在命令行中完成。 | Kitploit
工具/GitHubGitHub/juanceresa/sift-kg
OSINT (开源情报)取证分析信息收集数据恢复数字取证论文与研究学习与教育
GitHubjuanceresa/sift-kg

sift-kg

将任何文档集合转化为知识图谱。通过LLM提取实体和关系,经你审批去重。映射领域,发现隐藏关联,跨文档识别模式——为你和你的AI代理沉淀并累积的知识。全部在命令行中完成。

查看仓库
667583个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

sift-kg

将任何文档集合转化为知识图谱。

无需代码,无需数据库,无需基础设施——只需要一个命令行工具和你的文档。放入PDF、论文、文章或记录——几分钟内即可获得一个可浏览的知识图谱,展示所有内容之间的关联。sift-kg通过LLM提取实体和关系,经你确认后去重,并生成一个交互式查看器,你可以在浏览器中探索。任何内容的概念图,唾手可得。

支撑你可视化的同一个图谱也可以作为AI第二大脑。每个人都在Notion和Obsidian上花费数月构建知识库。谁有那个时间?sift-kg是你用2分钟而不是2年构建的结构化记忆。只需指向你的文档,你的AI就能结构化地理解所有内容之间的关联。

现场演示 → 完全由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:~
## 工作原理```
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)

每个实体和关系都链接回源文档和段落。你控制哪些内容被合并。这张图是你的。

功能特性

  • 零配置启动 — 指向一个文件夹,即可获得知识图谱。或者在项目中放置 sift.yaml 以持久化设置
  • 任意LLM提供商 — OpenAI、Anthropic、Mistral、Ollama(本地/私有),或任何兼容LiteLLM的提供商
  • 默认无模式 — 一次LLM调用即可采样文档并设计针对语料库定制的模式,保存为 discovered_domain.yaml 供复用和编辑。或者使用结构化领域(general、osint、academic)获得固定模式,也可在YAML中自行定义
  • 人在回路中 — sift 提出实体合并建议,你在交互式终端界面中批准或拒绝
  • CLI搜索 — sift search "SBF" 按名称或别名查找实体,可选择输出关系和描述
  • 交互式查看器 — 在浏览器中浏览图谱,支持社区区域(显示图谱结构的彩色区块)、悬停预览、聚焦模式(双击隔离邻域)、键盘导航(箭头键遍历连接)、路径面包屑(持久化路径,追踪你的探索——回溯所有访问过的节点)、搜索、类型/社区/关系切换、源文档过滤器以及度数过滤。使用CLI标志预过滤:--neighborhood、--top、--community、--source-doc、--min-confidence
  • 随处导出 — GraphML(yEd、Cytoscape)、GEXF(Gephi)、SQLite、CSV 或原生 JSON 用于高级分析
  • 叙事生成 — 包含关系链、时间线和社区分组实体概况的散文式报告

使用场景

  • 研究与教育 — 绘制文献中理论、方法和发现之间的关联。为课程、文献综述或自学生成概念图
  • 商业情报 — 导入竞争对手白皮书、市场报告或内部文档,即可洞悉全局
  • 调查工作 — 分析信息自由法(FOIA)公开文件、法院卷宗、公共记录和文档泄露
  • 法律审查 — 从文档集合中提取并关联实体
  • 家谱研究 — 在生命记录中追溯家庭关系

AI知识库

sift-kg 生成结构化知识,AI代理可以直接基于此进行操作。

将 sift 指向你的文档、笔记或项目文件。输出——一个JSON知识图谱——为任何AI代理提供持久化、结构化的理解,展示你世界中一切事物之间的联系。无需手动组织、无需标签、无需维基链接。结构从内容中自然涌现。```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:~
图结构跨会话持久保存,并会增量扩展——将新文档提取到相同的输出目录并重建。实体去重确保图在扩展过程中保持连贯。

**这为您的智能体带来了什么:**
- **结构** —— 不仅仅是文本块,而是实体、关系、社区及其连接方式
- **拓扑** —— 存在哪些知识集群,哪些桥接它们,哪些是孤立的
- **持久性** —— 图在上下文窗口重置后仍然存在。您的智能体不再从零开始每个会话

**附带的智能体技能:** sift-kg 附带一个位于 `.agents/skills/sift-kg/SKILL.md` 的技能文件,该文件教导智能体如何将知识图用作持久记忆——会话定位、实体探索、连接知识孤岛推理以及基于基础信息的建议生成。

## 附带的领域

sift-kg 附带了一些开箱即用的专用领域:```bash
sift domains                              # list available domains
sift extract ./docs/ --domain-name osint  # use a bundled domain

在 sift.yaml 中设置一个域名,这样就不需要每次都使用该标志:```yaml domain: academic

root@kitploit:~
Works with bundled names (`schema-free`, `general`, `osint`, `academic`) or a path to a custom YAML file.

| Domain | Focus | Key Entity Types | Key Relation Types |
|--------|-------|------------------|--------------------|
| `schema-free` | Auto-discovered from your data (default) | *(LLM designs per corpus)* | *(LLM designs per corpus)* |
| `general` | General document analysis | PERSON, ORGANIZATION, LOCATION, EVENT, DOCUMENT | ASSOCIATED_WITH, MEMBER_OF, LOCATED_IN |
| `osint` | Investigations & FOIA | SHELL_COMPANY, FINANCIAL_ACCOUNT | BENEFICIAL_OWNER_OF, TRANSACTED_WITH, SIGNATORY_OF |
| `academic` | Literature review & topic mapping | CONCEPT, THEORY, METHOD, SYSTEM, FINDING, PHENOMENON, RESEARCHER, PUBLICATION, FIELD, DATASET | SUPPORTS, CONTRADICTS, EXTENDS, IMPLEMENTS, EXPLAINS, PROPOSED_BY, USES_METHOD, APPLIED_TO, INVESTIGATES |

**academic** 域映射研究领域的知识图谱——输入论文,即可获得理论、方法、系统、发现和概念如何相互连接的图形。区分抽象思想(THEORY、METHOD)和具体成果(SYSTEM——例如 GPT-2、BERT、GLUE)。专为文献综述、主题映射以及理解观点在何处一致、矛盾或相互构建而设计。

**schema-free** 域(默认)在提取前执行**模式发现**步骤——一次 LLM 调用会抽样您的文档,并为该语料库设计实体和关系类型。发现的模式会保存到 `output/discovered_domain.yaml` 中,并在后续运行中重复使用,因此类型在所有分块和文档之间保持一致。您可以检查、手动编辑或复制该文件,作为自定义域的起点。使用 `--force` 重新发现。它不会将关系强制纳入预定义类别(如 ASSOCIATED_WITH),而是生成特定类型(如 FUNDED、TESTIFIED_AGAINST 或 ENROLLED_AT)。当您想要预先定义的固定模式时,请使用结构化域(如 `general` 或 `osint`)。

**general** 域提供了一个固定模式,包含 PERSON、ORGANIZATION、LOCATION、EVENT 和 DOCUMENT 实体类型以及常见关系类型。当您希望在文档中获得可预测的一致类型时非常有用。

**osint** 域增加了空壳公司、金融账户和离岸司法管辖区的实体类型,以及用于追踪实益所有权和资金流动的关系类型。

未经您的批准,不会合并任何内容——LLM 提出建议,您进行验证。每次提取都会链接回源文档和段落。

See [`examples/transformers/`](https://github.com/juanceresa/sift-kg/blob/HEAD/examples/transformers/) for 12 foundational AI papers mapped as a concept graph (425 entities, ~$0.72), and [`examples/ftx/`](https://github.com/juanceresa/sift-kg/blob/HEAD/examples/ftx/) for the FTX collapse (431 entities from 9 articles). [**Explore the live demos**](https://juanceresa.github.io/sift-kg/) — no install, no API key.

## Civic Table

Looking for a hosted platform with forensic legal analysis and analyst verification?

[**Civic Table**](https://github.com/juanceresa/forensic_analysis_platform) is a forensic intelligence platform built on the sift-kg pipeline. It adds a 4-tier verification system where analysts and JDs validate AI-extracted facts before they're treated as evidence, LaTeX dossier generation for legal submissions, and a web interface for sharing results with clients and families. Built for property restitution, investigative journalism, and any context where documentary provenance matters.

sift-kg is the open-source CLI. Civic Table is the full platform — and where the output gets vetted by analysts and JDs before it carries evidentiary weight.

## Installation

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

对于OCR支持(扫描的PDF、图片):```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:~
对于 Google Cloud Vision OCR 作为替代后端(可选):```bash
pip install sift-kg[ocr]
# Then use: sift extract ./docs/ --ocr --ocr-backend gcv

对于实体解析过程中的语义聚类(可选,PyTorch约需2GB):```bash pip install sift-kg[embeddings]

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

快速开始

1. 初始化并配置```bash

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

root@kitploit:~
`sift init` 生成一个 `sift.yaml` 项目配置文件,这样你就不需要在每条命令中都带上标志了:```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

在 .env 中设置你的 API 密钥:``` SIFT_OPENAI_API_KEY=sk-...

root@kitploit:~
或者使用 Anthropic、Mistral、Ollama 或任何 LiteLLM 提供商:```
SIFT_ANTHROPIC_API_KEY=sk-ant-...
SIFT_MISTRAL_API_KEY=...

设置优先级:CLI 标志 > 环境变量 > .env > sift.yaml > 默认值。你可以通过任何命令的标志来覆盖 sift.yaml 中的任何设置。

2. 提取实体和关系```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:~
读取超过75种文档格式——PDF、DOCX、XLSX、PPTX、HTML、EPUB、图片等。使用您配置的LLM提取实体和关系。结果保存为JSON,位于`output/extractions/`中。

`--ocr`标志启用通过Tesseract进行的本地OCR,用于扫描的PDF——无需API密钥或云服务。您可以使用`--ocr-backend`切换OCR引擎:```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)

它会自动检测哪些PDF需要OCR——富含文本的PDF使用标准提取,只有几乎空白的页面才会回退到OCR。适用于混合文件夹。如果没有--ocr,sift会在PDF看似扫描件时发出警告。

你也可以使用--extractor pdfplumber完全切换提取后端到旧的pdfplumber后端(仅限PDF/DOCX/TXT/HTML)。

3. 构建知识图谱```bash

sift build

root@kitploit:~
从所有提取结果中构建 NetworkX 图。自动去重近乎相同的实体名称(复数、Unicode 变体、大小写差异),使它们成为图节点。当 LLM 交换源/目标类型与域模式时,修复反转的边方向。标记低置信度关系以供审查。保存至 `output/graph_data.json`。

### 4. 解析重复实体

请参见下方的[实体解析工作流程](#entity-resolution-workflow)了解完整指南——这对于家谱、法律和调查用例尤为重要,因为准确性至关重要。

### 5. 探索与导出

**交互式查看器**——在浏览器中探索你的概念图:```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

打开浏览器中的力导向图。概览显示社区区域——彩色凸包将相关实体分组——因此无需标签杂乱即可一目了然地看到图结构。悬停任意节点可预览其名称和连接。包含搜索、类型/社区/关系切换、源文档过滤器、度过滤器以及详细侧边栏。

预过滤标志(--top、--neighborhood、--source-doc、--min-confidence)可在渲染前缩减图。--community 在侧边栏中预选一个社区。--neighborhood 接受实体 ID(person:alice)或显示名称(不区分大小写)。

聚焦模式: 双击任意实体以隔离其邻域。使用箭头键逐个浏览连接——每一对都隔离显示并带有标签边。按 Enter/右箭头将焦点移至邻居,按 Backspace/左箭头沿路径返回,按 Escape 退出。探索轨迹在侧边栏中记录为路径面包屑——一个持久路径,显示您访问过的每个节点以及它们之间的关系。路径边在画布上保持高亮,便于查看图中的路径。这是浏览密集图的预期方式——放大关键内容,追踪连接,阅读证据。

CLI 搜索——直接从终端查询实体:```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:~
**静态导出** — 适用于需要自定义布局、筛选或样式的分析工具:```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

当您希望在专用工具中控制节点大小、边权重、自定义配色方案,或应用图算法(中心性、社区检测)时,请使用 GraphML/GEXF。SQLite 适用于临时 SQL 查询、Datasette 发布,或加载到 DuckDB 中。

6. 生成叙述```bash

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

root@kitploit:~
生成 `output/narrative.md` — 一份散文式报告,包含概述、顶层实体之间的关键关系链、时间线(当数据中存在日期时)、以及按主题社区分组(通过Louvain社区检测发现)的实体档案。实体描述采用主动语态,描述具体行动,而非角色总结。

## 领域配置

sift-kg 附带四个内置领域(详见上文中的[内置领域](#bundled-domains))。默认配置为 `schema-free`。

要使用内置领域:```bash
sift extract ./docs/ --domain-name osint

或者创建你自己的 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:~
**模式强制:** 你在领域中定义的实体类型和关系类型被视为封闭集合——LLM 被指示仅使用这些类型,且不会发明新类型。如果设置了`fallback_relation`,不符合任何定义类型的关系将映射到回退类型。如果省略,LLM 使用最接近的匹配定义类型,但置信度较低。如果你看到许多关系落入回退类型,则意味着你的模式缺少数据所需的关系类型——请添加它并重新提取。

具有`canonical_names`的实体类型强制使用封闭词汇表。允许的名称被注入到 LLM 提取提示中,以便输出精确匹配。作为安全网,任何不在列表中的提取名称在图形构建期间会被重新类型化为`canonical_fallback_type`(如果未设置回退,则保持原样)。适用于受控分类——部门、管辖区、预定义分类。```bash
sift extract ./docs/ --domain path/to/domain.yaml

Library API

使用 sift-kg 从 Python — Jupyter notebooks, scripts, web apps:```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:~
## 项目结构

运行管道后,输出目录包含:```
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

实体解析工作流

当您从家族记录、法律文件或任何对准确性要求严格的文档构建知识图谱时,您希望完全控制哪些实体被合并。sift-kg 绝不会在未经您批准的情况下合并任何内容。

该工作流包含三个层级,每个层级捕获不同类型的重复实体:

第一层:自动预去重(在 sift build 期间)

在实体成为图节点之前,sift 会自动确定性地合并明显相同的名称。无需 LLM,无成本,无需审查:

  • Unicode 标准化 — "Jose Garcia" 和 "Jose Garcia" 成为一个节点
  • 标题去除 — "Detective Joe Recarey" 和 "Joe Recarey" 合并(去除约35个常见前缀:Dr.、Mr.、Judge、Senator 等)
  • 单数化 — "Companies" 和 "Company" 合并
  • 模糊字符串匹配 — SemHash 在阈值0.95下捕获近似相同的字符串,如 "MacAulay" 与 "Mac Aulay"

每次运行 sift build 时,此操作会自动执行。这些是琐碎的情况——拼写变体会使图变得杂乱而不增加信息。

第二层:LLM 提议合并(在 sift resolve 期间)

LLM 会查看批量实体(除 DOCUMENT 外的所有类型),并识别可能指向同一现实世界事物的实体。它还会检测跨类型重复(同名但实体类型不同),并在发现父子模式时提议变体关系(EXTENDS)。结果输出到 merge_proposals.yaml(实体合并)和 relation_review.yaml(变体关系),所有内容初始状态为 DRAFT:```bash sift resolve # uses domain from sift.yaml sift resolve --domain osint # or specify explicitly

root@kitploit:~
如果你配置了一个领域,LLM会利用该上下文来对你领域中特定的实体名称做出更好的判断。

这会生成如下提议:```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'.

尚未合并任何内容。 LLM 正在提出建议,而非做出决定。

第3层:你审查并决定

你有两种审查提议的选项:

选项A:交互式终端审查```bash sift review

root@kitploit:~
逐条审阅每个 `DRAFT` 提案。针对每个提案,您将看到规范实体、建议合并的成员、LLM 的置信度及推理过程。您可以批准、拒绝或跳过。

高置信度提案(默认 >0.85)将自动批准,低置信度关系(默认 <=0.5)将自动拒绝:```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

选项B:直接编辑YAML

用任何文本编辑器打开 output/merge_proposals.yaml。将 status: DRAFT 改为 CONFIRMED 或 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:~
**对于高精度使用场景**(如家谱、法律审查),我们建议直接编辑YAML文件,以便仔细研究每个提案。该文件设计为人类可读。

### Layer 3b: 关系审查

在执行 `sift build` 期间,低于置信度阈值(默认0.7)的关系,或在你的域配置中标记为 `review_required` 的类型,将在 `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)

同样的工作流:使用 sift review 进行审查或编辑 YAML,然后应用。

第4层:应用你的决策

一旦你审查完所有内容:```bash sift apply-merges

root@kitploit:~
这会做三件事:
1. **已确认的实体合并** — 成员实体被吸收到规范实体中。它们的所有关系被重新连接。源文档被合并。成员节点被移除。
2. **已拒绝的关系** — 从图中完全移除。
3. **草稿提案** — 保持不变。你可以稍后回来处理它们。

图表会保存回 `output/graph_data.json`。你可以重新导出、叙述或可视化清理后的图表。

### 迭代

实体解析通常不能一次完成。合并后,新的重复项可能会变得明显。你可以重新运行:```bash
sift resolve                  # find new duplicates in the cleaned graph
sift review                   # review the new proposals
sift apply-merges             # apply again

每次运行都是累加的——之前 CONFIRMED/REJECTED 决策在 merge_proposals.yaml 中会被保留。

按使用场景推荐的工作流程

去重内部机制

预去重和 LLM 批处理技术受到了 @stochastic-sisyphus 的 KGGen(NeurIPS 2025)的启发。KGGen 使用 SemHash 进行确定性实体去重,并使用基于嵌入的聚类在 LLM 比较之前对实体进行分组。sift-kg 将这些技术适应到其人在回路审查工作流程中。

基于嵌入的聚类(可选)

默认情况下,sift resolve 按字母顺序对实体进行排序,并将它们拆分成重叠的批次以进行 LLM 比较。这在重复项拼写相似时效果很好——但“Robert Smith”(R)和“Bob Smith”(B)最终进入不同的批次而永远不会被比较。```bash pip install sift-kg[embeddings] # sentence-transformers + scikit-learn (~2GB, pulls PyTorch) sift resolve --embeddings

root@kitploit:~
这用KMeans聚类对句子嵌入(all-MiniLM-L6-v2)替代了按字母顺序分批。语义相似的名称无论拼写如何都会聚类在一起。

| | 默认(按字母顺序) | `--embeddings` |
|---|---|---|
| 安装大小 | 包含 | ~2GB(PyTorch) |
| 首次运行开销 | 无 | ~90MB模型下载 |
| 每次运行开销 | 仅排序 | 编码(数百个实体<1秒) |
| 跨字母表重复项 | 不同批次中遗漏 | 捕获 |
| 小图(每种<100个) | 相同结果 | 相同结果 |

如果依赖项未安装或聚类失败,则回退到按字母顺序分批。

## 许可证

MIT
下载工具
  • 来源溯源 — 每次提取都链接到来源文档和段落
  • 多语言 — 从任何语言的文档中提取,输出统一的英文知识图谱。专有名称保持原样,非拉丁字母自动罗马化
  • 支持75+文档格式 — 通过 Kreuzberg 提取引擎支持 PDF、DOCX、XLSX、PPTX、HTML、EPUB、图片等
  • 扫描PDF的OCR — 通过 Tesseract(默认)、EasyOCR 或 PaddleOCR 进行本地OCR(--ocr 标志),可选 Google Cloud Vision 作为备用(--ocr-backend gcv)
  • 预算控制 — 设置 --max-cost 以限制LLM花费
  • 本地运行 — 你的文档保留在你的机器上
  • 使用场景建议方法
    快速探索sift review --auto-approve 0.85 — 批准高置信度结果,审查其余部分
    家谱/家族记录手动编辑 YAML,--auto-approve 1.0 — 审查每一次合并
    法律/调查sift resolve --embeddings,手动编辑 YAML,使用 sift view 在轮次之间检查
    大型语料库(1000+ 实体)使用 sift resolve --embeddings 进行更好的批处理,然后进行交互式审查