new_main.py 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. import uvicorn
  2. from fastapi import FastAPI
  3. # from backend.api.v1 import qualification
  4. from backend.api.v1 import qa
  5. from backend.api.v1 import auth
  6. from backend.api.v1 import bid_review
  7. from backend.api.v1 import defense
  8. from backend.mcp.knowledge_base_server import mcp as kb_mcp
  9. from backend.mcp.web_search_server import mcp as ws_mcp
  10. from contextlib import asynccontextmanager
  11. @asynccontextmanager
  12. async def lifespan(app: FastAPI):
  13. # app.mount() 不会自动传播子应用 lifespan,必须在这里手动启动
  14. # _session_manager.run() 初始化 anyio task group,MCP 请求依赖它
  15. async with ws_mcp._session_manager.run():
  16. async with kb_mcp._session_manager.run():
  17. yield
  18. app = FastAPI(lifespan=lifespan)
  19. app.include_router(auth.router, prefix="/api/v1/auth")
  20. # app.include_router(qa.router, prefix="/api/v1/qa")
  21. app.include_router(bid_review.router, prefix="/api/v1/bid_review")
  22. app.include_router(defense.router, prefix="/api/v1/defense")
  23. # app.include_router(qualification.router, prefix="/api/v1/qualification")
  24. app.mount("/mcp/kb", kb_mcp.streamable_http_app())
  25. app.mount("/mcp/web-search", ws_mcp.streamable_http_app())
  26. if __name__ == '__main__':
  27. uvicorn.run(app, host="0.0.0.0", port=8006)