- 接入数据库驱动的七维风险评分第一阶段逻辑\n- 增加主模型失败后的 DeepSeek 语义、流式和预防建议兜底\n- 将 AI 预防建议改为基于评分、历史异常和标准规则动态生成\n- 增加无历史案例时的标准库兜底校验和通用规则匹配\n- 修复未知供应商识别及测试占位名称过滤\n- 增加后端滚动日志文件配置和 LLM 请求日志\n- 历史会话直接读取已保存结果,避免重新调用模型和重算风险\n- 补充评分、供应商识别和 LLM 协议测试
30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
"""Risk prediction endpoints."""
|
|
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from app.api.dependencies import DatabaseSession, require_permission
|
|
from app.models.entities import UserAccount
|
|
from app.schemas.common import ApiResponse
|
|
from app.schemas.risk_prediction import ModelInfo, RiskAssessmentRequest, RiskAssessmentResult
|
|
from app.services.risk_prediction import RiskPredictionService
|
|
|
|
router = APIRouter(prefix="/risk-predictions", tags=["risk-predictions"])
|
|
|
|
|
|
@router.get("/model-info", response_model=ApiResponse[ModelInfo])
|
|
async def model_info(
|
|
_: Annotated[UserAccount, Depends(require_permission("risk.assess"))],
|
|
) -> ApiResponse[ModelInfo]:
|
|
return ApiResponse(data=RiskPredictionService.model_info())
|
|
|
|
|
|
@router.post("/preview", response_model=ApiResponse[RiskAssessmentResult])
|
|
async def preview_risk(
|
|
request: RiskAssessmentRequest,
|
|
session: DatabaseSession,
|
|
_: Annotated[UserAccount, Depends(require_permission("risk.assess", operate=True))],
|
|
) -> ApiResponse[RiskAssessmentResult]:
|
|
return ApiResponse(data=await RiskPredictionService.preview(request, session))
|