PL
返回项目列表

02 · LLM / AI Agent / BYOK

TuneSmith — 从业务目标到微调交付的工作台

面向小团队和个人的微调工作台:业务目标 + 样例数据 → Agent 联合分析与真实转换预览 → 全量校验 → 独立分区 → 本地训练 → 同开发集对照 → 冻结题集第二轮 → 采用决策与最终验收。训练底座:SFT/DPO/GRPO + FSDP/DeepSpeed + MLflow Registry

目标+样例 → 两轮微调 → 验收
产品主线
BYOK · GLM/本地/兼容端点
分析 Agent
Docker/Seatbelt 真隔离
长尾适配
内容哈希 · 冻结题集
证据链
SFT/DPO/GRPO · FSDP
训练底座
1000+ 测试
质量

概述

TuneSmith 是面向小团队和个人使用者的微调工作台:让请不起算法工程师的团队,也能从「一个业务目标 + 一份样例表格」出发,走完数据理解、训练、验证、直到可交付验收的微调闭环。产品重心在训练之前——把「我有一份数据」变成「这是一套有效的训练集」这段专业判断,由 BYOK 分析 Agent 与真实转换预览共同完成:业务用户通过逐行前后预览确认语义,而不是审计代码。 核心闭环:目标 + 样例 → Agent 联合诊断与澄清问题 → 数据处理方案 + 真实前后转换预览 → 全量数据校验 → 按业务对象分组的独立分区(内容哈希版本化)→ 真实 tokenizer 预检(截断与答案丢失统计)→ Agent 推荐训练方案 → 本地训练(一次授权 OOM 技术恢复)→ 基座 vs 微调同开发集对照 → 坏例证据 → 下一轮假设 → 固定评测题集下的第二轮 → 基座/父轮/新模型三模型对照 → 采用/继续/停止/证据不足决策 → 独立测试集最终验收。整条闭环在一个页面(目标与数据)或等价 CLI 中完成。 安全与诚实约束贯穿全链路:Agent 起草的长尾解析与评分代码只在真实操作系统隔离中执行(Docker network=none/read-only/cap-drop=ALL/非 root,或 macOS Seatbelt 默认拒绝),先通过业务正例与反例验证,隔离不可用即失败返回,绝不回退宿主;基座权重、数据版本与评测协议以 SHA-256 内容摘要标识,文件变化使旧确认与缓存对照失效;评测题集每轮冻结,新数据只进训练、不改写评分分母;生成失败与截断保留在分母,开放任务标记「待业务核对」,不伪造准确率。 平台底座:跨平台训练引擎(NVIDIA 4-bit QLoRA / Apple Silicon bf16 / CPU 自动检测),SFT/DPO/GRPO/领域适配四种后训练技术,FSDP/DeepSpeed/DDP 分布式策略,MLflow 实验追踪 + Model Registry 血缘管理,8 页 Streamlit 全生命周期面板。 当前状态:完整闭环(含第二轮改进与最终验收工作流)已在本地用虚构数据端到端验证——真实 Qwen3 训练 + 真实 GLM 分析,验证证据存于 docs/validation/;真实客户任务与业务验收是进行中的里程碑。

一行看懂整个产品——每个阶段都先确认真实业务含义,再继续往下走:

业务目标 + 样例 ─▶ Agent 联合分析 ─▶ 处理方案 + 真实转换预览
  ─▶ 确认语义 ─▶ 全量数据校验 ─▶ 按业务对象分组的独立分区
  ─▶ tokenizer 预检 ─▶ Agent 推荐训练方案 ─▶ 本地训练
  ─▶ 同开发集对照 ─▶ 坏例证据 ─▶ 下一轮假设
  ─▶ 冻结题集下的第二轮 ─▶ 采用 / 继续 / 停止
  ─▶ 独立测试集最终验收

产品原则

用预览确认,不审代码

业务用户通过逐行前后预览(原始行 → 模型输入 → 答案)确认语义,不需要审计 Python。

BYOK 分析 Agent

GLM Coding Plan / GLM API / 本地服务 / OpenAI 兼容端点。密钥只从环境变量读取——不落盘、不进任务快照。

把专业判断前移到训练之前

产品重心是把「我有一份数据」变成「这是一套有效的训练集」——这段通常需要算法工程师的专业判断。

一个页面或一个 CLI

整条闭环在「目标与数据」页面或等价的 scripts/data_intake.py 命令中完成——底层是同一套服务。

Core Loop

8 页面板

🎯 目标与数据

从这里开始:描述目标、上传样例、Agent 分析 → 预览 → 全量 → 分区 → 训练 → 对照 → 下一轮 → 验收

训练实验室

预设 → 表单 → YAML 预览 → 子进程启动 → 实时 loss 曲线;提交前数据预检;一键合并导出

实验管理

MLflow 运行列表、筛选、指标图表、参数差异

评估

领域图表:按难度准确率、实体类型拆解、校准曲线

模型对比

并排指标差值、执行摘要、成本估算

模型注册表

版本 + 血缘、champion/challenger 别名

数据向导

CSV/Excel → 列映射 → 训练集 + 7 项质量检查 → 直送训练实验室

对话

与任何训练产物对话——自动发现 outputs/ 下的 adapter,逐 token 流式输出

Architecture

目标与数据页面          workbench 服务层                 Agent (BYOK)
├─ 数据任务会话     ──→  ├─ 组合 / 沙箱              ←──  ├─ 供应商
├─ 预览/确认        ─→  ├─ 分区 / 训练预检               │   (GLM/本地/
├─ 训练/对照        ─→  ├─ 训练记录 / 恢复               │    兼容端点)
└─ 下一轮          ──→  ├─ 业务对照评测                 └─ 分析与解读
                          ├─ 坏例诊断
Streamlit (8 页)         └─ 验收 / 迭代轮次

Safety & Trust

Agent 起草的代码与每一条对照结论,都在一组「天然可信任」的约束下运行:

绝不回退宿主执行

Agent 起草的解析/评分代码只在真实操作系统隔离中运行(加固 Docker 或 macOS Seatbelt),先过业务正例与反例。沙箱不可用时显式失败——绝不静默改在宿主机执行。

内容哈希身份

基座权重、数据版本、评测协议以 SHA-256 内容摘要标识。文件变化使旧确认与缓存对照失效——旧身份绝不复用。

冻结评测题集

开发集与最终测试题每轮冻结。新数据只能扩充训练、不能改写评分分母——轮间差异始终可比。

失败留在分母

生成失败与截断计入总分母;开放任务标记「待业务核对」,不伪造准确率;一轮的结论可以是「证据不足」。

长尾适配沙箱

docker run --rm --pull=never \
  --network=none --read-only --cap-drop=ALL \
  --security-opt=no-new-privileges --user=65534:65534 \
  --pids-limit=16 --memory=256m --memory-swap=256m \
  --tmpfs=/tmp:rw,noexec,nosuid,size=8m \
  python:3.12-slim worker.py   # agent-drafted long-tail transform
# macOS fallback profile: sandbox-exec, deny-by-default

Training Engine

什么是 QLoRA?

QLoRA(量化低秩适配)将 4-bit 量化与低秩适配器结合,在消费级 GPU 上微调大语言模型,显存占用降低约 84%。

全参数微调(FP16)
~14GB
QLoRA(4-bit NF4)
~3-4GB

平台抽象

PlatformInfo 单例封装硬件检测。模型加载按 is_cuda / is_mps 分支:

CUDA:  device_map="auto" + BitsAndBytesConfig(4-bit NF4)
MPS:   无 device_map,加载后 .to("mps"),无量化
CPU:   float32,无 device_map

Flash Attention 2: 仅 CUDA(平台检查开关)
Trust remote code: True(Qwen3 必需)

5 阶段训练流水线

prepare_model()  → 加载 + 量化(CUDA)/ bf16(MPS)+ PEFT 应用 LoRA
prepare_data()   → AlpacaDataset / FinanceDataset / MedicalEntityDataset
setup_trainer()  → HF Trainer + DataCollator + 回调(进度、内存、检查点、MLflow)
train()          → tracker.start_run() → trainer.train() → tracker.end_run()
evaluate()       → 困惑度 + 准确率 + 定性生成

关键决策

动态 report_to

根据配置标志计算 report_to。无后端时返回 ["none"],避免 TensorBoard 导入崩溃。

quantization_bits=None

MPS/CPU 使用 None(非 0)禁用量化。配置校验拒绝无效值。

TrainingRunner Persistence

JSON 文件存储运行元数据,子进程状态在 Streamlit 页面刷新后仍存活。

DCP 可重分片 checkpoint

训练中保存的分布式 checkpoint 可跨卡数恢复(N 卡存、M 卡续);HF 格式与导出分离。

Showcase

医疗实体匹配

一个真实领域上的完整闭环实例:医疗实体示范同时也是数据向导模板的来源。

阿莫仙→阿莫西林胶囊 (H44023614)
北医三院→北京大学第三医院 (H110108001)
业务目标   :「变体药品/医院名归一化到标准编码」
样例分析   :Agent 识别 别名 → 标准名 列,采样候选,按编辑距离分层难度
分区       :实体分组切分——同一实体的所有变体留在同一分区
评测       :Top-1 选择准确率,按 简单/中等/困难 分层
结果       :微调后的 Qwen3 替代生产数据流中的模糊字符串匹配

Code

Core Pipeline

bnb = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
)

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-4B-Instruct-2507",
    quantization_config=bnb,
    device_map="auto",
    trust_remote_code=True,
)
model = prepare_model_for_kbit_training(model)

lora = LoraConfig(
    r=32, lora_alpha=64,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj",
                    "gate_proj", "up_proj", "down_proj"],
    lora_dropout=0.05, bias="none",
)
model = get_peft_model(model, lora)  # ~40M 可训练 / 7B 总量

快速开始

python scripts/data_intake.py create --input ./sample.csv --goal "…" --scope sample从业务目标 + 样例数据开始
python scripts/data_intake.py agent-config --provider glm-codingBYOK 分析 Agent(GLM/本地/兼容端点)
python scripts/launch_dashboard.pyMLflow + Streamlit · 8 页

技术栈

PythonPyTorchHugging Face TransformersPEFT (LoRA)bitsandbytesTRLFSDPDeepSpeedQwen3GLM APIMLflowStreamlitDocker / macOS Seatbelt (沙箱)

核心特性

业务目标直达微调:目标 + 样例数据 → Agent 联合分析与澄清问题 → 处理方案 + 真实前后转换预览 → 全量校验 → 独立分区 → 训练 → 对照 → 下一轮 → 最终验收,页面与 CLI 双入口
BYOK 分析 Agent:GLM Coding Plan / GLM API / 本地服务 / OpenAI 兼容端点四类预设;密钥仅从环境变量读取,不落盘、不进任务快照;远程分析需显式数据发送授权
多源资料组合:多表关联、列表展开、嵌套字段提取、按会话生成「历史输入 → 当前答案」,业务用户无需手工拼表或编写 JSON 配方
长尾适配沙箱:Agent 起草的解析/评分代码仅在真实 OS 隔离执行(Docker network=none/read-only/cap-drop=ALL/非 root/pids+memory 限制,或 macOS Seatbelt 默认拒绝),先过业务正例 + 反例;隔离不可用即返回失败,无宿主回退
内容哈希身份:基座权重、数据版本、评测协议均按 SHA-256 内容摘要标识;文件变化使旧确认与缓存对照失效,不冒用旧身份
训练前真实预检:用实际 tokenizer 统计各分区截断与答案丢失,答案完全丢失阻断训练启动;token 边界无法验证时明确标注
Agent 推荐训练方案:读本机候选模型事实 + 真实 tokenizer 预检,给出轮数/batch/学习率建议与理由;不自动下载模型或启动训练
本地真实训练:SFT + LoRA(NVIDIA 可选 4-bit 量化),一次授权 OOM 技术恢复(缩微批 + 梯度累积,或梯度检查点),恢复关联同一业务轮次并留痕
同开发集对照评测:基座 vs 微调,相同提示与生成协议;生成失败与截断保留在分母;开放任务标记待业务核对,不硬造准确率
坏例证据引擎:稳定 evidence_id + 原始文件行号 + 完整输出分页读取;Agent 解读必须先读评测摘要、真实坏行与对应训练证据
冻结评测套件:开发与最终测试题每轮冻结;新增数据只进训练,不改写评分分母,轮间差异可比
第二轮迭代闭环:假设 → 确认 → 按方向修订数据 → 基座/父轮/新模型三模型对照 → 采用/继续/停止/证据不足,决策与理由留档
自定义业务评分:Agent 起草可执行评分规则(业务正例 + 同题错误输出反例 + 隔离重放验证),用户核对实际得分与理由后确认;「更专业」类主观标准不被关键词规则伪造
最终独立验收:冻结模型 + 题集 + 评分/生成协议 + 业务门槛后显式执行;结论区分通过/未达/证据不足/待人工;重复暴露的测试题被阻断,不能伪装成新盲测
平台底座:SFT/DPO/GRPO/领域适配,FSDP/DeepSpeed/DDP 分布式,MLflow + Model Registry 血缘,8 页 Streamlit 面板,跨 NVIDIA/Apple Silicon/CPU