# Python-16-AI内容审核系统 **Repository Path**: sanxiadaer/python16aineirongshenhe ## Basic Information - **Project Name**: Python-16-AI内容审核系统 - **Description**: 基于Python的AI内容审核系统,专注识别违规文本、图像与多媒体内容,提供高效、可扩展的自动化审查方案,助力合规运营。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-10 - **Last Updated**: 2026-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 内容审核系统 一个面向 UGC 平台的 AI 内容审核系统,实现「AI 初审 → 人工复核 → 上线 → 二次复核」的完整审核闭环。包含三个子项目: | 目录 | 项目 | 说明 | | --- | --- | --- | | `backend/` | 后端服务 | FastAPI + SQLite,提供认证、审核、统计、配置、文件提取接口 | | `frontend/` | 管理端前端 | Vue 3 管理后台:内容提交、审核工作台、统计看板、规则配置 | | `user-frontend/` | 用户端前端 | Vue 3 用户平台:登录注册、发布内容、公共广场、审核进度查询 | ## 系统架构 ``` ┌─────────────┐ ┌─────────────┐ │ 管理端前端 │ │ 用户端前端 │ │ frontend │ │ user-frontend│ └──────┬──────┘ └──────┬──────┘ │ /api │ /api └────────┬─────────┘ ▼ ┌─────────────────┐ │ 后端服务 │ FastAPI + Uvicorn │ backend/app │ └────────┬─────────┘ ▼ ┌─────────────────┐ │ SQLite │ reviews / users / sessions / settings └─────────────────┘ ``` ### 审核流程(两级审核) 1. **提交**:用户通过文本 / 图片(OCR)/ 文档(docx、pdf 等)提交内容 2. **AI 初审**:后端 `moderation.py` 本地引擎判定(无需外部 AI 服务) - 命中置信度 `≥ blockThreshold` → **拦截** - `≥ reviewThreshold` → **待人工一审** - 其余(含低于 `autoPassThreshold` 的弱命中)→ **通过并自动上线** 3. **一级人工审核**(管理端工作台):对 AI 拦截 / 待定内容复核,通过则上线、拦截则驳回,可批量判定 4. **二级复核**(管理端工作台):对已上线公共内容抽样复核,拦截则下线(`taken_down`) ## 核心功能 ### AI 审核引擎(`backend/app/moderation.py`) - **关键词规则匹配**:全角/半角、大小写、数字替代字母(`0→o`、`4→a` 等)混淆变体对抗;NFKC 规范化 + 单次正则扫描,最长词优先匹配 - **正则模式识别**:手机号、身份证号、QQ 群引流、微信联系方式引流 - **命中片段管理**:去重、合并相邻同类型片段,输出 `start/end` 偏移、置信度与命中原因 - **风险类型**:政治敏感(politics)、色情低俗(porn)、暴力血腥(violence)、诈骗广告(fraud)、个人信息(personal) ### 内容接入 - 纯文本提交 - 图片 OCR(用户端/管理端均支持;后端 `extractor.py` 使用 pytesseract,前端使用 tesseract.js 本地识别) - 文档解析:`txt / md / csv / json / log / html / xml / docx / pdf`(后端 python-docx + PyMuPDF,前端 mammoth + pdfjs-dist) ### 管理端(`frontend/`) - 内容提交审核:即时预审结果展示(置信度条、风险高亮) - 审核工作台:状态 / AI 判定 / 关键词筛选,批量人工判定 - 审核详情:风险片段高亮、AI 与人工判定对比 - 统计看板:今日总量、待审核数、自动通过率、人机一致率、风险分布、7 日趋势 - 管理配置:三个阈值、批量大小、规则关键词增删改 ### 用户端(`user-frontend/`) - 登录注册(Bearer Token 认证) - 发布内容(文本 / 图片 / 文档) - 公共广场:浏览已上线内容,支持搜索 - 我的内容:查看提交历史与审核状态 - 查询状态:按编号查询审核进度 ## 技术栈 | 端 | 技术 | | --- | --- | | 后端 | Python 3.10+、FastAPI、Uvicorn、SQLite、python-docx、PyMuPDF、pytesseract、Pillow | | 管理端 | Vue 3、TypeScript、Vite 8、Pinia、Vue Router、tesseract.js、mammoth、pdfjs-dist | | 用户端 | 同管理端(独立项目,共用后端) | | 部署 | Docker(后端,兼容 Railway)、Gitee Pages 等静态托管(前端) | ## 目录结构 ``` ├── backend/ # 后端服务 │ ├── app/ │ │ ├── main.py # FastAPI 入口(路由注册、CORS、健康检查) │ │ ├── database.py # SQLite 连接池(线程本地复用)、建表与迁移 │ │ ├── moderation.py # AI 审核引擎(关键词 + 正则 + 三阈值判定) │ │ ├── extractor.py # 文档 / 图片文字提取 │ │ ├── config_service.py # 系统配置读写 │ │ ├── security.py # 密码哈希(PBKDF2 / bcrypt 等) │ │ ├── schemas.py # Pydantic 模型 │ │ ├── seed.py # 默认账号与示例数据初始化 │ │ └── routers/ │ │ ├── auth.py # 注册 / 登录 / 登出 / 鉴权依赖 │ │ ├── review.py # 审核队列、详情、一审判定、二审判定、批量判定、提交 │ │ ├── stats.py # 看板统计 │ │ ├── config.py # 配置读取 / 保存 │ │ └── files.py # 文件上传提取 │ ├── requirements.txt │ └── Dockerfile # Python 3.12-slim,DATA_DIR=/data 持久化 ├── frontend/ # 管理端前端(详见 frontend/README.md) │ ├── src/ │ │ ├── api/ # 接口层(http 封装 + Mock) │ │ ├── components/ # 通用组件 │ │ ├── router/ # 路由(提交 / 工作台 / 详情 / 看板 / 配置) │ │ ├── stores/ # Pinia │ │ ├── utils/ # 审核引擎(演示版)、OCR、文档解析 │ │ └── views/ # 页面 │ └── vite.config.ts # /api 代理到 localhost:8000 └── user-frontend/ # 用户端前端 ├── src/ │ ├── api/ # 接口层 │ ├── stores/ # 登录态(Pinia + localStorage) │ ├── router/ # 路由守卫(未登录跳转) │ └── views/ # 登录 / 公共广场 / 发布 / 我的 / 状态查询 └── vite.config.ts ``` ## 快速开始 要求:Node.js `^22.18.0 || >=24.12.0`,Python 3.10+。 ### 1. 启动后端 ```bash cd backend pip install -r requirements.txt uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` - 接口文档(Swagger):http://localhost:8000/docs - 首次启动自动建库、建表并写入示例数据 - 默认账号: - 管理员:`admin` / `admin123` - 普通用户:`user` / `user123` - 数据文件:`backend/app/app.db`(可用环境变量 `DATA_DIR` 指定存储目录) ### 2. 启动管理端(可选,需管理员登录) ```bash cd frontend npm install npm run dev # http://localhost:5173 ``` ### 3. 启动用户端 ```bash cd user-frontend npm install npm run dev # http://localhost:5174 ``` 两个前端的开发服务器都会把 `/api` 请求代理到 `http://localhost:8000`(后端)。 ## 环境变量 ### 后端 | 变量 | 默认值 | 说明 | | --- | --- | --- | | `DATA_DIR` | `app/` 目录 | SQLite 数据库文件存储目录(Docker 部署挂载卷到 `/data`) | ### 前端(两个前端通用) | 变量 | 默认值 | 说明 | | --- | --- | --- | | `VITE_USE_MOCK` | `true` | 是否使用 Mock 数据;`false` 时请求真实后端 | | `VITE_API_BASE` | `/api` | 后端 API 基础路径 | | `VITE_PROXY_TARGET` | `http://localhost:8000` | 开发环境 `/api` 代理目标 | > 生产环境部署前端时,将 `.env.production` 中的 `VITE_API_BASE` 替换为实际后端地址(如 Railway 部署后的 URL)。 ## API 概览(前缀 `/api`) 除注册、登录与健康检查外,所有接口需携带 `Authorization: Bearer `。 | 方法 | 路径 | 说明 | 权限 | | --- | --- | --- | --- | | POST | `/auth/register` | 注册 | 公开 | | POST | `/auth/login` | 登录 | 公开 | | POST | `/auth/logout` | 登出 | 登录 | | GET | `/auth/me` | 当前用户信息 | 登录 | | GET | `/review/queue` | 审核队列(一审 / 二审,分页筛选) | 管理员 | | GET | `/review/public-feed` | 公共内容流 | 登录 | | GET | `/review/mine` | 我的提交 | 登录 | | GET | `/review/{id}` | 审核详情 | 登录 | | POST | `/review/{id}/decision` | 一级人工判定(通过上线 / 拦截驳回) | 管理员 | | POST | `/review/{id}/second-decision` | 二次复核判定(保持上线 / 下线) | 管理员 | | POST | `/review/batch-decision` | 批量一审判定 | 管理员 | | POST | `/review/batch-second-decision` | 批量二次复核 | 管理员 | | POST | `/review/submit` | 提交内容审核(AI 初审) | 登录 | | GET | `/stats/overview` | 看板统计概览 | 管理员 | | GET / PUT | `/config` | 系统配置读取 / 保存 | 管理员 | | POST | `/files/extract` | 上传文件提取文字(上限 10MB) | 登录 | | GET | `/health` | 健康检查 | 公开 | ## Docker 部署(后端) ```bash cd backend docker build -t ai-review-backend . docker run -d -p 8000:8000 -v review-data:/data ai-review-backend ``` 前端构建产物为纯静态文件(`base: './'`),可部署到任意静态托管。 ## 审核判定规则 三段式阈值(默认值,可在管理端「管理配置」页修改): | 阈值 | 默认值 | 判定 | | --- | --- | --- | | `blockThreshold` | 0.93 | 命中置信度 ≥ 该值 → 拦截 | | `reviewThreshold` | 0.80 | ≥ 该值 → 待人工复核 | | `autoPassThreshold` | 0.60 | 低于该值的弱命中与无命中 → 自动通过上线 | ## 项目文档 - 管理端前端说明:`frontend/README.md` - 接口文档:启动后端后访问 `/docs`(Swagger UI)