main.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import asyncio
  2. import os
  3. import threading
  4. from contextlib import asynccontextmanager
  5. from fastapi import FastAPI
  6. from fastapi.middleware.cors import CORSMiddleware
  7. # 导入配置
  8. from core.config import logger
  9. # 导入API路由
  10. from api.search import router as search_router
  11. from api.health import router as health_router
  12. from utils.keywords_utils import KeywordSummaryTask
  13. # 创建 FastAPI 应用
  14. app = FastAPI(
  15. title="RAG",
  16. description="RAG数据检索",
  17. version="1.0.0"
  18. )
  19. # 添加 CORS 中间件
  20. app.add_middleware(
  21. CORSMiddleware,
  22. allow_origins=["*"],
  23. allow_credentials=True,
  24. allow_methods=["*"],
  25. allow_headers=["*"],
  26. )
  27. # 注册路由
  28. app.include_router(health_router, tags=["健康检查"])
  29. app.include_router(search_router, tags=["数据检索"])
  30. # 定义生命周期事件处理器
  31. @asynccontextmanager
  32. async def lifespan(app: FastAPI):
  33. # Startup 逻辑
  34. print("正在启动数据胶囊 API 服务...")
  35. # 初始化一些资源,例如数据库连接
  36. # app.state.db = await init_database() # 假设是异步初始化
  37. yield # 应用在此处运行,处理请求
  38. # Shutdown 逻辑
  39. print("数据胶囊 API 服务正在关闭...")
  40. if __name__ == "__main__":
  41. import uvicorn
  42. os.environ['RAG_ENV'] = 'prod'
  43. keyword_summary_task = KeywordSummaryTask()
  44. # 启动单独的线程来执行 process_texts_concurrently 方法
  45. threading.Thread(target=keyword_summary_task.process_texts_concurrently, daemon=True).start()
  46. uvicorn.run(app, host="0.0.0.0", port=5000)