欢迎阅读DataMate的官方文档。在这里,您将找到有关我们项目的详细信息、使用指南和技术资源,帮助您更好地理解和使用我们的产品。无论您是新手还是有经验的用户,我们的文档都旨在为您提供所需的信息和支持。请随时浏览各个章节,发现更多内容!
1 - 概述
DataMate 是一个企业级的大模型数据处理平台,专为模型微调和 RAG 检索设计。平台提供数据采集、数据管理、数据清洗、数据标注、数据合成、数据评估、知识库管理等核心功能,支持可视化流水线编排,帮助企业和开发者高效构建高质量训练数据。
产品定位
DataMate 致力于解决大模型落地过程中的数据痛点,提供一站式数据治理解决方案:
- 全流程覆盖:从数据采集到数据评估,覆盖数据处理全生命周期
- 企业级能力:支持千万级数据并发处理,提供私有化部署方案
- 灵活扩展:内置丰富的数据处理算子,支持自定义算子开发
- 可视化编排:拖拽式流水线设计,无需编码即可完成复杂的数据处理流程
核心功能
数据采集
- 基于 DataX 的异构数据源采集能力
- 支持关系型数据库、NoSQL、文件系统等多种数据源
- 灵活的任务配置和监控机制
数据管理
- 统一的数据集管理,支持图像、文本、音频、视频、多模态等多种数据类型
- 提供文件上传、下载、预览等完整的数据操作能力
- 支持标签和元数据管理,便于数据组织和检索
数据清洗
- 内置丰富的数据清洗算子
- 可视化清洗模板配置
- 支持批处理和流式处理模式
数据标注
- 集成 Label Studio 提供专业标注能力
- 支持图像分类、目标检测、文本分类等多种标注类型
- 提供标注审核和质量控制机制
数据合成
- 基于大模型的数据增强和合成能力
- 支持指令模板管理和自定义
- 提供比例合成任务,满足多样化数据需求
数据评估
- 多维度数据质量评估指标
- 支持自动评估和手动评估
- 生成详细的评估报告
知识库管理(RAG)
- 支持多种文档格式的知识库构建
- 自动化文本切分和向量化
- 集成向量检索能力,支持 RAG 应用
算子市场
- 丰富的内置数据处理算子
- 支持算子发布和共享
- 提供自定义算子开发能力
流水线编排
- 可视化拖拽式流程设计
- 支持多种节点类型和配置
- 提供流程执行监控和调试能力
Agent 对话
- 集成大模型对话能力
- 支持知识库问答
- 提供对话历史管理
技术架构
整体架构
DataMate 采用微服务架构,核心组件包括:
- 前端:React 18 + TypeScript + Ant Design + Tailwind CSS
- 后端:Java 21 + Spring Boot 3.5.6 + Spring Cloud + MyBatis Plus
- 运行时:Python FastAPI + LangChain + Ray
- 数据库:PostgreSQL + Redis + Milvus + MinIO
微服务组件
- API Gateway (8080):统一入口,负责路由和认证
- Main Application:核心业务逻辑
- Data Management Service (8092):数据集管理
- Data Collection Service:数据采集任务管理
- Data Cleaning Service:数据清洗任务管理
- Data Annotation Service:数据标注任务管理
- Data Synthesis Service:数据合成任务管理
- Data Evaluation Service:数据评估任务管理
- Operator Market Service:算子市场管理
- RAG Indexer Service:知识库索引服务
- Runtime Service (8081):算子执行引擎
- Backend Python Service (18000):Python 后端服务
应用场景
模型微调
- 训练数据清洗和质量提升
- 数据增强和合成
- 训练数据评估
RAG 应用
- 企业知识库构建
- 文档向量化索引
- 语义检索和问答
数据治理
- 多源数据统一管理
- 数据血缘追踪
- 数据质量监控
部署方式
DataMate 支持多种部署方式:
- Docker Compose:快速体验和开发测试
- Kubernetes/Helm:生产环境部署
- 离线部署:支持内网环境部署
与其他产品的对比
| 特性 | DataMate | Label Studio | DocArray |
|---|---|---|---|
| 数据管理 | ✅ 完整的数据集管理 | ❌ 仅标注数据 | ❌ 仅文档数据 |
| 数据采集 | ✅ 支持 DataX | ❌ 不支持 | ❌ 不支持 |
| 数据清洗 | ✅ 内置丰富算子 | ❌ 不支持 | ❌ 不支持 |
| 数据标注 | ✅ 集成 Label Studio | ✅ 专业标注工具 | ❌ 不支持 |
| 数据合成 | ✅ 基于大模型 | ❌ 不支持 | ❌ 不支持 |
| 数据评估 | ✅ 多维度评估 | ⚠️ 基础评估 | ❌ 不支持 |
| 知识库 | ✅ RAG 集成 | ❌ 不支持 | ⚠️ 需要额外开发 |
| 流水线编排 | ✅ 可视化编排 | ❌ 不支持 | ❌ 不支持 |
| 算子扩展 | ✅ 支持自定义 | ⚠️ 有限支持 | ⚠️ 需要编程 |
| 开源协议 | ✅ MIT | ✅ Apache 2.0 | ✅ MIT |
下一步
2 - 快速开始
本指南将帮助您在 5 分钟内快速部署 DataMate 平台。
DataMate 支持两种主要的部署方式:
- Docker Compose:适合快速体验、开发测试环境
- Kubernetes/Helm:适合生产环境部署
前置条件
Docker Compose 部署
- Docker 20.10+
- Docker Compose 2.0+
- 至少 4GB 内存
- 至少 10GB 磁盘空间
Kubernetes 部署
- Kubernetes 1.20+
- Helm 3.0+
- kubectl 配置好集群连接
- 至少 8GB 内存
- 至少 20GB 磁盘空间
5 分钟快速部署(Docker Compose)
1. 拉取代码
git clone https://github.com/ModelEngine-Group/DataMate.git
cd DataMate
2. 启动服务
使用提供的 Makefile 进行一键部署:
make install
执行命令后,系统会提示选择部署方式:
Choose a deployment method:
1. Docker/Docker-Compose
2. Kubernetes/Helm
Enter choice:
输入 1 选择 Docker Compose 部署。
3. 验证部署
服务启动后,可以通过以下方式访问:
- 前端界面:http://localhost:30000
- API 网关:http://localhost:8080
- 数据库:localhost:5432
4. 查看服务状态
docker ps
您应该能看到以下容器在运行:
- datamate-frontend (前端服务)
- datamate-backend (后端服务)
- datamate-backend-python (Python 后端服务)
- datamate-gateway (API 网关)
- datamate-database (PostgreSQL 数据库)
- datamate-runtime (算子运行时)
可选组件安装
安装 Milvus 向量数据库
Milvus 用于知识库的向量存储和检索:
make install-milvus
选择 Docker Compose 部署方式。
安装 Label Studio 标注工具
Label Studio 用于数据标注功能:
make install-label-studio
访问地址:http://localhost:30001
默认账号:
- 用户名:admin@demo.com
- 密码:demoadmin
安装 MinerU PDF 处理服务
MinerU 用于增强 PDF 文档处理能力:
make build-mineru
make install-mineru
安装 DeerFlow 服务
DeerFlow 用于工作流编排增强功能:
make install-deer-flow
使用本地镜像开发
如果您修改了本地代码,可以使用本地镜像进行部署:
make build
make install dev=true
离线环境部署
对于离线环境,可以预先下载所有镜像:
make download SAVE=true
镜像将保存在 dist/ 目录下。在目标机器上加载镜像:
make load-images
卸载
卸载 DataMate
make uninstall
系统会提示是否删除数据卷:
- 选择
1:删除所有数据(包括数据集、配置等) - 选择
2:保留数据卷
仅卸载特定组件
# 卸载 Label Studio
make uninstall-label-studio
# 卸载 Milvus
make uninstall-milvus
# 卸载 DeerFlow
make uninstall-deer-flow
下一步
常见问题
Q: 服务启动失败怎么办?
A: 首先检查端口是否被占用:
# 检查端口占用
lsof -i :30000
lsof -i :8080
如果端口被占用,可以修改 deployment/docker/datamate/docker-compose.yml 中的端口映射。
Q: 如何查看服务日志?
# 查看所有服务日志
docker compose -f deployment/docker/datamate/docker-compose.yml logs
# 查看特定服务日志
docker compose -f deployment/docker/datamate/docker-compose.yml logs -f datamate-backend
Q: 数据存储在哪里?
数据通过 Docker 卷进行持久化存储:
datamate-dataset-volume:数据集文件datamate-postgresql-volume:数据库数据datamate-log-volume:日志文件
可以使用以下命令查看所有卷:
docker volume ls | grep datamate
2.1 - 安装部署指南
本文档提供 DataMate 平台的详细安装和配置说明。
系统要求
最低配置
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核+ |
| 内存 | 8 GB | 16 GB+ |
| 磁盘 | 50 GB | 100 GB+ |
| 操作系统 | Linux/macOS/Windows | Linux (Ubuntu 20.04+) |
软件依赖
Docker Compose 部署
- Docker 20.10+
- Docker Compose 2.0+
- Git (可选,用于克隆代码)
- Make (可选,用于使用 Makefile)
Kubernetes 部署
- Kubernetes 1.20+
- Helm 3.0+
- kubectl (与集群版本匹配)
- Git (可选,用于克隆代码)
- Make (可选,使用 Makefile)
部署方式对比
| 特性 | Docker Compose | Kubernetes |
|---|---|---|
| 部署难度 | ⭐ 简单 | ⭐⭐⭐ 复杂 |
| 资源利用 | ⭐⭐ 一般 | ⭐⭐⭐⭐ 高 |
| 高可用 | ❌ 不支持 | ✅ 支持 |
| 扩展性 | ⭐⭐ 一般 | ⭐⭐⭐⭐ 强 |
| 适用场景 | 开发测试、小规模部署 | 生产环境、大规模部署 |
Docker Compose 部署
基础部署
1. 准备工作
# 克隆代码仓库
git clone https://github.com/ModelEngine-Group/DataMate.git
cd DataMate
# 检查 Docker 和 Docker Compose 版本
docker --version
docker compose version
2. 使用 Makefile 部署
# 一键部署(包括 Milvus)
make install
在提示中选择 1. Docker/Docker-Compose。
3. 直接使用 Docker Compose
如果没有安装 Make,可以直接使用 Docker Compose:
# 设置镜像仓库(可选)
export REGISTRY=ghcr.io/modelengine-group/
# 启动基础服务
docker compose -f deployment/docker/datamate/docker-compose.yml --profile milvus up -d
4. 验证部署
# 检查容器状态
docker ps
# 查看服务日志
docker compose -f deployment/docker/datamate/docker-compose.yml logs -f
# 访问前端界面
open http://localhost:30000
可选组件部署
Milvus 向量数据库
Milvus 用于知识库的向量存储和检索。
# 使用 Makefile
make install-milvus
# 或使用 Docker Compose
docker compose -f deployment/docker/datamate/docker-compose.yml --profile milvus up -d
组件包括:
- milvus-standalone (19530, 9091)
- milvus-minio (9000, 9001)
- milvus-etcd
Label Studio 标注工具
# 使用 Makefile
make install-label-studio
# 或使用 Docker Compose
docker compose -f deployment/docker/datamate/docker-compose.yml --profile label-studio up -d
访问地址:http://localhost:30001
默认账号:
- 用户名:admin@demo.com
- 密码:demoadmin
MinerU PDF 处理服务
MinerU 提供增强的 PDF 文档解析能力,支持 NPU 加速。
# 构建 MinerU 镜像
make build-mineru
# 部署 MinerU
make install-mineru
支持的平台:
- mineru (默认,910B)
- mineru-910C
- mineru-310P
DeerFlow 工作流服务
# 使用 Makefile
make install-deer-flow
# 或使用 Docker Compose
docker compose -f deployment/docker/datamate/docker-compose.yml --profile deer-flow up -d
Redis 缓存
# 使用 Makefile
make install-redis
# 或使用 Docker Compose
docker compose -f deployment/docker/datamate/docker-compose.yml --profile redis up -d
环境变量配置
可以在 deployment/docker/datamate/docker-compose.yml 中配置以下环境变量:
| 变量名 | 默认值 | 说明 |
|---|---|---|
DB_PASSWORD | password | 数据库密码 |
DATAMATE_JWT_ENABLE | false | 是否启用 JWT 认证 |
REGISTRY | ghcr.io/modelengine-group/ | 镜像仓库地址 |
VERSION | latest | 镜像版本 |
LABEL_STUDIO_HOST | - | Label Studio 访问地址 |
数据卷管理
DataMate 使用以下 Docker 卷进行数据持久化:
# 查看所有卷
docker volume ls | grep datamate
# 查看卷详情
docker volume inspect datamate-dataset-volume
# 备份卷数据
docker run --rm -v datamate-dataset-volume:/data -v $(pwd):/backup \
ubuntu tar czf /backup/dataset-backup.tar.gz /data
# 恢复卷数据
docker run --rm -v datamate-dataset-volume:/data -v $(pwd):/backup \
ubuntu tar xzf /backup/dataset-backup.tar.gz -C /
Kubernetes/Helm 部署
前置准备
# 检查集群连接
kubectl cluster-info
kubectl get nodes
# 检查 Helm 版本
helm version
# 创建命名空间(可选)
kubectl create namespace datamate
使用 Makefile 部署
# 部署 DataMate
make install INSTALLER=k8s
# 或直接部署到指定命名空间
make install NAMESPACE=datamate INSTALLER=k8s
使用 Helm 部署
1. 部署基础服务
# 添加 Helm 仓库(如果需要)
# helm repo add datamate https://charts.datamate.io
# 部署 DataMate
helm upgrade datamate deployment/helm/datamate/ \
--install \
--namespace datamate \
--create-namespace \
--set global.image.repository=ghcr.io/modelengine-group/
# 查看部署状态
kubectl get pods -n datamate
2. 配置 Ingress(可选)
# 编辑 values.yaml
cat >> deployment/helm/datamate/values.yaml << EOF
ingress:
enabled: true
className: nginx
hosts:
- host: datamate.example.com
paths:
- path: /
pathType: Prefix
EOF
# 重新部署
helm upgrade datamate deployment/helm/datamate/ \
--namespace datamate \
-f deployment/helm/datamate/values.yaml
3. 部署可选组件
# 部署 Milvus
helm upgrade milvus deployment/helm/milvus \
--install \
--namespace datamate
# 部署 Label Studio
helm upgrade label-studio deployment/helm/label-studio/ \
--install \
--namespace datamate
# 部署 DeerFlow
helm upgrade deer-flow deployment/helm/deer-flow \
--install \
--namespace datamate \
--set global.image.repository=ghcr.io/modelengine-group/
Helm 配置选项
主要配置项(deployment/helm/datamate/values.yaml):
# 镜像配置
global:
image:
repository: ghcr.io/modelengine-group/
pullPolicy: IfNotPresent
tag: latest
# 服务配置
services:
frontend:
port: 30000
gateway:
port: 8080
backend:
port: 8092
# 资源配置
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"
# 存储配置
persistence:
enabled: true
storageClass: standard
size: 50Gi
查看日志和调试
# 查看 Pod 状态
kubectl get pods -n datamate
# 查看服务日志
kubectl logs -f deployment/datamate-backend -n datamate
# 查看所有资源
kubectl get all -n datamate
# 端口转发进行本地调试
kubectl port-forward svc/datamate-gateway 8080:8080 -n datamate
离线环境部署
准备离线镜像包
1. 下载镜像
# 下载所有镜像到本地
make download SAVE=true
# 下载指定版本
make download VERSION=v1.0.0 SAVE=true
# 指定平台下载
make download PLATFORM=linux/amd64 SAVE=true
镜像将保存在 dist/ 目录。
2. 打包传输
# 打包
tar czf datamate-images.tar.gz dist/
# 传输到目标服务器
scp datamate-images.tar.gz user@target-server:/tmp/
离线安装
1. 加载镜像
# 在目标服务器上解压
tar xzf datamate-images.tar.gz
# 加载所有镜像
make load-images
# 或手动加载
for img in dist/*.tar; do
docker load -i $img
done
2. 修改配置
使用本地镜像时,设置 REGISTRY 为空:
# Docker Compose 部署
REGISTRY= docker compose -f deployment/docker/datamate/docker-compose.yml up -d
# 或使用 Makefile
make install dev=true
3. 离线依赖
某些组件可能需要额外的离线资源:
- Python 包:预装在运行时镜像中
- Node 包:预装在前端镜像中
- Java 包:预装在后端镜像中
升级指南
Docker Compose 升级
# 1. 备份数据
docker run --rm -v datamate-postgresql-volume:/data -v $(pwd):/backup \
ubuntu tar czf /backup/postgres-backup.tar.gz /data
# 2. 拉取新镜像
docker pull ghcr.io/modelengine-group/datamate-backend:latest
docker pull ghcr.io/modelengine-group/datamate-frontend:latest
# ... 其他镜像
# 3. 停止服务
docker compose -f deployment/docker/datamate/docker-compose.yml down
# 4. 启动新版本
docker compose -f deployment/docker/datamate/docker-compose.yml up -d
# 5. 验证升级
docker ps
docker logs -f datamate-backend
或使用 Makefile:
make datamate-docker-upgrade
Kubernetes 升级
# 1. 备份数据
kubectl exec -n datamate deployment/datamate-database -- \
pg_dump -U postgres datamate > backup.sql
# 2. 更新 Helm Chart
helm upgrade datamate deployment/helm/datamate/ \
--namespace datamate \
--set global.image.tag=new-version
# 3. 监控升级状态
kubectl rollout status deployment/datamate-backend -n datamate
# 4. 查看新 Pod 状态
kubectl get pods -n datamate
卸载
Docker Compose 完全卸载
# 使用 Makefile
make uninstall
# 选择删除数据卷以完全清理
或手动卸载:
# 停止并删除容器
docker compose -f deployment/docker/datamate/docker-compose.yml --profile milvus --profile label-studio down -v
# 删除所有卷
docker volume rm datamate-dataset-volume \
datamate-postgresql-volume \
datamate-log-volume \
# ... 其他卷
# 删除网络
docker network rm datamate-network
Kubernetes 完全卸载
# 卸载所有组件
make uninstall INSTALLER=k8s
# 或使用 Helm
helm uninstall datamate -n datamate
helm uninstall milvus -n datamate
helm uninstall label-studio -n datamate
helm uninstall deer-flow -n datamate
# 删除命名空间
kubectl delete namespace datamate
# 删除 PV/PVC(根据存储类)
kubectl delete pvc -n datamate --all
故障排查
常见问题
1. 服务无法启动
# 检查端口占用
netstat -tlnp | grep -E '30000|8080|5432'
# 检查磁盘空间
df -h
# 检查内存使用
free -h
# 查看详细日志
docker logs datamate-backend --tail 100
2. 数据库连接失败
# 检查数据库容器
docker ps | grep database
# 测试数据库连接
docker exec -it datamate-database psql -U postgres -d datamate
# 检查数据库日志
docker logs datamate-database
3. 前端无法访问后端
# 检查网关配置
docker logs datamate-gateway
# 检查网络连接
docker network inspect datamate-network
# 测试 API 连接
curl http://localhost:8080/api/v1/health
4. Milvus 连接失败
# 检查 Milvus 状态
docker logs milvus-standalone
# 检查依赖服务
docker logs milvus-etcd
docker logs milvus-minio
# 测试 Milvus 连接
curl http://localhost:19530/healthz
日志位置
| 服务 | 日志位置 |
|---|---|
| 前端 | /var/log/datamate/frontend |
| 后端 | /var/log/datamate |
| 数据库 | /var/log/datamate/database |
| Ray 运行时 | /tmp/ray |
获取帮助
如果遇到问题:
- 查看 故障排查文档
- 搜索 GitHub Issues
- 提交新的 Issue 并附上详细的错误日志
2.2 - 系统架构
本文档详细介绍 DataMate 的系统架构、技术栈和设计理念。
整体架构
DataMate 采用微服务架构,将系统拆分为多个独立的服务,每个服务负责特定的业务功能。这种架构提供了良好的可扩展性、可维护性和容错性。
┌─────────────────────────────────────────────────────────────────┐
│ 前端层 │
│ (React + TypeScript) │
│ Ant Design + Tailwind │
└────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ API 网关层 │
│ (Spring Cloud Gateway) │
│ 端口: 8080 │
└────────────────────────┬────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Java 后端 │ │ Python 后端 │ │ 运行时服务 │
│ 服务组 │ │ 服务 │ │ (Ray) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│· Main App │ │· RAG Service │ │· Operator │
│· Data Mgmt │ │· LangChain │ │ Execution │
│· Collection │ │· FastAPI │ │ │
│· Cleaning │ │ │ │ │
│· Annotation │ │ │ │ │
│· Synthesis │ │ │ │ │
│· Evaluation │ │ │ │ │
│· Operator │ │ │ │ │
│· Pipeline │ │ │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└────────────────┼────────────────┘
▼
┌──────────────┴──────────────┐
│ │
┌────▼────┐ ┌─────────┐ ┌─────▼────┐
│PostgreSQL│ │ Redis │ │ Milvus │
│ (5432) │ │ (6379) │ │ (19530) │
└──────────┘ └─────────┘ └──────────┘
│
┌─────▼─────┐
│ MinIO │
│ (9000) │
└───────────┘
技术栈
前端技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 18.x | UI 框架 |
| TypeScript | 5.x | 类型安全 |
| Ant Design | 5.x | UI 组件库 |
| Tailwind CSS | 3.x | 样式框架 |
| Redux Toolkit | 2.x | 状态管理 |
| React Router | 6.x | 路由管理 |
| Vite | 5.x | 构建工具 |
后端技术栈(Java)
| 技术 | 版本 | 用途 |
|---|---|---|
| Java | 21 | 运行时环境 |
| Spring Boot | 3.5.6 | 应用框架 |
| Spring Cloud | 2023.x | 微服务框架 |
| MyBatis Plus | 3.x | ORM 框架 |
| PostgreSQL Driver | 42.x | 数据库驱动 |
| Redis | 5.x | 缓存客户端 |
| MinIO | 8.x | 对象存储客户端 |
后端技术栈(Python)
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | 3.11+ | 运行时环境 |
| FastAPI | 0.100+ | Web 框架 |
| LangChain | 0.1+ | LLM 应用框架 |
| Ray | 2.x | 分布式计算 |
| Pydantic | 2.x | 数据验证 |
数据存储
| 技术 | 版本 | 用途 |
|---|---|---|
| PostgreSQL | 15+ | 主数据库 |
| Redis | 8.x | 缓存和消息队列 |
| Milvus | 2.6.5 | 向量数据库 |
| MinIO | RELEASE.2024+ | 对象存储 |
微服务架构
服务列表
| 服务名称 | 端口 | 技术栈 | 功能描述 |
|---|---|---|---|
| API Gateway | 8080 | Spring Cloud Gateway | 统一入口、路由、认证 |
| Frontend | 30000 | React | 前端界面 |
| Main Application | - | Spring Boot | 核心业务逻辑 |
| Data Management Service | 8092 | Spring Boot | 数据集管理 |
| Data Collection Service | - | Spring Boot | 数据采集任务 |
| Data Cleaning Service | - | Spring Boot | 数据清洗任务 |
| Data Annotation Service | - | Spring Boot | 数据标注任务 |
| Data Synthesis Service | - | Spring Boot | 数据合成任务 |
| Data Evaluation Service | - | Spring Boot | 数据评估任务 |
| Operator Market Service | - | Spring Boot | 算子市场 |
| RAG Indexer Service | - | Spring Boot | 知识库索引 |
| Runtime Service | 8081 | Python + Ray | 算子执行引擎 |
| Backend Python Service | 18000 | FastAPI | Python 后端服务 |
| Database | 5432 | PostgreSQL | 数据库 |
服务通信
同步通信
- API Gateway → 后端服务:HTTP/REST
- 前端 → API Gateway:HTTP/REST
- 后端服务之间:HTTP/REST (Feign Client)
异步通信
- 任务执行:通过数据库任务队列
- 事件通知:Redis Pub/Sub
服务发现与注册
DataMate 使用简单的服务注册机制:
- 服务启动时向数据库注册
- API Gateway 从数据库获取服务列表
- 支持服务的动态扩缩容
数据架构
数据流转
┌─────────────┐
│ 数据采集 │ 采集任务配置
│ Collection │ → DataX → 原始数据
└──────┬──────┘
│
▼
┌─────────────┐
│ 数据管理 │ 数据集管理、文件上传
│ Management │ → 结构化存储
└──────┬──────┘
│
├──────────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 数据清洗 │ │ 知识库 │
│ Cleaning │ │ Knowledge │
│ │ │ Base │
└──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 数据标注 │ │ 向量索引 │
│ Annotation │ │ Milvus │
└──────┬──────┘ └──────┬──────┘
│ │
▼ │
┌─────────────┐ │
│ 数据合成 │ │
│ Synthesis │ │
└──────┬──────┘ │
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 数据评估 │ │ RAG 检索 │
│ Evaluation │ │ Retrieval │
└─────────────┘ └─────────────┘
数据存储模型
PostgreSQL
- 业务数据:用户、数据集、任务、配置
- 关系数据:服务间的关联关系
- 事务数据:需要强一致性的数据
Redis
- 缓存数据:热点数据缓存
- 会话数据:用户会话信息
- 任务队列:异步任务队列
Milvus
- 向量数据:文档向量 embeddings
- 向量索引:高效的相似度搜索
MinIO
- 文件存储:原始文件、处理结果
- 大数据文件:不适合数据库存储的文件
部署架构
Docker Compose 部署
┌────────────────────────────────────────────────┐
│ Docker Network │
│ datamate-network │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Frontend │ │ Gateway │ │ Backend │ │
│ │ :30000 │ │ :8080 │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Backend │ │ Runtime │ │Database │ │
│ │ Python │ │ :8081 │ │ :5432 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Milvus │ │ MinIO │ │ etcd │ │
│ │ :19530 │ │ :9000 │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└────────────────────────────────────────────────┘
Kubernetes 部署
┌────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ Namespace: datamate │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ Deployment │ │ Deployment │ │
│ │ Frontend │ │ Gateway │ │
│ │ (3 Pods) │ │ (2 Pods) │ │
│ └─────┬──────┘ └─────┬──────┘ │
│ │ │ │
│ ┌─────▼────────────────▼──────┐ │
│ │ Service (LoadBalancer) │ │
│ └──────────────────────────────┘ │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ StatefulSet│ │ Deployment │ │
│ │ Database │ │ Backend │ │
│ └────────────┘ └────────────┘ │
└────────────────────────────────────────────────┘
安全架构
认证与授权
JWT 认证(可选)
datamate:
jwt:
enable: true # 启用 JWT 认证
secret: your-secret-key
expiration: 86400 # 24 小时
API Key 认证
datamate:
api-key:
enable: false
数据安全
传输加密
- API Gateway 支持 HTTPS/TLS
- 内部服务通信可配置加密
存储加密
- 数据库支持透明数据加密 (TDE)
- MinIO 支持服务端加密
- Milvus 支持加密存储
网络隔离
- Docker Network 隔离
- Kubernetes Network Policy
- VPC 隔离(云环境)
访问控制
基于角色的访问控制 (RBAC)
- 管理员:所有权限
- 数据管理员:数据管理权限
- 标注员:标注权限
- 查看者:只读权限
数据权限
- 数据集级权限控制
- 文件级权限控制
- 任务级权限控制
扩展性设计
水平扩展
无状态服务
- 前端:支持多副本
- Gateway:支持多副本
- Backend 服务:支持多副本
有状态服务
- 数据库:主从复制、分库分表
- Milvus:分布式部署
- MinIO:分布式纠删码
垂直扩展
资源配置
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "2000m"
缓存策略
多级缓存
- 浏览器缓存:静态资源
- CDN 缓存:公共资源
- Redis 缓存:热点数据
- 数据库缓存:查询缓存
监控与可观测性
日志管理
日志级别
- DEBUG:详细调试信息
- INFO:一般信息
- WARN:警告信息
- ERROR:错误信息
日志存储
/var/log/datamate/
├── frontend/
├── backend/
├── database/
└── runtime/
性能监控
指标收集
- JVM 指标
- HTTP 指标
- 数据库指标
- 自定义业务指标
监控工具(可选)
- Prometheus + Grafana
- ELK Stack (Elasticsearch + Logstash + Kibana)
高可用设计
服务高可用
健康检查
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
自动重启
- Docker restart policy
- Kubernetes restart policy
数据高可用
数据库
- 主从复制
- 自动故障转移
- 定期备份
对象存储
- 纠删码
- 多区域复制
向量数据库
- 主从架构
- 灾备恢复
性能优化
前端优化
- 代码分割
- 懒加载
- CDN 加速
- 资源压缩
后端优化
- 连接池优化
- 查询优化
- 缓存策略
- 异步处理
数据库优化
- 索引优化
- 分区表
- 查询优化
- 连接池配置
下一步
2.3 - 开发环境搭建
本文档介绍如何搭建 DataMate 的本地开发环境。
前置要求
必需软件
| 软件 | 版本要求 | 用途 |
|---|---|---|
| Node.js | 18.x+ | 前端开发 |
| pnpm | 8.x+ | 前端包管理 |
| Java | 21 | 后端开发 |
| Maven | 3.9+ | 后端构建 |
| Python | 3.11+ | Python 服务开发 |
| Docker | 20.10+ | 容器化部署 |
| Docker Compose | 2.0+ | 服务编排 |
| Git | 2.x+ | 版本控制 |
| Make | 4.x+ | 构建自动化 |
推荐软件
- IDE:IntelliJ IDEA (后端) + VS Code (前端/Python)
- 数据库客户端:DBeaver、pgAdmin
- API 测试工具:Postman、curl
- Git 客户端:GitKraken、SourceTree
代码结构
DataMate/
├── backend/ # Java 后端
│ ├── services/ # 微服务模块
│ │ ├── main-application/
│ │ ├── data-management-service/
│ │ ├── data-cleaning-service/
│ │ ├── data-collection-service/
│ │ ├── data-annotation-service/
│ │ ├── data-synthesis-service/
│ │ ├── data-evaluation-service/
│ │ ├── operator-market-service/
│ │ └── rag-indexer-service/
│ ├── openapi/ # OpenAPI 规范
│ └── scripts/ # 构建脚本
├── frontend/ # React 前端
│ ├── src/
│ │ ├── components/ # 公共组件
│ │ ├── pages/ # 页面组件
│ │ ├── services/ # API 服务
│ │ ├── store/ # Redux store
│ │ └── routes/ # 路由配置
│ └── package.json
├── runtime/ # Python 运行时
│ ├── deer-flow/ # DeerFlow 集成
│ └── datamate/ # DataMate 运行时
└── deployment/ # 部署配置
├── docker/ # Docker 配置
└── helm/ # Helm Charts
后端开发环境
1. 安装 Java 21
# macOS (使用 Homebrew)
brew install openjdk@21
# Linux (Ubuntu/Debian)
sudo apt update
sudo apt install openjdk-21-jdk
# 验证安装
java -version
2. 安装 Maven
# macOS
brew install maven
# Linux
sudo apt install maven
# 验证安装
mvn -version
3. 配置 IDE(IntelliJ IDEA)
安装插件
- Lombok Plugin
- MyBatis Plugin
- Rainbow Brackets
- GitToolBox
导入项目
- 打开 IntelliJ IDEA
- 选择
File→Open - 选择
backend目录 - 等待 Maven 依赖下载完成
配置运行配置
创建 Spring Boot 运行配置:
- 主类:对应服务的 Application 类
- 工作目录:服务模块目录
- VM 参数:
-Dspring.profiles.active=dev
4. 配置数据库
启动本地数据库(Docker)
# 仅启动数据库
docker compose -f deployment/docker/datamate/docker-compose.yml up -d datamate-database
# 查看数据库连接信息
docker logs datamate-database
默认连接信息:
- 主机:localhost
- 端口:5432
- 数据库:datamate
- 用户名:postgres
- 密码:password
初始化数据库
# 使用 Flyway 迁移(如果配置)
mvn flyway:migrate
# 或执行 SQL 脚本
psql -h localhost -U postgres -d datamate -f schema.sql
5. 运行后端服务
使用 Maven 运行
cd backend/services/main-application
mvn spring-boot:run
使用 IDE 运行
- 找到对应的 Application 类
- 右键 → Run
- 访问 http://localhost:8080
6. 开发配置
编辑 application-dev.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/datamate
username: postgres
password: password
jpa:
show-sql: true
hibernate:
ddl-auto: update
logging:
level:
com.datamate: DEBUG
前端开发环境
1. 安装 Node.js
# macOS (使用 Homebrew)
brew install node@18
# Linux (Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证安装
node -v
npm -v
2. 安装 pnpm
npm install -g pnpm
# 验证安装
pnpm -v
3. 安装依赖
cd frontend
# 安装依赖
pnpm install
4. 配置开发环境
创建 .env.development:
# API 地址
VITE_API_BASE_URL=http://localhost:8080
VITE_API_TIMEOUT=30000
# 其他配置
VITE_APP_TITLE=DataMate Dev
5. 启动开发服务器
# 启动开发服务器
pnpm dev
# 或指定端口
pnpm dev --port 3000
访问 http://localhost:3000
6. 构建生产版本
# 构建
pnpm build
# 预览构建结果
pnpm preview
7. 前端开发技巧
热更新
- 修改
.tsx或.css文件会自动热更新 - 修改配置文件需要重启
代理配置
在 vite.config.ts 中配置代理:
server: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
}
}
}
路径别名
import MyComponent from '@/components/MyComponent';
import { useStore } from '@/store/hooks';
Python 服务开发环境
1. 安装 Python 3.11
# macOS
brew install python@3.11
# Linux
sudo apt install python3.11 python3.11-venv
# 验证安装
python3.11 --version
2. 创建虚拟环境
# 进入项目目录
cd runtime/datamate
# 创建虚拟环境
python3.11 -m venv venv
# 激活虚拟环境
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
3. 安装依赖
# 安装依赖
pip install -r requirements.txt
# 或使用 uv(更快)
pip install uv
uv pip install -r requirements.txt
4. 配置环境变量
创建 .env 文件:
# 数据库配置
PG_HOST=localhost
PG_PORT=5432
PG_USER=postgres
PG_PASSWORD=password
PG_DATABASE=datamate
# 日志级别
log_level=DEBUG
# JWT 配置
datamate_jwt_enable=false
5. 运行 Python 服务
# 运行运行时服务
python /opt/runtime/datamate/operator_runtime.py --port 8081
# 或使用 FastAPI
uvicorn main:app --reload --port 18000
6. Python 开发工具
推荐插件
- Python (VS Code)
- Pylance
- Python Test Explorer
代码格式化
# Black
pip install black
black .
# isort
pip install isort
isort .
# 自动格式化
pip install autopep8
本地调试
1. 启动所有服务
使用 Docker Compose
# 启动基础服务(数据库、Redis 等)
docker compose -f deployment/docker/datamate/docker-compose.yml up -d \
datamate-database \
datamate-redis
# 启动 Milvus(可选)
docker compose -f deployment/docker/datamate/docker-compose.yml --profile milvus up -d
启动后端服务
# 终端 1:启动 Main Application
cd backend/services/main-application
mvn spring-boot:run
# 终端 2:启动 Data Management Service
cd backend/services/data-management-service
mvn spring-boot:run
# ... 其他服务
启动前端
cd frontend
pnpm dev
启动 Python 服务
# 终端 N:启动运行时服务
cd runtime/datamate
python operator_runtime.py --port 8081
# 终端 N+1:启动后端 Python 服务
cd backend-python
uvicorn main:app --reload --port 18000
2. 调试技巧
后端调试
在 IntelliJ IDEA 中:
- 在代码行号处点击设置断点
- 右键 → Debug 运行配置
- 发送请求触发断点
前端调试
在浏览器中:
- 按 F12 打开开发者工具
- 使用
console.log或debugger语句 - React DevTools 查看组件状态
Python 调试
在 VS Code 中:
- 安装 Python 扩展
- 创建
launch.json配置 - 设置断点并 F5 启动调试
3. 日志查看
# Docker 容器日志
docker logs -f datamate-backend
# 应用日志
tail -f /var/log/datamate/backend/app.log
# 只查看错误日志
tail -f /var/log/datamate/backend/app.log | grep ERROR
代码规范
Java 代码规范
命名规范
- 类名:大驼峰
UserService - 方法名:小驼峰
getUserById - 常量:全大写
MAX_SIZE - 变量:小驼峰
userName
注释规范
/**
* 用户服务
*
* @author Your Name
* @since 1.0.0
*/
public class UserService {
/**
* 根据用户 ID 获取用户信息
*
* @param userId 用户 ID
* @return 用户信息
* @throws UserNotFoundException 用户不存在异常
*/
public User getUserById(Long userId) {
// ...
}
}
TypeScript 代码规范
命名规范
- 组件:大驼峰
UserProfile - 类型/接口:大驼峰
UserData - 函数:小驼峰
getUserData - 常量:全大写
API_BASE_URL
组件规范
interface UserProfileProps {
userId: string;
onUpdate?: () => void;
}
export const UserProfile: React.FC<UserProfileProps> = ({
userId,
onUpdate
}) => {
// 组件逻辑
return <div>...</div>;
};
export default UserProfile;
Python 代码规范
遵循 PEP 8
def get_user(user_id: int) -> dict:
"""
获取用户信息
Args:
user_id: 用户 ID
Returns:
用户信息字典
"""
# ...
测试
后端测试
# 单元测试
mvn test
# 集成测试
mvn verify
# 生成测试报告
mvn jacoco:report
前端测试
# 单元测试
pnpm test
# E2E 测试
pnpm test:e2e
# 测试覆盖率
pnpm test:coverage
常见问题
后端启动失败
- 检查 Java 版本:
java -version - 检查端口占用:
lsof -i :8080 - 查看详细日志
- 清理并重新构建:
mvn clean install
前端启动失败
- 检查 Node 版本:
node -v - 删除 node_modules 重新安装:
rm -rf node_modules && pnpm install - 检查端口占用:
lsof -i :3000 - 清理缓存:
pnpm store prune
数据库连接失败
- 检查数据库是否启动:
docker ps | grep postgres - 测试连接:
psql -h localhost -U postgres -d datamate - 检查防火墙设置
- 验证连接配置
下一步
3 - 用户指南
本指南介绍 DataMate 各个功能模块的使用方法。
DataMate 提供完整的大模型数据处理解决方案,涵盖数据采集、管理、清洗、标注、合成、评估等全流程。
功能模块
- 数据采集 - 从多种数据源采集数据
- 数据管理 - 管理数据集和文件
- 数据清洗 - 清洗和预处理数据
- 数据标注 - 数据标注和质量控制
- 数据合成 - 基于大模型的数据增强
- 数据评估 - 数据质量评估
- 知识库管理 - RAG 知识库构建
- 算子市场 - 数据处理算子管理
- 流水线编排 - 可视化流程编排
- Agent 对话 - AI 智能助手
典型使用场景
模型微调场景
1. 数据采集 → 2. 数据管理 → 3. 数据清洗 → 4. 数据标注
↓
5. 数据评估 → 6. 导出训练数据
RAG 应用场景
1. 上传文档 → 2. 向量化索引 → 3. 知识库管理
↓
4. Agent 对话(知识库问答)
数据增强场景
1. 准备原始数据 → 2. 创建指令模板 → 3. 数据合成
↓
4. 质量评估 → 5. 导出增强数据
快速链接
3.1 - 数据归集
数据归集模块帮助您从多种数据源(数据库、文件系统、API 等)归集数据到 DataMate 平台。
功能概述
数据归集模块基于 DataX 实现,支持:
- 多种数据源:MySQL、PostgreSQL、Oracle、SQL Server 等关系型数据库
- 异构同步:不同数据源之间的数据同步
- 批量归集:大规模数据的批量归集和同步
- 定时任务:支持定时执行归集任务
- 任务监控:实时监控归集任务执行状态
支持的数据源
| 数据源类型 | Reader | Writer | 说明 |
|---|---|---|---|
| 通用关系型数据库 | ✅ | ✅ | 支持 MySQL、PostgreSQL、OpenGauss、SQL Server、达梦、DB2 |
| MySQL | ✅ | ✅ | 关系型数据库 |
| PostgreSQL | ✅ | ✅ | 关系型数据库 |
| OpenGauss | ✅ | ✅ | 关系型数据库 |
| SQL Server | ✅ | ✅ | 微软数据库 |
| 达梦 | ✅ | ✅ | 国产数据库 |
| DB2 | ✅ | ✅ | IBM 数据库 |
| StarRocks | ✅ | ✅ | 分析型数据库 |
| NAS | ✅ | ✅ | 网络存储 |
| S3 | ✅ | ✅ | 对象存储 |
| GlusterFS | ✅ | ✅ | 分布式文件系统 |
| API 归集 | ✅ | ✅ | API 接口数据 |
| JSON 文件 | ✅ | ✅ | JSON 格式文件 |
| CSV 文件 | ✅ | ✅ | CSV 格式文件 |
| TXT 文件 | ✅ | ✅ | 文本文件 |
| FTP | ✅ | ✅ | FTP 服务器 |
| HDFS | ✅ | ✅ | Hadoop 分布式文件系统 |
快速开始
1. 创建采集任务
步骤 1:进入数据归集页面
在左侧导航栏选择 数据归集。
步骤 2:点击创建任务
点击右上角 创建任务 按钮。
步骤 3:配置基本信息
填写以下基本信息:
- 名称:为任务取一个有意义的名称
- 超时时间:任务执行超时时间(秒)
- 描述:描述任务用途(可选)
步骤 4:选择同步方式
选择任务的同步方式:
- 立即同步:创建任务后立即执行一次
- 定时同步:按照定时规则周期性执行
选择 定时同步 时,需要配置执行策略:
- 执行周期:每小时 / 每天 / 每周 / 每月
- 执行时间:选择执行时间点
步骤 5:配置数据源
选择数据源类型:从下拉列表中选择数据源类型(如 MySQL、CSV 等)
配置数据源参数:根据选择的数据源模板,填写相应的连接参数(表单形式)
MySQL 示例:
- JDBC URL:
jdbc:mysql://localhost:3306/mydb - 用户名:
root - 密码:
password - 表名:
users
步骤 6:配置字段提取
系统不支持配置字段映射,只能从配置的 SQL 中提取部分字段。
- 提取指定字段:在字段列表中填写需要提取的字段名称
- 提取所有字段:不填写字段名称,则提取 SQL 查询结果中的所有字段
步骤 7:创建并执行
点击 创建 按钮创建任务。
- 如果选择 立即同步,任务将自动开始运行
- 如果选择 定时同步,任务将按照定时规则周期性执行
2. 监控任务执行
查看任务列表
在数据采集页面,可以看到所有采集任务及其状态:
| 任务名称 | 数据源 | 状态 | 最后执行时间 | 操作 |
|---|---|---|---|---|
| 用户数据归集 | MySQL | 运行中 | 2024-01-15 10:30 | 查看执行记录 |
| 日志文件归集 | CSV | 已完成 | 2024-01-14 18:00 | 查看执行记录 |
查看任务详情
点击任务名称或 查看详情 按钮,可以看到:
- 基本信息:任务配置信息
- 执行记录:历史执行记录
- 执行日志:详细的执行日志
- 数据统计:采集的数据量、成功/失败记录数
查看执行日志
在任务详情页面,点击 执行记录 标签,选择某次执行记录,查看详细日志:
2024-01-15 10:30:00 INFO 任务开始执行
2024-01-15 10:30:01 INFO 连接数据源成功
2024-01-15 10:30:02 INFO 开始读取数据
2024-01-15 10:30:10 INFO 读取数据完成,共 10000 条
2024-01-15 10:30:11 INFO 开始写入目标数据集
2024-01-15 10:30:15 INFO 写入数据完成
2024-01-15 10:30:15 INFO 任务执行成功
3. 任务管理
任务列表中每个任务的操作包括:
- 查看执行记录:查看任务的历次执行情况
- 删除:删除任务(注意:删除任务不会删除已归集的数据)
点击任务名称可以查看任务详情,包括:
- 基本信息配置
- 执行记录列表
- 数据统计信息
常见问题
Q: 任务执行失败怎么办?
A: 按以下步骤排查:
- 检查数据源连接:确保数据源地址、端口、用户名、密码正确
- 检查网络连接:确保 DataMate 能访问数据源
- 查看执行日志:获取详细错误信息
- 检查数据格式:确保数据格式与配置一致
- 检查目标数据集:确保目标数据集存在且有写入权限
Q: 如何采集大表数据?
A: 对于大表数据采集:
- 使用增量采集:配置时间字段进行增量同步
- 分批采集:将大表拆分为多个小任务
- 调整并发参数:适当增加 channel 数量
- 使用过滤条件:只采集需要的数据
Q: 如何实现增量采集?
A: 配置增量采集条件:
在数据源配置中,可以设置查询条件(如 SQL WHERE 子句),例如:
WHERE update_time > '${lastTime}'
系统会在每次执行时记录最后一次执行时间,下次执行时自动使用该时间进行增量采集。
Q: 采集速度慢怎么办?
A: 优化采集速度:
- 增加并发通道:将 channel 设置为 3-5
- 调整流控参数:增加 byte 和 record 限制
- 优化 SQL 查询:使用索引、减少查询字段
- 使用批量写入:启用批量写入模式
Q: 如何处理数据类型不兼容?
A: 使用类型转换:
{
"column": [
{
"name": "id",
"type": "long"
},
{
"name": "price",
"type": "decimal",
"format": "#.##"
}
]
}
API 参考
详细的 API 文档请参考:
相关文档
3.2 - 数据管理
数据管理模块提供统一的数据集管理能力,支持多种数据类型的存储、查询和操作。
功能概述
数据管理是 DataMate 的核心模块,提供:
- 多数据类型支持:图像、文本、音频、视频、多模态等
- 文件管理:上传、下载、预览、删除等操作
- 目录结构:支持层级目录组织
- 标签管理:使用标签分类和检索数据
- 统计信息:数据集大小、文件数量等统计
数据集类型
| 类型 | 说明 | 支持格式 |
|---|---|---|
| 图像 | 图像数据 | JPG, PNG, GIF, BMP, WebP |
| 文本 | 文本数据 | TXT, MD, JSON, CSV |
| 音频 | 音频数据 | MP3, WAV, FLAC, AAC |
| 视频 | 视频数据 | MP4, AVI, MOV, MKV |
| 多模态 | 多模态数据 | 混合格式 |
快速开始
1. 创建数据集
步骤 1:进入数据管理页面
在左侧导航栏选择 数据管理。
步骤 2:创建数据集
点击右上角 创建数据集 按钮。
步骤 3:填写基本信息
- 数据集名称:例如
user_images_dataset - 数据集类型:选择数据类型(如图像)
- 描述:描述数据集的用途(可选)
- 标签:添加标签用于分类(可选)
步骤 4:创建数据集
点击 创建 按钮完成创建。
2. 上传文件
方式一:拖拽上传
- 进入数据集详情页面
- 将文件直接拖拽到上传区域
- 等待上传完成
方式二:点击上传
- 点击 上传文件 按钮
- 选择本地文件
- 等待上传完成
方式三:分片上传(大文件)
对于大文件(>100MB),系统自动使用分片上传:
- 选择大文件上传
- 系统自动切分文件
- 逐片上传
- 自动合并
方式四:批量上传
支持批量选择多个文件上传:
- 点击 上传文件 按钮
- 按住 Ctrl/Cmd 多选文件
- 点击确定开始上传
3. 创建目录
步骤 1:进入数据集
在数据管理页面,点击数据集名称进入详情。
步骤 2:创建目录
- 点击 创建目录 按钮
- 输入目录名称
- 选择父目录(可选)
- 点击确定
目录结构示例:
user_images_dataset/
├── train/
│ ├── cat/
│ └── dog/
├── test/
│ ├── cat/
│ └── dog/
└── validation/
├── cat/
└── dog/
4. 管理文件
查看文件
在数据集详情页面,可以看到所有文件列表:
| 文件名 | 大小 | 包含文件数 | 上传时间 | 标签 | 标签更新时间 | 操作 |
|---|---|---|---|---|---|---|
| image1.jpg | 2.3 MB | 1 | 2024-01-15 | 训练集 | 2024-01-16 | 下载 重命名 删除 |
| image2.png | 1.8 MB | 1 | 2024-01-15 | 验证集 | 2024-01-16 | 下载 重命名 删除 |
预览文件
点击 预览 按钮,可以在浏览器中预览文件:
- 图像:显示缩略图和详细信息
- 文本:显示文本内容
- 音频:在线播放
- 视频:在线播放
下载文件
- 单个文件下载:点击 下载 按钮
目前不支持批量下载和打包下载。
删除文件
- 单个删除:点击文件的 删除 按钮
目前不支持批量删除。
5. 数据集操作
查看统计信息
在数据集详情页面,可以看到:
- 总文件数:数据集中的文件总数
- 总大小:所有文件的总大小
编辑数据集
点击数据集的 编辑 按钮,可以修改:
- 数据集名称
- 描述
- 标签
- 关联归集任务
删除数据集
点击数据集的 删除 按钮,可以删除整个数据集。
注意:删除数据集会同时删除其中的所有文件,此操作不可恢复。
高级功能
标签管理
创建标签
- 在数据集列表页,点击 标签管理
- 点击 创建标签
- 输入标签名称
使用标签
- 编辑数据集
- 在标签栏选择已有标签
- 保存数据集
标签筛选
在数据集列表页,点击标签可以筛选具有该标签的数据集。
最佳实践
1. 数据集组织
推荐的目录组织方式:
project_dataset/
├── raw/ # 原始数据
├── processed/ # 处理后的数据
├── train/ # 训练数据
├── validation/ # 验证数据
└── test/ # 测试数据
2. 命名规范
- 数据集名称:使用小写字母和下划线,如
user_images_2024 - 目录名称:使用有意义的英文名称,如
train,test,processed - 文件名称:保持原始文件名或使用规范命名
3. 标签使用
建议使用以下标签分类:
- 项目标签:
project-a,project-b - 状态标签:
raw,processed,validated - 类型标签:
image,text,audio - 用途标签:
training,testing,evaluation
4. 数据备份
目前系统不支持自动备份功能,如需备份数据,可以通过以下方式手动下载单个文件:
- 进入数据集详情页面
- 找到需要备份的文件
- 点击文件的 下载 按钮
常见问题
Q: 上传大文件失败怎么办?
A: 大文件上传建议:
- 使用分片上传:系统自动启用分片上传
- 检查网络连接:确保网络稳定
- 调整上传参数:增加超时时间
- 使用 FTP/SFTP:对于超大文件,建议使用 FTP 上传
Q: 如何导入已有的数据?
A: 三种方式导入已有数据:
- 上传文件:通过界面上传
- 添加文件:如果文件已在服务器上,使用添加文件功能
- 数据采集:使用数据采集模块从外部数据源采集
Q: 如何共享数据集?
A: 目前数据集共享方式:
- 导出数据集:导出为文件分享
- 设置权限:(即将推出)设置数据集访问权限
- API 访问:通过 API 接口访问数据集
Q: 数据集有大小限制吗?
A: 数据集大小限制:
- 单个文件:最大 5GB(分片上传)
- 数据集总大小:受存储空间限制
- 文件数量:没有明确限制
建议定期清理不需要的文件以释放空间。
Q: 如何查看数据集的详细信息?
A: 在数据集详情页面可以查看:
- 基本信息:名称、描述、类型、标签
- 统计信息:文件数、总大小、完成率
- 文件列表:所有文件及其详情
- 操作日志:数据集的操作历史
API 参考
详细的 API 文档请参考:
相关文档
3.3 - 数据清洗
数据清洗模块提供强大的数据处理能力,帮助您清洗、转换和优化数据质量。
功能概述
数据清洗模块提供:
- 内置清洗算子:丰富的前置清洗算子库
- 可视化配置:拖拽式配置清洗流程
- 模板管理:保存和复用清洗模板
- 批量处理:支持大规模数据批量清洗
- 实时预览:预览清洗结果
清洗算子类型
数据质量算子
| 算子 | 功能 | 适用数据类型 |
|---|---|---|
| 去重 | 删除重复数据 | 所有类型 |
| 空值处理 | 删除或填充空值 | 所有类型 |
| 异常值检测 | 检测和处理异常值 | 数值型 |
| 格式校验 | 校验数据格式 | 所有类型 |
文本清洗算子
| 算子 | 功能 |
|---|---|
| 去除特殊字符 | 去除文本中的特殊符号 |
| 大小写转换 | 统一大小写格式 |
| 去除停用词 | 去除常见停用词 |
| 文本分词 | 中文分词处理 |
| HTML 标签清理 | 清理 HTML 标签 |
图像清洗算子
| 算子 | 功能 |
|---|---|
| 格式转换 | 转换图像格式 |
| 尺寸调整 | 统一图像尺寸 |
| 质量检测 | 检测图像质量 |
| 去重 | 基于内容去重 |
数据转换算子
| 算子 | 功能 |
|---|---|
| 类型转换 | 转换数据类型 |
| 归一化 | 数值归一化处理 |
| 编码转换 | 字符编码转换 |
| 日期格式化 | 统一日期格式 |
快速开始
1. 创建清洗任务
步骤 1:进入数据清洗页面
在左侧导航栏选择 数据处理。
步骤 2:创建任务
点击右上角 创建任务 按钮。
步骤 3:配置基本信息
- 任务名称:例如
user_data_cleansing - 任务描述:描述清洗任务的目的(可选)
- 源数据集:选择要清洗的数据集
- 输出数据集:选择或创建输出数据集
步骤 4:配置清洗流程
在清洗流程配置页面:
- 从左侧算子库拖拽算子到中间画布
- 连接算子形成处理流程
- 配置每个算子的参数
- 预览清洗结果
示例流程:
输入数据 → 去重 → 空值处理 → 格式校验 → 输出数据
步骤 5:配置执行参数
- 执行模式:立即执行 / 定时执行
- 并发数:任务并发数(默认 1)
- 失败策略:跳过失败记录 / 终止任务
步骤 6:创建并执行
点击 创建 按钮创建任务。如果选择立即执行,任务将自动开始运行。
2. 使用清洗模板
创建模板
- 配置好清洗流程
- 点击 保存为模板
- 输入模板名称和描述
- 点击保存
使用模板
- 创建清洗任务时,点击 使用模板
- 从模板列表选择模板
- 系统自动加载模板配置
- 根据需要调整配置
3. 监控清洗任务
查看任务列表
在数据清洗页面,可以看到所有清洗任务:
| 任务名称 | 源数据集 | 输出数据集 | 状态 | 进度 | 操作 |
|---|---|---|---|---|---|
| 文本清洗 | raw_text | clean_text | 运行中 | 50% | 查看详情 |
| 图像去重 | images | unique_images | 已完成 | 100% | 查看详情 |
查看任务详情
点击任务名称进入详情页面,可以看到:
- 任务配置:清洗流程和参数
- 执行记录:历史执行记录
- 清洗统计:
- 输入记录数
- 输出记录数
- 清洗掉的记录数
- 清洗率
查看清洗结果
在任务详情页面,点击 查看结果 可以:
- 查看清洗后的数据
- 对比清洗前后数据
- 导出清洗结果
清洗算子详解
去重算子
功能:删除重复的数据记录
参数:
- 去重字段:选择用于判断重复的字段
- 保留策略:保留第一条 / 保留最后一条
示例:
输入:
{"id": 1, "name": "Alice"}
{"id": 1, "name": "Alice"}
{"id": 2, "name": "Bob"}
输出(保留第一条):
{"id": 1, "name": "Alice"}
{"id": 2, "name": "Bob"}
空值处理算子
功能:处理空值(NULL/空字符串)
参数:
- 处理策略:删除记录 / 填充默认值
- 填充值:当选择填充时,指定填充值
示例:
输入:
{"id": 1, "name": "Alice", "age": null}
{"id": 2, "name": null, "age": 25}
输出(填充默认值 "Unknown"):
{"id": 1, "name": "Alice", "age": "Unknown"}
{"id": 2, "name": "Unknown", "age": 25}
文本清洗算子
功能:清洗文本数据
参数:
- 去除特殊字符:是否去除
- 转换大小写:不转换 / 全部小写 / 全部大写
- 去除停用词:是否去除
- 最小长度:过滤短于该长度的文本
示例:
输入:"Hello!!! This is a Test..."
输出(去除特殊字符、转小写):
"hello this is a test"
图像格式转换算子
功能:转换图像格式
参数:
- 目标格式:JPG / PNG / WebP
- 质量:输出图像质量(1-100)
- 尺寸:调整图像尺寸(可选)
数据归一化算子
功能:数值型数据归一化
参数:
- 归一化方法:Min-Max / Z-Score
- 目标范围:Min-Max 归一化的目标范围
示例:
输入(Min-Max 归一化到 [0, 1]):
{"age": 20, "salary": 5000}
{"age": 40, "salary": 10000}
输出:
{"age": 0.0, "salary": 0.0}
{"age": 1.0, "salary": 1.0}
高级功能
自定义算子
除了内置算子,DataMate 还支持自定义算子开发。详见:
- 算子市场 - 算子开发指南
条件分支
在清洗流程中,可以添加条件分支:
输入数据 → [条件判断]
├── 满足条件 → 处理流程 A
└── 不满足条件 → 处理流程 B
条件类型:
- 字段值比较
- 数据类型检查
- 自定义表达式
循环处理
对于需要重复处理的场景,可以使用循环算子:
- For 循环:固定次数循环
- While 循环:条件循环
- 迭代循环:遍历集合
数据验证
在清洗完成后,可以添加数据验证算子:
- 完整性验证:检查必填字段
- 一致性验证:检查字段间关系
- 业务规则验证:自定义验证规则
常见问题
Q: 清洗任务执行失败怎么办?
A: 按以下步骤排查:
- 检查数据格式:确保数据格式与算子要求一致
- 查看执行日志:获取详细错误信息
- 检查参数配置:确保算子参数配置正确
- 测试单个算子:单独测试问题算子
- 减少数据量:先用小数据集测试
Q: 如何处理大量数据?
A: 大数据量清洗建议:
- 分批处理:将大数据集拆分为多个小批次
- 增加并发:适当增加并发数
- 使用增量清洗:只清洗新增或变更的数据
- 优化流程:简化清洗流程,移除不必要的算子
Q: 清洗速度慢怎么办?
A: 优化清洗速度:
- 减少算子数量:只使用必要的算子
- 优化算子顺序:先过滤数据再处理
- 增加并发:提高任务并发数
- 使用增量处理:避免重复处理
Q: 如何保证清洗质量?
A: 建议的清洗流程:
- 数据探索:先了解数据质量状况
- 制定规则:根据业务需求制定清洗规则
- 小批量测试:先在小数据集上测试
- 验证结果:清洗后验证数据质量
- 定期审查:定期审查和更新清洗规则
API 参考
详细的 API 文档请参考:
相关文档
3.4 - 数据标注
数据标注模块集成 Label Studio,提供专业级的数据标注能力。
功能概述
数据标注模块提供:
- 多类型标注:支持图像、文本、音频等多种数据类型
- 标注模板:丰富的标注模板和配置
- 质量控制:标注审核和一致性检查
- 团队协作:多人协作标注
- 标注导出:导出标注结果
标注类型
图像标注
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 图像分类 | 对整个图像分类 | 场景识别、质量判断 |
| 目标检测 | 标注目标位置和类别 | 物体识别、缺陷检测 |
| 语义分割 | 像素级分类 | 医学影像、自动驾驶 |
| 实例分割 | 区分同类目标 | 细粒度识别 |
| 关键点标注 | 标注关键点位置 | 姿态估计、人脸识别 |
文本标注
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 文本分类 | 对文本分类 | 情感分析、主题分类 |
| 命名实体识别 | 标注实体边界 | 信息抽取、知识图谱 |
| 文本摘要 | 生成摘要 | 文档理解 |
| 机器翻译 | 翻译文本 | 多语言处理 |
| 问答标注 | 标注问答对 | 对话系统 |
音频标注
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 音频分类 | 对音频分类 | 音频事件检测 |
| 语音识别 (ASR) | 转写语音文本 | 语音助手 |
| 说话人分离 | 识别说话人 | 会议记录 |
快速开始
1. 部署 Label Studio
使用 Docker Compose
make install-label-studio
访问 Label Studio
- 地址:http://localhost:30001
- 用户名:admin@demo.com
- 密码:demoadmin
2. 创建标注任务
步骤 1:进入数据标注页面
在左侧导航栏选择 数据标注。
步骤 2:创建任务
点击右上角 创建任务 按钮。
步骤 3:配置基本信息
- 任务名称:例如
image_classification_task - 任务描述:描述标注任务(可选)
- 源数据集:选择要标注的数据集
- 标注类型:选择标注类型(如图像分类)
步骤 4:配置标注模板
选择或创建标注模板:
图像分类模板示例:
<View>
<Image name="image" value="$image"/>
<Choices name="choice" toName="image">
<Choice value="cat"/>
<Choice value="dog"/>
<Choice value="bird"/>
</Choices>
</View>
目标检测模板示例:
<View>
<Image name="image" value="$image"/>
<RectangleLabels name="label" toName="image">
<Label value="cat" background="blue"/>
<Label value="dog" background="red"/>
</RectangleLabels>
</View>
步骤 5:配置标注规则
- 标注方式:单标签 / 多标签
- 最少标注数:每个样本最少标注次数(用于一致性)
- 审核机制:是否启用审核
- 标注人员:分配标注人员
步骤 6:创建任务
点击 创建 按钮完成创建。
3. 开始标注
步骤 1:进入标注界面
在任务列表页,点击任务名称进入标注界面。
步骤 2:进行标注
- 查看当前待标注样本
- 根据标注类型进行标注
- 点击 提交 完成标注
- 自动加载下一个样本
步骤 3:查看标注进度
在标注界面可以看到:
- 总样本数:待标注的样本总数
- 已标注数:已完成标注的样本数
- 完成进度:标注完成百分比
- 我的标注数:当前用户标注的数量
4. 标注审核
查看待审核标注
- 进入任务详情页
- 点击 审核 标签
- 查看待审核的标注结果
审核标注
- 查看标注结果
- 选择 通过 或 拒绝
- 如果拒绝,可以修改标注
- 提交审核结果
5. 导出标注结果
导出为 JSON
[
{
"id": 1,
"image": "image1.jpg",
"label": "cat",
"annotator": "user1",
"created_at": "2024-01-15T10:30:00"
}
]
导出为 CSV
id,image,label,annotator,created_at
1,image1.jpg,cat,user1,2024-01-15 10:30:00
2,image2.jpg,dog,user1,2024-01-15 10:31:00
导出到数据集
将标注结果导出到新的数据集,用于后续处理。
高级功能
标注模板定制
自定义标签
在模板中定义标签及其属性:
<Choices name="choice" toName="image">
<Choice value="cat" alias="feline"/>
<Choice value="dog" alias="canine"/>
<Choice value="other"/>
</Choices>
添加属性
为标签添加额外属性:
<RectangleLabels name="label" toName="image">
<Label value="person" background="blue">
<Attribute name="gender" type="radio">
<Value value="male"/>
<Value value="female"/>
</Attribute>
<Attribute name="age" type="number"/>
</Label>
</RectangleLabels>
质量控制
标注一致性
检查不同标注员的一致性:
- Cohen’s Kappa:评估标注一致性
- 多数投票:使用多数标注结果
- 专家审核:专家审核争议标注
标注指南
创建详细的标注指南:
- 明确标注标准
- 提供标注示例
- 说明边界情况
- 定期更新指南
团队协作
角色分配
| 角色 | 权限 |
|---|---|
| 管理员 | 全部权限 |
| 审核员 | 审核、修改标注 |
| 标注员 | 仅标注 |
任务分配
- 手动分配:管理员手动分配样本
- 自动分配:系统自动分配待标注样本
- 认领模式:标注员主动认领样本
预标注
使用模型进行预标注:
- 训练或使用现成模型
- 对数据集进行预标注
- 标注员修正预标注结果
优势:
- 提高标注效率
- 降低标注成本
- 保持标注一致性
最佳实践
1. 标注指南
制定清晰的标注指南:
- 明确标准:清晰定义标注标准
- 提供示例:给出正例和反例
- 边界情况:说明如何处理边界情况
- 培训标注员:确保标注员理解指南
2. 质量控制
建立质量控制流程:
- 预标注:使用模型预标注
- 标注:标注员进行标注
- 审核:审核员抽检
- 反馈:提供反馈并改进
3. 标注效率
提高标注效率:
- 使用快捷键:使用键盘快捷键
- 批量操作:支持批量标注
- 智能推荐:使用 AI 辅助标注
- 合理分工:根据难度分配任务
常见问题
Q: 标注质量不理想怎么办?
A: 改进建议:
- 完善标注指南:更详细的标注说明
- 加强培训:培训标注员
- 增加审核:提高审核比例
- 使用预标注:使用模型辅助
- 提供反馈:及时反馈问题
Q: 标注速度慢怎么办?
A: 提高效率:
- 使用预标注:减少从零开始标注
- 优化界面:使用快捷键和批量操作
- 合理分工:根据难度分配任务
- 激励标注员:设置激励机制
Q: 如何处理标注不一致?
A: 处理方法:
- 明确标准:制定明确的标注标准
- 多数投票:使用多个标注员投票
- 专家裁决:专家处理争议标注
- 计算一致性:使用 Cohen’s Kappa 等指标
Q: 支持哪些标注格式?
A: 导出格式:
- JSON
- CSV
- COCO (用于目标检测)
- YOLO (用于目标检测)
- Pascal VOC (用于目标检测)
- 自定义格式
相关文档
3.5 - 数据合成
数据合成模块利用大模型能力,自动生成高质量的训练数据,降低数据采集成本。
功能概述
数据合成模块提供:
- 指令模板管理:创建和管理合成指令模板
- 单任务合成:创建单个合成任务
- 比例合成任务:按指定比例合成多类别数据
- 大模型集成:支持多种大模型 API
- 质量评估:自动评估合成数据质量
快速开始
1. 创建指令模板
步骤 1:进入数据合成页面
在左侧导航栏选择 数据合成 → 合成任务。
步骤 2:创建指令模板
- 点击 指令模板 标签
- 点击 创建模板 按钮
步骤 3:配置模板
基本信息:
- 模板名称:例如
qa_generation_template - 模板描述:描述模板用途(可选)
- 模板类型:选择模板类型(问答、对话、摘要等)
提示词配置:
示例提示词:
你是一个专业的数据生成助手。请根据以下要求生成数据:
任务:生成问答对
主题:{topic}
数量:{count}
难度:{difficulty}
要求:
1. 问题要清晰明确
2. 答案要准确完整
3. 涵盖不同难度级别
输出格式:JSON
[
{
"question": "...",
"answer": "..."
}
]
参数配置:
- 模型:选择使用的大模型(GPT-4、Claude、本地模型等)
- 温度:控制生成随机性(0-1)
- 最大 tokens:限制生成长度
- 其他参数:根据模型配置
步骤 4:保存模板
点击 保存 按钮保存模板。
2. 创建合成任务
步骤 1:填写基本信息
- 返回 数据合成 页面
- 点击 创建任务 按钮
- 填写基本信息:
- 任务名称:例如
medical_qa_synthesis - 任务描述:描述任务目的(可选)
- 任务名称:例如
步骤 2:选择数据集和选择文件
从现有数据集中选择合成所需的数据:
- 选择数据集:从列表中选择需要使用的数据集
- 选择文件:
- 可以选择整个数据集的所有文件
- 也可以选择数据集中的部分特定文件
- 支持多选多个文件
步骤 3:选择合成指令模板
选择已创建的指令模板,或创建新模板:
- 从模板库选择:从已创建的模板中选择
- 模板类型:问答生成、对话生成、摘要生成等
- 预览模板:可以查看模板的提示词内容
步骤 4:填写合成配置
合成配置包含以下四个部分:
1. 设置合成总数
设置整个任务生成的数据总量上限:
| 参数 | 说明 | 默认值 | 取值范围 |
|---|---|---|---|
| 合成总数上限 | 整个任务生成的最大问答对数量 | 5000 | 1-100,000 |
此设置可选,适用于大规模合成任务的总量控制。
2. 配置文本切片策略
对输入的文本文件进行切片处理,支持多种切片方式:
| 参数 | 说明 | 默认值 |
|---|---|---|
| 切片方式 | 选择切片策略 | 默认分块 |
| 切片大小 | 每个切片的字符数 | 3000 |
| 重叠大小 | 相邻切片之间的重叠字符数 | 100 |
切片方式选项:
- 默认分块:使用系统默认的智能分块策略
- 按章节分块:根据章节结构进行分块
- 按段落分块:按照段落边界进行分块
- 固定长度分块:按照固定的字符长度进行分块
- 自定义分隔符分块:使用自定义分隔符进行分块
3. 配置问题合成参数
设置问题生成的相关参数:
| 参数 | 说明 | 默认值 | 取值范围 |
|---|---|---|---|
| 问题生成数量 | 每个切片生成的问题数量 | 1 | 1-20 |
| 温度 | 控制问题生成的随机性和多样性 | 0.7 | 0-2 |
| 使用模型 | 选择用于生成问题的 CHAT 模型 | - | 从模型列表选择 |
参数说明:
- 问题生成数量:每个文本切片生成的问题个数,数值越高生成的问题越多
- 温度:值越高生成的问题越多样,值越低生成的问题越稳定
4. 配置答案合成参数
设置答案生成的相关参数:
| 参数 | 说明 | 默认值 | 取值范围 |
|---|---|---|---|
| 温度 | 控制答案生成的稳定性 | 0.7 | 0-2 |
| 使用模型 | 选择用于生成答案的 CHAT 模型 | - | 从模型列表选择 |
参数说明:
- 温度:值越低答案越保守和准确,值越高答案越多样和创造性
合成类型: 系统支持两种合成类型:
- SFT 问答数据合成:生成监督微调用的问答对数据
- COT 链式推理合成:生成包含推理过程的数据
步骤 5:开始任务
点击 开始任务 按钮,任务将自动开始执行。
3. 创建比例合成任务
比例合成任务用于按指定比例合成多类别平衡数据。
步骤 1:创建比例任务
- 在左侧导航栏选择 数据合成 → 配比任务
- 点击 创建任务 按钮
步骤 2:填写基本信息
| 参数 | 说明 | 是否必填 |
|---|---|---|
| 任务名称 | 任务的唯一标识名称 | 是 |
| 目标总数量 | 整个配比任务的目标总数量 | 是 |
| 任务描述 | 描述配比任务的目的和要求 | 否 |
示例:
- 任务名称:
balanced_dataset_synthesis - 目标总数量:10000
- 任务描述:生成训练集和验证集的平衡数据
步骤 3:选择数据集
从现有数据集中选择需要参与配比的数据集:
数据集选择功能:
- 搜索数据集:通过关键词搜索数据集
- 多选支持:可以同时选择多个数据集
- 数据集信息:显示每个数据集的详细信息
- 数据集名称和类型
- 数据集描述
- 文件数量
- 数据集大小
- 标签分布预览(最多显示 8 个标签)
选择数据集后,系统会自动加载每个数据集的标签分布信息。
步骤 4:填写配比配置
为每个选中的数据集配置具体的合成规则:
配比配置项:
| 参数 | 说明 | 取值范围 |
|---|---|---|
| 标签 | 从数据集的标签分布中选择标签 | 根据数据集标签 |
| 标签值 | 选中标签下的具体值 | 根据标签值列表 |
| 标签更新时间 | 选择标签更新日期范围(可选) | 日期选择器 |
| 数量 | 该配置项生成的数据数量 | 0 到目标总数量 |
功能说明:
- 自动分配:点击"自动分配"按钮,系统会自动将目标总数量均匀分配到各数据集
- 数量限制:每个配置项的数量不能超过该数据集的文件总数
- 百分比计算:系统自动计算每个配置项占总数量的百分比
- 删除配置:可以删除不需要的配置项
- 添加配置:每个数据集可以添加多个不同的标签配置
示例配置:
| 数据集 | 标签 | 标签值 | 标签更新时间 | 数量 |
|---|---|---|---|---|
| 训练数据集 | 类别 | 训练 | - | 6000 |
| 训练数据集 | 类别 | 验证 | - | 2000 |
| 测试数据集 | 类别 | 测试 | 2024-01-01 至 2024-12-31 | 2000 |
步骤 5:执行任务
点击 开始任务 按钮,系统将按照配比配置创建并执行任务。
4. 监控合成任务
查看任务列表
在数据合成页面,可以看到所有合成任务:
| 任务名称 | 模板 | 状态 | 进度 | 生成数量 | 操作 |
|---|---|---|---|---|---|
| 医疗问答合成 | qa_template | 运行中 | 50% | 50/100 | 查看详情 |
| 情感数据合成 | sentiment_template | 已完成 | 100% | 1000/1000 | 查看详情 |
查看任务详情
点击任务名称进入详情页面,可以看到:
- 任务配置:模板和参数配置
- 执行记录:历史执行记录
- 生成结果:
- 总生成数量
- 成功数量
- 失败数量
- 成功率
查看生成数据
在任务详情页面,点击 查看数据 可以:
- 预览生成的数据
- 下载数据
- 导出到数据集
高级功能
模板变量
在提示词中使用变量,实现动态配置:
变量语法:{variable_name}
示例:
请生成关于 {topic} 的 {count} 个 {difficulty} 级别的 {type}。
内置变量:
{current_date}:当前日期{current_time}:当前时间{random_id}:随机 ID
模型选择
DataMate 支持多种大模型:
| 模型 | 类型 | 说明 |
|---|---|---|
| GPT-4 | OpenAI | 高质量生成 |
| GPT-3.5-Turbo | OpenAI | 快速生成 |
| Claude 3 | Anthropic | 长文本生成 |
| 文心一言 | 百度 | 中文优化 |
| 通义千问 | 阿里 | 中文优化 |
| 本地模型 | 部署本地模型 | 私有化部署 |
数据质量控制
启用数据质量评估:
- 格式验证:验证输出格式
- 内容检查:检查敏感词、不当内容
- 重复检测:检测重复生成的内容
- 质量评分:对生成内容打分
批量生成
对于大规模数据生成:
- 分批生成:将大批量任务拆分为多个小批次
- 并发控制:控制并发请求数量
- 失败重试:自动重试失败的生成请求
- 断点续传:支持从中断处继续生成
最佳实践
1. 提示词设计
好的提示词应该:
- 明确任务:清晰描述生成任务
- 指定格式:明确输出格式要求
- 提供示例:给出期望的输出示例
- 控制质量:设置质量要求
示例提示词:
你是一个专业的教育内容创作助手。
任务:生成教育问答对
学科:{subject}
年级:{grade}
数量:{count}
要求:
1. 问题要符合该年级的知识水平
2. 答案要准确、详细、易懂
3. 每个答案包含解析过程
4. 不得生成敏感或不当内容
输出格式(JSON):
[
{
"id": 1,
"question": "问题内容",
"answer": "答案内容",
"explanation": "解析内容",
"difficulty": "easy/medium/hard",
"knowledge_points": ["知识点1", "知识点2"]
}
]
请开始生成:
2. 参数调优
根据需求调整模型参数:
| 参数 | 高质量 | 快速生成 | 创意生成 |
|---|---|---|---|
| 温度 | 0.3-0.5 | 0.1-0.3 | 0.7-1.0 |
| 最大 tokens | 根据需求 | 较短 | 较长 |
| Top P | 0.9-0.95 | 0.9 | 0.95-1.0 |
3. 数据验证
生成后进行数据验证:
- 格式检查:检查输出格式是否正确
- 内容审核:人工抽查部分数据
- 质量评估:使用评估工具打分
- 去重:去除重复或高度相似的内容
常见问题
Q: 生成数据质量不理想怎么办?
A: 优化建议:
- 改进提示词:更详细、更明确的指令
- 调整参数:降低温度、增加最大 tokens
- 提供示例:在提示词中给出示例
- 更换模型:尝试其他大模型
- 人工审核:人工审核和筛选
Q: 生成速度慢怎么办?
A: 加速建议:
- 减少数量:分批生成,不要一次性生成过多
- 调整并发:适当增加并发数
- 使用更快的模型:如 GPT-3.5-Turbo
- 缩短输出:减少最大 tokens
- 使用本地模型:部署本地模型加速
Q: 如何保证生成数据的多样性?
A: 增加多样性:
- 提高温度:设置温度为 0.7-1.0
- 丰富提示词:在提示词中加入变化元素
- 多次生成:多次生成后去重
- 使用不同种子:改变随机种子
- 混合模型:使用多个模型生成
Q: 生成的数据有重复怎么办?
A: 去重方法:
- 启用去重:在任务配置中启用去重功能
- 调整温度:提高温度增加随机性
- 丰富提示词:在提示词中加入更多变化
- 后处理去重:使用去重工具处理
Q: 如何控制生成成本?
A: 成本控制:
- 选择合适模型:根据需求选择模型
- 控制长度:限制最大 tokens
- 批量处理:使用批量 API(如果支持)
- 缓存复用:缓存相似请求的结果
- 本地模型:对于大规模生成,考虑部署本地模型
API 参考
详细的 API 文档请参考:
相关文档
3.6 - 数据评估
数据评估模块提供多维度数据质量评估能力,帮助您了解和提升数据质量。
功能概述
数据评估模块提供:
- 质量指标:丰富的数据质量评估指标
- 自动评估:自动执行数据评估任务
- 手动评估:人工抽样评估
- 评估报告:生成详细的评估报告
- 质量追踪:追踪数据质量变化趋势
评估维度
数据完整性
| 指标 | 说明 | 计算方式 |
|---|---|---|
| 空值率 | 空值占比 | 空值数 / 总数 |
| 缺失字段率 | 必填字段缺失率 | 缺失字段数 / 总字段数 |
| 记录完整率 | 完整记录占比 | 完整记录数 / 总记录数 |
数据准确性
| 指标 | 说明 | 计算方式 |
|---|---|---|
| 格式正确率 | 格式正确的占比 | 格式正确数 / 总数 |
| 值域符合率 | 值在合理范围内的占比 | 符合值域数 / 总数 |
| 一致性符合率 | 数据一致的比例 | 一致记录数 / 总记录数 |
数据唯一性
| 指标 | 说明 | 计算方式 |
|---|---|---|
| 重复率 | 重复记录占比 | 重复记录数 / 总记录数 |
| 唯一率 | 唯一记录占比 | 唯一记录数 / 总记录数 |
数据时效性
| 指标 | 说明 | 计算方式 |
|---|---|---|
| 数据新鲜度 | 数据更新频率 | 最后更新时间 |
| 过期数据率 | 过期数据占比 | 过期记录数 / 总记录数 |
快速开始
1. 创建评估任务
步骤 1:进入数据评估页面
在左侧导航栏选择 数据评估。
步骤 2:创建任务
点击右上角 创建任务 按钮。
步骤 3:配置基本信息
- 任务名称:例如
data_quality_evaluation - 任务描述:描述评估任务(可选)
- 评估数据集:选择要评估的数据集
步骤 4:配置评估维度
选择要评估的维度:
- ✅ 数据完整性
- ✅ 数据准确性
- ✅ 数据唯一性
- ✅ 数据时效性
步骤 5:配置评估规则
为每个维度配置具体规则:
完整性规则:
必填字段:name, email, phone
空值阈值:5%(超过5%则警告)
准确性规则:
email 格式:正则表达式验证
age 范围:0-120
phone 格式:手机号格式
唯一性规则:
唯一字段:id, email
重复阈值:3%(超过3%则警告)
步骤 6:创建任务
点击 创建 按钮完成创建。
2. 执行评估
自动评估
任务创建后自动执行,或点击 立即执行。
手动评估
- 点击 手动评估 标签
- 查看待评估样本
- 人工评估样本质量
- 提交评估结果
3. 查看评估报告
总体评分
评估报告提供总体质量评分:
总体质量评分:85 分 (优秀)
完整性:90 分 ⭐⭐⭐⭐⭐
准确性:82 分 ⭐⭐⭐⭐
唯一性:95 分 ⭐⭐⭐⭐⭐
时效性:75 分 ⭐⭐⭐⭐
详细指标
每个维度的详细指标:
完整性:
- 空值率:3.2% ✅
- 缺失字段率:1.5% ✅
- 记录完整率:96.8% ✅
准确性:
- email 格式正确率:98.5% ✅
- age 值域符合率:95.2% ✅
- phone 格式正确率:88.7% ⚠️
唯一性:
- 重复率:1.8% ✅
- 唯一率:98.2% ✅
时效性:
- 数据新鲜度:平均 7 天前
- 过期数据率:12.5% ⚠️
问题列表
列出发现的数据质量问题:
| 序号 | 问题 | 类型 | 严重程度 | 影响范围 | 建议 |
|---|---|---|---|---|---|
| 1 | phone 格式不正确 | 准确性 | 中 | 11.3% | 检查并清洗 |
| 2 | 部分数据过期 | 时效性 | 高 | 12.5% | 更新数据 |
| 3 | 少量记录有空值 | 完整性 | 低 | 3.2% | 填充或删除 |
质量趋势
查看数据质量变化趋势:
质量评分趋势
90 │ ╭─╮
85 │ ╭─╮╭─╯ ╭─╮
80 │╭─╯╭─╯ ╭─╯
75 │╭─╯╭─╯ ╭─╯
70 │╭─╯╭─╯ ╭─╯
└─────────────
1月 2月 3月 4月
4. 导出评估报告
导出为 PDF
- 点击 导出报告 按钮
- 选择 PDF 格式
- 下载报告文件
导出为 Excel
- 点击 导出报告 按钮
- 选择 Excel 格式
- 下载报告文件
Excel 报告包含多个工作表:
- 总体评分
- 详细指标
- 问题列表
- 样本明细
高级功能
自定义评估规则
除了内置规则,还可以自定义评估规则:
正则表达式验证
字段:phone
规则:^1[3-9]\d{9}$
说明:中国大陆手机号
值域验证
字段:age
最小值:0
最大值:120
说明:年龄在合理范围内
自定义脚本
使用 Python 脚本自定义评估逻辑:
def evaluate(record):
# 自定义评估逻辑
if record.get('score', 0) < 0 or record.get('score', 0) > 100:
return False, "分数必须在 0-100 之间"
return True, "OK"
对比评估
对比不同数据集或不同版本的数据质量:
- 选择要对比的数据集/版本
- 执行对比评估
- 查看对比报告
对比维度:
- 总体评分对比
- 各维度指标对比
- 问题类型分布对比
质量阈值告警
设置质量阈值,超过阈值自动告警:
告警规则:
总体评分低于 80: 发送邮件
空值率超过 10%: 发送短信
重复率超过 5%: 发送邮件
最佳实践
1. 定期评估
建议定期执行数据质量评估:
- 每日评估:关键数据每日评估
- 每周评估:一般数据每周评估
- 每月评估:全部数据每月评估
2. 建立基线
为每个数据集建立质量基线:
- 初次评估作为基线
- 后续评估与基线对比
- 追踪质量变化趋势
3. 持续改进
根据评估结果持续改进:
- 清洗问题数据:根据评估结果清洗
- 优化采集流程:改进数据采集方式
- 更新验证规则:及时更新验证规则
常见问题
Q: 评估任务执行失败?
A: 排查步骤:
- 检查数据集:确认数据集存在
- 检查规则配置:确认评估规则正确
- 查看执行日志:获取详细错误信息
- 减少样本量:先用小样本测试
Q: 评估结果不准确?
A: 改进建议:
- 调整评估规则:根据实际需求调整
- 增加评估维度:添加更多评估维度
- 人工审核:人工抽检验证结果
- 更新基线:定期更新质量基线
Q: 如何提高数据质量?
A: 改进建议:
- 数据清洗:使用数据清洗模块清洗
- 源头控制:在数据采集阶段控制质量
- 建立规范:制定数据标准和规范
- 定期评估:定期评估并改进
API 参考
详细的 API 文档请参考:
相关文档
3.7 - 知识库管理
知识库管理模块帮助您构建企业知识库,实现高效的向量检索和 RAG 应用。
功能概述
知识库管理模块提供:
- 文档上传:支持多种文档格式的上传
- 文本切分:智能文本分块策略
- 向量化:自动将文本转换为向量
- 向量检索:基于相似度的语义检索
- 知识库问答:集成 RAG 的智能问答
支持的文档格式
| 格式 | 说明 | 推荐场景 |
|---|---|---|
| TXT | 纯文本 | 通用文本 |
| PDF 文档 | 文档、报告 | |
| Markdown | Markdown 文件 | 技术文档 |
| JSON | JSON 数据 | 结构化数据 |
| CSV | CSV 表格 | 表格数据 |
| DOCX | Word 文档 | Office 文档 |
快速开始
1. 创建知识库
步骤 1:进入知识库页面
在左侧导航栏选择 知识生成。
步骤 2:创建知识库
点击右上角 创建知识库 按钮。
步骤 3:配置基本信息
- 知识库名称:例如
company_docs_kb - 知识库描述:描述知识库用途(可选)
- 知识库类型:通用 / 专业领域
步骤 4:配置向量参数
嵌入模型:选择嵌入模型
- OpenAI text-embedding-ada-002
- BGE-M3
- 自定义模型
向量维度:根据模型自动设置
索引类型:IVF_FLAT / HNSW / IVF_PQ
步骤 5:配置切分策略
切分方式:
- 按字符数切分
- 按段落切分
- 按语义切分
块大小:每个文本块的大小(字符数)
重叠大小:相邻块的重叠大小
步骤 6:创建知识库
点击 创建 按钮完成创建。
2. 上传文档
步骤 1:进入知识库详情
点击知识库名称进入详情页面。
步骤 2:上传文档
- 点击 上传文档 按钮
- 选择本地文件
- 等待上传完成
系统会自动:
- 解析文档内容
- 切分文本
- 生成向量
- 建立索引
步骤 3:查看处理状态
在文档列表中可以看到处理状态:
| 文件名 | 大小 | 状态 | 文本块数 | 向量化进度 | 操作 |
|---|---|---|---|---|---|
| doc1.pdf | 2.3 MB | 已完成 | 150 | 100% | 查看详情 |
| doc2.txt | 156 KB | 处理中 | - | 50% | 查看详情 |
| doc3.md | 45 KB | 等待中 | - | 0% | 查看详情 |
3. 向量检索
步骤 1:进入检索页面
在知识库详情页面,点击 向量检索 标签。
步骤 2:输入查询
在搜索框输入查询内容,例如:
如何使用 DataMate 进行数据清洗?
步骤 3:查看检索结果
系统返回最相关的文本块及其相似度分数:
| 排名 | 文本块 | 相似度 | 来源文档 | 操作 |
|---|---|---|---|---|
| 1 | DataMate 的数据清洗模块… | 0.92 | user_guide.pdf | 查看 |
| 2 | 配置清洗任务… | 0.87 | tutorial.md | 查看 |
| 3 | 清洗算子列表… | 0.81 | reference.txt | 查看 |
高级检索
点击 高级检索,可以:
- 设置 Top-K:返回前 K 个结果(默认 5)
- 设置阈值:过滤低于相似度阈值的结果
- 过滤文档:限定检索范围
- 重排序:使用重排序模型优化结果
4. 知识库问答(RAG)
步骤 1:启用 RAG
在知识库详情页面,点击 RAG 问答 标签。
步骤 2:配置 RAG 参数
- 大语言模型:选择使用的 LLM
- 检索数量:检索的文本块数量
- 温度:控制生成随机性
- 提示词模板:自定义问答模板
步骤 3:进行问答
在对话框输入问题,例如:
用户:DataMate 支持哪些数据清洗算子?
助手:DataMate 支持丰富的数据清洗算子,包括:
1. 数据质量算子:去重、空值处理、异常值检测...
2. 文本清洗算子:去除特殊字符、大小写转换...
3. 图像清洗算子:格式转换、质量检测...
[来源:user_guide.pdf, tutorial.md]
助手会:
- 检索相关文本块
- 基于检索内容生成答案
- 标注答案来源
高级功能
文本切分策略
字符切分
按固定字符数切分:
- 块大小:500 字符
- 重叠:50 字符
段落切分
按段落边界切分:
- 保持段落完整性
- 适合结构化文档
语义切分
基于语义相似度切分:
- 保持语义完整性
- 适合长文档
- 需要额外模型
自定义嵌入模型
使用本地模型
- 部署本地嵌入模型服务
- 在知识库配置中选择自定义模型
- 填写模型服务地址
示例:
模型服务地址:http://localhost:8000/embeddings
请求格式:
{
"texts": ["文本1", "文本2"],
"model": "bge-m3"
}
使用 OpenAI
{
"provider": "openai",
"model": "text-embedding-ada-002",
"api_key": "your-api-key"
}
知识库管理
更新知识库
当文档变更时,可以:
- 重新索引:重新生成所有文档的向量
- 增量更新:只更新变更的文档
- 删除文档:从知识库中删除文档
导出知识库
支持导出:
- 文档列表:导出为 CSV
- 向量数据:导出为 NPY/CSV
- 元数据:导出为 JSON
知识库统计
查看知识库统计信息:
- 文档数量:总文档数
- 文本块数量:总文本块数
- 向量数量:总向量数
- 存储大小:向量存储大小
- 更新时间:最后更新时间
多知识库管理
创建多个知识库
可以根据不同主题创建多个知识库:
product_kb:产品文档technical_kb:技术文档hr_kb:人力资源文档
联合检索
在多个知识库中同时检索:
- 选择要检索的知识库
- 执行检索
- 结果汇总并排序
最佳实践
1. 文档准备
上传文档前的准备工作:
- 格式统一:转换为统一的格式(如 PDF、Markdown)
- 清理内容:删除无关内容(页眉页脚、广告等)
- 结构化:保持良好的文档结构
- 元数据:添加文档元数据(作者、日期、标签等)
2. 切分策略选择
根据文档类型选择:
| 文档类型 | 推荐策略 | 块大小 |
|---|---|---|
| 技术文档 | 段落切分 | - |
| 长报告 | 语义切分 | - |
| 短文本 | 字符切分 | 500 |
| 代码 | 字符切分 | 300 |
3. 向量参数调优
根据需求调整:
| 场景 | 向量维度 | 索引类型 |
|---|---|---|
| 高精度 | 1536 | HNSW |
| 快速检索 | 768 | IVF_FLAT |
| 大规模 | 512 | IVF_PQ |
4. RAG 提示词设计
设计有效的 RAG 提示词:
你是一个专业的客服助手。请基于以下知识库内容回答用户问题。
知识库内容:
{context}
用户问题:
{question}
回答要求:
1. 只基于知识库内容回答
2. 如果知识库中没有相关信息,明确告知
3. 回答要准确、详细
4. 标注信息来源
请回答:
常见问题
Q: 文档上传后一直处于"处理中"状态?
A: 检查以下项目:
- 文档格式:确保文档格式被支持
- 文档大小:单个文档不超过 100MB
- 向量服务:检查向量服务是否正常运行
- 查看日志:查看详细错误信息
Q: 检索结果不准确?
A: 优化建议:
- 调整切分策略:尝试不同的切分方式
- 增加块大小:增加上下文信息
- 使用重排序:启用重排序模型
- 优化查询:使用更明确的查询语句
- 更换嵌入模型:尝试其他嵌入模型
Q: RAG 回答质量不佳?
A: 改进建议:
- 增加检索数量:检索更多相关文本块
- 优化提示词:改进问答提示词模板
- 更换 LLM:尝试更强大的模型
- 人工审核:人工审核和优化回答
Q: 如何处理大文档?
A: 大文档处理建议:
- 拆分文档:将大文档拆分为多个小文档
- 分批上传:分批上传和处理
- 使用语义切分:保持语义完整性
- 异步处理:选择异步处理模式
Q: 如何更新知识库?
A: 知识库更新方式:
- 单个文档更新:删除旧文档,上传新文档
- 批量更新:使用批量导入功能
- 全量重建:清空知识库,重新上传
- API 更新:通过 API 接口更新
API 参考
详细的 API 文档请参考:
相关文档
3.8 - 算子市场
算子市场提供丰富的数据处理算子,支持自定义算子开发。
功能概述
算子市场模块提供:
- 内置算子:丰富的内置数据处理算子
- 算子发布:发布和分享自定义算子
- 算子安装:安装第三方算子
- 自定义开发:开发自定义算子
内置算子
数据清洗算子
| 算子 | 功能 | 输入 | 输出 |
|---|---|---|---|
| 去重算子 | 删除重复数据 | 数据集 | 去重数据 |
| 空值处理 | 处理空值 | 数据集 | 填充数据 |
| 格式转换 | 转换数据格式 | 原格式 | 新格式 |
| 类型转换 | 转换数据类型 | 原类型 | 新类型 |
文本处理算子
| 算子 | 功能 |
|---|---|
| 文本分词 | 中文分词 |
| 去除停用词 | 删除常见停用词 |
| 文本清洗 | 清洗特殊字符 |
| 情感分析 | 分析文本情感 |
图像处理算子
| 算子 | 功能 |
|---|---|
| 格式转换 | 转换图像格式 |
| 尺寸调整 | 调整图像大小 |
| 质量检测 | 检测图像质量 |
| 特征提取 | 提取图像特征 |
数据增强算子
| 算子 | 功能 |
|---|---|
| 文本增强 | 同义词替换、回译 |
| 图像增强 | 旋转、裁剪、颜色调整 |
| 数据合成 | 基于模型的数据合成 |
快速开始
1. 浏览算子
步骤 1:进入算子市场
在左侧导航栏选择 算子市场。
步骤 2:浏览算子
在算子市场页面,可以看到所有可用算子:
| 算子名称 | 类别 | 功能描述 | 评分 | 安装数 | 操作 |
|---|---|---|---|---|---|
| 文本清洗算子 | 文本处理 | 清洗文本特殊字符 | ⭐⭐⭐⭐⭐ | 1.2K | 查看 安装 |
| 图像去重算子 | 图像处理 | 基于内容去重 | ⭐⭐⭐⭐ | 856 | 查看 安装 |
| 数据合成算子 | 数据增强 | 使用 LLM 合成数据 | ⭐⭐⭐⭐⭐ | 2.3K | 查看 安装 |
步骤 3:查看算子详情
点击算子名称或 查看 按钮,可以看到:
- 算子简介:功能和用途
- 使用示例:如何使用算子
- 输入输出:输入输出格式
- 参数说明:可配置参数
- 用户评价:其他用户的评价
2. 安装算子
安装内置算子
内置算子默认已安装,可以直接使用。
安装第三方算子
- 在算子详情页,点击 安装 按钮
- 等待安装完成
- 安装后可以在数据清洗等模块中使用
3. 使用算子
安装算子后,可以在以下场景使用:
数据清洗
- 创建数据清洗任务
- 在清洗流程中添加算子节点
- 配置算子参数
- 执行清洗任务
流水线编排
- 创建流水线
- 添加算子节点
- 配置算子参数
- 执行流水线
4. 开发自定义算子
创建算子
- 在算子市场页,点击 创建算子 按钮
- 填写算子信息:
- 算子名称:例如
my_text_cleaner - 算子类别:选择类别
- 功能描述:描述算子功能
- 版本号:例如
1.0.0
- 算子名称:例如
编写算子代码
Python 算子示例:
from typing import Dict, Any
class MyTextCleaner:
"""自定义文本清洗算子"""
def __init__(self, config: Dict[str, Any]):
"""
初始化算子
Args:
config: 算子配置
- remove_special_chars: 是否去除特殊字符
- to_lowercase: 是否转为小写
"""
self.remove_special_chars = config.get('remove_special_chars', True)
self.to_lowercase = config.get('to_lowercase', True)
def process(self, data: Any) -> Any:
"""
处理数据
Args:
data: 输入数据
Returns:
处理后的数据
"""
if isinstance(data, str):
result = data
if self.to_lowercase:
result = result.lower()
if self.remove_special_chars:
# 去除特殊字符
import re
result = re.sub(r'[^\w\s]', '', result)
return result
return data
def get_config_schema(self) -> Dict[str, Any]:
"""
获取配置模式
Returns:
配置模式定义
"""
return {
"type": "object",
"properties": {
"remove_special_chars": {
"type": "boolean",
"title": "去除特殊字符",
"default": True
},
"to_lowercase": {
"type": "boolean",
"title": "转为小写",
"default": True
}
}
}
打包算子
- 创建算子目录结构:
my_text_cleaner/
├── __init__.py
├── operator.py # 算子代码
├── config.json # 配置文件
├── README.md # 说明文档
└── requirements.txt # 依赖列表
- 打包为 ZIP 文件
发布算子
- 在创建算子页,上传算子包
- 填写算子信息
- 点击 发布 按钮
发布选项
- 私有算子:仅自己可见
- 公开算子:所有人可见
- 团队共享:团队成员可见
高级功能
算子版本管理
创建新版本
- 进入算子详情页
- 点击 版本 标签
- 点击 创建版本
- 上传新版本代码
- 填写版本说明
版本回退
如果新版本有问题,可以回退到旧版本。
算子测试
单元测试
为算子编写单元测试:
import unittest
class TestMyTextCleaner(unittest.TestCase):
def setUp(self):
config = {
'remove_special_chars': True,
'to_lowercase': True
}
self.cleaner = MyTextCleaner(config)
def test_lowercase(self):
input_text = "Hello World"
output = self.cleaner.process(input_text)
self.assertEqual(output, "hello world")
def test_remove_special_chars(self):
input_text = "Hello!!! World..."
output = self.cleaner.process(input_text)
self.assertEqual(output, "hello world")
在线测试
在算详情页,点击 测试 按钮:
- 输入测试数据
- 配置算子参数
- 执行测试
- 查看输出结果
算子权限管理
权限级别
| 级别 | 说明 |
|---|---|
| 私有 | 仅创建者可见和使用 |
| 团队 | 团队成员可见和使用 |
| 公开 | 所有用户可见和使用 |
权限设置
- 进入算子详情页
- 点击 设置 标签
- 修改权限级别
- 保存设置
最佳实践
1. 算子设计
好的算子设计:
- 单一职责:每个算子只做一件事
- 可配置:提供丰富的配置选项
- 错误处理:完善的错误处理机制
- 性能优化:考虑大数据量场景
2. 文档编写
完善的文档应该包含:
- 功能说明:清晰描述算子功能
- 使用示例:提供使用示例
- 参数说明:详细说明每个参数
- 注意事项:说明使用注意事项
3. 测试覆盖
充分的测试:
- 单元测试:测试核心功能
- 边界测试:测试边界情况
- 性能测试:测试大数据量场景
常见问题
Q: 算子执行失败怎么办?
A: 排查步骤:
- 查看日志:查看详细错误信息
- 检查配置:确认参数配置正确
- 检查数据:确认输入数据格式正确
- 本地测试:在本地环境测试算子
Q: 如何优化算子性能?
A: 优化建议:
- 减少内存使用:使用生成器、迭代器
- 并行处理:使用多进程/多线程
- 批量处理:批量处理数据
- 缓存结果:缓存重复计算
Q: 如何分享算子?
A: 分享方式:
- 公开发布:发布为公开算子
- 团队共享:团队内共享
- 导出分享:导出算子包文件分享
相关文档
3.9 - 流水线编排
流水线编排模块提供拖拽式可视化界面,帮助您设计和管理复杂的数据处理流程。
功能概述
流水线编排模块提供:
- 可视化设计器:拖拽式流程设计
- 丰富的节点类型:数据处理、条件判断、循环等
- 流程执行:自动执行和监控流程
- 模板管理:保存和复用流程模板
- 版本管理:流程版本控制
节点类型
数据节点
| 节点 | 功能 | 配置 |
|---|---|---|
| 输入数据集 | 从数据集读取数据 | 选择数据集 |
| 输出数据集 | 写入数据到数据集 | 选择数据集 |
| 数据采集 | 执行数据采集任务 | 选择采集任务 |
| 数据清洗 | 执行数据清洗任务 | 选择清洗任务 |
| 数据标注 | 执行数据标注任务 | 选择标注任务 |
| 数据合成 | 执行数据合成任务 | 选择合成任务 |
| 数据评估 | 执行数据评估任务 | 选择评估任务 |
逻辑节点
| 节点 | 功能 | 配置 |
|---|---|---|
| 条件分支 | 根据条件执行不同分支 | 条件表达式 |
| 循环 | 重复执行节点 | 循环次数/条件 |
| 并行 | 并行执行多个分支 | 分支数量 |
| 等待 | 等待指定时间 | 等待时长 |
| 跳转 | 跳转到指定节点 | 目标节点 |
算子节点
| 节点 | 功能 | 配置 |
|---|---|---|
| 清洗算子 | 执行单个清洗算子 | 算子类型、参数 |
| 合成算子 | 执行数据合成 | 指令模板、参数 |
| 自定义算子 | 执行自定义算子 | 算子文件、参数 |
集成节点
| 节点 | 功能 | 配置 |
|---|---|---|
| HTTP 请求 | 发送 HTTP 请求 | URL、方法、参数 |
| API 调用 | 调用 DataMate API | API 端点、参数 |
| 消息队列 | 发送/接收消息 | 队列配置 |
| Webhook | 触发 Webhook | Webhook URL |
快速开始
1. 创建流水线
步骤 1:进入流水线编排页面
在左侧导航栏选择 流水线编排。
步骤 2:创建流水线
点击右上角 创建流水线 按钮。
步骤 3:填写基本信息
- 流水线名称:例如
data_processing_pipeline - 流水线描述:描述流水线用途(可选)
- 标签:添加标签(可选)
步骤 4:进入流程设计器
点击 创建 后,自动进入流程设计器。
2. 设计流程
步骤 1:添加节点
- 从左侧节点库拖拽节点到画布
- 或双击节点库中的节点
示例流程:
输入数据集 → 数据清洗 → 条件分支
├── 满足条件 → 数据标注 → 输出数据集
└── 不满足条件 → 数据合成 → 输出数据集
步骤 2:配置节点
点击节点,在右侧配置面板填写参数:
输入数据集节点:
- 选择数据集:
raw_data - 数据过滤:(可选)
数据清洗节点:
- 清洗任务:选择已创建的清洗任务
- 失败策略:跳过 / 终止
条件分支节点:
- 条件表达式:
{quality_score} > 0.8
步骤 3:连接节点
- 从源节点的输出端口拖拽到目标节点的输入端口
- 或选择两个节点后点击连接按钮
步骤 4:保存流程
点击右上角 保存 按钮保存流程。
3. 执行流水线
步骤 1:进入执行页面
在流水线列表页,点击流水线名称进入详情。
步骤 2:执行流水线
点击 立即执行 按钮。
步骤 3:监控执行
在执行监控页面可以看到:
- 执行状态:运行中 / 已完成 / 失败
- 执行进度:当前节点、总进度
- 节点状态:每个节点的执行状态
- 执行日志:详细的执行日志
示例执行状态:
[✓] 输入数据集 - 已完成 (1000 条记录)
[✓] 数据清洗 - 已完成 (950 条记录)
[→] 条件分支 - 运行中
[→] 分支 1 (满足条件) - 等待中
[→] 分支 2 (不满足条件) - 运行中
[✓] 数据合成 - 已完成 (500 条记录)
[→] 输出数据集 - 运行中
4. 管理流水线
查看流水线列表
在流水线编排页面,可以看到所有流水线:
| 流水线名称 | 状态 | 最后执行时间 | 执行次数 | 操作 |
|---|---|---|---|---|
| 数据处理流程 | 已启用 | 2024-01-15 | 15 | 执行 编辑 |
| 模型训练流程 | 已禁用 | 2024-01-14 | 8 | 执行 编辑 |
编辑流水线
点击 编辑 按钮可以修改流程设计。
启用/禁用流水线
点击 启用/禁用 按钮切换流水线状态。
删除流水线
点击 删除 按钮删除流水线(需确认)。
高级功能
流程模板
保存为模板
- 设计好流程后
- 点击 保存为模板
- 输入模板名称和描述
- 点击保存
使用模板
- 创建流水线时,点击 使用模板
- 从模板列表选择模板
- 系统加载模板到设计器
参数化流程
流程中可以使用参数,实现动态配置:
定义参数
在流水线配置中定义参数:
{
"parameters": [
{
"name": "input_dataset",
"type": "dataset",
"required": true,
"description": "输入数据集"
},
{
"name": "threshold",
"type": "number",
"default": 0.8,
"description": "质量阈值"
}
]
}
使用参数
在节点配置中使用参数:
条件表达式:{quality_score} > ${threshold}
定时执行
配置定时执行流水线:
- 在流水线详情页,点击 定时执行
- 添加定时规则:
- Cron 表达式:
0 0 2 * * ?(每天凌晨 2 点) - 执行参数:填写参数值
- Cron 表达式:
- 启用定时任务
事件触发
配置事件触发:
- 在流水线详情页,点击 事件触发
- 添加触发事件:
- 数据上传完成
- 任务执行完成
- Webhook 触发
- 配置触发条件
错误处理
节点级错误处理
为每个节点配置失败策略:
- 跳过:跳过失败节点,继续执行
- 重试:自动重试(可配置重试次数)
- 终止:终止整个流程
流程级错误处理
配置全局错误处理:
- 失败通知:发送通知(邮件、Webhook)
- 回滚操作:执行回滚流程
- 记录日志:详细记录错误信息
版本管理
创建版本
在流水线编辑页,点击 保存版本:
- 输入版本号:v1.0.0
- 输入版本说明
- 点击保存
查看版本历史
在流水线详情页,点击 版本历史:
| 版本 | 创建时间 | 创建者 | 说明 | 操作 |
|---|---|---|---|---|
| v1.0.0 | 2024-01-15 | admin | 初始版本 | 查看 恢复 |
| v1.1.0 | 2024-01-16 | admin | 添加数据清洗 | 查看 恢复 |
恢复版本
点击版本的 恢复 按钮,将流程恢复到该版本。
最佳实践
1. 流程设计
推荐的设计原则:
- 模块化:将复杂流程拆分为多个子流程
- 可重用:使用模板和参数化
- 可维护:添加注释和说明
- 可测试:先测试单个节点再组合
2. 性能优化
优化流程性能:
- 并行执行:使用并行节点提高效率
- 减少数据传输:尽量在数据所在位置处理
- 批量处理:使用批量操作代替循环
- 缓存中间结果:避免重复计算
3. 错误处理
完善的错误处理:
- 设置超时:为每个节点设置合理的超时时间
- 配置重试:对可能失败的操作配置重试
- 记录日志:详细记录执行日志
- 通知机制:关键节点失败时发送通知
4. 监控和调试
有效的监控调试:
- 实时监控:监控流程执行状态
- 查看日志:查看详细的执行日志
- 断点调试:在关键节点设置断点
- 数据预览:预览中间结果
常见问题
Q: 流程执行失败怎么办?
A: 排查步骤:
- 查看执行日志:获取详细错误信息
- 检查节点配置:确认节点参数正确
- 检查数据:确认输入数据格式正确
- 单独测试:单独执行问题节点
- 检查依赖:确认依赖服务正常
Q: 如何优化流程性能?
A: 优化建议:
- 并行化:使用并行节点并行执行
- 批量操作:合并多个小操作
- 减少数据传输:尽量在本地处理
- 缓存结果:缓存中间结果避免重复计算
- 优化节点顺序:先过滤数据再处理
Q: 如何处理复杂的条件逻辑?
A: 处理复杂逻辑:
- 使用多个条件节点:拆分复杂条件
- 使用表达式:编写复杂的条件表达式
- 自定义脚本:使用自定义算子处理复杂逻辑
- 子流程:将复杂逻辑封装为子流程
Q: 流程可以嵌套吗?
A: 支持流程嵌套:
- 子流程节点:调用其他流程作为子流程
- 参数传递:在父子流程间传递参数
- 返回值:子流程可以返回结果给父流程
Q: 如何调试流程?
A: 调试方法:
- 单步执行:逐步执行流程观察中间结果
- 数据预览:预览每个节点的输入输出
- 日志查看:查看详细的执行日志
- 断点设置:在关键节点设置断点
- 模拟执行:使用测试数据模拟执行
相关文档
3.10 - Agent 对话
Agent 对话模块集成大语言模型,提供智能问答和知识库检索能力。
功能概述
Agent 对话模块提供:
- 智能对话:基于大模型的自然语言对话
- 知识库问答:集成 RAG 的知识库问答
- 多轮对话:支持上下文的多轮对话
- 对话管理:对话历史和管理
- 快捷指令:常用操作的快捷指令
快速开始
1. 访问 Agent
在左侧导航栏选择 Agent 对话,或直接访问:
- 本地部署:http://localhost:30000/chat
- 生产环境:https://your-domain/chat
2. 开始对话
在对话框中输入问题,例如:
用户:DataMate 支持哪些数据格式?
助手:DataMate 支持多种数据格式:
图像:JPG、PNG、GIF、BMP、WebP
文本:TXT、MD、JSON、CSV
音频:MP3、WAV、FLAC、AAC
视频:MP4、AVI、MOV、MKV
这些格式可以在数据管理模块中上传和管理。
3. 使用知识库问答
启用知识库
- 点击 设置 按钮
- 在 知识库 设置中,选择要使用的知识库
- 保存设置
进行知识库问答
用户:如何创建数据清洗任务?
助手:根据知识库文档,创建数据清洗任务步骤如下:
1. 进入数据处理页面
2. 点击创建任务按钮
3. 配置基本信息(任务名称、源数据集、输出数据集)
4. 配置清洗流程(拖拽算子到画布)
5. 配置执行参数
6. 创建并执行任务
详细的配置说明请参考用户指南。
[来源:user_guide.md, data_cleansing.md]
高级功能
对话模式
通用对话
使用大模型进行通用对话,不使用知识库:
- 适合:闲聊、常识性问题、创意任务
- 模型:GPT-4、Claude 3、文心一言等
知识库问答
基于知识库内容回答问题:
- 适合:产品文档、技术文档、企业知识
- 特点:答案基于知识库,标注来源
混合模式
结合通用对话和知识库问答:
- 先检索知识库
- 如果知识库中没有相关信息,使用通用对话
快捷指令
使用快捷指令快速执行操作:
| 指令 | 功能 | 示例 |
|---|---|---|
/dataset | 查询数据集 | /dataset list |
/task | 查询任务 | /task status |
/help | 显示帮助 | /help |
/clear | 清空对话 | /clear |
对话历史
查看历史
- 点击左侧 历史记录 标签
- 选择历史对话
- 查看对话内容
继续对话
点击历史对话可以继续之前的对话。
导出对话
导出对话记录:
- Markdown:导出为 Markdown 文件
- JSON:导出为 JSON 格式
- PDF:导出为 PDF 文件
提示词模板
创建提示词模板用于特定场景:
技术支持模板
你是一个专业的技术支持助手。请基于 DataMate 知识库回答用户问题。
要求:
1. 只基于知识库内容回答
2. 如果知识库中没有相关信息,明确告知用户
3. 回答要准确、详细
4. 提供操作步骤时,要清晰明了
5. 标注信息来源
用户问题:{question}
知识库内容:
{context}
请回答:
数据分析模板
你是一个数据分析专家。请分析以下数据并提供洞察。
数据:
{data}
分析要求:
1. 数据概览
2. 关键发现
3. 趋势分析
4. 建议和结论
请提供分析报告:
最佳实践
1. 有效的提问
获得更好的回答:
- 明确具体:问题描述要清晰明确
- 提供上下文:提供相关的背景信息
- 分步骤提问:复杂问题拆分为多个小问题
好的提问示例:
❌ 怎么用 DataMate?
✅ 如何在 DataMate 中创建一个数据清洗任务,清洗包含空值和重复值的 CSV 文件?
2. 知识库使用
充分利用知识库:
- 选择合适知识库:根据问题选择对应的知识库
- 查看来源:查看答案来源文档
- 验证信息:重要信息要验证来源文档
3. 对话管理
管理对话历史:
- 定期清理:删除不需要的对话历史
- 重要对话:导出保存重要对话
- 使用标题:为对话添加描述性标题
常见问题
Q: Agent 回答不准确怎么办?
A: 改进建议:
- 优化提问:更明确、更具体的问题
- 检查知识库:确认知识库中有相关信息
- 更换模型:尝试使用更强大的模型
- 提供上下文:提供更多背景信息
- 分步提问:将复杂问题拆分
Q: Agent 不回答我的问题?
A: 可能原因:
- 知识库中没有:检查知识库是否有相关内容
- 问题不明确:重新表述问题
- 知识库未启用:检查知识库设置
- 模型限制:某些模型可能有内容限制
Q: 如何切换知识库?
A: 切换步骤:
- 点击 设置 按钮
- 在知识库设置中,选择其他知识库
- 保存设置
- 开始新的对话
Q: 对话历史保存在哪里?
A: 存储位置:
- 本地存储:存储在浏览器本地
- 云端存储:(可选)存储在服务器
- 导出保存:导出为文件保存
相关文档
4 - API 参考
DataMate 提供完整的 REST API,支持所有核心功能的编程访问。
API 概述
DataMate API 基于 REST 架构设计,提供以下服务:
- 数据管理 API:数据集和文件管理
- 数据清洗 API:数据清洗任务管理
- 数据采集 API:数据采集任务管理
- 数据标注 API:数据标注任务管理
- 数据合成 API:数据合成任务管理
- 数据评估 API:数据评估任务管理
- 算子市场 API:算子管理
- RAG 索引 API:知识库和向量检索
- 流水线编排 API:流程编排管理
认证方式
DataMate 支持两种认证方式:
JWT 认证(推荐)
GET /api/v1/data-management/datasets
Authorization: Bearer <your-jwt-token>
获取 JWT Token:
POST /api/v1/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "password"
}
响应:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 86400
}
API Key 认证
GET /api/v1/data-management/datasets
X-API-Key: <your-api-key>
通用响应格式
成功响应
{
"code": 200,
"message": "success",
"data": {
// 响应数据
}
}
错误响应
{
"code": 400,
"message": "Bad Request",
"error": "Invalid parameter: datasetId",
"timestamp": "2024-01-15T10:30:00Z",
"path": "/api/v1/data-management/datasets"
}
分页响应
{
"content": [],
"page": 0,
"size": 20,
"totalElements": 100,
"totalPages": 5,
"first": true,
"last": false
}
API 端点
数据管理
| 端点 | 方法 | 描述 |
|---|---|---|
/data-management/datasets | GET | 获取数据集列表 |
/data-management/datasets | POST | 创建数据集 |
/data-management/datasets/{id} | GET | 获取数据集详情 |
/data-management/datasets/{id} | PUT | 更新数据集 |
/data-management/datasets/{id} | DELETE | 删除数据集 |
/data-management/datasets/{id}/files | GET | 获取文件列表 |
/data-management/datasets/{id}/files/upload | POST | 上传文件 |
详细文档:数据管理 API
数据清洗
| 端点 | 方法 | 描述 |
|---|---|---|
/data-cleaning/tasks | GET | 获取清洗任务列表 |
/data-cleaning/tasks | POST | 创建清洗任务 |
/data-cleaning/tasks/{id} | GET | 获取任务详情 |
/data-cleaning/tasks/{id} | PUT | 更新任务 |
/data-cleaning/tasks/{id} | DELETE | 删除任务 |
/data-cleaning/tasks/{id}/execute | POST | 执行任务 |
详细文档:数据清洗 API
数据采集
| 端点 | 方法 | 描述 |
|---|---|---|
/data-collection/tasks | GET | 获取采集任务列表 |
/data-collection/tasks | POST | 创建采集任务 |
/data-collection/tasks/{id} | GET | 获取任务详情 |
/data-collection/tasks/{id}/execute | POST | 执行采集任务 |
详细文档:数据采集 API
数据合成
| 端点 | 方法 | 描述 |
|---|---|---|
/data-synthesis/tasks | GET | 获取合成任务列表 |
/data-synthesis/tasks | POST | 创建合成任务 |
/data-synthesis/templates | GET | 获取指令模板列表 |
/data-synthesis/templates | POST | 创建指令模板 |
详细文档:数据合成 API
算子市场
| 端点 | 方法 | 描述 |
|---|---|---|
/operator-market/operators | GET | 获取算子列表 |
/operator-market/operators | POST | 发布算子 |
/operator-market/operators/{id} | GET | 获取算子详情 |
/operator-market/operators/{id}/install | POST | 安装算子 |
详细文档:算子市场 API
RAG 索引
| 端点 | 方法 | 描述 |
|---|---|---|
/rag/knowledge-bases | GET | 获取知识库列表 |
/rag/knowledge-bases | POST | 创建知识库 |
/rag/knowledge-bases/{id}/documents | POST | 上传文档 |
/rag/knowledge-bases/{id}/search | POST | 向量检索 |
详细文档:RAG 索引 API
SDK 和客户端
DataMate 提供多种语言的 SDK:
Python SDK
from datamate import DataMateClient
# 初始化客户端
client = DataMateClient(
base_url="http://localhost:8080",
api_key="your-api-key"
)
# 获取数据集列表
datasets = client.data_management.get_datasets()
# 创建数据集
dataset = client.data_management.create_dataset(
name="my_dataset",
type="text",
description="My dataset"
)
# 上传文件
client.data_management.upload_file(
dataset_id=dataset.id,
file_path="/path/to/file.txt"
)
JavaScript SDK
import { DataMateClient } from '@datamate/sdk';
// 初始化客户端
const client = new DataMateClient({
baseURL: 'http://localhost:8080',
apiKey: 'your-api-key'
});
// 获取数据集列表
const datasets = await client.dataManagement.getDatasets();
// 创建数据集
const dataset = await client.dataManagement.createDataset({
name: 'my_dataset',
type: 'text',
description: 'My dataset'
});
// 上传文件
await client.dataManagement.uploadFile(
dataset.id,
'/path/to/file.txt'
);
错误码
| 错误码 | 说明 |
|---|---|
| 200 | 成功 |
| 201 | 创建成功 |
| 400 | 请求参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 409 | 资源冲突 |
| 500 | 服务器内部错误 |
速率限制
API 调用速率限制:
- 默认限制:1000 次/小时
- 突发限制:100 次/分钟
超过限制返回 429 Too Many Requests。
响应头包含速率限制信息:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1642252800
版本管理
API 版本通过 URL 路径指定:
- 当前版本:
/api/v1/ - 未来版本:
/api/v2/
相关文档
- 开发者指南 - 架构和开发指南
- OpenAPI 规范 - 完整的 OpenAPI 规范
4.1 - 数据管理 API
数据管理 API 提供数据集和文件的创建、查询、更新和删除功能。
基础信息
- Base URL:
http://localhost:8092/api/v1/data-management - 认证方式: JWT / API Key
- Content-Type:
application/json
数据集管理
获取数据集列表
GET /data-management/datasets?page=0&size=20&type=text&status=ACTIVE
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | integer | 否 | 页码,从 0 开始,默认 0 |
| size | integer | 否 | 每页大小,默认 20 |
| type | string | 否 | 数据集类型过滤 |
| tags | string | 否 | 标签过滤,逗号分隔 |
| keyword | string | 否 | 关键词搜索 |
| status | string | 否 | 状态过滤 |
响应示例:
{
"content": [
{
"id": "dataset-001",
"name": "text_dataset",
"description": "文本数据集",
"type": {
"code": "TEXT",
"name": "文本",
"supportedFormats": ["txt", "md", "json"]
},
"status": "ACTIVE",
"tags": [
{"id": "tag-001", "name": "training", "color": "#FF0000"}
],
"fileCount": 1000,
"totalSize": 1073741824,
"completionRate": 85.5,
"createdAt": "2024-01-15T10:00:00Z",
"createdBy": "admin"
}
],
"page": 0,
"size": 20,
"totalElements": 1,
"totalPages": 1,
"first": true,
"last": true
}
创建数据集
POST /data-management/datasets
Content-Type: application/json
{
"name": "my_dataset",
"description": "My dataset description",
"type": "TEXT",
"tags": ["training", "nlp"],
"dataSource": "/data/input",
"targetLocation": "/data/output"
}
请求体参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 数据集名称,1-100 字符 |
| description | string | 否 | 数据集描述,最多 500 字符 |
| type | string | 是 | 数据集类型代码 |
| tags | array | 否 | 标签列表 |
| dataSource | string | 否 | 数据源 |
| targetLocation | string | 否 | 目标位置 |
响应示例:
{
"id": "dataset-002",
"name": "my_dataset",
"description": "My dataset description",
"type": {
"code": "TEXT",
"name": "文本"
},
"status": "ACTIVE",
"tags": [],
"fileCount": 0,
"totalSize": 0,
"completionRate": 0,
"createdAt": "2024-01-15T11:00:00Z",
"createdBy": "admin"
}
获取数据集详情
GET /data-management/datasets/{datasetId}
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| datasetId | string | 是 | 数据集 ID |
响应: 同创建数据集响应
更新数据集
PUT /data-management/datasets/{datasetId}
Content-Type: application/json
{
"name": "updated_dataset",
"description": "Updated description",
"tags": ["training", "updated"]
}
请求体参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 数据集名称 |
| description | string | 否 | 数据集描述 |
| tags | array | 否 | 标签列表 |
| status | string | 否 | 数据集状态 |
删除数据集
DELETE /data-management/datasets/{datasetId}
响应: 204 No Content
文件管理
获取文件列表
GET /data-management/datasets/{datasetId}/files?page=0&size=20
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | integer | 否 | 页码,从 0 开始 |
| size | integer | 否 | 每页大小 |
| fileType | string | 否 | 文件类型过滤 |
| status | string | 否 | 状态过滤 |
响应示例:
{
"content": [
{
"id": "file-001",
"fileName": "document.txt",
"originalName": "document.txt",
"fileType": "txt",
"fileSize": 1024,
"status": "COMPLETED",
"filePath": "/dataset-001/document.txt",
"uploadTime": "2024-01-15T10:30:00Z",
"uploadedBy": "admin"
}
],
"page": 0,
"size": 20,
"totalElements": 1,
"totalPages": 1
}
上传文件(预上传)
POST /data-management/datasets/{datasetId}/files/upload/pre-upload
Content-Type: application/json
{
"hasArchive": false,
"totalFileNum": 1,
"totalSize": 1024,
"prefix": "documents/"
}
请求体参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| hasArchive | boolean | 否 | 是否为压缩包 |
| totalFileNum | integer | 是 | 总文件数 |
| totalSize | integer | 是 | 总文件大小(字节) |
| prefix | string | 否 | 目标子目录前缀 |
响应: 请求 ID (string)
上传文件(分片上传)
POST /data-management/datasets/{datasetId}/files/upload/chunk
Content-Type: multipart/form-data
reqId: <pre-upload-request-id>
fileNo: 1
fileName: document.txt
totalChunkNum: 3
chunkNo: 1
file: <binary-data>
checkSumHex: <checksum>
表单参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| reqId | string | 是 | 预上传请求 ID |
| fileNo | integer | 是 | 文件编号 |
| fileName | string | 是 | 文件名 |
| totalChunkNum | integer | 是 | 总分片数 |
| chunkNo | integer | 是 | 当前分片编号(从 1 开始) |
| file | file | 是 | 分片二进制数据 |
| checkSumHex | string | 否 | 分片校验和 |
下载文件
GET /data-management/datasets/{datasetId}/files/{fileId}/download
响应: 文件二进制内容
批量下载文件(ZIP)
GET /data-management/datasets/{datasetId}/files/download
响应: ZIP 压缩包
删除文件
DELETE /data-management/datasets/{datasetId}/files/{fileId}
响应: 204 No Content
创建目录
POST /data-management/datasets/{datasetId}/files/directories
Content-Type: application/json
{
"parentPrefix": "documents/",
"directoryName": "subfolder"
}
数据集类型
获取数据集类型列表
GET /data-management/dataset-types
响应示例:
[
{
"code": "TEXT",
"name": "文本",
"description": "文本数据集",
"supportedFormats": ["txt", "md", "json", "csv"],
"icon": "file-text"
},
{
"code": "IMAGE",
"name": "图像",
"description": "图像数据集",
"supportedFormats": ["jpg", "png", "gif", "bmp"],
"icon": "file-image"
}
]
标签管理
获取标签列表
GET /data-management/tags?keyword=training
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| keyword | string | 否 | 标签名称关键词 |
响应示例:
[
{
"id": "tag-001",
"name": "training",
"color": "#FF0000",
"description": "训练数据",
"usageCount": 15
}
]
创建标签
POST /data-management/tags
Content-Type: application/json
{
"name": "validation",
"color": "#00FF00",
"description": "验证数据"
}
请求体参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 标签名称,1-50 字符 |
| color | string | 否 | 标签颜色,十六进制 |
| description | string | 否 | 标签描述,最多 200 字符 |
统计信息
获取数据集统计
GET /data-management/datasets/{datasetId}/statistics
响应示例:
{
"totalFiles": 1000,
"completedFiles": 850,
"totalSize": 1073741824,
"completionRate": 85.0,
"fileTypeDistribution": {
"txt": 600,
"md": 250,
"json": 150
},
"statusDistribution": {
"COMPLETED": 850,
"PROCESSING": 100,
"ERROR": 50
}
}
错误响应
400 Bad Request
{
"error": "INVALID_PARAMETER",
"message": "Invalid parameter: datasetId",
"timestamp": "2024-01-15T10:30:00Z",
"path": "/api/v1/data-management/datasets"
}
404 Not Found
{
"error": "DATASET_NOT_FOUND",
"message": "Dataset not found: dataset-001",
"timestamp": "2024-01-15T10:30:00Z",
"path": "/api/v1/data-management/datasets/dataset-001"
}
SDK 使用示例
Python
from datamate import DataMateClient
client = DataMateClient(
base_url="http://localhost:8080",
api_key="your-api-key"
)
# 获取数据集列表
datasets = client.data_management.get_datasets(
type="TEXT",
status="ACTIVE"
)
# 创建数据集
dataset = client.data_management.create_dataset(
name="my_dataset",
type="TEXT",
description="My dataset"
)
# 上传文件
with open("document.txt", "rb") as f:
client.data_management.upload_file(
dataset_id=dataset.id,
file=f,
file_name="document.txt"
)
JavaScript
import { DataMateClient } from '@datamate/sdk';
const client = new DataMateClient({
baseURL: 'http://localhost:8080',
apiKey: 'your-api-key'
});
// 获取数据集列表
const datasets = await client.dataManagement.getDatasets({
type: 'TEXT',
status: 'ACTIVE'
});
// 创建数据集
const dataset = await client.dataManagement.createDataset({
name: 'my_dataset',
type: 'TEXT',
description: 'My dataset'
});
// 上传文件
await client.dataManagement.uploadFile(
dataset.id,
'document.txt',
fileData
);
cURL
# 获取数据集列表
curl -X GET "http://localhost:8092/api/v1/data-management/datasets?page=0&size=20" \
-H "Authorization: Bearer your-jwt-token"
# 创建数据集
curl -X POST "http://localhost:8092/api/v1/data-management/datasets" \
-H "Authorization: Bearer your-jwt-token" \
-H "Content-Type: application/json" \
-d '{
"name": "my_dataset",
"type": "TEXT",
"description": "My dataset"
}'
相关文档
- 数据管理 - 用户指南
- OpenAPI 规范 - 完整规范
5 - 开发者指南
开发者指南介绍 DataMate 的技术架构、开发环境和贡献流程。
DataMate 是一个企业级的数据处理平台,采用微服务架构,支持大规模数据处理和自定义扩展。
架构文档
开发指南
技术栈
前端
| 技术 | 版本 | 说明 |
|---|---|---|
| React | 18.x | UI 框架 |
| TypeScript | 5.x | 类型安全 |
| Ant Design | 5.x | UI 组件库 |
| Redux Toolkit | 2.x | 状态管理 |
| Vite | 5.x | 构建工具 |
后端 (Java)
| 技术 | 版本 | 说明 |
|---|---|---|
| Java | 21 | 运行时环境 |
| Spring Boot | 3.5.6 | 应用框架 |
| Spring Cloud | 2023.x | 微服务框架 |
| MyBatis Plus | 3.x | ORM 框架 |
后端 (Python)
| 技术 | 版本 | 说明 |
|---|---|---|
| Python | 3.11+ | 运行时环境 |
| FastAPI | 0.100+ | Web 框架 |
| LangChain | 0.1+ | LLM 框架 |
| Ray | 2.x | 分布式计算 |
项目结构
DataMate/
├── backend/ # Java 后端
│ ├── services/ # 微服务模块
│ ├── openapi/ # OpenAPI 规范
│ └── scripts/ # 构建脚本
├── frontend/ # React 前端
│ ├── src/
│ │ ├── components/ # 公共组件
│ │ ├── pages/ # 页面组件
│ │ ├── services/ # API 服务
│ │ └── store/ # Redux store
│ └── package.json
├── runtime/ # Python 运行时
│ └── datamate/ # DataMate 运行时
└── deployment/ # 部署配置
├── docker/ # Docker 配置
└── helm/ # Helm Charts
快速开始
1. 克隆代码
git clone https://github.com/ModelEngine-Group/DataMate.git
cd DataMate
2. 启动服务
# 启动基础服务
make install
# 访问前端
open http://localhost:30000
3. 开发模式
# 后端开发
cd backend/services/main-application
mvn spring-boot:run
# 前端开发
cd frontend
pnpm dev
# Python 服务开发
cd runtime/datamate
python operator_runtime.py --port 8081
核心概念
微服务架构
DataMate 采用微服务架构,每个服务负责特定的业务功能:
- API Gateway:统一入口、路由、认证
- Main Application:核心业务逻辑
- Data Management Service:数据集管理
- Data Cleaning Service:数据清洗
- Data Synthesis Service:数据合成
- Runtime Service:算子执行
算子系统
算子是数据处理的基本单元:
- 内置算子:平台提供的常用算子
- 自定义算子:用户开发的自定义算子
- 算子执行:由 Runtime Service 执行
流水线编排
流水线通过可视化编排实现:
- 节点:数据处理的基本单元
- 连接:节点间的数据流
- 执行:按流程自动执行
扩展开发
开发自定义算子
算子开发指南:
- 算子市场 - 算子使用指南
- Python 算子开发示例
- 算子测试和调试
集成外部系统
- API 集成:通过 REST API 集成
- Webhook:事件通知
- 插件系统:(即将推出)
测试
单元测试
# 后端测试
cd backend
mvn test
# 前端测试
cd frontend
pnpm test
# Python 测试
cd runtime
pytest
集成测试
# 启动测试环境
make test-env-up
# 运行集成测试
make integration-test
# 清理测试环境
make test-env-down
性能优化
后端优化
- 数据库连接池配置
- 查询优化
- 缓存策略
- 异步处理
前端优化
- 代码分割
- 懒加载
- 缓存策略
安全
认证授权
- JWT 认证
- RBAC 权限控制
- API Key 认证
数据安全
- 传输加密(HTTPS/TLS)
- 存储加密
- 敏感数据脱敏
相关资源
- GitHub 仓库
- Issue 追踪
- OpenAPI 规范
- API 参考 - 完整的 API 文档
5.1 - 后端架构
DataMate 后端采用微服务架构,基于 Spring Boot 3.x 和 Spring Cloud 构建。
架构概览
DataMate 后端采用微服务架构,将系统拆分为多个独立的服务:
┌─────────────────────────────────────────────┐
│ API Gateway │
│ (Spring Cloud Gateway) │
│ Port: 8080 │
└──────────────┬──────────────────────────────┘
│
┌───────┴───────┬───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Main │ │ Data │ │ Data │
│ Application │ │ Management │ │ Collection │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
└───────────────┴───────────────┘
│
▼
┌────────────────┐
│ PostgreSQL │
│ Port: 5432 │
└────────────────┘
技术栈
核心框架
| 技术 | 版本 | 用途 |
|---|---|---|
| Java | 21 | 编程语言 |
| Spring Boot | 3.5.6 | 应用框架 |
| Spring Cloud | 2023.x | 微服务框架 |
| MyBatis Plus | 3.5.x | ORM 框架 |
| PostgreSQL Driver | 42.7.x | 数据库驱动 |
支持组件
| 技术 | 版本 | 用途 |
|---|---|---|
| Redis | 5.x | 缓存和消息队列 |
| MinIO | 8.x | 对象存储 |
| Milvus SDK | 2.3.x | 向量数据库 |
| OpenAI API | - | LLM 集成 |
微服务列表
API Gateway
端口: 8080
功能:
- 统一入口
- 路由转发
- 认证授权
- 限流熔断
技术:
- Spring Cloud Gateway
- JWT 认证
- 限流:Redis + Lua
Main Application
端口: 无(内部服务)
功能:
- 用户管理
- 权限管理
- 系统配置
- 任务调度
核心模块:
com.datamate.main
├── auth # 认证授权
├── user # 用户管理
├── permission # 权限管理
├── config # 配置管理
└── scheduler # 任务调度
Data Management Service
端口: 8092
功能:
- 数据集管理
- 文件管理
- 标签管理
- 统计分析
API 端点:
/data-management/datasets- 数据集管理/data-management/datasets/{id}/files- 文件管理/data-management/tags- 标签管理
核心模块:
com.datamate.data.management
├── dataset # 数据集管理
├── file # 文件管理
├── tag # 标签管理
└── statistics # 统计分析
Data Collection Service
端口: 无(内部服务)
功能:
- 数据采集任务管理
- DataX 集成
- 任务执行监控
核心模块:
com.datamate.data.collection
├── task # 任务管理
├── execution # 执行管理
└── datax # DataX 集成
Data Cleaning Service
端口: 无(内部服务)
功能:
- 数据清洗任务管理
- 清洗模板管理
- 算子调用
核心模块:
com.datamate.data.cleaning
├── task # 任务管理
├── template # 模板管理
└── operator # 算子调用
Data Synthesis Service
端口: 无(内部服务)
功能:
- 数据合成任务管理
- 指令模板管理
- LLM 集成
核心模块:
com.datamate.data.synthesis
├── task # 任务管理
├── template # 模板管理
└── llm # LLM 集成
Runtime Service
端口: 8081
功能:
- 算子执行
- Ray 集成
- 任务调度
技术:
- Python + Ray
- FastAPI
- 算子插件系统
数据库设计
主要数据表
用户表 (users)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键 |
| username | VARCHAR(50) | 用户名 |
| password | VARCHAR(255) | 密码(加密) |
| VARCHAR(100) | 邮箱 | |
| role | VARCHAR(20) | 角色 |
| created_at | TIMESTAMP | 创建时间 |
数据集表 (datasets)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | VARCHAR(50) | 主键 |
| name | VARCHAR(100) | 名称 |
| description | TEXT | 描述 |
| type | VARCHAR(20) | 类型 |
| status | VARCHAR(20) | 状态 |
| created_by | VARCHAR(50) | 创建者 |
| created_at | TIMESTAMP | 创建时间 |
任务表 (tasks)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | VARCHAR(50) | 主键 |
| name | VARCHAR(100) | 名称 |
| type | VARCHAR(20) | 任务类型 |
| status | VARCHAR(20) | 状态 |
| config | JSON | 配置 |
| created_at | TIMESTAMP | 创建时间 |
数据库连接配置
spring:
datasource:
url: jdbc:postgresql://localhost:5432/datamate
username: postgres
password: ${DB_PASSWORD:password}
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
服务通信
同步通信
服务间使用 HTTP/REST 进行同步通信:
// 使用 Feign Client
@FeignClient(name = "data-management-service")
public interface DataManagementClient {
@GetMapping("/data-management/datasets/{id}")
DatasetResponse getDataset(@PathVariable String id);
}
异步通信
使用 Redis 实现异步消息队列:
// 发送消息
redisTemplate.convertAndSend("task.created", taskMessage);
// 接收消息
@RedisListener(topic = "task.created")
public void handleTaskCreated(TaskMessage message) {
// 处理任务创建事件
}
认证授权
JWT 认证
// JWT 配置
@Configuration
public class JwtConfig {
@Value("${datamate.jwt.secret}")
private String secret;
@Value("${datamate.jwt.expiration}")
private Long expiration;
}
// JWT 工具类
public class JwtUtil {
public String generateToken(User user) {
// 生成 JWT Token
}
public Claims parseToken(String token) {
// 解析 JWT Token
}
}
权限控制
// RBAC 权限控制
@PreAuthorize("hasRole('ADMIN')")
public void adminOperation() {
// 管理员操作
}
@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
public void userOperation() {
// 用户操作
}
异常处理
统一异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ValidationException.class)
public ResponseEntity<ErrorResponse> handleValidation(ValidationException e) {
return ResponseEntity.badRequest()
.body(new ErrorResponse("INVALID_PARAMETER", e.getMessage()));
}
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse("NOT_FOUND", e.getMessage()));
}
}
配置管理
配置文件
# application.yml
spring:
application:
name: data-management-service
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
# application-dev.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/datamate
# application-prod.yml
spring:
datasource:
url: jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
配置中心
使用 Spring Cloud Config 进行配置管理:
spring:
cloud:
config:
uri: http://config-server:8888
name: ${spring.application.name}
profile: ${spring.profiles.active}
日志管理
日志配置
<!-- logback-spring.xml -->
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/datamate/backend/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/datamate/backend/app-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
性能优化
数据库优化
- 连接池配置
- 查询优化
- 索引优化
- 分页查询
缓存策略
// 使用 Redis 缓存
@Cacheable(value = "datasets", key = "#id")
public Dataset getDataset(String id) {
return datasetRepository.findById(id);
}
@CacheEvict(value = "datasets", key = "#id")
public void deleteDataset(String id) {
datasetRepository.deleteById(id);
}
相关文档
5.2 - 前端架构
DataMate 前端基于 React 18 和 TypeScript 构建,采用现代化前端架构。
架构概览
DataMate 前端采用 SPA(单页应用)架构,使用 React 18 + TypeScript + Ant Design 技术栈:
┌─────────────────────────────────────────────┐
│ Browser │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ React App │
│ ┌──────────────────────────────────────┐ │
│ │ Components │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐│ │
│ │ │ Pages │ │Common UI│ │ Forms ││ │
│ │ └─────────┘ └─────────┘ └─────────┘│ │
│ └──────────────────────────────────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ State Management │ │
│ │ (Redux Toolkit) │ │
│ └──────────────────────────────────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ Services (API) │ │
│ │ (Axios) │ │
│ └──────────────────────────────────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ Routing │ │
│ │ (React Router) │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
技术栈
核心框架
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 18.x | UI 框架 |
| TypeScript | 5.x | 类型安全 |
| Ant Design | 5.x | UI 组件库 |
| Tailwind CSS | 3.x | 样式框架 |
状态管理
| 技术 | 版本 | 用途 |
|---|---|---|
| Redux Toolkit | 2.x | 全局状态管理 |
| React Query | 5.x | 服务器状态管理 |
路由和构建
| 技术 | 版本 | 用途 |
|---|---|---|
| React Router | 6.x | 路由管理 |
| Vite | 5.x | 构建工具 |
项目结构
frontend/
├── public/ # 静态资源
├── src/
│ ├── assets/ # 资源文件
│ ├── components/ # 公共组件
│ │ ├── layout/ # 布局组件
│ │ ├── common/ # 通用组件
│ │ └── charts/ # 图表组件
│ ├── pages/ # 页面组件
│ │ ├── DataCollection/
│ │ ├── DataManagement/
│ │ ├── DataCleansing/
│ │ ├── DataAnnotation/
│ │ ├── SynthesisTask/
│ │ ├── RatioTask/
│ │ ├── DataEvaluation/
│ │ ├── KnowledgeBase/
│ │ ├── OperatorMarket/
│ │ ├── Orchestration/
│ │ └── Agent/
│ ├── services/ # API 服务
│ │ ├── api/ # API 定义
│ │ └── types/ # TypeScript 类型
│ ├── store/ # Redux store
│ │ ├── slices/ # Redux slices
│ │ └── index.ts # Store 配置
│ ├── hooks/ # 自定义 Hooks
│ ├── utils/ # 工具函数
│ ├── constants/ # 常量定义
│ ├── routes/ # 路由配置
│ ├── App.tsx # 根组件
│ └── main.tsx # 入口文件
├── index.html
├── vite.config.ts
├── tailwind.config.js
├── tsconfig.json
└── package.json
路由设计
路由结构
// routes/routes.ts
const router = createBrowserRouter([
{
path: "/",
Component: Home,
},
{
path: "/chat",
Component: AgentPage,
},
{
path: "/orchestration",
children: [
{ path: "", Component: SmartOrchestrationPage },
{ path: "create-workflow", Component: WorkflowEditor },
],
},
{
path: "/data",
Component: MainLayout,
children: [
{
path: "collection",
children: [
{ index: true, Component: DataCollection },
{ path: "create-task", Component: CollectionTaskCreate },
],
},
{
path: "management",
children: [
{ index: true, Component: DatasetManagement },
{ path: "create/:id?", Component: DatasetCreate },
{ path: "detail/:id", Component: DatasetDetail },
],
},
// ... 其他路由
],
},
]);
路由守卫
// hooks/useAuthGuard.ts
export const useAuthGuard = () => {
const location = useLocation();
const navigate = useNavigate();
const { isAuthenticated } = useAuth();
useEffect(() => {
if (!isAuthenticated) {
navigate('/login', { state: { from: location } });
}
}, [isAuthenticated, location, navigate]);
};
状态管理
Redux Toolkit 配置
// store/index.ts
import { configureStore } from '@reduxjs/toolkit';
import dataManagementSlice from './slices/dataManagementSlice';
import userSlice from './slices/userSlice';
export const store = configureStore({
reducer: {
dataManagement: dataManagementSlice,
user: userSlice,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: false,
}),
});
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
Slice 示例
// store/slices/dataManagementSlice.ts
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import { getDatasets, createDataset } from '@/services/api/dataManagement';
interface DataManagementState {
datasets: Dataset[];
loading: boolean;
error: string | null;
}
const initialState: DataManagementState = {
datasets: [],
loading: false,
error: null,
};
export const fetchDatasets = createAsyncThunk(
'dataManagement/fetchDatasets',
async (params: GetDatasetsParams) => {
const response = await getDatasets(params);
return response.data;
}
);
const dataManagementSlice = createSlice({
name: 'dataManagement',
initialState,
reducers: {
clearError: (state) => {
state.error = null;
},
},
extraReducers: (builder) => {
builder
.addCase(fetchDatasets.pending, (state) => {
state.loading = true;
})
.addCase(fetchDatasets.fulfilled, (state, action) => {
state.loading = false;
state.datasets = action.payload;
})
.addCase(fetchDatasets.rejected, (state, action) => {
state.loading = false;
state.error = action.error.message || 'Failed to fetch datasets';
});
},
});
export const { clearError } = dataManagementSlice.actions;
export default dataManagementSlice.reducer;
组件设计
页面组件
// pages/DataManagement/Home/DataManagement.tsx
import React, { useEffect } from 'react';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { fetchDatasets } from '@/store/slices/dataManagementSlice';
import DataTable from '@/components/common/DataTable';
export const DataManagement: React.FC = () => {
const dispatch = useAppDispatch();
const { datasets, loading } = useAppSelector((state) => state.dataManagement);
useEffect(() => {
dispatch(fetchDatasets({ page: 0, size: 20 }));
}, [dispatch]);
return (
<div className="p-6">
<h1 className="text-2xl font-bold mb-6">数据集管理</h1>
<DataTable data={datasets} loading={loading} />
</div>
);
};
公共组件
// components/common/DataTable.tsx
import React from 'react';
import { Table } from 'antd';
interface DataTableProps {
data: any[];
loading: boolean;
}
export const DataTable: React.FC<DataTableProps> = ({ data, loading }) => {
const columns = [
{ title: '名称', dataIndex: 'name', key: 'name' },
{ title: '类型', dataIndex: 'type', key: 'type' },
{ title: '状态', dataIndex: 'status', key: 'status' },
];
return (
<Table
columns={columns}
dataSource={data}
loading={loading}
rowKey="id"
/>
);
};
API 服务
Axios 配置
// services/api/request.ts
import axios from 'axios';
const request = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080',
timeout: 30000,
});
// 请求拦截器
request.interceptors.request.use(
(config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
// 响应拦截器
request.interceptors.response.use(
(response) => {
return response.data;
},
(error) => {
if (error.response?.status === 401) {
// 跳转到登录页
window.location.href = '/login';
}
return Promise.reject(error);
}
);
export default request;
API 定义
// services/api/dataManagement.ts
import request from './request';
import type { Dataset, CreateDatasetRequest } from './types';
export const getDatasets = (params: any) => {
return request.get<{ content: Dataset[] }>('/data-management/datasets', {
params,
});
};
export const getDataset = (id: string) => {
return request.get<Dataset>(`/data-management/datasets/${id}`);
};
export const createDataset = (data: CreateDatasetRequest) => {
return request.post<Dataset>('/data-management/datasets', data);
};
export const updateDataset = (id: string, data: Partial<Dataset>) => {
return request.put<Dataset>(`/data-management/datasets/${id}`, data);
};
export const deleteDataset = (id: string) => {
return request.delete(`/data-management/datasets/${id}`);
};
TypeScript 类型定义
// services/types/dataManagement.ts
export interface Dataset {
id: string;
name: string;
description: string;
type: DatasetType;
status: DatasetStatus;
tags: Tag[];
fileCount: number;
totalSize: number;
completionRate: number;
createdAt: string;
createdBy: string;
}
export interface DatasetType {
code: string;
name: string;
description: string;
supportedFormats: string[];
}
export interface Tag {
id: string;
name: string;
color: string;
}
export type DatasetStatus = 'ACTIVE' | 'INACTIVE' | 'PROCESSING';
export interface CreateDatasetRequest {
name: string;
description?: string;
type: string;
tags?: string[];
}
样式方案
Tailwind CSS
// 使用 Tailwind CSS
<div className="flex items-center justify-between p-4 bg-white rounded-lg shadow">
<h2 className="text-lg font-semibold">标题</h2>
<button className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
按钮
</button>
</div>
Ant Design
// 使用 Ant Design 组件
import { Button, Table, Modal } from 'antd';
<Modal
title="创建数据集"
open={visible}
onOk={handleOk}
onCancel={handleCancel}
>
<Form>
<Form.Item label="名称" name="name" rules={[{ required: true }]}>
<Input />
</Form.Item>
</Form>
</Modal>
性能优化
代码分割
// 路由懒加载
import { lazy } from 'react';
const DataManagement = lazy(() => import('@/pages/DataManagement/Home/DataManagement'));
const router = createBrowserRouter([
{
path: '/data/management',
Component: lazy(() => import('@/pages/Layout/MainLayout')),
children: [
{
index: true,
Component: DataManagement,
},
],
},
]);
React.memo
// 使用 React.memo 避免不必要的重渲染
export const DataCard = React.memo<DataCardProps>(({ data }) => {
return <div>{data.name}</div>;
});
useMemo 和 useCallback
// 使用 useMemo 缓存计算结果
const filteredData = useMemo(() => {
return data.filter(item => item.status === 'ACTIVE');
}, [data]);
// 使用 useCallback 缓存函数
const handleClick = useCallback(() => {
console.log('clicked');
}, []);
测试
组件测试
// DataManagement.test.tsx
import { render, screen } from '@testing-library/react';
import { DataManagement } from './DataManagement';
test('renders data management page', () => {
render(<DataManagement />);
expect(screen.getByText('数据集管理')).toBeInTheDocument();
});
相关文档
6 - 附录
附录包含配置参数、故障排查和其他参考信息。
附录内容
配置参数
详细的系统配置说明:
- 环境变量:所有可配置的环境变量
- application.yml:Spring Boot 配置文件
- Docker Compose:容器配置
- Kubernetes:K8s 配置
故障排查
常见问题的排查步骤和解决方案:
- 服务启动问题:容器启动失败等
- 数据库连接问题:数据库连接失败等
- 前端问题:页面加载、API 请求等
- 任务执行问题:任务卡住、执行失败等
- 性能问题:系统响应缓慢、内存溢出等
其他参考
相关资源
技术支持
如果遇到问题:
- 查看 故障排查 文档
- 搜索 GitHub Issues
- 提交新的 Issue 并附上详细信息
贡献指南
欢迎为 DataMate 贡献:
- 报告 Bug
- 提出新功能建议
- 提交代码贡献
- 改进文档
详见 贡献指南。
6.1 - 配置参数
本文档详细说明 DataMate 的各种配置参数。
环境变量
通用配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
DB_PASSWORD | password | 数据库密码 |
DATAMATE_JWT_ENABLE | false | 是否启用 JWT 认证 |
REGISTRY | ghcr.io/modelengine-group/ | 镜像仓库地址 |
VERSION | latest | 镜像版本标签 |
数据库配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
DB_HOST | datamate-database | 数据库主机 |
DB_PORT | 5432 | 数据库端口 |
DB_NAME | datamate | 数据库名称 |
DB_USER | postgres | 数据库用户名 |
DB_PASSWORD | password | 数据库密码 |
Redis 配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
REDIS_HOST | datamate-redis | Redis 主机 |
REDIS_PORT | 6379 | Redis 端口 |
REDIS_PASSWORD | - | Redis 密码(可选) |
REDIS_DB | 0 | Redis 数据库编号 |
Milvus 配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
MILVUS_HOST | milvus | Milvus 主机 |
MILVUS_PORT | 19530 | Milvus 端口 |
MILVUS_INDEX_TYPE | IVF_FLAT | 向量索引类型 |
MILVUS_EMBEDDING_DIM | 768 | 向量维度 |
MinIO 配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
MINIO_ENDPOINT | minio:9000 | MinIO 端点 |
MINIO_ACCESS_KEY | minioadmin | 访问密钥 |
MINIO_SECRET_KEY | minioadmin | 秘密密钥 |
MINIO_BUCKET | datamate | 存储桶名称 |
MINIO_USE_SSL | false | 是否使用 SSL |
LLM 配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
OPENAI_API_KEY | - | OpenAI API 密钥 |
OPENAI_BASE_URL | https://api.openai.com/v1 | API 基础 URL |
OPENAI_MODEL | gpt-4 | 使用的模型 |
JWT 配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
JWT_SECRET | default-insecure-key | JWT 密钥(生产环境必须修改) |
JWT_EXPIRATION | 86400 | Token 过期时间(秒) |
日志配置
| 变量名 | 默认值 | 说明 |
|---|---|---|
LOG_LEVEL | INFO | 日志级别 |
LOG_PATH | /var/log/datamate | 日志路径 |
application.yml 配置
主配置文件
# application.yml
datamate:
jwt:
enable: ${DATAMATE_JWT_ENABLE:false}
secret: ${JWT_SECRET:default-insecure-key}
expiration: ${JWT_EXPIRATION:86400}
storage:
type: minio # minio, local, s3
endpoint: ${MINIO_ENDPOINT:minio:9000}
access-key: ${MINIO_ACCESS_KEY:minioadmin}
secret-key: ${MINIO_SECRET_KEY:minioadmin}
bucket: ${MINIO_BUCKET:datamate}
llm:
provider: openai
api-key: ${OPENAI_API_KEY:}
base-url: ${OPENAI_BASE_URL:https://api.openai.com/v1}
model: ${OPENAI_MODEL:gpt-4}
temperature: 0.7
max-tokens: 2000
Spring Boot 配置
spring:
application:
name: data-management-service
datasource:
url: jdbc:postgresql://${DB_HOST:datamate-database}:${DB_PORT:5432}/${DB_NAME:datamate}
username: ${DB_USER:postgres}
password: ${DB_PASSWORD:password}
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
jpa:
hibernate:
ddl-auto: validate
show-sql: false
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
redis:
host: ${REDIS_HOST:datamate-redis}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
database: ${REDIS_DB:0}
timeout: 3000
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1ms
server:
port: 8092
servlet:
context-path: /api/v1
compression:
enabled: true
tomcat:
max-threads: 200
accept-count: 100
日志配置
<!-- logback-spring.xml -->
<configuration>
<springProperty scope="context" name="LOG_LEVEL" source="log.level" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_PATH" source="log.path" defaultValue="/var/log/datamate"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/backend/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/backend/app-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<logger name="com.datamate" level="${LOG_LEVEL}"/>
<logger name="org.springframework" level="INFO"/>
<logger name="org.hibernate" level="INFO"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
Docker Compose 配置
环境变量配置
# docker-compose.yml
services:
datamate-backend:
environment:
- DB_PASSWORD=${DB_PASSWORD:-password}
- DATAMATE_JWT_ENABLE=${DATAMATE_JWT_ENABLE:-false}
- LOG_LEVEL=${LOG_LEVEL:-INFO}
volumes:
- dataset_volume:/dataset
- log_volume:/var/log/datamate
资源限制配置
services:
datamate-backend:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
Kubernetes 配置
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: datamate-config
data:
DB_HOST: "datamate-database"
DB_PORT: "5432"
REDIS_HOST: "datamate-redis"
REDIS_PORT: "6379"
LOG_LEVEL: "INFO"
Secret
apiVersion: v1
kind: Secret
metadata:
name: datamate-secret
type: Opaque
data:
DB_PASSWORD: cGFzc3dvcmQ= # base64 encoded
JWT_SECRET: eW91ci1zZWNyZXQta2V5
OPENAI_API_KEY: eW91ci1hcGkta2V5
环境变量引用
apiVersion: apps/v1
kind: Deployment
metadata:
name: datamate-backend
spec:
template:
spec:
containers:
- name: backend
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: datamate-secret
key: DB_PASSWORD
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: datamate-config
key: LOG_LEVEL
前端配置
环境变量
# .env.development
VITE_API_BASE_URL=http://localhost:8080
VITE_API_TIMEOUT=30000
VITE_APP_TITLE=DataMate Dev
# .env.production
VITE_API_BASE_URL=https://api.datamate.com
VITE_API_TIMEOUT=30000
VITE_APP_TITLE=DataMate
Vite 配置
// vite.config.ts
export default defineConfig({
server: {
port: 3000,
proxy: {
'/api': {
target: env.VITE_API_BASE_URL,
changeOrigin: true,
},
},
},
build: {
outDir: 'dist',
sourcemap: false,
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom', 'react-router-dom'],
antd: ['antd'],
},
},
},
},
});
Python 运行时配置
环境变量
# Python 服务配置
PG_HOST=datamate-database
PG_PORT=5432
PG_USER=postgres
PG_PASSWORD=password
PG_DATABASE=datamate
log_level=DEBUG
datamate_jwt_enable=false
配置文件
# config.py
import os
class Config:
# PostgreSQL
PG_HOST = os.getenv('PG_HOST', 'datamate-database')
PG_PORT = int(os.getenv('PG_PORT', 5432))
PG_USER = os.getenv('PG_USER', 'postgres')
PG_PASSWORD = os.getenv('PG_PASSWORD', 'password')
PG_DATABASE = os.getenv('PG_DATABASE', 'datamate')
# 日志
LOG_LEVEL = os.getenv('log_level', 'INFO')
# JWT
JWT_ENABLE = os.getenv('datamate_jwt_enable', 'false').lower() == 'true'
# Milvus
MILVUS_HOST = os.getenv('MILVUS_HOST', 'milvus')
MILVUS_PORT = int(os.getenv('MILVUS_PORT', 19530))
性能调优参数
数据库连接池
spring:
datasource:
hikari:
maximum-pool-size: 20 # 最大连接数
minimum-idle: 5 # 最小空闲连接数
connection-timeout: 30000 # 连接超时(毫秒)
idle-timeout: 600000 # 空闲超时(毫秒)
max-lifetime: 1800000 # 连接最大生命周期(毫秒)
Redis 连接池
spring:
redis:
lettuce:
pool:
max-active: 8 # 最大活跃连接数
max-idle: 8 # 最大空闲连接数
min-idle: 0 # 最小空闲连接数
max-wait: -1ms # 最大等待时间
JVM 参数
# JVM 调优参数
JAVA_OPTS="-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
相关文档
6.2 - 故障排查
本文档提供 DataMate 常见问题的排查步骤和解决方案。
服务启动问题
服务无法启动
症状
执行 make install 后,服务无法启动或立即退出。
排查步骤
- 检查端口占用
# 检查端口是否被占用
lsof -i :8080 # API Gateway
lsof -i :30000 # Frontend
lsof -i :5432 # PostgreSQL
如果端口被占用:
# 查找占用进程
ps aux | grep <port>
# 终止进程
kill -9 <PID>
- 查看容器日志
# 查看所有容器状态
docker ps -a
# 查看特定容器日志
docker logs datamate-backend
docker logs datamate-frontend
docker logs datamate-database
- 检查 Docker 资源
# 查看 Docker 系统信息
docker system df
# 清理未使用的资源
docker system prune -a
常见原因和解决方案
| 原因 | 解决方案 |
|---|---|
| 端口被占用 | 终止占用进程或修改端口映射 |
| 内存不足 | 增加 Docker 内存限制 |
| 镜像未拉取 | 执行 docker pull 拉取镜像 |
| 网络问题 | 检查防火墙和网络配置 |
容器启动后立即退出
排查步骤
# 查看容器退出码
docker ps -a
# 查看详细日志
docker logs <container-name> --tail 100
# 检查容器健康状态
docker inspect <container-name> | grep -A 10 Health
常见原因
- 配置错误:检查环境变量和配置文件
- 依赖服务未启动:确保数据库等依赖服务已启动
- 资源不足:检查内存和磁盘空间
数据库连接问题
无法连接到数据库
症状
后端服务日志显示数据库连接错误。
排查步骤
- 检查数据库容器
# 检查数据库容器状态
docker ps | grep datamate-database
# 查看数据库日志
docker logs datamate-database
- 测试数据库连接
# 进入数据库容器
docker exec -it datamate-database psql -U postgres -d datamate
# 或从本地连接
psql -h localhost -U postgres -d datamate
- 检查数据库配置
# 检查环境变量
docker exec datamate-backend env | grep DB_
# 检查配置文件
docker exec datamate-backend cat /app/application.yml | grep datasource
常见解决方案
| 问题 | 解决方案 |
|---|---|
| 密码错误 | 检查 DB_PASSWORD 环境变量 |
| 数据库未就绪 | 等待数据库完全启动 |
| 网络不通 | 检查 Docker 网络 |
| 连接池耗尽 | 增加连接池大小 |
数据库性能问题
症状
查询缓慢,数据库响应时间长。
排查步骤
- 查看慢查询
-- 查看慢查询
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
- 检查连接数
-- 查看当前连接数
SELECT count(*) FROM pg_stat_activity;
-- 查看最大连接数
SHOW max_connections;
- 分析表大小
-- 查看表大小
SELECT
relname AS table_name,
pg_size_pretty(pg_total_relation_size(relid)) AS size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
优化方案
- 添加索引
- 优化查询语句
- 增加连接池大小
- 定期清理和分析表
前端问题
前端无法访问
症状
浏览器无法访问 http://localhost:30000
排查步骤
- 检查前端容器
docker ps | grep datamate-frontend
docker logs datamate-frontend
- 检查端口映射
# 查看端口映射
docker port datamate-frontend
- 测试网络连接
# 测试容器内部服务
docker exec datamate-frontend wget -O- http://localhost:3000
常见解决方案
- 检查端口是否正确映射
- 检查防火墙设置
- 查看浏览器控制台错误信息
- 清除浏览器缓存
API 请求失败
症状
前端页面显示,但 API 请求失败。
排查步骤
- 检查浏览器控制台
// 查看网络请求
// 开发者工具 -> Network 标签
- 检查 API Gateway
# 检查 API Gateway 容器
docker ps | grep datamate-gateway
docker logs datamate-gateway
- 测试 API
# 测试 API 连接
curl http://localhost:8080/actuator/health
# 测试 API 端点
curl http://localhost:8080/api/v1/data-management/datasets
常见解决方案
| 错误 | 解决方案 |
|---|---|
| CORS 错误 | 配置 API Gateway CORS |
| 401 Unauthorized | 检查认证配置 |
| 404 Not Found | 检查 API 路径配置 |
| 503 Service Unavailable | 检查后端服务状态 |
任务执行问题
任务卡住不动
症状
任务状态一直为"运行中",但没有任何进展。
排查步骤
- 查看任务日志
# 查看后端服务日志
docker logs datamate-backend --tail 100 | grep <task-id>
# 查看运行时日志
docker logs datamate-runtime --tail 100
- 检查任务状态
# 通过 API 查询任务状态
curl http://localhost:8080/api/v1/data-cleaning/tasks/<task-id>
- 检查系统资源
# 检查 CPU 和内存使用
docker stats
# 检查磁盘空间
df -h
常见原因和解决方案
| 原因 | 解决方案 |
|---|---|
| 算子执行失败 | 查看运行时日志,修复算子代码 |
| 数据量过大 | 分批处理 |
| 资源不足 | 增加容器资源限制 |
| 死锁 | 重启服务 |
任务执行失败
排查步骤
- 查看详细错误日志
# 查看任务执行日志
docker logs datamate-backend | grep ERROR
- 检查任务配置
# 查看任务配置
curl http://localhost:8080/api/v1/data-cleaning/tasks/<task-id>
- 验证输入数据
检查输入数据格式和内容是否正确。
性能问题
系统响应缓慢
排查步骤
- 检查系统资源
# 查看 CPU、内存使用
docker stats
# 查看磁盘 I/O
docker exec datamate-backend iostat -x 1
- 检查数据库性能
-- 查看活跃查询
SELECT * FROM pg_stat_activity WHERE state = 'active';
-- 查看锁等待
SELECT * FROM pg_stat_activity WHERE wait_event_type = 'Lock';
- 检查 Redis 状态
# 查看 Redis 信息
docker exec datamate-redis redis-cli INFO
# 查看慢查询
docker exec datamate-redis redis-cli SLOWLOG GET
优化方案
- 增加容器资源限制
- 优化数据库查询
- 启用缓存
- 使用负载均衡
内存溢出
症状
容器因内存不足被 OOM Killer 终止。
排查步骤
# 查看容器退出原因
docker inspect <container> | grep OOMKilled
# 查看内存使用历史
docker stats --no-stream
解决方案
# 增加内存限制
services:
datamate-backend:
deploy:
resources:
limits:
memory: 8G # 增加内存限制
日志查看
查看应用日志
# 后端日志
docker logs datamate-backend --tail 100 -f
# 前端日志
docker logs datamate-frontend --tail 100 -f
# 数据库日志
docker logs datamate-database --tail 100 -f
# 运行时日志
docker logs datamate-runtime --tail 100 -f
查看特定级别日志
# 只查看错误日志
docker logs datamate-backend 2>&1 | grep ERROR
# 查看警告日志
docker logs datamate-backend 2>&1 | grep WARN
日志文件位置
| 服务 | 日志路径 |
|---|---|
| 后端 | /var/log/datamate/backend/app.log |
| 前端 | /var/log/datamate/frontend/ |
| 数据库 | /var/log/datamate/database/ |
| 运行时 | /var/log/datamate/runtime/ |
获取帮助
如果以上方法都无法解决问题:
收集信息
- 错误信息
- 日志文件
- 系统环境
- 复现步骤
搜索已有问题
访问 GitHub Issues 搜索类似问题。
- 提交新 Issue
在 GitHub 提交 Issue 时,请提供:
- DataMate 版本
- 操作系统版本
- Docker 版本
- 详细的错误信息
- 复现步骤
相关文档
7 - 贡献指南
DataMate 是企业级数据处理开源项目,致力于为模型训练、AI 应用、数据飞轮等场景提供高效数据解决方案。我们欢迎所有开发者、文档创作者、测试工程师通过代码提交、文档优化、问题反馈、社区支持等方式参与贡献。
若你是首次参与开源项目,建议先阅读 开源贡献新手 ,再结合本指南开展操作。所有贡献均需遵循 DataMate 行为准则。
一、贡献范围与方式
DataMate 开源项目的贡献覆盖以下核心场景,你可根据自身擅长领域选择参与方向:
| 贡献类型 | 具体内容 | 适合人群 |
|---|---|---|
| 代码贡献 | 核心功能开发、Bug 修复、性能优化、新特性提案 | 后端 / 前端开发者、数据工程师 |
| 文档贡献 | 用户手册更新、API 文档完善、教程编写、贡献指南优化 | 技术文档创作者、资深用户 |
| 测试贡献 | 编写单元测试 / 集成测试、反馈测试问题、参与兼容性测试 | 测试工程师、质量保障人员 |
| 社区贡献 | 解答 GitHub Issues、参与社区讨论、分享使用案例 | 所有用户、技术爱好者 |
| 设计贡献 | 界面交互优化、Logo / 图标设计、文档视觉升级 | UI/UX 设计师、视觉设计师 |
感谢你选择参与 DataMate 开源项目的建设!无论是代码、文档还是社区支持,每一份贡献都将助力项目成长,推动企业级数据处理技术的发展。若在贡献过程中遇到任何问题,欢迎随时通过社区渠道寻求帮助。