McOwska/Information-Retrieval-Prompt-Injection
GitHub: McOwska/Information-Retrieval-Prompt-Injection
基于 HotpotQA 数据集的实验项目,研究 Prompt 注入攻击对多跳检索 RAG 流水线的影响并评估攻击成功率与回答质量。
Stars: 0 | Forks: 0
# 多跳检索中的 Prompt 注入
本仓库是一个小型研究型项目,旨在测试 prompt 注入如何影响简单的多跳检索 pipeline。
它构建了一个基于 HotpotQA 的语料库,通过重定向指令对文档进行投毒,在干净或被投毒的检索结果上运行多跳 agent,并使用以下指标评估结果:
- `F1` 用于衡量回答质量
- `ASR`(攻击成功率)用于衡量模型遵循注入指令的频率
代码刻意保持轻量化,便于检查。
## 仓库内容
- `dataset/` 构建语料库和问题集,并应用投毒策略
- `retireval/` 包含 BM25 检索器
- `multihop_agent/` 包含检索 + 推理循环
- `evaluation/` 运行实验并计算指标
- `classifier/` 包含可选的对抗意图防御器
- `results/` 和 `results_old/` 包含之前运行保存的输出结果
## 项目流程
典型的工作流程是:
1. 从 HotpotQA 构建干净的语料库和问题集
2. 创建被投毒的语料库
3. 使用干净或被投毒的检索运行多跳 agent
4. 衡量回答质量和攻击成功率
## 设置
创建并激活一个虚拟环境,然后安装依赖:
```
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
在仓库根目录创建一个 `.env` 文件:
```
GROQ_API_KEY=gsk_***
BASE_URL=https://api.groq.com/openai/v1
MODEL=llama-3.1-8b-instant
TEMPERATURE=0.0
MAX_TOKENS=256
```
根据你要调用的 endpoint,也可以使用 `OPENAI_API_KEY` 或 `BERGET_API_KEY` 来代替 `GROQ_API_KEY`。
## 准备数据
生成干净的语料库、被投毒的语料库和问题集:
```
python3 dataset/save_docs_to_local.py
```
这会将 JSONL 文件写入 `data/processed/`,包括:
- `corpus.jsonl`
- `corpus_poisoned_all_embedded.jsonl`
- `questions.jsonl`
投毒行为在 [dataset/poisoning.py]() 和 [dataset/save_docs_to_local.py]() 中进行配置。
## 运行评估
当前的主脚本是 [main_eval.py](),它会:
- 加载干净的语料库
- 加载被投毒的内嵌语料库
- 运行多跳评估
- 将对比输出保存到 `results/`
运行命令:
```
python3 main_eval.py
```
评估逻辑位于 [evaluation/evaluator.py](),指标定义在 [evaluation/metrics.py]() 中。
## 可选组件
agent 本身位于 [multihop_agent/agent.py]()。它会:
- 使用 BM25 检索文档
- 跨多跳生成后续查询
- 根据积累的上下文生成最终答案
在 [classifier/guard.py]() 中还有一个可选的基于分类器的防御器,用于在对抗性文档进入上下文之前对其进行标记。
## 结果处理
如果你有多个结果文件夹,以下脚本可以帮助合并它们:
- [results_processing/merge_results.py]()
- [results_processing/evaluate_results.py]()
它们会合并保存的 `comparison.csv` 文件,并计算跨运行的汇总指标。
## 注意事项
- 该仓库目前侧重于实验性探索,而非打包发布
- 部分脚本特意保持简单,并使用固定路径以加快迭代速度
- `retireval/` 目录名保持原样,以与现有代码库保持一致
## 快速开始
如果你只想走最快捷的流程:
```
source venv/bin/activate
pip install -r requirements.txt
python3 dataset/save_docs_to_local.py
python3 main_eval.py
```
标签:DLL 劫持, Petitpotam, Python, Sysdig, 人工智能, 信息检索, 大语言模型, 无后门, 用户模式Hook绕过, 红队评估, 逆向工具