Spaces:
Sleeping
Sleeping
| """生物医学RAG服务主程序入口。""" | |
| import importlib | |
| import pkgutil | |
| import time | |
| import os | |
| from dotenv import load_dotenv | |
| # 加载环境变量 | |
| load_dotenv() | |
| import uvicorn | |
| from asgi_correlation_id import CorrelationIdMiddleware, correlation_id | |
| from fastapi import FastAPI, Request | |
| from fastapi_mcp import FastApiMCP | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from routers import sensor, mcp_sensor | |
| from utils.bio_logger import bio_logger as logger | |
| # 调试:验证环境变量是否加载 | |
| logger.info(f"SERPER_API_KEY loaded: {'Yes' if os.getenv('SERPER_API_KEY') else 'No'}") | |
| app = FastAPI( | |
| docs_url=None, # 关闭 Swagger UI 文档 | |
| redoc_url=None, # 关闭 ReDoc 文档 | |
| openapi_url=None, # 关闭 OpenAPI 规范文件 | |
| debug=False, # 关闭调试模式 | |
| ) | |
| # 第一个添加的中间件 | |
| app.add_middleware(CorrelationIdMiddleware) | |
| # 配置CORS | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # 路由 | |
| app.include_router(sensor.router) | |
| app.include_router(mcp_sensor.router) # 包含 MCP 路由 | |
| async def add_process_time_header(request: Request, call_next): | |
| """HTTP中间件,记录请求处理时间和状态。""" | |
| start_time = time.time() | |
| logger.info(f"Request started | URL: {request.url}") | |
| response = await call_next(request) | |
| process_time = time.time() - start_time | |
| logger.info( | |
| f"Request completed | " | |
| f"Status: {response.status_code} | " | |
| f"Time: {process_time:.2f}s" | |
| ) | |
| return response | |
| def dynamic_import_subclasses(parent_dir: str) -> None: | |
| """动态导入指定目录下的所有Python模块。 | |
| Args: | |
| parent_dir: 要导入的目录路径 | |
| """ | |
| for _, module_name, _ in pkgutil.iter_modules([parent_dir]): | |
| module = importlib.import_module(f"{parent_dir}.{module_name}") | |
| logger.info(f"Imported: {module.__name__}") | |
| # Add MCP server to the FastAPI app | |
| mcp = FastApiMCP( | |
| app, | |
| name="bio qa mcp", | |
| include_operations=["bio_qa_stream_chat"] | |
| ) | |
| # Mount the MCP server to the FastAPI app | |
| # 挂载SSE端点到 /mcp/sse | |
| mcp.mount_sse() | |
| if __name__ == "__main__": | |
| logger.info("Starting Bio RAG Server...") | |
| dynamic_import_subclasses("search_service") | |
| uvicorn.run(app, host="0.0.0.0", port=9487) | |