DataFog/datafog-python
GitHub: DataFog/datafog-python
DataFog 是一个轻量级 Python 库,提供基于正则和 NLP 的 PII 检测、编辑与 LLM 护栏功能,帮助开发者在文本处理和大模型调用中保护敏感信息。
Stars: 67 | Forks: 14
# DataFog Python
DataFog 是一个用于检测和编辑个人身份信息(PII)的 Python 库。
它提供:
- 通过正则表达式进行快速的结构化 PII 检测
- 通过 spaCy 和 GLiNER 提供可选的 NER 支持
- 面向 LLM 应用的简单 agent 导向 API
- 向后兼容的 `DataFog` 和 `TextService` 类
## 4.5 版本重点
DataFog 4.5 专注于轻量级的文本 PII 扫描:极简的核心安装,
基于正则表达式的快速扫描/编辑辅助工具,明确的可选附加组件,以及
为未来 middleware 用例铺平的更清晰道路。专用的 Sentry、OpenTelemetry、
日志框架和云 DLP 适配器属于面向未来的工作,不包含在 4.5 版本中。
## 安装
```
# 核心安装 (regex engine)
pip install datafog
# 添加 spaCy 支持
pip install datafog[nlp]
# 添加 GLiNER + spaCy 支持
pip install datafog[nlp-advanced]
# 添加本地 OCR 支持
pip install datafog[ocr]
# 添加 Spark/distributed 支持
pip install datafog[distributed]
# 全部
pip install datafog[all]
```
Python 3.13 支持已通过核心 SDK、CLI、`nlp`、
`nlp-advanced` 和 `ocr` 安装配置的认证。Donut OCR 在运行时使用前,
仍需在本地准备好可用的模型。在 4.5 版本中,`distributed` 和 `all`
尚未获得针对 Python 3.13 的新认证。
## 快速开始
```
import datafog
text = "Contact john@example.com or call (555) 123-4567"
clean = datafog.sanitize(text, engine="regex")
print(clean)
# 联系 [EMAIL_1] 或致电 [PHONE_1]
```
## 面向 LLM 应用
```
import datafog
# 1) 在发送给 LLM 之前扫描 prompt 文本
prompt = "My SSN is 123-45-6789"
scan_result = datafog.scan_prompt(prompt, engine="regex")
if scan_result.entities:
print(f"Detected {len(scan_result.entities)} PII entities")
# 2) 在返回之前对 model 输出进行 redact
output = "Email me at jane.doe@example.com"
safe_result = datafog.filter_output(output, engine="regex")
print(safe_result.redacted_text)
# 发送电子邮件至 [EMAIL_1]
# 3) 单行 redaction
print(datafog.sanitize("Card: 4111-1111-1111-1111", engine="regex"))
# 信用卡: [CREDIT_CARD_1]
```
## 德国结构化 PII
德国结构化 PII 特定于国家/地区且需主动选择。当您需要处理德国增值税号、
德国 IBAN、税号、邮政编码、护照或居留许可时,
请使用明确的区域设置选择或实体类型过滤。
```
import datafog
text = "Steuer-ID 12345678901 liegt vor."
print(datafog.scan(text, engine="regex").entities)
# []
print(datafog.scan(text, engine="regex", locales=["de"]).entities)
# [Entity(type='DE_TAX_ID', text='12345678901', ...)]
```
### Guardrails
```
import datafog
# 可重用的 guardrail 对象
guard = datafog.create_guardrail(engine="regex", on_detect="redact")
@guard
def call_llm() -> str:
return "Send to admin@example.com"
print(call_llm())
# 发送至 [EMAIL_1]
```
## 引擎
请使用符合您准确率和依赖限制的引擎:
- `regex`:
- 最快且始终可用。
- 最适合默认的结构化实体:`EMAIL`、`PHONE`、`SSN`、`CREDIT_CARD`、`IP_ADDRESS`、`DATE`、`ZIP_CODE`。
- 使用 `locales=["de"]` 处理德国结构化 ID,例如 `DE_VAT_ID`、`DE_IBAN`、`DE_TAX_ID`、`DE_POSTAL_CODE` 以及护照或居留许可号码。
- `spacy`:
- 需要通过 `pip install datafog[nlp]` 安装。
- 适用于非结构化实体,如人名和组织名称。
- `gliner`:
- 需要通过 `pip install datafog[nlp-advanced]` 安装。
- 对于非结构化文本,其 NER 覆盖范围比正则表达式更广。
- `smart`:
- 将正则表达式与可选的 NER 引擎级联使用。
- 如果缺少可选依赖项,它会优雅降级并发出警告。
## 可选的 OCR 和 Spark 接口
DataFog 4.5 继续将主包的核心功能集中在轻量级文本 PII
扫描上。OCR 和 Spark 对于已经依赖它们的用户来说仍然是受支持的可选接口,
但它们并不是核心导入、默认扫描/编辑辅助工具或 guardrail 辅助工具所必需的。
- OCR:
- 安装 `datafog[ocr]` 以使用本地图像 OCR 辅助工具。
- 基于 URL 的图像下载还需要 `datafog[web,ocr]`。
- 使用 Tesseract 需要系统安装 `tesseract` 二进制文件。
- Python 3.13 已针对 OCR 安装配置、Pillow、
pytesseract 以及系统 Tesseract 的冒烟测试进行了验证。
- Donut OCR 需要 `datafog[nlp-advanced,ocr]` 并且本地已有可用模型。
- Spark:
- 安装 `datafog[distributed]` 以使用 `SparkService`。
- Spark PII UDF 辅助工具还需要 `datafog[nlp]` 以及已安装的 spaCy
模型。
- PySpark 需要安装 Java 运行时。
OCR 和 Spark 并未被弃用。它们更广泛的 API 和打包重构工作
已被推迟;4.5 的目标是保持它们的独立性、文档化,并与
轻量级核心路径相互隔离。
## 向后兼容的 API
现有的公共 API 仍然可用。
### `DataFog` 类
```
from datafog import DataFog
result = DataFog().scan_text("Email john@example.com")
print(result["EMAIL"])
```
### `TextService` 类
```
from datafog.services import TextService
service = TextService(engine="regex")
result = service.annotate_text_sync("Call (555) 123-4567")
print(result["PHONE"])
```
## CLI
```
# 扫描文本
datafog scan-text "john@example.com"
# Redact 文本
datafog redact-text "john@example.com"
# 用 pseudonyms 替换文本
datafog replace-text "john@example.com"
# 对检测到的 entity 进行 Hash
datafog hash-text "john@example.com"
# 启用德语 regex identifiers
datafog redact-text "Steuer-ID 12345678901" --locale de
```
## Telemetry
DataFog 的 Telemetry 默认是禁用的。
要选择启用:
```
export DATAFOG_TELEMETRY=1
```
要强制关闭 Telemetry:
```
export DATAFOG_NO_TELEMETRY=1
# 或
export DO_NOT_TRACK=1
```
Telemetry 不包含输入文本或检测到的 PII 值。
## 开发
```
git clone https://github.com/datafog/datafog-python
cd datafog-python
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[all,dev]"
pip install -r requirements-dev.txt
pytest tests/
```
标签:DLL 劫持, PII检测, Python SDK, 大语言模型, 数据脱敏, 文档结构分析, 网络安全, 逆向工具, 隐私保护