| 12345678910111213141516171819202122232425262728293031 |
- import uvicorn
- from fastapi import FastAPI
- # from backend.api.v1 import qualification
- from backend.api.v1 import qa
- from backend.api.v1 import auth
- from backend.api.v1 import bid_review
- from backend.api.v1 import defense
- from backend.mcp.knowledge_base_server import mcp as kb_mcp
- from backend.mcp.web_search_server import mcp as ws_mcp
- from contextlib import asynccontextmanager
- @asynccontextmanager
- async def lifespan(app: FastAPI):
- # app.mount() 不会自动传播子应用 lifespan,必须在这里手动启动
- # _session_manager.run() 初始化 anyio task group,MCP 请求依赖它
- async with ws_mcp._session_manager.run():
- async with kb_mcp._session_manager.run():
- yield
- app = FastAPI(lifespan=lifespan)
- app.include_router(auth.router, prefix="/api/v1/auth")
- # app.include_router(qa.router, prefix="/api/v1/qa")
- app.include_router(bid_review.router, prefix="/api/v1/bid_review")
- app.include_router(defense.router, prefix="/api/v1/defense")
- # app.include_router(qualification.router, prefix="/api/v1/qualification")
- app.mount("/mcp/kb", kb_mcp.streamable_http_app())
- app.mount("/mcp/web-search", ws_mcp.streamable_http_app())
- if __name__ == '__main__':
- uvicorn.run(app, host="0.0.0.0", port=8006)
|