diff --git a/main.py b/main.py index e64783c..9fa9a81 100644 --- a/main.py +++ b/main.py @@ -43,10 +43,14 @@ app = FastAPI( title=config.APP_NAME, version=config.APP_VERSION, description="高效简洁的RAG服务API", - docs_url="/docs", - redoc_url="/redoc", + docs_url="/api/docs", + redoc_url="/api/redoc", ) +# 创建API路由器 +from fastapi import APIRouter +api_router = APIRouter(prefix="/api") + # 添加CORS中间件 app.add_middleware( CORSMiddleware, @@ -95,7 +99,7 @@ async def verify_token(credentials: HTTPAuthorizationCredentials = Depends(secur return True -@app.get("/", response_model=dict) +@api_router.get("/", response_model=dict) async def root(): """根路径 - 服务健康检查""" logger.info("根路径访问") @@ -106,14 +110,14 @@ async def root(): } -@app.get("/health") +@api_router.get("/health") async def health_check(): """健康检查接口""" logger.debug("健康检查请求") return {"status": "healthy", "service": config.APP_NAME} -@app.post("/upload", response_model=SuccessResponse) +@api_router.post("/upload", response_model=SuccessResponse) async def upload_document( file: UploadFile = File(...), service: AsyncRAGService = Depends(get_rag_service), @@ -184,7 +188,7 @@ async def upload_document( raise HTTPException(status_code=500, detail=f"文档处理失败: {str(e)}") -@app.post("/chat", response_model=ChatResponse) +@api_router.post("/chat", response_model=ChatResponse) async def chat( request: ChatRequest, service: AsyncRAGService = Depends(get_rag_service), @@ -217,7 +221,7 @@ async def chat( raise HTTPException(status_code=500, detail=f"问答处理失败: {str(e)}") -@app.post("/chat/stream") +@api_router.post("/chat/stream") async def chat_stream( request: StreamChatRequest, service: AsyncRAGService = Depends(get_rag_service), @@ -260,7 +264,7 @@ async def chat_stream( ) -@app.get("/documents", response_model=List[DocumentInfo]) +@api_router.get("/documents", response_model=List[DocumentInfo]) async def get_documents( service: AsyncRAGService = Depends(get_rag_service), _: bool = Depends(verify_token) ): @@ -284,7 +288,7 @@ async def get_documents( raise HTTPException(status_code=500, detail=f"获取文档列表失败: {str(e)}") -@app.delete("/documents/{doc_id}", response_model=SuccessResponse) +@api_router.delete("/documents/{doc_id}", response_model=SuccessResponse) async def delete_document( doc_id: str, service: AsyncRAGService = Depends(get_rag_service), @@ -320,6 +324,10 @@ async def global_exception_handler(request, exc): ) +# 包含API路由器 +app.include_router(api_router) + + if __name__ == "__main__": # 验证配置 try: