Files

98 lines
3.2 KiB
Python
Raw Permalink Normal View History

2026-07-10 17:59:59 +08:00
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"
}