# Bio RAG Server A FastAPI-based Biomedical RAG service that supports PubMed retrieval, web search, and vector DB queries, providing intelligent Q&A and document retrieval with streaming responses. ## πŸš€ Features - **Multi-source retrieval**: PubMed, Web search, personal vector DBs - **Intelligent Q&A**: RAG-based answers with streaming SSE responses - **Query rewrite**: Smart multi-query and rewrite to improve recall and precision - **Primary/backup LLM**: Automatic failover between main and backup providers - **Internationalization**: Chinese/English responses (87 i18n messages, 8 categories) - **Logging & tracing**: Full request tracing with correlation IDs - **CORS**: Easy frontend integration ## πŸ—οΈ Project Structure (partial) ``` bio_rag_server/ β”œβ”€β”€ bio_agent/ β”œβ”€β”€ bio_requests/ β”œβ”€β”€ config/ β”œβ”€β”€ dto/ β”œβ”€β”€ routers/ β”œβ”€β”€ search_service/ β”œβ”€β”€ service/ β”œβ”€β”€ utils/ └── test/ ``` ## πŸ“‹ Requirements - Python 3.11+ - LLM providers (OpenAI-compatible or others per your config) ## πŸ› οΈ Setup ### 1) Install dependencies ```bash pip install -r requirements.txt ``` ### 2) Configure environment Create a `.env` file (see `env_example.txt` for keys): - `QA_LLM_MAIN_API_KEY`, `QA_LLM_MAIN_BASE_URL` - `QA_LLM_BACKUP_API_KEY`, `QA_LLM_BACKUP_BASE_URL` - `REWRITE_LLM_MAIN_API_KEY`, `REWRITE_LLM_MAIN_BASE_URL` - `REWRITE_LLM_BACKUP_API_KEY`, `REWRITE_LLM_BACKUP_BASE_URL` - `SERPER_API_KEY` (web search) - `ENVIRONMENT` (e.g., dev) ### 3) Run the service ```bash python main.py ``` Service runs at `http://localhost:9487`. ### Run with Docker ```bash docker build -t bio-rag-server . docker run --rm -p 9487:9487 --env-file .env bio-rag-server ``` Note: The Dockerfile pre-installs `crawl4ai` and runs basic setup checks during build. ## πŸ“š API ### 1) Document Retrieval Endpoint: `POST /retrieve` Request body: ```json { "query": "cancer treatment", "top_k": 5, "search_type": "keyword", "is_rewrite": true, "data_source": ["pubmed"], "user_id": "user123", "pubmed_topk": 30 } ``` Response (example): ```json [ { "title": "Cancer Treatment Advances", "abstract": "Recent advances in cancer treatment...", "url": "https://pubmed.ncbi.nlm.nih.gov/...", "score": 0.95 } ] ``` ### 2) Streaming Chat (RAG) Endpoint: `POST /stream-chat` Request body: ```json { "query": "What are the latest treatments for breast cancer?", "is_web": true, "is_pubmed": true, "language": "en" } ``` Response: Server-Sent Events (SSE) streaming ### 3) Internationalization All APIs support i18n via the `language` field: - `zh` (default) - `en` Success response shape: ```json { "success": true, "data": [...], "message": "Search successful", "language": "en" } ``` Error response shape: ```json { "success": false, "error": { "code": 500, "message": "Search failed", "language": "en", "details": "..." } } ``` ## πŸ“Š Monitoring & Logs - Log files: `logs/bio_rag_YYYY-MM-DD.log` - Correlation ID tracing per request - Processing time recorded via middleware ## πŸ”’ Security - API key and endpoint configuration via environment variables - Request logging - CORS enabled - Error handling with safe messages ## 🀝 Contributing 1. Fork 2. Create a feature branch (`git checkout -b feature/AmazingFeature`) 3. Commit (`git commit -m 'Add some AmazingFeature'`) 4. Push (`git push origin feature/AmazingFeature`) 5. Open a Pull Request ## πŸ“„ License MIT (see `LICENSE`). ## πŸ†˜ Support 1. Check Issues 2. Open a new Issue 3. Contact maintainers ## πŸ—ΊοΈ Roadmap - [ ] More data sources - [ ] Auth & permissions - [ ] Vector search optimization - [ ] More LLM providers - [ ] Result caching - [ ] API rate limiting --- Note: Ensure all required API keys and provider endpoints are configured before use.