HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 概览

    • K8s 实战学习实验室
    • 服务访问清单
    • K8s-Lab 学习总纲、仓库评估与专家路线图
  • 课程正文

    • 环境验证与第一课:认识你的真实集群
    • 第二课:kubectl apply 之后,到底发生了什么
    • 第三课:调度器如何选节点,为什么 Pod 会 Pending
    • 第四课:Kubernetes 网络、协议分层、VXLAN/IPIP/WireGuard 原理与排障
    • 第五课:NetworkPolicy、零信任网络与流量边界
    • 第六课:身份、认证、授权、准入与 ServiceAccount / RBAC 原理
    • 第七课:ConfigMap 与 Secret 注入模型、更新机制与安全边界
    • 第八课:存储持久化、PV / PVC / StorageClass 与 NFS 原理
    • 第九课:StatefulSet、Headless Service、稳定身份与存储原理
    • 第十课:探针、滚动更新、优雅终止与 PDB 原理
    • 第十一课:requests / limits、QoS、OOM 与驱逐原理
    • 第十二课:HPA、自动扩缩容、指标链路与副本伸缩原理
    • 第十三课:Service、EndpointSlice、kube-proxy、CoreDNS 与服务发现原理
    • 第十四课:Ingress-nginx、反向代理、Host / Path、NodePort 与北南向流量原理
    • 第十五课:HTTPS、TLS、SNI、证书信任与 Ingress 终止原理
    • 第十六课:cert-manager、Ingress 自动签发、证书生命周期与 ACME 工作流原理
    • 第十七课:ACME、Let's Encrypt、HTTP-01 / DNS-01、Orders / Challenges 与生产限制原理
    • 第十八课:大模型全生态,从数据到训练到部署到治理原理
    • 第十九课:大模型数据集、清洗、标注、切分、版本管理与质量治理原理
    • 第二十课:大模型训练、SFT、LoRA、Checkpoint、Adapter 与模型产物原理
    • 第二十一课:大模型推理、量化、KV Cache、vLLM、吞吐/延迟与部署发布链路原理
  • 实验操作记录

    • 本次仓库审查操作记录与命令原理
    • 本轮操作记录:环境验证、集群基线盘点与故障样本采集
    • 本轮操作记录:kubectl apply 主链路实验
    • 本轮操作记录:调度实验与 Pending 排查
    • 本轮操作记录:Kubernetes 网络原理、协议对比与调试实验
    • 本轮操作记录:NetworkPolicy 与零信任网络实验
    • 本轮操作记录:身份、认证、授权、准入实验
    • 本轮操作记录:ConfigMap 与 Secret 注入、更新与安全边界实验
    • 本轮操作记录:存储持久化、PV / PVC / StorageClass 与 NFS 实验
    • 本轮操作记录:StatefulSet、Headless Service 与稳定身份实验
    • 本轮操作记录:探针、滚动更新、优雅终止与 PDB 实验
    • 本轮操作记录:资源模型、QoS、OOM 与 CPU 节流实验
    • 本轮操作记录:HPA 自动扩缩容实验
    • 本轮操作记录:Service、EndpointSlice、CoreDNS 与服务发现排障实验
    • 本轮操作记录:Ingress-nginx、NodePort 与北南向流量实验
    • 本轮操作记录:HTTPS、TLS、自签证书与 Ingress 实验
    • 本轮操作记录:cert-manager 安装、CA 签发与 Ingress 自动证书实验
    • 本轮操作记录:ACME staging、HTTP-01 失败样本与排障实验
    • 本轮操作记录:大模型全生态与基础原理科普文撰写
    • 本轮操作记录:大模型数据集样本与治理文档编写
    • 本轮操作记录:大模型训练与模型产物概念文撰写
    • 本轮操作记录:大模型推理与服务发布概念文撰写

数据模块 — 功能设计与页面规划

一、数据在 AI SaaS 中的角色

数据是模型的"燃料"。平台上所有涉及数据的场景:

1. 微调训练: 用户上传对话数据 → 训练专属模型
2. 评估测试: 用户上传测试集 → 评估模型效果
3. 批量推理: 用户上传待处理数据 → 批量跑模型 → 下载结果
4. RAG 知识库: 用户上传文档 → 向量化 → 检索增强生成
5. 数据标注: 用户标注数据 → 提升模型质量(高级功能)

二、功能清单

2.1 数据集管理(核心)

功能说明优先级
上传数据集支持 JSONL/CSV/JSON/TXT/ParquetP0
格式自动识别上传后自动检测文件格式和编码P0
数据校验格式校验、字段完整性、Token 长度检查P0
数据预览表格/JSON 形式展示前 N 条P0
数据统计条数、Token 分布、字段统计、数据质量评分P0
版本管理同一数据集多版本,支持回溯P1
数据分割自动拆分训练集/验证集/测试集P1
数据增强同义改写、翻译扩充(调用自身模型)P2
数据脱敏自动识别并遮蔽手机号/身份证/姓名P2
数据导出下载原始数据或处理后数据P1
批量删除选中多个数据集批量操作P1
存储配额按套餐限制存储空间,超额提醒P0

2.2 数据格式支持

微调数据格式(对话式)

{"messages":[
  {"role":"system","content":"你是一个专业的客服助手"},
  {"role":"user","content":"我想退货"},
  {"role":"assistant","content":"好的,请提供您的订单号,我来帮您处理退货。退货流程如下:\n1. 确认订单信息\n2. 提交退货申请\n3. 寄回商品\n4. 退款到账(3-5个工作日)"}
]}
{"messages":[
  {"role":"user","content":"发票怎么开"},
  {"role":"assistant","content":"开票步骤:\n1. 登录账户\n2. 进入「订单管理」\n3. 点击「申请发票」\n4. 填写开票信息\n5. 提交后 1-3 个工作日出票"}
]}

微调数据格式(补全式)

{"prompt":"将以下文本翻译成英文:今天天气很好","completion":"The weather is very nice today"}
{"prompt":"对以下评论进行情感分析:这个产品太差了","completion":"负面"}

评估数据格式

{"input":"用户问题","expected_output":"期望答案","tags":["category1"]}

批量推理数据格式

{"id":"req-001","messages":[{"role":"user","content":"总结以下文章:..."}]}
{"id":"req-002","messages":[{"role":"user","content":"翻译:..."}]}

RAG 知识库格式

支持:
- PDF → 自动解析提取文本
- Word (.docx) → 提取文本
- Markdown → 直接使用
- TXT → 直接使用
- 网页 URL → 爬取内容

2.3 数据处理能力

能力输入输出场景
Token 统计原始文本每条数据的 Token 数分布评估训练成本
去重完整数据集去除重复/近似重复条目提升数据质量
过滤数据集 + 规则满足条件的子集Token 过长的去掉
采样大数据集随机/分层采样子集快速验证
格式转换CSV/JSONJSONL(微调格式)适配训练需求
数据分割完整集train/val/test训练前准备
质量评分数据集质量报告识别低质量样本

2.4 知识库管理(RAG)

功能说明优先级
创建知识库命名 + 选择 Embedding 模型P1
上传文档PDF/Word/MD/TXT,自动分块P1
分块策略配置chunk_size, overlap, 分隔符P1
向量化调用 Embedding 模型生成向量P1
检索测试输入问题 → 返回相关文档片段P1
知识库关联模型指定哪个模型使用哪个知识库P1
文档管理增删改文档,自动重新向量化P1
向量数据库Milvus / Qdrant / pgvectorP1

三、页面设计

3.1 页面总览(数据相关)

控制台首页 (Dashboard)
│
├── 数据集管理
│   ├── 数据集列表页
│   ├── 上传数据集页
│   ├── 数据集详情页
│   │   ├── 数据预览 Tab
│   │   ├── 数据统计 Tab
│   │   ├── 数据校验 Tab
│   │   └── 版本历史 Tab
│   └── 数据处理页(去重/过滤/分割)
│
├── 知识库管理
│   ├── 知识库列表页
│   ├── 创建知识库页
│   ├── 知识库详情页
│   │   ├── 文档列表 Tab
│   │   ├── 检索测试 Tab
│   │   └── 配置 Tab
│   └── 上传文档页
│
├── 批量任务
│   ├── 批量推理列表页
│   ├── 创建批量任务页
│   └── 任务详情页(进度+结果下载)
│
└── 微调训练(数据部分)
    ├── 选择数据集步骤
    └── 数据预检报告

3.2 数据集列表页

┌──────────────────────────────────────────────────────────────┐
│ 数据集管理                                    [+ 上传数据集]  │
├──────────────────────────────────────────────────────────────┤
│ 搜索: [______________]  格式: [全部 ▼]  用途: [全部 ▼]      │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ ☐ 名称              格式    条数     大小    用途    创建时间   │
│ ─────────────────────────────────────────────────────────────│
│ ☐ customer-service   JSONL   12,450  3.2MB  微调    04-09    │
│   └─ v2 (最新) │ v1                                         │
│ ☐ product-qa         JSONL    5,230  1.1MB  微调    04-08    │
│ ☐ sentiment-test     CSV      2,000  0.5MB  评估    04-07    │
│ ☐ articles-batch     JSONL   50,000  15MB   批量    04-06    │
│                                                              │
│ 已使用 19.8MB / 5GB 配额                           [■■■░░] │
│                                                              │
│ 选中 0 项  [批量删除] [批量导出]                    第1/2页 > │
└──────────────────────────────────────────────────────────────┘

交互说明:

  • 点击数据集名称 → 进入详情页
  • 版本标签可展开切换
  • 支持批量选择操作
  • 存储配额可视化进度条
  • 搜索支持名称/描述模糊匹配

3.3 上传数据集页

┌──────────────────────────────────────────────────────────────┐
│ 上传数据集                                                    │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 数据集名称: [customer-service-v2________]                     │
│ 描述:       [客服对话数据,含退货退款场景__]                    │
│ 用途:       ○ 微调训练  ○ 评估测试  ○ 批量推理  ○ 知识库      │
│                                                              │
│ ┌──────────────────────────────────────────────────────┐     │
│ │                                                      │     │
│ │           拖拽文件到此处,或 [点击上传]                │     │
│ │                                                      │     │
│ │   支持格式: JSONL, CSV, JSON, TXT, Parquet           │     │
│ │   单文件最大: 500MB                                   │     │
│ │                                                      │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ ── 或者从 URL 导入 ──                                        │
│ URL: [https://example.com/data.jsonl____] [导入]             │
│                                                              │
│ ── 或者从已有数据集创建新版本 ──                               │
│ 基于: [customer-service v1 ▼] [创建新版本]                    │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│ 上传中... customer-service-v2.jsonl  3.2MB                   │
│ [████████████████████░░░░] 78%  预计剩余 5秒                  │
│                                                              │
│ ✓ 格式检测: JSONL (对话格式)                                  │
│ ✓ 编码: UTF-8                                                │
│ ⟳ 校验中...                                                  │
│                                                              │
│                                          [取消] [确认上传]    │
└──────────────────────────────────────────────────────────────┘

3.4 数据集详情页 — 数据预览 Tab

┌──────────────────────────────────────────────────────────────┐
│ ← 返回  customer-service v2                [下载] [删除]     │
├──────────────────────────────────────────────────────────────┤
│ [数据预览]  [数据统计]  [校验报告]  [版本历史]                  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 格式: JSONL (对话式微调)  条数: 12,450  大小: 3.2MB          │
│ 创建: 2026-04-09 15:30   更新: 2026-04-09 15:30             │
│                                                              │
│ ── 数据预览 (前 10 条 / 共 12,450 条) ──                      │
│                                                              │
│ #1                                                           │
│ ┌──────────────────────────────────────────────────────┐     │
│ │ System: 你是一个专业的客服助手                         │     │
│ │ ─────────────────────────────────────────────────────│     │
│ │ User: 我想退货                                       │     │
│ │ ─────────────────────────────────────────────────────│     │
│ │ Assistant: 好的,请提供您的订单号,我来帮您处理退货。  │     │
│ │ 退货流程如下:                                        │     │
│ │ 1. 确认订单信息                                      │     │
│ │ 2. 提交退货申请 ...                                  │     │
│ │                                    Tokens: 128       │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ #2                                                           │
│ ┌──────────────────────────────────────────────────────┐     │
│ │ User: 发票怎么开                                      │     │
│ │ ─────────────────────────────────────────────────────│     │
│ │ Assistant: 开票步骤:...                              │     │
│ │                                    Tokens: 95        │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ ... 展示更多                              第 1/1245 页  > >> │
└──────────────────────────────────────────────────────────────┘

3.5 数据集详情页 — 数据统计 Tab

┌──────────────────────────────────────────────────────────────┐
│ [数据预览]  [数据统计]  [校验报告]  [版本历史]                  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ ── 基本统计 ──                                               │
│                                                              │
│ 总条数:        12,450                                        │
│ 总 Token 数:   1,532,800                                     │
│ 平均 Token/条: 123                                           │
│ 最短:          12 tokens                                     │
│ 最长:          2,048 tokens                                  │
│ 预估训练费用:  ¥15.3 (基于 Qwen2.5-7B LoRA)                  │
│                                                              │
│ ── Token 长度分布 ──                                         │
│                                                              │
│ 2000+ │                                             ▓ 2%    │
│ 1000  │                                     ▓▓▓▓▓  8%      │
│  500  │                          ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  22%     │
│  200  │          ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  45%     │
│  100  │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓                     18%     │
│   50  │ ▓▓▓▓▓                                       5%      │
│        └──────────────────────────────────────────           │
│                                                              │
│ ── 角色分布 ──                                               │
│                                                              │
│ system:    8,200 条 (65.9%)  包含系统提示                     │
│ user:     12,450 条 (100%)   每条都有用户输入                  │
│ assistant: 12,450 条 (100%)  每条都有助手回复                  │
│ 多轮对话:   3,120 条 (25.1%)  2轮以上                         │
│                                                              │
│ ── 内容分析 ──                                               │
│                                                              │
│ 高频话题:                                                    │
│   退货退款  3,200 条  25.7%  ████████████                    │
│   物流查询  2,800 条  22.5%  ██████████                      │
│   开票问题  2,100 条  16.9%  ████████                        │
│   账户问题  1,850 条  14.9%  ███████                         │
│   产品咨询  1,500 条  12.0%  █████                           │
│   其他      1,000 条   8.0%  ███                             │
│                                                              │
│ 语言:  中文 98.2%  英文 1.5%  混合 0.3%                      │
└──────────────────────────────────────────────────────────────┘

3.6 数据集详情页 — 校验报告 Tab

┌──────────────────────────────────────────────────────────────┐
│ [数据预览]  [数据统计]  [校验报告]  [版本历史]                  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 数据质量评分: 87/100  🟢 良好                                 │
│                                                              │
│ ── 通过的检查 ──                                             │
│ ✅ 格式正确: 所有行均为合法 JSON                              │
│ ✅ 必要字段: messages 字段存在                                │
│ ✅ 角色合法: 所有 role 为 system/user/assistant               │
│ ✅ 非空检查: 无空 content                                    │
│ ✅ 编码正确: UTF-8 无乱码                                    │
│                                                              │
│ ── 警告 ──                                                   │
│ ⚠️  23 条数据 Token 超过 2048 (可能被截断)         [查看]     │
│ ⚠️  156 条数据疑似重复 (相似度 > 95%)              [查看]     │
│ ⚠️  12 条数据 assistant 回复过短 (< 10 Token)     [查看]     │
│                                                              │
│ ── 错误 (需要修复) ──                                        │
│ ❌ 第 3,247 行: messages 不是数组                   [定位]    │
│ ❌ 第 8,901 行: content 含非法字符 \x00             [定位]    │
│                                                              │
│ ── 建议 ──                                                   │
│ 💡 去除 156 条重复数据可提升训练效果                           │
│ 💡 23 条超长数据建议截断或拆分为多轮对话                       │
│ 💡 建议补充更多"其他"类别数据,当前占比仅 8%                   │
│                                                              │
│                              [自动修复可修复项] [导出报告]    │
└──────────────────────────────────────────────────────────────┘

3.7 数据处理页

┌──────────────────────────────────────────────────────────────┐
│ 数据处理  ← customer-service v2                               │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 选择处理操作:                                                │
│                                                              │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐        │
│ │  🔄 去重  │ │  🔍 过滤  │ │  ✂️ 分割  │ │  📊 采样  │        │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘        │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐                     │
│ │  🔄 格式  │ │  🔒 脱敏  │ │  ➕ 增强  │                     │
│ │   转换    │ │          │ │          │                     │
│ └──────────┘ └──────────┘ └──────────┘                     │
│                                                              │
│ ═══════════════════════════════════════════════════════════  │
│                                                              │
│ 去重配置:                                                    │
│   相似度阈值: [0.95____]  (0-1,越高越严格)                   │
│   比较字段:   ☑ user content  ☑ assistant content            │
│   策略:       ○ 保留第一条  ● 保留最长条                      │
│                                                              │
│ 预览结果:                                                    │
│   原始: 12,450 条                                            │
│   去重后: 12,294 条 (移除 156 条)                             │
│   [查看将被移除的数据]                                        │
│                                                              │
│                         [取消] [保存为新版本 v3]              │
└──────────────────────────────────────────────────────────────┘

3.8 知识库列表页

┌──────────────────────────────────────────────────────────────┐
│ 知识库管理                                    [+ 创建知识库]  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ ┌─────────────────────────────────────┐                      │
│ │ 📚 产品帮助文档                       │                      │
│ │ Embedding: text-embedding-3-small    │                      │
│ │ 文档: 45 篇  │  向量: 1,230 chunks   │                      │
│ │ 最近更新: 2 小时前                    │                      │
│ │ 关联模型: qwen2.5-7b                 │                      │
│ │                      [管理] [测试]   │                      │
│ └─────────────────────────────────────┘                      │
│                                                              │
│ ┌─────────────────────────────────────┐                      │
│ │ 📚 内部规章制度                       │                      │
│ │ Embedding: bge-m3                    │                      │
│ │ 文档: 12 篇  │  向量: 380 chunks     │                      │
│ │ 最近更新: 3 天前                      │                      │
│ │ 关联模型: company-cs-v1 (微调)       │                      │
│ │                      [管理] [测试]   │                      │
│ └─────────────────────────────────────┘                      │
└──────────────────────────────────────────────────────────────┘

3.9 知识库检索测试页

┌──────────────────────────────────────────────────────────────┐
│ 检索测试 — 产品帮助文档                                       │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 输入问题: [如何退换货?_____________________________] [检索]  │
│                                                              │
│ 返回 Top 3 相关文档片段:                                     │
│                                                              │
│ #1  相似度: 0.92  来源: 售后政策.pdf (第3页)                  │
│ ┌──────────────────────────────────────────────────────┐     │
│ │ 退换货政策:自签收之日起 7 天内,商品未拆封可无理由     │     │
│ │ 退换。拆封后如存在质量问题,15 天内可申请换货。退货     │     │
│ │ 运费由平台承担(质量问题)或消费者承担(无理由退货)。  │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ #2  相似度: 0.85  来源: FAQ.md (退换货章节)                   │
│ ┌──────────────────────────────────────────────────────┐     │
│ │ Q: 退货流程是什么?                                    │     │
│ │ A: 1. 在订单页面点击"申请退货" 2. 选择退货原因          │     │
│ │    3. 等待审核(1个工作日)4. 寄回商品 ...              │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ #3  相似度: 0.78  来源: 物流说明.docx                         │
│ ┌──────────────────────────────────────────────────────┐     │
│ │ 退货包裹请寄至:XX市XX区XX路XX号 退货仓库              │     │
│ │ 联系电话:400-XXX-XXXX                                │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ ── 模型回答预览 (结合检索结果) ──                             │
│                                                              │
│ 根据产品帮助文档,退换货流程如下:                            │
│ 1. 在订单页面点击"申请退货"                                  │
│ 2. 选择退货原因                                              │
│ 3. 等待审核(1个工作日)                                     │
│ ...                                                          │
│                                                              │
│ 配置: Top-K [3]  相似度阈值 [0.7]  Chunk大小 [512]           │
└──────────────────────────────────────────────────────────────┘

3.10 批量推理任务页

┌──────────────────────────────────────────────────────────────┐
│ 创建批量任务                                                  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 任务名称: [产品描述批量翻译___________]                       │
│ 模型:     [qwen2.5-7b ▼]                                    │
│ 数据集:   [articles-batch (50,000条) ▼]                      │
│                                                              │
│ 系统提示词:                                                   │
│ ┌──────────────────────────────────────────────────────┐     │
│ │ 你是一个专业的翻译助手。将用户给出的中文翻译成英文,    │     │
│ │ 保持原文风格和专业术语准确。                            │     │
│ └──────────────────────────────────────────────────────┘     │
│                                                              │
│ 参数:                                                        │
│   max_tokens:  [512___]                                      │
│   temperature: [0.3___]                                      │
│   并发数:      [10____]                                      │
│                                                              │
│ 预估:                                                        │
│   输入 Token:  ~5,000,000                                    │
│   输出 Token:  ~3,000,000                                    │
│   预估费用:    ¥34.00                                        │
│   预估时间:    ~2.5 小时                                     │
│                                                              │
│                                   [取消] [提交任务 (¥34)]    │
└──────────────────────────────────────────────────────────────┘

提交后 → 任务详情页:
┌──────────────────────────────────────────────────────────────┐
│ 批量任务: 产品描述批量翻译          状态: 🟡 运行中           │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ 进度: [██████████████████░░░░░░] 72%  36,000 / 50,000       │
│ 已用时: 1小时48分  预计剩余: 42分钟                           │
│ 已消耗: ¥24.50                                               │
│                                                              │
│ 成功: 35,800  失败: 200  跳过: 0                             │
│                                                              │
│ ── 实时日志 ──                                               │
│ 15:32:01  处理 #35801-#35810  成功                           │
│ 15:31:58  处理 #35791-#35800  成功                           │
│ 15:31:55  处理 #35781-#35790  #35788 超时重试                │
│                                                              │
│                    [暂停] [取消] [下载已完成部分]             │
└──────────────────────────────────────────────────────────────┘

3.11 微调训练中的数据选择步骤

┌──────────────────────────────────────────────────────────────┐
│ 创建微调任务  步骤: ① 选择模型 → ② 选择数据 → ③ 配置 → ④ 提交│
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ ② 选择训练数据                                               │
│                                                              │
│ 训练集: [customer-service v2 (12,294条) ▼]                   │
│ 验证集: ○ 自动从训练集拆分 10%                                │
│         ● 使用独立数据集 [customer-service-eval (500条) ▼]    │
│                                                              │
│ ── 数据预检报告 ──                                           │
│                                                              │
│ ✅ 格式兼容 qwen2.5-7b 微调要求                              │
│ ✅ 条数充足 (建议 > 100, 当前 12,294)                        │
│ ⚠️ 23 条超过模型最大长度 4096 tokens (将被截断)              │
│ ✅ 验证集与训练集无重叠                                       │
│                                                              │
│ 预估:                                                        │
│   训练数据 Token 总量: 1,512,800                             │
│   训练轮次 (3 epochs): 4,538,400 tokens 处理量               │
│   预估训练时间: ~45 分钟 (A10 GPU)                           │
│   预估费用: ¥3.75                                            │
│                                                              │
│                                     [← 上一步] [下一步 →]    │
└──────────────────────────────────────────────────────────────┘

四、数据流转全景

                    上传
用户本地文件 ─────────→ 对象存储 (S3/NFS)
                         │
                    ┌────▼─────┐
                    │ 数据校验  │ → 校验报告
                    │ Token统计 │ → 统计信息
                    │ 格式检测  │ → 元数据
                    └────┬─────┘
                         │
              ┌──────────┼──────────┐
              ▼          ▼          ▼
         ┌─────────┐ ┌───────┐ ┌─────────┐
         │ 微调训练 │ │ RAG   │ │ 批量推理 │
         │ (Job)   │ │向量化  │ │ (Job)   │
         └────┬────┘ └───┬───┘ └────┬────┘
              │          │          │
              ▼          ▼          ▼
         模型产出    知识库      推理结果
              │      (向量DB)    (下载)
              ▼
         部署为推理服务

五、技术实现要点

5.1 大文件上传

方案: 分片上传 (Multipart Upload)

前端:
  1. 文件分片 (每片 5MB)
  2. 计算每片 MD5
  3. 并发上传 (3-5 片并行)
  4. 断点续传 (记录已上传的片)
  5. 全部上传完 → 通知后端合并

后端 API:
  POST /api/v1/datasets/upload/init     → 获取 upload_id
  POST /api/v1/datasets/upload/part     → 上传分片
  POST /api/v1/datasets/upload/complete → 合并确认

存储:
  小文件 (< 100MB): 直接存 NFS/S3
  大文件 (> 100MB): S3 Multipart Upload

5.2 数据处理异步化

大数据集处理 (去重/统计/校验) 耗时较长,必须异步:

1. 用户发起处理请求
2. 后端创建任务记录 (status: "pending")
3. 放入消息队列 (Redis Stream / RabbitMQ)
4. Worker 消费任务,处理数据
5. 处理中实时更新进度 (WebSocket / SSE 推送)
6. 完成后更新状态,通知用户

K8s 实现:
  小任务: 直接在 service Pod 中处理
  大任务: 创建 K8s Job,处理完自动清理

5.3 Token 计算

// 使用 tiktoken-go 兼容 OpenAI 的 Token 计算
import "github.com/pkoukk/tiktoken-go"

func CountTokens(text string, model string) int {
    enc, _ := tiktoken.EncodingForModel(model)
    tokens := enc.Encode(text, nil, nil)
    return len(tokens)
}

// 不同模型 tokenizer 不同:
// - OpenAI 系列: cl100k_base
// - Llama 系列: LlamaTokenizer (SentencePiece)
// - Qwen 系列: QwenTokenizer

5.4 数据安全

安全措施说明
租户隔离数据存储路径包含 org_id,API 层强制过滤
传输加密HTTPS + TLS 1.3
存储加密S3 SSE 或 NFS 上 LUKS 加密
访问审计记录谁在什么时间访问了什么数据
自动脱敏上传时扫描 PII(手机号/身份证/邮箱)
数据过期配置保留期限,到期自动删除
GDPR 合规提供数据导出和彻底删除能力

六、页面汇总

序号页面路由优先级
1数据集列表/datasetsP0
2上传数据集/datasets/uploadP0
3数据集详情-预览/datasets/:id/previewP0
4数据集详情-统计/datasets/:id/statsP0
5数据集详情-校验/datasets/:id/validationP0
6数据集详情-版本/datasets/:id/versionsP1
7数据处理/datasets/:id/processP1
8知识库列表/knowledge-basesP1
9创建知识库/knowledge-bases/createP1
10知识库详情-文档/knowledge-bases/:id/documentsP1
11知识库检索测试/knowledge-bases/:id/testP1
12批量推理列表/batch-jobsP1
13创建批量任务/batch-jobs/createP1
14批量任务详情/batch-jobs/:idP1
15微调-数据选择/fine-tuning/create (step 2)P0
16数据标注/datasets/:id/annotateP2