""" 业务处理器注册表:意图 -> 处理器、参数校验、执行器 新增二级Agent仅需在此注册,路由零改动 """ from typing import Callable, Awaitable, Optional from fastapi import UploadFile, HTTPException from service.stream_service import stream_calculation_sync, stream_review_sync, stream_comparison_sync # 定义处理器结构体 class IntentHandler: def __init__( self, need_file: bool, # 是否需要上传PDF文件 stream_func: Callable, # 流式生成函数 validate: Callable[[Optional[UploadFile]], None] # 自定义参数校验 ): self.need_file = need_file self.stream_func = stream_func self.validate = validate # -------------------------- 校验规则 -------------------------- def validate_no_file(file: Optional[UploadFile]) -> None: """计算需风量:禁止上传文件""" if file: raise HTTPException(status_code=400, detail="需风量计算无需上传文件") def validate_pdf_file(file: Optional[UploadFile]) -> None: """配风审查:必须上传PDF文件""" if not file or not file.filename.endswith(".pdf"): raise HTTPException(status_code=400, detail="配风审查仅支持上传PDF文件") # -------------------------- 全局注册表 -------------------------- HANDLER_REGISTRY = { # 意图标识 : 对应处理器 "calc_ventilation": IntentHandler( need_file=False, stream_func=stream_calculation_sync, validate=validate_no_file ), "review_plan": IntentHandler( need_file=True, stream_func=stream_review_sync, validate=validate_pdf_file ), "check_vent_comparison": IntentHandler( need_file=True, stream_func=stream_comparison_sync, validate=validate_pdf_file ) }