Spaces:
Sleeping
Sleeping
File size: 5,735 Bytes
79899c0 |
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 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 |
# Bio RAG Server
一个基于FastAPI的生物医学检索增强生成(RAG)服务,支持PubMed文献检索、Web搜索和向量数据库查询,提供智能问答和文档检索功能。
## 🚀 功能特性
- **多源数据检索**: 支持PubMed、Web搜索、个人向量数据库等多种数据源
- **智能问答**: 基于大语言模型的RAG问答,支持流式响应
- **查询重写**: 智能查询拆分和重写,提高检索精度
- **主备切换**: 支持LLM服务的主备配置,自动故障转移
- **流式响应**: 实时流式聊天响应,提升用户体验
- **国际化支持**: 支持中英文切换,包含87个国际化消息,涵盖8种消息类型
- **日志追踪**: 完整的请求追踪和日志记录
- **CORS支持**: 跨域请求支持,便于前端集成
## 🏗️ 系统架构
```
bio_rag_server/
├── bio_agent/ # AI代理相关
├── bio_requests/ # 请求模型定义
├── config/ # 配置文件
├── dto/ # 数据传输对象
├── routers/ # API路由
├── search_service/ # 搜索服务
├── service/ # 核心业务服务
├── utils/ # 工具类
└── test/ # 测试文件
```
## 📋 环境要求
- Python 3.8+
- OpenAI API 或兼容的LLM服务
## 🛠️ 安装部署
### 1. 克隆项目
```bash
git clone <repository-url>
cd bio_rag_server-1
```
### 2. 安装依赖
```bash
pip install -r requirements.txt
```
### 3. 配置环境
复制并修改配置文件 `config/app_config.yaml`:
```yaml
llm:
model: gpt-4o
api_key: your-openai-api-key
base_url: https://api.openai.com/v1
max_tokens: 1024
temperature: 0.7
qa-llm:
main:
model: deepseek-r1
api_key: your-main-api-key
base_url: https://your-main-endpoint/v1
max_tokens: 1024
temperature: 0.7
backup:
model: qwen-plus-latest
api_key: your-backup-api-key
base_url: https://your-backup-endpoint/v1
max_tokens: 1024
temperature: 0.7
```
### 4. 启动服务
```bash
python main.py
```
或使用Docker:
```bash
docker build -t bio-rag-server .
docker run -p 9487:9487 bio-rag-server
```
服务将在 `http://localhost:9487` 启动。
## 📚 API 文档
### 1. 文档检索 API
**端点**: `POST /retrieve`
**请求体**:
```json
{
"query": "cancer treatment",
"top_k": 5,
"search_type": "keyword",
"is_rewrite": true,
"data_source": ["pubmed"],
"user_id": "user123",
"pubmed_topk": 30
}
```
**响应**:
```json
[
{
"title": "Cancer Treatment Advances",
"abstract": "Recent advances in cancer treatment...",
"url": "https://pubmed.ncbi.nlm.nih.gov/...",
"score": 0.95
}
]
```
### 2. 流式聊天 API
**端点**: `POST /stream-chat`
**请求体**:
```json
{
"query": "What are the latest treatments for breast cancer?",
"is_web": true,
"is_pubmed": true,
"language": "en" // 可选:响应语言 (zh/en)
}
```
**响应**: Server-Sent Events (SSE) 流式响应
### 3. 国际化支持
所有API接口都支持国际化,通过 `language` 参数指定响应语言:
- `zh` (默认): 中文响应
- `en`: 英文响应
**响应格式示例**:
```json
{
"success": true,
"data": [...],
"message": "搜索成功", // 或 "Search successful"
"language": "zh"
}
```
**错误响应格式**:
```json
{
"success": false,
"error": {
"code": 500,
"message": "搜索失败", // 或 "Search failed"
"language": "zh",
"details": "具体错误信息"
}
}
```
## 🔧 配置说明
### 数据源配置
- **pubmed**: PubMed文献数据库
- **web**: Web搜索
### LLM配置
支持主备配置,当主配置失败时自动切换到备用配置:
```yaml
qa-llm:
main:
model: deepseek-r1
api_key: main-api-key
base_url: main-endpoint
backup:
model: qwen-plus-latest
api_key: backup-api-key
base_url: backup-endpoint
```
## 🧪 测试
### 基本功能测试
运行测试用例:
```bash
cd test
python client.py
```
### 国际化功能测试
```bash
# 基本国际化功能测试
python test/test_i18n.py
# Label国际化功能测试
python test/test_label_i18n.py
# 新的消息文件结构测试
python test/test_i18n_messages.py
# 运行客户端测试示例
python test/client_test.py
```
### 使用示例
```python
import requests
# 中文检索
response_zh = requests.post("http://localhost:9487/retrieve", json={
"query": "人工智能",
"language": "zh"
})
# 英文检索
response_en = requests.post("http://localhost:9487/retrieve", json={
"query": "artificial intelligence",
"language": "en"
})
```
## 📊 监控和日志
- 日志文件位置: `logs/bio_rag_YYYY-MM-DD.log`
- 请求追踪: 每个请求都有唯一的correlation_id
- 性能监控: 自动记录请求处理时间
## 🔒 安全特性
- API密钥配置化管理
- 请求日志记录
- CORS配置
- 错误处理和安全异常
## 🤝 贡献指南
1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🆘 支持
如有问题或建议,请:
1. 查看 [Issues](../../issues) 页面
2. 创建新的 Issue
3. 联系项目维护者
## 🗺️ 路线图
- [ ] 支持更多数据源
- [ ] 增加用户认证和权限管理
- [ ] 优化向量搜索性能
- [ ] 添加更多LLM模型支持
- [ ] 实现缓存机制
- [ ] 增加API限流功能
---
**注意**: 请确保在使用前正确配置所有必要的API密钥和服务端点。 |