dingdanquanliucheng/backend/app/api/ai.py

119 lines
4.5 KiB
Python
Raw Normal View History

"""
AI 智能识别路由模块
提供 AI 图像识别和订单智能解析接口包括
- 图像识别识别订单图片内容
- 识别结果纠错修正AI识别错误
- 订单智能解析从文本/图片中提取订单信息
URL 前缀/api/ai
权限要求manager/admin 角色需对应细粒度权限
"""
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
2026-05-14 13:51:06 +08:00
from backend.app.api.deps import require_permissions, require_roles
from backend.app.db import get_db_session
2026-06-20 05:29:02 +08:00
from backend.app.schemas.ai import CorrectRecognizeResultRequest, ParseCustomerRequest, ParseOrderRequest, RecognizeImageRequest
2026-05-14 13:51:06 +08:00
from backend.app.schemas.common import success_payload
from backend.app.services.ai_service import ai_service
2026-05-14 13:51:06 +08:00
router = APIRouter(prefix="/api/ai", tags=["ai"])
@router.post("/recognize")
def recognize_image(
payload: RecognizeImageRequest, # 图像识别请求体包含图片URL或Base64数据
session: Session = Depends(get_db_session), # 数据库会话
current_user: dict = Depends(require_roles("manager", "admin")), # 当前登录用户仅manager和admin
_permission_user: dict = Depends(require_permissions("ai:recognize")), # 权限校验AI识别权限
) -> dict:
"""
AI 图像识别
上传订单相关图片由AI进行OCR识别并提取结构化信息
请求参数
payload: RecognizeImageRequest 请求体包含图片数据
返回值
AI识别结果包含提取的订单信息
权限要求manageradmin 角色 ai:recognize 权限
"""
return success_payload(ai_service.recognize_image(payload.model_dump(), session))
2026-05-14 13:51:06 +08:00
@router.post("/recognize/{log_id}/correct")
def correct_recognize_result(
log_id: int, # AI识别日志ID
payload: CorrectRecognizeResultRequest, # 纠错请求体,包含修正后的识别结果
session: Session = Depends(get_db_session), # 数据库会话
current_user: dict = Depends(require_roles("manager", "admin")), # 当前登录用户
_permission_user: dict = Depends(require_permissions("ai:correct")), # 权限校验AI纠错权限
) -> dict:
"""
纠正AI识别结果
对之前的AI识别结果进行人工修正用于提升后续AI模型的准确率
请求参数
log_id: 路径参数AI识别日志ID
payload: CorrectRecognizeResultRequest 请求体包含修正后的数据
返回值
纠正后的识别结果
权限要求manageradmin 角色 ai:correct 权限
"""
return success_payload(ai_service.correct_result(log_id, payload.model_dump(), session))
2026-05-26 17:20:21 +08:00
@router.post("/parse-order")
def parse_order(
payload: ParseOrderRequest, # 订单解析请求体,包含待解析的文本或图片数据
session: Session = Depends(get_db_session), # 数据库会话
current_user: dict = Depends(require_roles("salesman", "admin")), # 当前登录用户仅salesman和admin
_permission_user: dict = Depends(require_permissions("ai:parse-order")), # 权限校验AI订单解析权限
2026-05-26 17:20:21 +08:00
) -> dict:
"""
AI 订单智能解析
利用AI从文本或图片中提取订单关键信息客户名产品数量价格等
返回结构化的订单数据供前端填充表单
请求参数
payload: ParseOrderRequest 请求体包含待解析内容
返回值
解析后的结构化订单数据
权限要求salesmanadmin 角色 ai:parse-order 权限
"""
2026-05-26 17:20:21 +08:00
return success_payload(ai_service.parse_order(payload.model_dump(), session))
2026-06-20 05:29:02 +08:00
@router.post("/parse-customer")
def parse_customer(
payload: ParseCustomerRequest, # 客户信息解析请求体,包含待解析的文本
session: Session = Depends(get_db_session), # 数据库会话
current_user: dict = Depends(require_roles("salesman", "admin")), # 当前登录用户仅salesman和admin
_permission_user: dict = Depends(require_permissions("ai:parse-order")), # 权限校验:复用订单解析权限
) -> dict:
"""
AI 客户信息智能解析
利用AI从文本中提取客户关键信息姓名手机号地址等
返回结构化的客户数据供前端填充表单
请求参数
payload: ParseCustomerRequest 请求体包含待解析内容
返回值
解析后的结构化客户数据
权限要求salesmanadmin 角色 ai:parse-order 权限
"""
return success_payload(ai_service.parse_customer(payload.model_dump(), session))