Files
PlantAI-rag/api/main.py
T
2026-07-10 17:59:59 +08:00

98 lines
3.2 KiB
Python
Executable File

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from api.routes import router as api_router
from api.kg_routes import router as kg_router
from api.reasoning_routes import router as reasoning_router
from api.rag_v10_routes import router as v10_router
from api.advanced_rag_routes import router as advanced_rag_router
from api.raptor_routes import router as raptor_router
from api.temporal_routes import router as temporal_router
from api.kg_rag_routes import router as kg_rag_router # 方案A: KG-RAG融合
from api.species_routes import router as species_router # 物种查询路由
from api.methodology_routes import router as methodology_router
from api.kb_qa_routes import router as kb_qa_router
from api.v15_graph_qa_routes import router as v15_graph_qa_router
from api.v15_agentic_qa_routes import router as v15_agentic_qa_router
from src.rag.project_config import PROJECT_ROOT
@asynccontextmanager
async def lifespan(app: FastAPI):
yield
app = FastAPI(
title="Gene Family RAG System",
description="纯净版RAG系统 - 为bbav20311项目提供知识检索支持",
version="1.0.0",
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(api_router, prefix="/api/v1")
app.include_router(kg_router, prefix="/api/v1")
app.include_router(reasoning_router, prefix="/api/v1")
app.include_router(v10_router, prefix="/api/v1")
app.include_router(advanced_rag_router, prefix="/api/v1")
app.include_router(raptor_router, prefix="/api/v1")
app.include_router(temporal_router, prefix="/api/v1")
app.include_router(kg_rag_router, prefix="/api/v1") # 方案A: KG-RAG融合
app.include_router(species_router, prefix="/api/v1") # 物种查询路由
app.include_router(methodology_router, prefix="/api/v1")
app.include_router(kb_qa_router, prefix="/api/v1") # V15 SRT SQLite知识库QA
app.include_router(v15_graph_qa_router, prefix="/api/v1") # V15 Neo4j Graph QA
app.include_router(v15_agentic_qa_router, prefix="/api/v1") # V15 Agentic QA
# 静态文件服务
app.mount("/static", StaticFiles(directory=str(PROJECT_ROOT / "static")), name="static")
@app.get("/")
async def root():
return FileResponse(str(PROJECT_ROOT / "static" / "index.html"))
@app.get("/health")
async def health_check():
return {"status": "healthy"}
# 监控指标端点
from fastapi import Request
import time
# 简单的请求计数器
request_count = 0
request_times = []
@app.middleware("http")
async def add_metrics(request: Request, call_next):
global request_count
start_time = time.time()
request_count += 1
response = await call_next(request)
process_time = time.time() - start_time
request_times.append(process_time)
if len(request_times) > 1000:
request_times.pop(0)
return response
@app.get("/metrics")
async def metrics():
"""Prometheus监控指标"""
avg_time = sum(request_times) / len(request_times) if request_times else 0
return {
"request_count": request_count,
"avg_response_time": avg_time,
"status": "healthy"
}