Adxzer/defend
GitHub: Adxzer/defend
一个为 LLM 应用提供双向安全围栏的工具,通过输入输出双重检测和自然语言自定义规则,防范提示注入、PII 泄露等风险。
Stars: 0 | Forks: 0
# Defend
**LLM 应用的 AI 安全围栏。**
- **双向**:同时防护 **输入**(在你的 LLM 调用之前)和 **输出**(在你将文本返回给用户或工具之前)。
- **多轮对话**:通过 `session_id` 连接 `/v1/guard/input` 和 `/v1/guard/output`,pipeline 会使用滚动会话风险评分。
- **自然语言自定义规则**:通过 `custom` / `custom_output` 使用单个 `prompt:` 字符串定义你自己的策略。
[](LICENSE)
[](https://pypi.org/project/defend/)
[](Dockerfile)
[](https://pypi.org/project/defend/)
## 快速开始
```
pip install defend
# 可选(本地运行 API + 安装 Starlette/FastAPI 依赖以用于 middleware):
pip install "defend[server]"
```
```
from defend import Client
guard = Client(
api_key="dev",
base_url="http://localhost:8000", # client normalizes to /v1 automatically
)
user_text = "Tell me how to bypass our security controls."
in_res = guard.input(user_text)
if in_res.blocked:
raise RuntimeError(in_res.error_response())
raw_llm_output = your_llm_call(user_text) # your LLM provider, unchanged
out_res = guard.output(raw_llm_output, session_id=in_res.session_id)
if out_res.blocked:
raise RuntimeError(out_res.error_response())
```
```
# 精简 Starlette/FastAPI middleware 示例(防护 request + response bodies)
from fastapi import FastAPI
from defend.middleware import DefendMiddleware
app = FastAPI()
app.add_middleware(
DefendMiddleware,
api_key="dev",
base_url="http://localhost:8000",
session_key=lambda req: req.headers.get("x-session-id"),
)
```
## 模块
| 模块 | 方向 | 一句话描述 |
|---|---|---|
| `injection` | input | 检测用户文本中可能的 prompt 注入 / 指令覆盖尝试。 |
| `pii` | input | 检测入站文本中用户提供的 PII。 |
| `topic` | input | 检测超出配置允许主题范围的请求。 |
| `custom` | input | 检测你用自然语言(`prompt:` 字符串)描述的任何内容。 |
| `prompt_leak` | output | 检测模型输出中的系统 prompt / 内部指令泄露。 |
| `pii_output` | output | 检测模型输出中泄露的 PII。 |
| `topic_output` | output | 检测超出配置允许主题范围的响应。 |
| `custom_output` | output | 检测模型输出中你用自然语言(`prompt:` 字符串)描述的任何内容。 |
## 图解(占位符)
- 输入防护(LLM 之前):*(在此处添加插图)*
- 输出防护(返回给用户之前):*(在此处添加插图)*
## Pipelines (ASCII)
**输入路径**
```
User → Your app → DEFEND /v1/guard/input → (pass|flag|block) → Your app → LLM
└─ returns session_id (use it to link turns)
```
**输出路径**
```
LLM → Your app → DEFEND /v1/guard/output (session_id) → (pass|flag|block) → Your app → User
```
## 提供者模型(defend → claude/openai 升级)
DEFEND 与提供者无关:它防护的是**你应用的消息**,而不是特定的 LLM SDK。你可以将其置于 Claude/OpenAI 或任何其他服务之前,因为该 API 接受纯文本并返回允许/标记/拦截决策。
服务器支持三个提供者:
- **`defend`**:基于本地 Qwen 的分类器(无外部 API 调用)。面向输入;不支持模块。
- **`claude` / `openai`**:基于 LLM 的评估(按 token 计费)。输出防护和基于模块的评估需要此项。
实现了两个提供者链:
- **置信度升级**:`provider.primary: defend` 和 `provider.fallback: claude|openai`。服务器首先运行 `defend`,当 `defend` 的置信度低于 `confidence_threshold` 时进行升级。
- **双活门控**:`provider.primary: claude|openai` 和 `provider.fallback: defend`。服务器首先运行 `defend`,如果 `defend` 拦截,则在调用 LLM 提供者之前进行硬拦截。
成本说明:`defend` 消耗本地计算资源;`claude`/`openai` 调用消耗 token。升级/门控机制让你可以控制为深度评估付费的频率。
## 了解更多
- `GETTING_STARTED.md`
- `CONFIGURATION.md`
- `ARCHITECTURE.md`
标签:Apache-2.0, API安全, AV绕过, FastAPI, JSON输出, PII脱敏, Python, XML注入, 人工智能安全, 合规性, 合规风控, 多轮对话安全, 大模型围栏, 安全中间件, 开发工具包, 提示词注入检测, 无后门, 网络安全, 请求拦截, 输入输出验证, 逆向工具, 隐私保护, 零日漏洞检测