jackkuo's picture
add QA
79899c0
# 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密钥和服务端点。