File size: 4,321 Bytes
db06013
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# SafeRAG 项目信息

## 📁 项目结构

```
safe_rag/
├── app.py                    # Gradio 演示应用
├── requirements.txt          # Python 依赖
├── config.yaml              # 配置文件
├── README.md                # 项目说明(HF Spaces 配置)
├── simple_e2e_test.py       # 端到端测试
├── simple_test.py           # 基本功能测试
├── data_processing/         # 数据处理模块
│   ├── __init__.py
│   ├── data_loader.py       # 数据加载器
│   └── preprocessor.py      # 文本预处理器
├── retriever/              # 检索模块
│   ├── __init__.py
│   ├── embedder.py         # 嵌入生成器
│   ├── faiss_index.py      # FAISS 索引
│   ├── retriever.py        # 检索器
│   └── reranker.py         # 重排序器
├── generator/              # 生成模块
│   ├── __init__.py
│   ├── vllm_server.py      # vLLM 服务器
│   ├── prompt_templates.py # 提示模板
│   └── safe_generate.py    # 安全生成器
├── calibration/            # 校准模块
│   ├── __init__.py
│   ├── features.py         # 特征提取
│   ├── calibration_head.py # 校准头
│   └── trainer.py          # 训练器
└── eval/                   # 评估模块
    ├── __init__.py
    ├── eval_qa.py          # QA 评估
    ├── eval_attr.py        # 归因评估
    ├── eval_calib.py       # 校准评估
    └── eval_system.py      # 系统评估
```

## 🚀 核心功能

### 1. 数据处理 (`data_processing/`)
- **DataLoader**: 加载 HF Datasets(HotpotQA, TriviaQA, Wikipedia)
- **Preprocessor**: 文本清理、句子分割、词元化

### 2. 检索系统 (`retriever/`)
- **Embedder**: 使用 BGE/E5 生成嵌入向量
- **FAISSIndex**: 构建和搜索 FAISS 索引
- **Retriever**: 批量检索相关文档
- **Reranker**: 重排序提升检索质量

### 3. 生成系统 (`generator/`)
- **VLLMServer**: vLLM 推理服务器
- **SafeGenerator**: 风险感知的答案生成
- **PromptTemplates**: 提示模板管理

### 4. 风险校准 (`calibration/`)
- **RiskFeatureExtractor**: 提取 16 维风险特征
- **CalibrationHead**: LogReg/MLP 校准头
- **Trainer**: 校准头训练

### 5. 评估系统 (`eval/`)
- **QAEvaluator**: EM/F1 评估
- **AttributionEvaluator**: 引用归因评估
- **CalibrationEvaluator**: 校准质量评估
- **SystemEvaluator**: 系统性能评估

## 🎯 风险校准策略

### 风险特征 (16维)
1. **检索统计**: 相似度分数、方差、多样性
2. **覆盖特征**: Q&A 间的 token/实体重叠
3. **一致性特征**: 段落间语义相似度
4. **多样性特征**: 主题方差、段落多样性

### 自适应策略
- **低风险 (r < 0.3)**: 正常生成
- **中风险 (0.3 ≤ r < 0.7)**: 保守生成 + 强制引用
- **高风险 (r ≥ 0.7)**: 非常保守或拒绝回答

## 📊 性能目标

- **QA 准确率**: 相比 vanilla RAG 的 EM/F1 提升
- **归因质量**: 引用精确率/召回率提升 8-12pt
- **校准质量**: ECE 降低 30-40%
- **系统吞吐**: vLLM 带来 2-3.5x 提升

## 🧪 测试验证

### 端到端测试 (`simple_e2e_test.py`)
- ✅ 8/8 测试通过
- ✅ 完整 RAG 流程验证
- ✅ 所有核心功能正常

### 基本测试 (`simple_test.py`)
- ✅ 模块导入测试
- ✅ 基本功能验证
- ✅ 配置检查

## 🚀 部署到 Hugging Face Spaces

### 1. 上传文件
- 将整个 `safe_rag` 目录上传到 HF Spaces
- 确保 `app.py` 在根目录

### 2. 配置 Spaces
- SDK: Gradio
- Hardware: GPU (推荐 A10G 或 A100)
- Environment: Python 3.8+

### 3. 自动部署
- HF Spaces 会自动安装依赖
- 自动启动 `app.py`
- 提供公共访问链接

## 📝 使用说明

### 本地运行
```bash
# 安装依赖
pip install -r requirements.txt

# 运行测试
python3 simple_e2e_test.py

# 启动演示
python3 app.py
```

### 在线演示
访问 Hugging Face Spaces 链接,体验交互式 RAG 系统。

## 🎉 项目状态**完成**: 所有核心模块实现
✅ **测试**: 端到端测试通过
✅ **简化**: 移除不必要的文件
✅ **就绪**: 可部署到 HF Spaces

SafeRAG 项目已经准备好部署和使用了!