Joopinhontas/tokenveil-oss

GitHub: Joopinhontas/tokenveil-oss

TokenVeil 是一个自托管的 LLM 聊天界面,在数据发送给模型前自动对敏感信息进行匿名化处理并在响应中透明还原,确保真实数据不离开本地基础设施。

Stars: 28 | Forks: 0

TokenVeil logo

TokenVeil - 社区版

CI status Measured leak rate 0% Latest release License: Elastic License 2.0
Docker Python 3.12+ Self-hosted GitHub stars

TokenVeil - Featured on Product Hunt

一个自托管的聊天界面,支持 Claude、Gemini、Vertex AI、Bedrock、OpenAI 和 Mistral。它会在**敏感数据到达 LLM 之前自动对其进行匿名化处理**(PII、内部 IP、API 密钥/机密信息、IBAN、信用卡、客户参考信息等),并在向用户展示的响应中透明地恢复真实值。**真实数据永远不会离开您的基础设施。** 本仓库是**社区版**:完全可运行、源代码可见,并且可免费自托管。只需克隆它,运行 `docker compose up`,几分钟内您就能拥有一个可用的私有 AI 代理。 ## 60 秒快速体验 ``` git clone https://github.com/Joopinhontas/tokenveil-oss.git cd tokenveil-oss cp .env.example .env # then set ANON_DB_KEY + a WEBAPP_USERS login (see the file) docker compose up -d --build # light build: no ML models to download ``` 打开 **http://localhost:8500**,登录,绑定一个 AI 账号(从 aistudio.google.com 获取一个免费的 Gemini API 密钥是最快的方式),然后粘贴一段包含大量 IP、电子邮件和 API 密钥的日志。看着它们在到达模型之前被 token 化,并在回答中恢复原值。 更喜欢使用终端?直接测试匿名化器: ``` pip install -r requirements.txt python3 tools/fuzz_anon.py --n 3000 # random synthetic PII, reports the leak rate ``` ## 社区版与企业版对比 TokenVeil 提供两个版本,它们共享**完全相同的产品**(UI、认证、提供商、存储、Docker),仅在某个接口(`anon_engine.py`)背后的**检测引擎**上有所不同。 | | **社区版**(本仓库) | **企业版**(商业版) | |---|---|---| | 引擎 | 基于正则表达式,无外部依赖 | Microsoft Presidio + spaCy NER (法/英) + ML | | 安装 | 几秒钟,可在任何地方运行 | 内置约 1 GB 语言模型 | | 电子邮件、IP、MAC、IBAN、信用卡、电话号码、机密信息 | ✅ | ✅ | | API 密钥 / token / 密码 (AWS, GitHub, Stripe, JWT, PEM...) | ✅ | ✅ | | 称呼后的姓名 (`M. Dupont`) | ✅ | ✅ | | **自由文本中的姓名 / 组织 / 位置**(无称呼,处于散文形式中) | ❌ | ✅ | | 名名词典锚定、CamelCase/User-Agent/query-param 启发式算法 | ❌ | ✅ | | 实测泄漏率 | 在确定性类别上约为 0% | 包含自由文本姓名在内的 3,340+ 个数值上为 **0%** ([基准测试](https://tokenveil.eu/benchmark)) | | 多提供商聊天、本地账户、管理、审计日志 | ✅ | ✅ | | 文件匿名化(附加 .docx/.xlsx/.pdf,OCR) | ❌ | ✅ | | LDAP / Active Directory 认证 + 多租户席位配额 | ❌ | ✅ | | 授权 / 席位限制 | 无(免费,无限制) | 需授权 | | 支持与许可 | 自助服务,ELv2 | 商业许可 + 支持 | 社区版引擎非常实用,可让您评估整个产品。而企业版引擎则能在处理复杂的现实场景(例如隐藏在堆栈跟踪中的客户名称,或自由散文中的组织名称)时提供极高的准确率。它可以无缝接入同一个接口,且代码库中的其他部分完全不需要改动。 **企业版 / 商业授权:** [contact@tokenveil.eu](mailto:contact@tokenveil.eu) ## 工作原理 ``` flowchart LR U["User (browser)"] -->|"1. types a message (real data)"| FE["Web UI (FastAPI + static JS)"] FE -->|"2. auth (local or LDAP)"| AUTH["Auth backend"] FE -->|"3. raw text"| ANON["Anonymization engine
(Community: regex / Enterprise: Presidio+spaCy)"] ANON -->|"4. tokenized text"| DB[("SQLite: messages stored ANONYMIZED ONLY
token↔value map Fernet-encrypted")] ANON -->|"5. tokenized text only"| API["LLM provider (Claude, Gemini...)"] API -->|"6. response (tokens preserved)"| DEANON["De-anonymization (in-process only)"] DEANON -->|"7. real data restored"| FE FE -->|"8. readable answer"| U style ANON fill:#d97757,color:#fff style DEANON fill:#d97757,color:#fff style DB fill:#2b2924,color:#fff ``` **真实值永远不会跨越网络边界到达模型。** token 化在服务器端出站调用之前于进程内完成。去 token 化则在响应之后于进程内完成。提供商只能看到输入的 token 化文本和输出的 token 化文本。 ### 按用户计费的 Claude(无需共享 API 密钥) 每个用户都可以通过应用内的 OAuth 流程绑定**他们自己的** Claude Pro/Max 订阅。后端通过伪终端驱动 `claude setup-token`(官方 Claude Code CLI 命令),捕获长期有效的 OAuth token,并使用 Fernet 加密存储在磁盘上,按用户隔离。提示词是基于用户自己的订阅运行的,而不是共享的按量计费 API 密钥。(Gemini、OpenAI、Mistral、Vertex、Bedrock 则通过 API 密钥进行绑定。) ### 实时透明度 当用户输入时,UI 会实时显示将以匿名化形式发送给模型的确切内容。每条发送的消息还带有一个“查看发送内容”的开关,可揭示离开服务器的实际 token 化 payload。对于用户而言,匿名化过程没有任何隐藏。 ## 静态数据 - **消息**:仅存储*匿名化*后的版本。真实文本永远不会以明文形式持久化存储。 - **Token ↔ 值映射**:按会话划分,静态存储时通过 Fernet 加密(密钥来自 `ANON_DB_KEY`)。仅在进程内解密,以便向已通过认证的所有者展示去匿名化后的视图。 - **绑定账户的凭据**(OAuth token、API 密钥、LDAP 服务账户密码):使用 Fernet 加密,文件权限为 `600`,且永远不会被记录在日志中。 ## 认证 - `AUTH_BACKEND=local`:本地账户(位于 `.env` 中的 `WEBAPP_USERS`,或从管理 UI 中创建)。使用 PBKDF2 进行哈希处理。 - `AUTH_BACKEND=ldap`:对现有的 LDAP/Active Directory 执行绑定和搜索,支持可选的组限制和按组的席位配额。 ## 安全性 即使是社区版也自带了生产环境的加固措施(参见 [`middleware.py`](src/tokenveil/middleware.py)):严格的内容安全策略(无第三方源)、防点击劫持标头、TLS 下的 HSTS,以及防滥用的速率限制器。会话使用随机 token,暴力破解登录会在每个账户和每个 IP 的基础上受到速率限制。 ## 安装 **Docker(推荐):** 请参阅上文的 [60 秒快速体验](#try-it-in-60-seconds)。`./data` 文件夹是唯一值得备份的状态(SQLite 数据库 + 加密映射 + 绑定账户);它作为一个挂载卷,因此为了更新代码而重新构建镜像时绝不会影响这些数据。 **不使用 Docker:** ``` python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt cp .env.example .env # set ANON_DB_KEY, WEBAPP_USERS, AUTH_BACKEND uvicorn app:app --host 0.0.0.0 --port 8500 ``` 绑定 Claude 订阅(而非使用 API 密钥的提供商)还需要在 `PATH` 中包含 `claude` CLI;Docker 镜像已经为您安装了它。 ## 技术栈 | 层级 | 选择 | |---|---| | 后端 | FastAPI (Python 3.12) | | 前端 | 原生 JS/HTML/CSS,无构建步骤 | | 匿名化 | **社区版:** 无依赖的正则表达式引擎 · **企业版:** Presidio + spaCy NER + ML | | 认证 | 本地 (PBKDF2) 或 LDAP/AD (`ldap3`) | | 存储 | SQLite,静态存储使用 Fernet (`cryptography`) 加密 | | 安全 | CSP + 安全标头 + 速率限制 (`middleware.py`) | ## 许可证 在 [Elastic License 2.0](LICENSE) 下源代码可见。您可以阅读、审计、自托管和修改此代码。您**不得**将其作为托管/托管服务提供给第三方,或规避许可证密钥系统。商业部署许可证及企业版引擎:[contact@tokenveil.eu](mailto:contact@tokenveil.eu)。 ## 文档 - [ARCHITECTURE.md](docs/ARCHITECTURE.md) - 理念和设计原则。 - [INSTALL.md](docs/INSTALL.md) - 安装指南(Docker,只需几分钟)。 - [CONFIG.md](docs/CONFIG.md) - 配置说明(认证、提供商、关键词、反向代理)。 - [SECURITY.md](docs/SECURITY.md) - 面向 CISO/DPO 的安全和隐私原则。 匿名化测量方法:[tokenveil.eu/benchmark](https://tokenveil.eu/benchmark)。
标签:DLL 劫持, Docker, Python, 人工智能, 后端开发, 大语言模型, 安全防御评估, 数据可视化, 数据脱敏, 无后门, 用户模式Hook绕过, 网络安全, 请求拦截, 逆向工具, 隐私保护