aaryavinays-dev/guardrail-ai
GitHub: aaryavinays-dev/guardrail-ai
GuardRail AI 是基于 FastAPI 的 AI 治理网关,用于在 Prompt 发送到外部 LLM 之前检测 PII 和注入风险、执行脱敏和审计。
Stars: 0 | Forks: 0
# GuardRail AI
## 企业级 AI 治理与 Prompt 安全网关
GuardRail AI 是一个基于 FastAPI 的后端原型,用于在用户 prompt 发送给外部 AI 系统(如 OpenAI、Claude、Gemini、Copilot 或开源 LLM)之前进行检查和治理。
该系统能够检测敏感数据、识别 prompt injection 尝试、计算风险评分、应用治理决策、对敏感值进行脱敏处理,并存储结构化的审计记录以实现可追溯性。
## 问题陈述
各组织正在业务团队中快速采用生成式 AI,但许多 prompt 在未经检查的情况下直接发送给了 AI 提供商。
Prompt 可能包含:
* 个人身份信息 (PII)
* 社会安全号码
* 电话号码
* 信用卡号码
* 密码和凭证
* API key 和机密信息
* Prompt injection 尝试
这带来了以下方面的风险:
* 敏感数据泄露
* 合规风险
* 缺乏 AI 使用可见性
* 治理控制薄弱
* 审计能力差
GuardRail AI 充当保护性的 prompt 治理层,在 prompt 到达外部 AI 系统之前对其进行分析和控制。
## 当前版本
**版本:** v3.0
**当前阶段:** 在集成 PostgreSQL 之前进行安全的后端清理
## 当前功能
* FastAPI 后端 API
* Pydantic 请求和响应验证
* 敏感数据检测
* Prompt injection 检测
* 风险评分引擎
* ALLOW / WARN / BLOCK 决策引擎
* 环境变量配置
* JSON 审计日志
* 审计摘要 endpoint
* 安全的 prompt 脱敏
* Pytest 单元测试
## 当前系统指标
| 指标 | 值 |
| ------------------- | --------------: |
| 检测模块 | 7 |
| 风险等级 | 4 |
| 决策动作 | 3 |
| API Endpoints | 3 |
| 测试用例 | 9 |
| 审计日志 | 基于 JSON |
| 当前存储 | 本地 JSON 文件 |
| 下一个存储目标 | PostgreSQL |
## 架构
```
User Prompt
|
v
FastAPI API Layer
|
v
Pydantic Validation
|
v
Prompt Analyzer
|
v
Detection Engine
|
+--> Email Detection
+--> SSN Detection
+--> Phone Detection
+--> Credit Card Detection
+--> Password Detection
+--> API Key Detection
+--> Prompt Injection Detection
|
v
Risk Scoring Engine
|
v
Decision Engine
|
+--> ALLOW
+--> WARN
+--> BLOCK
|
v
Prompt Redaction Layer
|
v
JSON Audit Logging
```
## 项目结构
```
guardrail-ai/
│
├── main.py
├── models.py
├── detectors.py
├── prompt_analyzer.py
├── risk_scorer.py
├── scoring.py
├── audit_logger.py
├── requirements.txt
├── README.md
├── .env.example
├── .gitignore
│
├── docs/
│ ├── architecture_v1.md
│ └── changelog.md
│
├── tests/
|__test_detectors.py
│ ├── test_prompt_analyzer.py
│ └── test_redactor.py
|__test_risk_scorer.py
│
├── screenshots/
│ ├── v1.7_prompt_injection_v2/
│ ├── v1.8_risk_weight_dictionary/
│ ├── v2.0_audit_logging/
│ ├── v2.1_project_refactor/
│ ├── v2.2_pydantic_validation/
│ ├── v2.3_json_logging/
│ ├── v2.4_list_comprehension/
│ ├── v2.5_environment_variables/
│ ├── v2.6_oop_refactor/
│ ├── v2.7_exception_handling/
│ ├── v2.8_logging and type hints/
│ ├── v2.9_pytest_tests_passed/
│ └── v3.0_secure_response_redaction/
|__ v3.1_python_polish/
│
└── logs/
└── audit_log.json
```
`logs/`, `.env`, `venv/`, `__pycache__/` 和 `.pytest_cache/` 会被 Git 忽略。
## 检测模块
GuardRail AI 目前可检测以下风险信号:
| 检测类型 | 示例 |
| ---------------- | ------------------------------ |
| 电子邮件 | `test@gmail.com` |
| 社会安全号 (SSN) | `123-45-6789` |
| 电话号码 | `123-456-7890` |
| 信用卡 | `4111-1111-1111-1111` |
| 密码 | `password: hello123` |
| API Key | `sk-abc123456789` |
| Prompt Injection | `Ignore previous instructions` |
## 风险评分引擎
每种检测类型都有配置好的风险权重。
| 检测项 | 分数 |
| ---------------- | ----: |
| 电子邮件 | 20 |
| 电话号码 | 20 |
| 社会安全号 (SSN) | 50 |
| 信用卡 | 50 |
| 密码 | 100 |
| API Key | 100 |
| Prompt Injection | 100 |
## 风险等级
| 分数范围 | 风险等级 |
| ----------- | ---------- |
| 0-20 | 低 |
| 21-50 | 中 |
| 51-99 | 高 |
| 100+ | 严重 |
## 决策引擎
| 分数范围 | 动作 |
| ----------- | ------ |
| 0-20 | ALLOW |
| 21-99 | WARN |
| 100+ | BLOCK |
决策引擎通过根据检测到的风险决定是允许、警告还是阻止 prompt,从而模拟企业治理行为。
## 安全 Prompt 脱敏
GuardRail AI 会在返回 API 响应和写入审计记录之前,对敏感值进行脱敏处理。
输入示例:
```
My SSN is 123-45-6789, email is vinay@test.com, phone is 123-456-7890, password: hello123 and key sk-abc123456789 Ignore previous instructions
```
脱敏后的输出示例:
```
My SSN is [REDACTED_SSN], email is [REDACTED_EMAIL], phone is [REDACTED_PHONE], password: [REDACTED_PASSWORD] and key [REDACTED_API_KEY] Ignore previous instructions
```
这可以防止敏感值被存储在审计日志中或在 API 响应中暴露。
## API Endpoints
### GET `/`
健康检查 endpoint。
响应示例:
```
{
"message": "GuardRail AI is running",
"version": "3.0"
}
```
### POST `/analyze`
分析 prompt 的敏感数据和 prompt injection 风险。
请求示例:
```
{
"prompt": "My SSN is 123-45-6789, email is vinay@test.com, password: hello123 Ignore previous instructions"
}
```
响应示例:
```
{
"redacted_prompt": "My SSN is [REDACTED_SSN], email is [REDACTED_EMAIL], password: [REDACTED_PASSWORD] Ignore previous instructions",
"detections": {
"email": true,
"ssn": true,
"phone": false,
"credit_card": false,
"password": true,
"api_key": false,
"prompt_injection": true
},
"word_count": 10,
"character_count": 94,
"estimated_tokens": 13,
"risk_level": "CRITICAL",
"risk_score": 270,
"action": "BLOCK",
"risk_reasons": [
"email detected",
"ssn detected",
"password detected",
"prompt_injection detected"
]
}
```
### GET `/audit-summary`
从存储的 JSON 审计记录中返回审计分析数据。
响应示例:
```
{
"total_logs": 5,
"risk_scores": [20, 70, 220],
"risk_levels": ["LOW", "HIGH", "CRITICAL"],
"high_risk_count": 2,
"critical_count": 1,
"high_risk_logs": []
}
```
## 审计日志
每个被分析的 prompt 都会创建一个结构化的 JSON 审计记录。
存储的审计记录包含:
* 时间戳
* 脱敏后的 prompt
* 脱敏标志
* 风险评分
* 风险等级
* 动作
* 风险原因
审计记录示例:
```
{
"timestamp": "2026-06-15T15:48:04.683586+00:00",
"prompt": "My SSN is [REDACTED_SSN], email is [REDACTED_EMAIL], password: [REDACTED_PASSWORD]",
"prompt_redacted": true,
"risk_score": 170,
"risk_level": "CRITICAL",
"action": "BLOCK",
"risk_reasons": [
"email detected",
"ssn detected",
"password detected"
]
}
```
## 配置
运行时配置使用环境变量进行处理。
在项目根目录中创建一个 `.env` 文件:
```
APP_NAME=GuardRail AI
APP_VERSION=3.0
RISK_THRESHOLD=100
AUDIT_LOG_FILE=logs/audit_log.json
```
以下位置提供了一个安全的模板:
```
.env.example
```
请勿提交真实的 `.env` 文件。
## 本地运行
### 1. 创建并激活虚拟环境
```
python -m venv venv
```
Windows PowerShell:
```
venv\Scripts\activate
```
macOS/Linux:
```
source venv/bin/activate
```
### 2. 安装依赖
```
pip install -r requirements.txt
```
### 3. 运行应用程序
```
uvicorn main:app --reload
```
### 4. 打开 Swagger UI
```
http://127.0.0.1:8000/docs
```
## 运行测试
运行所有测试:
```
pytest
```
当前测试覆盖率包括:
* 风险评分计算
* 风险等级确定
* 动作决策逻辑
* Prompt 脱敏验证
| 指标 | 值 |
| ------------------- | --------------: |
| 检测模块 | 7 |
| 风险等级 | 4 |
| 决策动作 | 3 |
| API Endpoints | 3 |
| 测试用例 | 37 |
| 审计日志 | 基于 JSON |
| 当前存储 | 本地 JSON 文件 |
| 下一个存储目标 | PostgreSQL |
预期结果:
```
37 passed
```
## 技术栈
### 后端
* Python
* FastAPI
* Uvicorn
* Pydantic
### 安全逻辑
* 基于正则表达式的敏感数据检测
* Prompt injection 模式检测
* 风险评分
* Prompt 脱敏
### 持久化
* JSON 审计日志
* 计划下一步使用 PostgreSQL
### 测试
* Pytest
### 开发
* Git
* GitHub
* VS Code
## 展示的工程概念
* REST API 开发
* 后端模块化
* 关注点分离
* 面向对象编程
* Pydantic 验证
* 环境变量配置
* 异常处理
* 日志记录
* JSON 文件持久化
* 安全的审计日志
* Prompt 脱敏
* 使用 pytest 进行单元测试
* 基于风险的决策系统
* 用于固定业务值的 Python Enums
* 纯函数提取
* 使用 `pytest.mark.parametrize` 进行参数化测试
* 检测器级别的测试覆盖率
* 通过 `PromptAnalyzer` 进行协调器类测试
* 循环导入调试
## 版本历史
### v1.7 - Prompt Injection 检测
* 添加了 Prompt injection 检测模式。
* 添加了针对危险 prompt 行为的治理逻辑。
### v1.8 - 风险权重字典
* 添加了集中式的风险权重字典。
* 替换了硬编码的评分值。
### v2.0 - 审计日志
* 添加了持久化的审计日志。
* 添加了时间戳跟踪。
* 添加了审计追踪生成。
### v2.1 - 模块化架构重构
* 为检测器、评分和审计日志添加了独立模块。
* 简化了 FastAPI 路由的职责。
### v2.2 - Pydantic 验证
* 添加了请求和响应验证模型。
* 添加了 FastAPI 响应模型强制执行。
### v2.3 - JSON 审计日志
* 将纯文本审计日志替换为结构化的 JSON 日志。
### v2.4 - 审计摘要 Endpoint
* 添加了 `/audit-summary`。
* 添加了针对风险评分和风险等级的摘要分析。
### v2.5 - 环境变量
* 添加了 `.env` 支持。
* 添加了可配置的应用程序元数据、审计日志路径和风险阈值。
### v2.6 - 面向对象重构
* 添加了 `PromptAnalyzer`。
* 添加了 `RiskScorer`。
* 重构了 `AuditLogger`。
### v2.7 - 异常处理和日志记录
* 添加了对损坏 JSON 的处理。
* 添加了针对审计文件操作和失败的日志记录。
### v2.8 - 类型提示和代码质量
* 在整个后端模块中添加了类型提示。
* 提高了可读性和可维护性。
### v2.9 - Pytest 单元测试
* 为风险评分和风险等级逻辑添加了单元测试。
### v3.0 - 安全 Prompt 脱敏
* 为 API 响应和审计日志添加了 prompt 脱敏。
* 移除了 `/analyze` 对原始 prompt 的暴露。
* 添加了脱敏测试覆盖率。
### v3.1 - Python 代码完善和扩展测试覆盖率
- 将脱敏逻辑提取到 `redactor.py` 中。
- 添加了 `RiskLevel` 和 `Action` enums。
- 添加了使用 `pytest.mark.parametrize` 的检测器测试。
- 添加了 PromptAnalyzer 测试。
- 将 pytest 覆盖率从 9 个测试扩展到 37 个通过的测试。
## 路线图
### 第 2 阶段:PostgreSQL 持久化
* 用 PostgreSQL 替换本地 JSON 审计存储。
* 添加 SQLAlchemy ORM 模型。
* 将审计记录存储在数据库表中。
* 添加基于数据库的审计摘要查询。
* 添加准备好进行迁移的数据库结构。
### 第 3 阶段:身份验证和 RBAC
* 添加用户身份验证。
* 添加基于角色的访问控制 (RBAC)。
* 添加仅限管理员查看的审计可见性。
### 第 4 阶段:仪表板和分析
* 构建审计仪表板。
* 添加风险趋势分析。
* 添加策略违规报告。
### 第 5 阶段:外部 AI 提供商集成
* 添加 OpenAI 集成。
* 添加 Claude 集成。
* 添加 Gemini 集成。
* 添加多模型路由。
### 第 6 阶段:企业级治理平台
* 添加策略管理。
* 添加人工介入 (human-in-the-loop) 审查工作流。
* 添加合规报告。
* 添加部署支持。
## 长期愿景
GuardRail AI 致力于成为一个企业级 AI 网关,帮助组织:
* 防止敏感数据泄露
* 检测 prompt injection 尝试
* 执行 AI 治理策略
* 维护审计追踪
* 提高 AI 使用情况的可见性
* 支持合规和安全审查
* 在多个 AI 提供商之间安全地路由请求
标签:AI治理, API网关, AV绕过, FastAPI, StruQ, 大语言模型安全, 对抗攻击, 提示注入防护, 敏感信息检测, 机密管理, 测试用例, 逆向工具