一个基于大语言模型(VLM)的多模态内容审核 Agent 系统,能够自动化审核图像、视频、文本等用户生成内容,精准识别违规信息,并支持可配置策略与人机协同,大幅降低人工审核成本。
| 视频检测 |
策略配置 |
 |
 |
在海量 UGC(用户生成内容)场景下,传统人工审核面临效率低、成本高、覆盖不全等挑战。本项目构建了一套 端到端的智能审核 Agent 流水线:
- 内容理解:Agent 接收待审内容(图片 / 视频 / 文本),调用多模态大模型提取关键信息和潜在风险点。
- 策略判断:将模型分析结果输入规则引擎,结合 FAISS 语义向量检索匹配平台预设的审核策略,进行风险判定。
- 处置与上报:根据判定结果自动执行 拦截(block)、放行(pass) 或 标记为待人工复核(review),全程记录 Agent 执行日志,前端实时可视化展示。
| 功能 |
说明 |
| 多模态违规识别 |
支持图片、视频、文本三种内容类型,通过 VLM 大模型统一理解与风险分析 |
| 可配置审核策略 |
运营人员可在管理后台灵活创建、编辑、删除审核策略与规则,策略变更后自动重建向量索引 |
| 人机协同审核 |
高置信度内容自动处置,灰度区间内容推送人工复核,复核结果可反馈回系统 |
| 批量审核 |
支持一次选择多个文件(图片/视频/文本混合),系统自动识别类型,每个文件独立审核,以批次为整体查看进度和汇总结果 |
| Agent 执行可视化 |
提交内容后实时展示 Agent 各阶段处理过程(模型调用 → 策略匹配 → 最终决策) |
| 数据看板 |
审核总量、通过率 / 拒绝率、每日趋势、违规类型分布等统计一目了然 |
- Python 3.10(推荐使用 conda 虚拟环境,避免系统 Python 兼容问题)
- Node.js 18+
- npm 或 pnpm
注意: 前端 npm install 如遇 404 报错,请先切换到官方源:npm config set registry https://registry.npmjs.org/
git clone <your-repo-url>
cd PolySafe
cd backend
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑 .env,填入你的豆包 Ark API Key
# ARK_API_KEY=your_api_key_here
# 初始化种子数据(12 个审核策略 + 30 条规则)
python seed_data.py
# 启动服务
python -m uvicorn app.main:app --reload --port 8000
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev
前端默认运行在 http://localhost:5173,已配置 Vite 代理自动将 /api 请求转发到后端 http://127.0.0.1:8000。
| 技术 |
版本 |
用途 |
| FastAPI |
0.115.0 |
Web 框架,提供 RESTful API |
| SQLAlchemy |
2.0.35 |
ORM,管理 Task / Policy / Rule 三张表 |
| SQLite |
— |
轻量级数据库,开箱即用 |
| 豆包 Ark API |
— |
字节跳动多模态大模型(VLM),支持图片 / 视频 / 文本理解 |
| FAISS |
1.8.0 |
Meta 开源向量检索库,用于审核规则的语义匹配 |
| sentence-transformers |
3.1.1 |
文本向量化模型(paraphrase-multilingual-MiniLM-L12-v2) |
| httpx |
0.27.2 |
异步 HTTP 客户端,调用外部模型 API |
| Pydantic Settings |
2.5.2 |
配置管理,支持 .env 文件 |
| PyPDF2 |
3.0.1 |
PDF 文件文本提取(批量审核) |
| python-docx |
1.1.2 |
DOCX 文件文本提取(批量审核) |
| 技术 |
版本 |
用途 |
| React |
18.3 |
UI 框架 |
| TypeScript |
5.6 |
类型安全 |
| Vite |
5.4 |
构建工具 + 开发代理 |
| Tailwind CSS |
3.4 |
原子化 CSS |
| shadcn/ui (Radix UI) |
— |
组件库 |
| Recharts |
2.15 |
数据可视化图表 |
| Axios |
1.13 |
HTTP 请求 |
| React Router |
6.30 |
客户端路由 |
┌──────────────────────────────────────────────────────┐
│ 前端 React + Vite + Tailwind │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │ 数据看板 │ 审核任务 │ 内容提交 │ 策略管理 │ │
│ │ │(含批次) │(单个/批量)│ │ │
│ └──────────┴──────────┴──────────┴──────────┘ │
│ Axios → /api (Vite Proxy) │
└────────────────────────┬─────────────────────────────┘
│
┌────────────────────────▼─────────────────────────────┐
│ 后端 FastAPI + SQLAlchemy │
│ │
│ ┌────────────┐ ┌───────────────┐ ┌─────────────┐ │
│ │task_service │→│doubao_service │→│ 豆包 Ark API │ │
│ │ (任务编排) │ │ (多模态 VLM) │ │ (大模型) │ │
│ │ │→│ rule_engine │→│faiss_service │ │
│ │ │ │ (决策引擎) │ │ (向量检索) │ │
│ └────────────┘ └───────────────┘ └─────────────┘ │
│ ┌────────────┐ ┌───────────────┐ │
│ │ batches │→│ file_extract │ PDF/DOCX/TXT/ │
│ │ (批量编排) │ │ (文件解析) │ MD/CSV/JSON │
│ └────────────┘ └───────────────┘ │
│ │
│ 数据库: SQLite (tasks, batches, policies, rules) │
│ 向量索引: FAISS + sentence-transformers │
└──────────────────────────────────────────────────────┘
用户提交内容(单个或批量)
│
├── 单个提交:直接创建 1 个 Task
│
├── 批量提交:创建 1 个 Batch + N 个 Task(自动识别文件类型)
│ 文本文件(pdf/docx/txt/md/csv/json) → 提取文本内容
│ 图片/视频 → 保存文件并记录路径
│
▼ (每个 Task 独立执行以下流程)
┌─────────────────┐
│ 1. 内容理解 │ 调用豆包 VLM 多模态大模型
│ Agent 分析 │ → 返回 {violation_detected, violation_types, confidence, risk_description}
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. 策略判断 │ FAISS 语义检索匹配最相关的审核规则
│ 规则引擎 │ 综合 AI 置信度 + 规则匹配结果
└────────┬────────┘
│
▼
┌─────────────────┐
│ 3. 处置与上报 │ confidence ≥ 0.8 → block(拦截)
│ 自动决策 │ confidence ≤ 0.3 → pass(放行)
│ │ 其他情况 → review(人工复核)
└─────────────────┘
- 打开
http://localhost:5173,进入 内容提交 页面
- 选择内容类型为「图片」
- 点击上传区域或拖拽图片文件
- 点击「提交审核」
- 页面将实时展示 Agent 执行时间线:
- 任务创建 → 开始处理 → 模型识别(调用 VLM 分析图片内容)→ 策略匹配(FAISS 检索相关规则)→ 最终决策
- 最终显示审核结果:置信度、违规类型、风险描述、命中的策略规则
- 进入 内容提交 页面,切换到「批量提交」Tab
- 点击上传区域或拖拽多个文件(支持图片、视频、文本混合)
- 支持的文件类型:
.jpg .png .gif .webp(图片)、.mp4 .avi .mov .mkv(视频)、.txt .md .pdf .docx .csv .json(文本)
- 在文件列表中确认待审文件,可逐个删除不需要的文件
- 可选填写批次名称(默认自动生成)
- 点击「提交批量审核」,系统自动为每个文件创建独立审核任务并行处理
- 页面实时展示批次进度:
- 整体进度条(已完成 / 总数)
- 汇总徽章:✅ 通过数、🚫 拦截数、👁 待复核数、❌ 失败数
- 子任务表格:每个文件的审核状态、违规类型、置信度
- 在 审核任务 页面可看到批次行(可展开/收起),展开后查看每个子任务详情
- 选择内容类型为「文本」
- 在输入框中输入待审核的文本内容
- 点击「提交审核」,查看 Agent 审核过程与结果
- 进入 策略管理 页面
- 点击「新建策略」,填写策略名称和描述
- 添加规则:设置规则名称、违规类型(色情 / 暴力 / 仇恨言论等)、处置动作(拦截 / 复核)
- 保存后系统自动重建 FAISS 向量索引,新策略立即生效
- 进入 审核任务 页面,筛选状态为「待复核」的任务
- 点击「查看」打开任务详情
- 查看 AI 分析结果、Agent 处理日志和命中规则
- 点击「通过」或「拒绝」完成人工复核
进入 数据看板 页面,可查看:
- 审核总量、通过率、拒绝率、待复核数量
- 近 7 天审核趋势折线图
- 违规类型分布饼图
- 最近审核记录
PolySafe/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI 入口
│ │ ├── config.py # 配置管理
│ │ ├── database.py # 数据库连接
│ │ ├── models.py # ORM 模型(Task / Batch / Policy / Rule)
│ │ ├── schemas.py # Pydantic Schema
│ │ ├── routers/
│ │ │ ├── tasks.py # 任务 API
│ │ │ ├── batches.py # 批量任务 API
│ │ │ ├── policies.py # 策略 API
│ │ │ └── dashboard.py # 看板 API
│ │ └── services/
│ │ ├── doubao_service.py # 豆包大模型调用
│ │ ├── faiss_service.py # FAISS 向量检索
│ │ ├── file_extract.py # 文件类型检测与文本提取
│ │ ├── rule_engine.py # 规则引擎
│ │ └── task_service.py # 任务编排
│ ├── seed_data.py # 种子数据(12 策略 + 30 规则)
│ ├── requirements.txt
│ └── .env.example
├── frontend/
│ └── src/
│ ├── App.tsx # 路由定义
│ ├── components/
│ │ └── Layout.tsx # 全局布局
│ ├── pages/
│ │ ├── DashboardPage.tsx # 数据看板
│ │ ├── TaskListPage.tsx # 审核任务
│ │ ├── SubmitPage.tsx # 内容提交
│ │ └── PolicyPage.tsx # 策略管理
│ ├── lib/api.ts # API 封装
│ └── types/index.ts # 类型定义
└── README.md
| 变量 |
说明 |
默认值 |
ARK_API_KEY |
豆包 Ark API 密钥 |
(必填) |
ARK_MODEL_ID |
豆包模型端点 ID |
your_model_id_here |
ARK_BASE_URL |
Ark API 基础地址 |
https://ark.cn-beijing.volces.com/api/v3(示例值,请以官方文档为准) |