import uvicorn import asyncio from fastapi import FastAPI from starlette.staticfiles import StaticFiles from Routes.TeachingModel.tasks.BackgroundTasks import train_document_task from Util.PostgreSQLUtil import init_postgres_pool, close_postgres_pool from Routes.Ggb import router as ggb_router from Routes.Knowledge import router as knowledge_router from Routes.Oss import router as oss_router from Routes.Rag import router as rag_router from Routes.ZuoWen import router as zuowen_router from Routes.Llm import router as llm_router from Routes.TeachingModel.api.LoginController import router as login_router from Routes.TeachingModel.api.UserController import router as user_router from Routes.TeachingModel.api.DmController import router as dm_router from Routes.TeachingModel.api.ThemeController import router as theme_router from Routes.TeachingModel.api.DocumentController import router as document_router from Routes.TeachingModel.api.TeachingModelController import router as teaching_model_router from Util.LightRagUtil import * from contextlib import asynccontextmanager # 控制日志输出 logger = logging.getLogger('lightrag') logger.setLevel(logging.INFO) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) logger.addHandler(handler) @asynccontextmanager async def lifespan(_: FastAPI): pool = await init_postgres_pool() app.state.pool = pool asyncio.create_task(train_document_task()) try: yield finally: # 应用关闭时销毁连接池 await close_postgres_pool(pool) app = FastAPI(lifespan=lifespan) # 挂载静态文件目录 app.mount("/static", StaticFiles(directory="Static"), name="static") # 加载路由 app.include_router(zuowen_router) # 作文批阅路由 app.include_router(ggb_router) # Geogebra路由 app.include_router(rag_router) # LightRAG路由 app.include_router(knowledge_router) # 知识图谱路由 app.include_router(oss_router) # 阿里云OSS路由 app.include_router(llm_router) # 大模型路由 # Teaching Model 相关路由 # 登录相关(不用登录) app.include_router(login_router, prefix="/api/login", tags=["login"]) # 用户相关 app.include_router(user_router, prefix="/api/user", tags=["user"]) # 字典相关(Dm) app.include_router(dm_router, prefix="/api/dm", tags=["dm"]) # 主题相关 app.include_router(theme_router, prefix="/api/theme", tags=["theme"]) # 文档相关 app.include_router(document_router, prefix="/api/document", tags=["document"]) # 问题相关(大模型应用) app.include_router(teaching_model_router, prefix="/api/teaching/model", tags=["teacher_model"]) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8100)