""" LangChain Learning Kit - FastAPI 应用程序入口 """ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from app.config import get_settings from app.db.session import init_db_manager from app.api import models, kb, conv, agent from app.utils.logger import get_logger logger = get_logger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): """ 应用程序生命周期管理器。 处理启动和关闭事件。 """ # 启动 logger.info("application_starting") try: settings = get_settings() # 初始化数据库管理器 db_manager = init_db_manager(settings) logger.info("database_manager_initialized") # 如果表不存在则创建 db_manager.create_all_tables() logger.info("database_tables_verified") logger.info( "application_started", environment=settings.environment, debug=settings.debug, ) except Exception as e: logger.error("application_startup_failed", error=str(e)) raise yield # 关闭 logger.info("application_shutting_down") # 创建 FastAPI 应用程序 app = FastAPI( title="LangChain Learning Kit", description="Enterprise-grade LangChain learning platform with RAG, multi-turn conversations, and agent orchestration", version="1.0.0", lifespan=lifespan, ) # CORS 中间件 settings = get_settings() app.add_middleware( CORSMiddleware, allow_origins=["*"], # 在生产环境中,请指定实际的源 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 包含路由 app.include_router(models.router, prefix="/api/v1") app.include_router(kb.router, prefix="/api/v1") app.include_router(conv.router, prefix="/api/v1") app.include_router(agent.router, prefix="/api/v1") @app.get("/") def root(): """根端点。""" return { "message": "Welcome to LangChain Learning Kit API", "version": "1.0.0", "docs": "/docs", "health": "/health", } @app.get("/health") def health_check(): """健康检查端点。""" return { "status": "healthy", "environment": settings.environment, } if __name__ == "__main__": import uvicorn logger.info("starting_uvicorn_server") uvicorn.run( "app.main:app", host=settings.host, port=settings.port, reload=settings.debug, log_level="info", )