- 按生产 7900 容器黄金清单迁移(compile.manifest 449 条目,0 缺失) - 入口双态:api.app(生产同源 3 路由)/ api.main(裁剪 11 路由族 91 路径) - 修复:advanced/__init__ 空文件(包标记误覆盖,已从主项目恢复) - 修复:api/rag_routes.py 跨环境 site-packages 注入改 LEGACY_GF_SITE_PACKAGES 门控 - 修复:scripts/utils 缺失(动态加载 reasoning_engine) - 影子验证:kg/stats 数据连通(6.2s,与 7900 同源 normalized 后端) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
86 lines
2.8 KiB
Python
Executable File
86 lines
2.8 KiB
Python
Executable File
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
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.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(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.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"
|
|
}
|