karthikvenkata79-tech/llm-guard
GitHub: karthikvenkata79-tech/llm-guard
一个用 Rust 编写的隐私优先的轻量级 LLM 安全防护代理,能够拦截提示注入攻击、脱敏机密信息与 PII,并覆盖多项 OWASP LLM Top 10 风险。
Stars: 1 | Forks: 0
# llm-guard(单文件版)
所有代码都位于同一个文件中:`src/main.rs`。唯一的另一个文件是
`Cargo.toml`(库列表——任何使用外部 crate 的 Rust 项目都需要它)。
其行为与之前相同:拦截 prompt injection,脱敏请求和模型回复中的机密信息/PII,并记录所有日志。
## 运行(在 Mac、Windows、Linux 上完全一致)
```
cargo run
```
监听地址为 `http://127.0.0.1:8080`。可通过环境变量进行配置:
`GUARD_LISTEN`、`GUARD_UPSTREAM`、`GUARD_BLOCK`、`GUARD_SCAN_RESPONSE`。
## 制作独立的“点击即运行”二进制文件
```
cargo build --release
```
这会生成一个单独的可执行文件,位于:
- macOS / Linux:`target/release/llm-guard`
- Windows:`target\release\llm-guard.exe`
你可以直接运行该文件——无需 `cargo`,也无需源码:
```
./target/release/llm-guard
```
注意:编译后的二进制文件只能在构建它的操作系统上运行。Mac 上构建的版本无法在 Windows 上运行,反之亦然。要面向所有三个平台发布,你需要分别在各个平台上进行构建(或使用交叉编译)。请注意,这是一个后台服务器——它用于监听请求;启动时不会弹出窗口。
## 使用 Docker 在任何地方运行(一个镜像,适配所有平台)
如果你安装了 Docker,这是最接近“在所有环境中表现完全一致”的方案。
在 `Cargo.toml` 旁边创建一个名为 `Dockerfile` 的文件:
```
FROM rust:1-slim AS build
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:stable-slim
COPY --from=build /app/target/release/llm-guard /usr/local/bin/llm-guard
EXPOSE 8080
ENV GUARD_LISTEN=0.0.0.0:8080
CMD ["llm-guard"]
```
然后:
```
docker build -t llm-guard .
docker run -p 8080:8080 -e GUARD_UPSTREAM=https://api.openai.com/v1/chat/completions llm-guard
```
## 防规避(标准化处理)
在执行注入规则之前,该工具还会检查 prompt 的“清理后”视图,因此常见的规避普通模式匹配的手段依然会被捕获:
- 添加空格的字母 —— `i g n o r e`
- Leet 语(黑客语) —— `1gn0re`
- 相似(同形)字符
- base64 编码的隐藏指令
这只是第一层防护,并非万无一失——执着的攻击者仍可能找到漏洞。更强大的下一步是进行语义检查(使用 LLM 或 ML 模型来判断语义,而不仅仅是匹配文本)。
## 配置文件中的规则(无需重新编译)
现在,无需修改代码即可更改该工具的检测内容。只需将 `GUARD_RULES_FILE` 变量指向一个 JSON 文件:
```
GUARD_RULES_FILE=rules.json cargo run
```
项目中包含了一个入门级的 `rules.json`——其中包含了与内置规则相同的内容。你可以对其进行编辑(添加、删除或修改规则),保存并重启即可生效——无需重新编译。
每条规则包含四个字段:
```
{ "category": "pii", "name": "phone_number", "severity": "medium", "pattern": "\\d{3}-\\d{3}-\\d{4}" }
```
- `category` —— `prompt_injection`、`secret` 或 `pii`
- `name` —— 你自定义的任意标签
- `severity` —— `low`、`medium` 或 `high`
- `pattern` —— 用于匹配的正则表达式(请注意:JSON 中的反斜杠必须双写,因此 `\d` 应写为 `\\d`)
严重级别为 `high` 的 `prompt_injection` 类别规则将被拦截;`secret` 和 `pii` 类别将被脱敏。如果文件缺失或包含无效 pattern,该工具将记录警告并回退到内置的默认规则,因此它绝不会崩溃。
## 流式传输(逐字回复)
如果请求中包含 `"stream": true`,防护器会在模型生成回复时,将其逐块直接透传。请求端的保护(拦截攻击,脱敏 prompt 中的机密信息)依然全面生效。
权衡:对于流式回复,将跳过响应端的脱敏,因为扫描回复需要缓冲整个内容——这就违背了流式传输的初衷。非流式请求不受影响,仍会进行完整的响应扫描。
## 添加自定义检测规则
打开 `src/main.rs`,找到 `RULES` 列表,并添加另一个 `Rule { ... }` 块。
它会自动生效。或者更好的是,将其添加到 `rules.json` 中(如上文所述),这样你就不必重新编译。
## 许可证
本项目基于 MIT 许可证发布——详见 `LICENSE`。打开它并将 `` 替换为你的名字。
本项目使用了几款采用宽松开源许可证的开源库;它们的清单及归属信息可在 `CREDITS.md` 中查看。
标签:Rust, 人工智能安全, 可视化界面, 合规性, 提示词注入防护, 数据脱敏, 网络流量审计, 请求拦截, 通知系统, 防御绕过