snehahibare/CortexGuard
GitHub: snehahibare/CortexGuard
CortexGuard 是一个自动化 LLM 安全与偏见审计平台,通过对抗性提示词和双层评分机制系统性评估语言模型的公平性与安全性。
Stars: 0 | Forks: 0
# CortexGuard — LLM 安全与评估平台
适用于 LLM(Groq 托管的 Llama 模型,或任何 API 托管的模型)的自动化红队测试与偏见/毒性审计流水线。
## 状态:阶段 1-6 已完成 (MVP + Docker/部署)
## 项目结构
```
cortexguard/
├── data/
│ ├── prompts/
│ │ ├── custom_prompts.py # 140 hand-crafted prompts, 8 bias categories
│ │ ├── load_public_datasets.py # BOLD + RealToxicityPrompts loader (run locally)
│ │ ├── build_dataset.py # merges custom + public into final dataset
│ │ └── adversarial_prompts.csv # OUTPUT: final 275-prompt dataset
│ ├── responses/
│ │ ├── model_responses.csv # OUTPUT: model-under-test responses
│ │ ├── scored_results.csv # OUTPUT: Detoxify rule-based scores
│ │ └── llm_judged_results.csv # OUTPUT: LLM-as-judge structured scores
│ ├── retrieval/chroma_db/ # OUTPUT: LlamaIndex + ChromaDB vector store
│ └── cortexguard.db # OUTPUT: SQLite run history log
├── src/
│ ├── get_responses.py # Phase 2: query model under test (Groq)
│ ├── score_rule_based.py # Phase 2: Detoxify scoring
│ ├── llm_judge.py # Phase 3: LLM-as-judge scoring
│ ├── build_retrieval_index.py # Phase 4: embed + store flagged failures
│ ├── query_retrieval.py # Phase 4: query similar past failures
│ └── log_run.py # Phase 5: log run summary to SQLite
├── app/
│ └── dashboard.py # Phase 5: interactive Streamlit dashboard
├── notebooks/ # exploration / testing
├── Dockerfile # Phase 6
├── docker-compose.yml # Phase 6
├── .dockerignore # Phase 6
├── .env.example
└── requirements.txt
```
## 初始配置 (一次性)
```
cd cortexguard
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```
在项目根目录下创建 `.env` 文件(复制 `.env.example`):
```
GROQ_API_KEY=your_groq_api_key_here
```
## 阶段 1 — 构建对抗性 prompt 数据集
```
cd data/prompts
python load_public_datasets.py --n_bold 15 --n_rtp 60 # optional, needs internet
python build_dataset.py --public_csv public_prompts.csv
```
输出:`adversarial_prompts.csv` — 包含涵盖 8 个类别(性别、
宗教、地区、种姓、年龄、政治倾向、残疾、国籍/种族)的 275 个 prompt,
以及来自 RealToxicityPrompts 的一般毒性 prompt。
## 阶段 2 — 收集响应 + 基于规则的评分
```
cd src
python get_responses.py --provider groq --model llama-3.1-8b-instant
python score_rule_based.py
```
输出:`model_responses.csv`, `scored_results.csv`。Detoxify 能够捕捉到
明显的毒性,但会漏掉“礼貌的”刻板印象 —— 这一差距促成了阶段 3。
**关于提供商的说明:** `get_responses.py` 同时支持将 Groq 和 Gemini
(`--provider gemini`)作为待测模型。如果其中一个触发了免费层级的每日
限额,请切换模型/提供商,而不是在运行中途混用 —— 每次
审计都应测试一个一致的模型。
## 阶段 3 — LLM 作为裁判 (LLM-as-judge) 评分
```
python llm_judge.py --limit 50 # test on a sample first
python llm_judge.py --resume # scale to the full dataset
```
输出:`llm_judged_results.csv` — 每个响应的 `bias_score` (1-5)、`safety_score` (1-5)、
`stereotype_flag` (布尔值) 和 `reasoning`。这是真正
显现信号的地方:在我们的基线运行中,Detoxify 标记了 0% 的响应,
而 LLM 裁判总体标记了 10.5%(对于 `age` 类别高达 44%)。
## 阶段 4 — LlamaIndex + ChromaDB 检索层
```
python build_retrieval_index.py
python query_retrieval.py --query "stereotypes about older employees" --k 3
```
通过 sentence-transformers 在本地嵌入每个被标记的失败案例(stereotype_flag=True 或 bias_score≥3),
并存储在 ChromaDB 中。这就是阶段 7 的
自我改进 prompt 生成器将要查询的内容,以便用更难的全新测试用例
针对模型已知的薄弱点。
## 阶段 5 — 仪表板 + 运行日志记录
```
python log_run.py --model_label "llama-3.1-8b-instant baseline"
cd ../app
streamlit run dashboard.py
```
在 `localhost:8501` 打开交互式仪表板:
- 概览指标、类别雷达图、被标记示例的记录
- **实时自定义 prompt 测试器** —— 输入任何 prompt,查看其实时评分
- **实时迷你审计** —— 从浏览器运行全新的抽样审计
- 运行历史趋势图(来自 SQLite,由 `log_run.py` 填充)
## 阶段 6 — Docker + 部署
**在 Docker 中本地运行:**
```
docker compose up --build
```
在 `localhost:8501` 打开相同的仪表板,已容器化。`.env` 是
在运行时传入的,绝不会内置到镜像中。
**在线部署**(与 Papyrix 项目的模式相同):
1. 推送到 GitHub(`.env` 必须包含在 `.gitignore` 中)
2. https://share.streamlit.io → New app → main file path `app/dashboard.py`
3. 在 Advanced settings → Secrets 下添加 `GROQ_API_KEY`
4. 部署 → 获取公共 URL,例如 `cortexguard.streamlit.app`
## 下一步计划 (高级扩展)
- **阶段 7:** 自定义对抗性 prompt 生成器 —— 使用阶段 4 检索层的自我改进红队
- **阶段 8:** 自动修复循环 —— 检测 → 修订 → 重新测试 → 验证
- **阶段 9:** MLflow 集成 —— 运行追踪和随时间推移的漂移监控
## 目前的主要发现
基于规则的毒性评分 (Detoxify) 将 Llama-3.1-8B-Instant 的 **0%** 响应标记为
不安全。对相同响应进行的 LLM 作为裁判评分
发现 **10.5%** 包含刻板印象,在与年龄相关的
prompt 中甚至上升到了 **44.4%** —— 这证明了语义偏见评估可以捕捉到
关键词/毒性分类器遗漏的内容。
标签:AI安全, Chat Copilot, DLL 劫持, Docker, Kubernetes, Streamlit, Sysdig, 人工智能, 偏见检测, 大语言模型, 安全防御评估, 模型评估, 用户模式Hook绕过, 访问控制, 请求拦截, 逆向工具