Jokersystems-online/flowki-llm-safety-pipeline
GitHub: Jokersystems-online/flowki-llm-safety-pipeline
为自建 LLM 应用提供六阶段安全流水线(限流、输入净化、注入检测、提示词加固、输出校验、审计),覆盖 Python 和 TypeScript 两种技术栈的生产级中间件。
Stars: 0 | Forks: 0
# flowki-llm-safety-pipeline
为自定义 LLM 应用提供的六阶段安全 Pipeline:基于 Cost 的 Rate-Limiting、Input-Sanitization、三层 Injection-Detection、System-Prompt-Härtung、Output-Validation(JSON-Schema + PII-Scrubbing)、Audit-Trail。包含 Python (FastAPI) 和 TypeScript (Next.js) 版本,均面向生产环境。
本文是 [FlowKI Club](https://flowki-club.de) 中 [自定义 LLM 应用的安全 Pipeline](https://flowki-club.de/blog/2026-04-19-safety-pipelines-fuer-eigene-llm-apps?utm_source=github&utm_medium=repo&utm_campaign=content-launch-2026-07) 一文的配套 Repo。
## Pipeline
```
User-Request
↓
[1. Auth + Rate-Limit pre-Check] redis-basiertes Token-Bucket
↓
[2. Input-Sanitization] Length, Encoding, Pattern-Check
↓
[3. Injection-Detection] Pattern-Match -> Llama-Guard-3 -> Moderation-API
↓
[4. Modell-Aufruf] mit System-Prompt-Härtung
↓
[5. Output-Validation] JSON-Schema, Profanity, PII-Scrubbing
↓
[6. Audit-Log] anonymisiert, mit Cost-Tracking
↓
Response an User
```
每个阶段均采用 fail-safe 机制中止。如果某个 Layer 离线(例如 Llama-Guard),应用会降级至仅使用 Pattern-Matching 模式——绝不会出现“没有任何 Layer 激活”的情况。
## 实测 Detection-Rates
基于三个 Benchmark 测试(来自 Meta 的 PurpleLlama、AdvBench、自定义匿名数据集):
| Benchmark | Pattern-Match | +Llama-Guard-3 |
|---|---|---|
| PurpleLlama PromptInjection | 41% | 87% |
| AdvBench | 38% | 82% |
| 自定义数据集 | 53% | 91% |
单独的 Pattern-Match 大约能拦截 40% 的简单 Injection —— 成本低,但远远不够。加入 Llama-Guard-3 作为第二层可以将比率提升至 82-91%,但会增加延迟(在 A100 上为 80ms,在 CPU 上为 1.2s)。
## 包含内容
- `python/rate_limit.py` + `typescript/rate-limit.ts` — Redis-Token-Bucket,双重维度(Requests/时间 与 Cost/时间)
- `python/sanitize.py` — Length-Limit、Encoding-Check、Zero-Width-Space-Removal
- `python/injection_detection.py` — Pattern-Match-Layer + Llama-Guard-3-Layer
- `python/system_prompt.py` — 加固的 System-Prompt 模板
- `python/output_validation.py` — Pydantic-JSON-Schema + Presidio-PII-Scrubbing
- `python/audit_log.py` — 带 Cost-Tracking 的匿名化 Audit-Logging
## 重要设计决策(源自真实的试错经验)
- **在下一个 Call 之前而不是当前 Call 之后写入 Cost-Counter。** 防止 100 个并发请求 100 倍地绕过 Cost 限制。
- **不要阻断 User-Input-Echo。** 这会破坏合法的用例(如总结、翻译)。应仅针对 PII/Profanity 进行过滤。
- **不要针对 Topic 使用 Deny-Listen。** 难以维护。替代方案:在 System-Prompt 中进行 Use-Case 定义 + 使用 Allow-Listen。
- **不要记录 Input-Text**,只记录 User-ID-Hash —— 否则你自己就会面临 GDPR 违规问题。
## 设置
```
# Python
pip install fastapi redis llama-cpp-python presidio-analyzer presidio-anonymizer pydantic
# TypeScript
npm install @upstash/redis
```
需单独下载 Llama-Guard-3-8B (Q4_K_M GGUF),例如从 Hugging Face 获取。
## 法律声明
本 Pipeline 是构建自定义 LLM 应用的起点,并非现成的合规产品。请针对你的具体用例,自行或咨询法律顾问查验 GDPR 要求(如 Log-Retention、Cloud-API 的 Auftragsverarbeitung)。
## 讨论
请前往 [FlowKI Club Discord](https://flowki-club.de/join?utm_source=github&utm_medium=repo&utm_campaign=content-launch-2026-07) 的 "Hacking & Security" 板块。
## 许可证
MIT —— 可自由使用、fork 及修改。
标签:AI网关, Naabu, Python, TypeScript, 中间件, 内容安全, 安全插件, 搜索引擎查询, 无后门, 注入检测, 逆向工具