b0glarka/capstone_prompt_injection

GitHub: b0glarka/capstone_prompt_injection

面向企业 AI agent 的 Prompt Injection 防御机制对比评估项目,涵盖分类器检测、API agent 评判、LoRA 微调三类方案并提供部署决策框架。

Stars: 0 | Forks: 0

# 毕业设计:Prompt Injection 防御的对比评估 MS Business Analytics 毕业设计项目(CEU,赞助方:Hiflylabs)。针对企业 AI agent 部署中抵御 prompt injection 攻击的输入端和输出端防御机制进行对比评估。 ## 仓库结构 ``` capstone_prompt_injection/ ├── _project_notes/ Project state, plan, decisions, implementation notes ├── data/ Raw datasets (gitignored, downloaded via notebooks/01_data_validation.ipynb) ├── src/ Reusable Python modules ├── scripts/ Pipeline-driver scripts (Defense A, B, C, BIPIA, cost sweep) ├── notebooks/ Pipeline-driver and analysis notebooks ├── cache/ JSONL API response caches (gitignored) ├── results/ Computed artifacts (predictions, metrics, figures) └── reports/ Written deliverables ``` ## 环境设置 1. 克隆本仓库。 2. 如果尚未安装,请安装 [uv](https://docs.astral.sh/uv/getting-started/installation/)。 3. 在仓库根目录下运行 `uv sync --extra api`。这会创建 `.venv/` 目录,并安装 `uv.lock` 中锁定的确切版本,其中包含 Defense B 和 API 冒烟测试所需的可选 API 客户端扩展(`anthropic`、`openai`、`groq`)。如果您只需要 Defense A(HuggingFace 分类器),使用普通的 `uv sync` 即可。若要复现 AgentDojo 操作级别的评估(已从论文中剔除,安排在第 9.1 节的未来工作中),还需使用 `uv sync --extra api --extra agentdojo` 进行安装。 4. 将 `.env.example` 复制为 `.env` 并填入 API 密钥。示例文件记录了每个提供商(Anthropic、OpenAI、Groq、Together AI、OpenRouter、HuggingFace)所需的密钥以及使用它的模块。`.env` 已被 gitignore 忽略。ANTHROPIC_API_KEY 现在涵盖 Sonnet 4.6、Haiku 4.5(生产环境推荐的评判模型)和 Opus 4.7(成本上限测试)。GROQ_API_KEY 为历史遗留(仅限第一阶段预览);生产环境的 agent 工作使用 Together AI。 5. 在 VSCode 中,将 `.venv/Scripts/python.exe` (Windows) 或 `.venv/bin/python` (macOS/Linux) 选作 `notebooks/` 中笔记本的内核。如果您执行过 `ipykernel install` 步骤,该项目会将内核注册为 `capstone`;否则,指向该虚拟环境的默认 `python3` 内核也能正常工作。 6. 运行一次 `notebooks/01_data_validation.ipynb` 的第 1 节,将三个数据集下载到 `data/`。 7. 使用 `.venv/Scripts/python.exe scripts/smoke_test_apis.py` 验证 API 密钥。所有四个 API 提供商(Anthropic、OpenAI、Groq、Together AI)都应报告 PASS。OpenRouter 密钥仅供跨 agent 的 Defense B agent 脚本(`run_*_mistral.py`、`run_*_deepseek.py`)使用;如果您需要复现第 5.7 节的跨 agent 鲁棒性结果,请通过小规模运行其中一个脚本来验证它。 ## 本地 CPU 与 Colab Pro GPU 的划分 本仓库划分为两个可复现层级: **第 1 层级:本地 CPU 可复现。** 大部分分析 pipeline 可以在没有 GPU 的笔记本电脑上运行。Defense A(HuggingFace transformer 分类器 DeBERTa-v3 和 Prompt Guard 2)和 Defense B(基于 API 的 agent + 评判模型)在最终报告所记录的试点规模下(Defense B 为 500 行,Defense A 的完整评估集为 4,546 行,这是唯一能从 GPU 中受益的运行)均可在 CPU 上运行。本地 CPU 产出物包括:`notebooks/01_data_validation.ipynb`、`notebooks/02_eval_set_construction.ipynb`、`notebooks/05_defense_a_pilot.ipynb`、`notebooks/04_contamination_check.ipynb`、`notebooks/08_bipia_email_qa.ipynb`、`notebooks/09_analysis_and_plots.ipynb`,`scripts/run_defense_a_*.py` 中的 Defense A 脚本,Defense B 试点驱动程序 `scripts/run_defense_b_pilot.py`,位于 `src/defense_b/rejudge_v121.py` 的 v1.21 重新评判脚本,位于 `scripts/rejudge_v125_gold_subset.py` 的 v1.25 重新评判脚本,以及 `scripts/` 中的所有分析 / 绘图 / 数据增强脚本。 **第 2 层级:需要 GPU(Colab 或同等环境)。** 有两个笔记本系列需要 GPU 才能从头执行:用于全量 4,546 行 Defense A 规模扩展的 `notebooks/colab_defense_a.ipynb`(T4 即可满足要求,实际耗时约 5 分钟,而在 CPU 上约为 25 分钟),以及 LoRA 微调笔记本系列(论文第 5.6 节:针对直接注入和四轮迭代 BIPIA 实验组的 LoRA),这些笔记本在微调步骤中需要 L4 或 T4 GPU。 针对任何第 2 层级笔记本的 Colab 会话检查清单:在 Colab Secrets 中设置 `HF_TOKEN`(以备下载受限的 Prompt Guard 2 时使用),将笔记本简介中列出的输入数据上传至 `MyDrive/capstone_lora/data/`,挂载 Drive 用于输出,运行笔记本,并将产出物下载回仓库。训练好的 LoRA adapters 保存在 Drive 中(已从此仓库的 gitignore 中排除);`results/` 中生成的指标 JSON 和 CSV 文件记录了每次运行的关键核心数据。 ## 无需 GPU 的可复现性与验证 没有 GPU 的审阅者或未来的合作者可以验证最终报告中的每一个定量声明,而无需重新运行第 2 层级的笔记本。提供三种验证途径: 1. **保留了单元格输出的运行后笔记本。** 每个第 2 层级笔记本都有一个从 Colab 下载的配套 `_post_run.ipynb` 文件,其中完整保留了所有执行输出。在 JupyterLab / VSCode / GitHub 渲染器中打开它们,可以准确查看每个单元格产生的结果。无需执行。 2. **权威指标 JSON。** 最终论文中报告的核心数据位于 `results/lora_metrics.json`(第 5.6 节直接注入)、`results/lora_metrics_extended.json`(第 5.6 节鲁棒性矩阵)、`results/lora_v2_metrics.json` 到 `lora_v4_metrics.json`(四轮迭代 BIPIA 实验组)、`results/lora_v3_pressure_tests.json`(压力测试)以及 `results/judge_v125_kappa.md`(v1.25 rubric 迭代以及 Opus 4.7 上限测试)中。 3. **可复现图表脚本。** `scripts/plot_lora_series_comparison.py` 会读取上述指标 JSON,并在本地 CPU 上重新生成 `reports/figures/lora_series_comparison.png` 和 `.pdf`。在笔记本电脑上验证图表与 JSON 是否匹配只需不到 30 秒,且不需要 GPU、HuggingFace 下载或任何 API 调用。 第 2 层级笔记本本身保留在仓库中,因为它们的 markdown 单元格记录了方法论的选择(BIPIA 实验组的压力测试工作流和对称增强原则在相关的 LoRA 微调笔记本中有内嵌说明)。阅读 markdown 单元格可以了解设计选择;阅读 `_post_run` 单元格输出可以查看实证结果。只有当您想基于自己的数据从头重新训练 LoRA adapters 时,才需要重新执行。 ## 状态 已于 2026-06-08 提交。最终论文位于 `reports/Petruska_2026_MS_Thesis.pdf`(共 135 页,通过 Pandoc + xelatex 编译,采用 CEU 格式:A4 纸张、Calibri 字体、2.5 厘米页边距、双倍行距正文、动态目录、图表目录)。源文件位于 `reports/Petruska_2026_MS_Thesis.md`。使用 `bash scripts/compile_thesis.sh` 进行重新编译。 中期进度报告已于 2026-05-11 提交(归档于 `reports/archive/Petruska_interim_progress_report.pdf`)。 主要实证发现:针对直接注入的 LoRA 微调(第 5.6 节)将跨数据集的 F1 差距从 0.316 缩小至 0.035(差距缩小了 89%);四轮迭代 BIPIA 实验组通过对称增强、基于基础文档的分层切分以及六探针对抗性压力测试工作流,为应对间接注入生成了一种具备部署候选资格的 Defense A;v1.25 rubric 迭代加上 Opus 4.7 成本上限测试,在所测试的四种模型中确定了 Haiku 4.5 + v1.25 为生产环境推荐的评判模型(kappa 0.554,在 150 行子集上与 Opus 4.7 在实测中难以区分,且成本仅为后者的五分之一)。主要贡献在于提供了一个商业决策框架(第 7 节),该框架将三种部署场景映射到防御配置和 agent 主干选择上,从而在部署者自身的容错成本假设下将预期成本降至最低。 如需导航,请参阅 `_project_notes/INDEX.md`。最新状态位于 `_project_notes/capstone_state.md`,详细计划位于 `_project_notes/capstone_plan.md`。 ## 交付成果 - 中期进度报告,截止日期 5 月 11 日 - 最终 20-25 页报告,截止日期 6 月 8 日 - 10-20 页幻灯片 - 3 页的 CEU 公开摘要
标签:AI安全, Chat Copilot, DLL 劫持, NoSQL, Petitpotam, Python, 代码示例, 大语言模型, 攻防评估, 数据分析, 无后门, 逆向工具