面向微调和评测的数据生产工作台:把零散的 query、badcase、FAQ 和种子样本,批量转成可审计、可导出的训练数据。
CorpusFlow 不是一个 Prompt 游乐场。它把“导入原始数据 → 字段识别 → 敏感拒识 → 批量生成 → 人工复核 → JSON/CSV/JSONL 导出”做成一条可重复的工作流,服务于需要持续准备 SFT、QA、多轮对话和评测数据的算法、测试与业务团队。
CorpusFlow 当前服务于 NEXTAI 赛事赛道三「研发效能·提质增效」复赛演示。复赛版本的重点不是把产品做成完整评测平台,而是展示一条可复用的数据闭环:
badcase / FAQ / 测试记录 / 用户反馈
→ 字段识别与安全拒识
→ 批量生成 QA / 指令微调 / 多轮数据
→ 人工复核
→ JSON / CSV / JSONL 导出
→ 进入下一轮训练或回归评测
线上演示采用 Cloudflare Pages + Render 的分层部署:
用户浏览器
→ Cloudflare Pages: https://corpusflow-demo.pages.dev
→ VITE_API_BASE_URL
→ Render Express API: https://corpusflow-app.onrender.com
→ ALGORITHM_BASE_URL
→ Render FastAPI 算法服务: https://corpusflow-algorithm.onrender.com
→ Ark / Doubao 模型
Cloudflare Pages 只承载 React/Vite 静态前端;Express API 和 Python 算法服务作为 Render 常驻服务运行。线上排障时优先检查:
curl https://corpusflow-app.onrender.com/api/health期望 node: true 且 algorithm.ok: true。如果直接访问 https://corpusflow-demo.pages.dev/api/health 返回前端 HTML 或非 API 响应,说明请求打到了静态 Pages,而不是 Render API。
微调数据生产通常卡在三个地方:
- 手工造样本太慢:算法、测试或业务同学需要反复写 query、补 output、整理格式。
- 直接让模型批量扩写不可信:实体漂移、格式不稳定、敏感内容混入,最后仍要人工清洗。
- badcase 很难变成资产:线上问题、测试失败、用户反馈散落在日志和表格里,不能快速回流训练。
CorpusFlow 的目标是让数据生产从“临时手工活”变成“可配置、可复核、可导出”的工程流程。
上传一份 CSV:
query,input,output,system
导航去虹桥机场,,请先确认出发地,再给出导航规划,你是车载语音助手
我快没油了,帮我找顺路加油站,,推荐顺路加油站,并说明绕行成本,
色情片在哪里看,,,CorpusFlow 会自动完成:
- 识别
query / input / output / system等字段。 - 将
query映射为Instruction,将system映射为助手角色。 - 拒识敏感样本,并在结果里保留拒识原因。
- 对正常样本批量生成 QA、Alpaca Instruct 或多轮对话数据。
- 导出 JSON、CSV 或 JSONL,进入训练或评测流水线。
指令微调导出的 Alpaca 结构示例:
{
"system": "你是车载语音助手",
"instruction": "导航去虹桥机场",
"input": "",
"output": "请先告诉我你的出发地,我可以帮你规划前往虹桥机场的路线。"
}- 算法工程师:需要快速构造 SFT、QA、多轮对话训练数据。
- 测试工程师:需要把测试 badcase 扩展成覆盖更多表达方式的评测集。
- 业务知识库维护者:需要把 FAQ、SOP、工单和客服话术转成可训练格式。
| 能力 | 用户收益 | 证明方式 |
|---|---|---|
| 快速任务批量导入 | 从表格直接进入生成流程,减少手工字段整理 | 自动识别 query/question/user_query/问题、input/context/content/材料、output/answer/response、system/role/persona/角色设定 |
| 指令微调字段契约 | 导出的数据能对齐 LLaMA-Factory Alpaca 结构 | UI 明确展示 助手角色 System、用户问题 Instruction、补充材料 Input、期望输出 Output |
| 拒识与安全保护 | 敏感样本不会混入普通生成结果,同时保留可审计记录 | 被拒识的 seed 会在结果列表标记“拒绝”并展示原因 |
| 精调生成工作台 | 对单条高价值 seed 做语义解析、候选扩写和训练样本预览 | 工作流包含种子语句、句子解析、仿写句子、训练样本预览、生成控制 |
| 多轮数据支持 | 能构造上一轮 1Q1A + 当前轮的对话样本 | 导出 ShareGPT 风格 conversations / history 结构 |
| 进度与导出 | 长任务不是“发出去等结果”,而是可观察、可暂停、可导出 | 快速任务展示已完成种子、保留数量、保留率,并支持 JSON/CSV/JSONL |
| 类型 | 适合场景 | 主要字段 |
|---|---|---|
| QA | 问答数据、客服回复、知识库问答 | q, a |
| Instruction / Alpaca | 指令微调、LLaMA-Factory SFT | system, instruction, input, output |
| Multi-turn / ShareGPT | 多轮对话、上下文承接 | conversations 或 history/currentQuery/response |
所有格式均可导出为 JSON / CSV / JSONL。CSV 导出会做公式注入防护,避免 Excel 打开时把 = + - @ 开头内容误当公式执行。
git clone https://github.com/Longfellow1/CorpusFlow-.git
cd CorpusFlow
bash setup.sh
npm run dev:all打开:
http://localhost:3000
npm run dev:all 会同时启动:
- React + Express:
http://localhost:3000 - FastAPI 算法服务:
http://localhost:8001
docker compose up --build复制 .env.example 为 .env.local,至少配置:
PORT=3000
ALGORITHM_BASE_URL=http://127.0.0.1:8001
ARK_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
ARK_API_KEY=your_key_here
ARK_MODEL=doubao-seed-1-6-250615
ARK_TIMEOUT_SECONDS=120
VITE_API_BASE_URL=说明:
ARK_API_KEY只放后端环境变量,不要放进前端或公开材料。VITE_API_BASE_URL只用于前端指向 API 地址,部署到 Cloudflare Pages 时可设置为公网 API 域名。- 本地开发时
VITE_API_BASE_URL可以留空,走同源 API。
npm run dev # 启动 React + Express
npm run dev:algorithm # 启动 Python 算法服务
npm run dev:all # 同时启动前后端和算法服务
npm run build # Vite 生产构建
npm run lint # TypeScript 类型检查测试:
node --import tsx --test tests/*.test.ts
cd algorithm && uv run python -m unittest tests.test_generation_frame健康检查:
curl http://localhost:3000/api/health期望返回:
{
"ok": true,
"services": {
"node": true,
"algorithm": {
"ok": true
}
}
}适合批量导入 CSV / XLSX 后直接生成。核心路径:
上传文件 → 自动识别字段 → 选择 QA / 指令微调 / 多轮 → 填写助手角色 → 生成 → 导出
适合场景:
- 一批 FAQ 转训练数据
- 一批 badcase 扩展成评测 query
- 一批用户问题补齐标准回答
- 一批指令微调样本转成 Alpaca / JSONL
适合单条高价值种子的深度扩写。核心路径:
输入种子 → 句子解析 → AI 扩写候选 → 仿写句子 → 训练样本预览 → 批量生成
适合场景:
- 针对一个 badcase 做同义表达增强
- 控制实体、动作、对象、修饰条件的泛化范围
- 先人工确认语义骨架,再让模型批量生成
┌─────────────────────────────────────────────┐
│ React + TypeScript + Vite │
│ 数据导入、任务工作台、生成进度、结果编辑与导出 │
└───────────────────┬─────────────────────────┘
│ REST
▼
┌─────────────────────────────────────────────┐
│ Express + TypeScript │
│ 登录认证、任务所有权、工作区持久化、导出安全 │
└───────────────────┬─────────────────────────┘
│ HTTP
▼
┌─────────────────────────────────────────────┐
│ FastAPI + Python │
│ LLM 编排、语义解析、批量生成、进度与取消 │
└─────────────────────────────────────────────┘
第一版部署推荐:
Cloudflare Pages
→ React/Vite 静态前端
→ VITE_API_BASE_URL
→ 外部 Express API(当前演示:Render corpusflow-app)
→ 外部 FastAPI 算法服务(当前演示:Render corpusflow-algorithm)
→ Ark / Doubao 模型
这个形态优先保证演示 URL 稳定可访问;Express 和 FastAPI 暂不强行迁移到 Cloudflare Workers。
- JWT 认证:HMAC-SHA256 会话令牌。
- 任务所有权隔离:任务、种子、结果和工作区读写前校验所属用户。
- 并发写入保护:共享文件 I/O 使用 Promise 链互斥,降低数据损坏风险。
- CSV 注入防护:导出时转义公式前缀。
- 敏感拒识:政治敏感、暴力违法、色情获取等输入会在生成前拦截。
- Prompt 注入防护:算法层对外部输入做边界包裹与长度限制。
- 当前存储以本地 JSON 文件为主,适合演示和小团队内测;生产化建议迁移到数据库或对象存储。
- 算法服务依赖外部 LLM API,生成稳定性受模型服务、网络和 API key 配额影响。
- README 暂未包含正式截图或 GIF;建议后续补一张快速任务结果页截图。
- 仓库暂未提供 CONTRIBUTING.md 和 GitHub Actions 工作流。
- 快速任务批量导入与字段识别
- QA / Instruction / Multi-turn 三类输出
- LLaMA-Factory Alpaca 字段契约
- 拒识样本保留与原因展示
- JSON / CSV / JSONL 导出
- Cloudflare Pages + 外部后端部署方案
- 示例数据包与截图
- 数据集 diff 与版本对比
- Hugging Face Datasets Hub 导出
- 数据库存储与 Cloudflare 半原生改造
欢迎提交 Issue 和 PR,尤其是:
- 新的字段识别别名
- 更稳定的生成与过滤策略
- 更多训练数据格式适配
- 演示样例、文档和部署脚本
正式贡献指南待补充:TODO: add CONTRIBUTING.md。
Apache License 2.0。详见 LICENSE。
Copyright 2026 Harland.
Harland —— AI Native 产品经理。
- 邮箱: Harland5588@outlook.com
- GitHub: @Longfellow1