伊甸园飞轮
Claude Code的独立MCP服务器,可捕获您的编码会话作为本地模型的微调数据。
闭环:使用AI→ 捕捉→ 对…微调→ 部署→ 重复。
 ](https://nodejs.org)  
它做什么
与AI代理的每次对话都是一个潜在的训练示例。eden飞轮捕获这些交互,对其质量进行评分,消除重复,将其格式化为SFT训练数据,并触发微调运行——所有这些都是通过模型上下文协议完成的。
You use Claude Code daily
│
▼
flywheel captures the session (manual or auto)
│
▼
Quality scoring: tool usage, error rate, turn depth
│
▼
Deduplication via SHA-256 fingerprinting
│
▼
Export as SFT training data (ChatML / Alpaca / ShareGPT / Raw)
│ │
▼ ▼
Generate synthetic data 10% held-out eval split
(Qwen 3.6 Plus via OpenRouter)
│
▼
Fine-tune via local MLX LoRA
│
▼
Evaluate on held-out eval set
│
▼
Promote & deploy to Ollama
│
▼
You use the BETTER model tomorrow安装
添加到克劳德代码
添加到MCP配置(~/.claude/mcp.json 或同等):
{
"mcpServers": {
"eden-flywheel": {
"command": "npx",
"args": ["-y", "eden-flywheel"],
"env": {
"FLYWHEEL_DB": "~/.config/eden-flywheel/flywheel.db",
"OPENROUTER_API_KEY": "your-key-here"
}
}
}
}或在本地安装:
git clone https://github.com/alex-rentel/eden-flywheel.git
cd eden-flywheel
npm install && npm run build然后将MCP指向已构建的入口:
{
"mcpServers": {
"eden-flywheel": {
"command": "node",
"args": ["/path/to/eden-flywheel/dist/index.js"]
}
}
}用法:全循环
1.捕获会话
flywheel_autocapture { enabled: true } // auto-capture all messages
flywheel_record_start {} // or manual recording2.导出培训数据
flywheel_export { evalSplit: true, outputPath: "/tmp/train.jsonl" }
// Writes train.jsonl + train.eval.jsonl (10% held-out)3.生成合成数据(可选)
flywheel_generate { count: 50, difficulty: "medium" }
// Uses Qwen 3.6 Plus (free on OpenRouter) to create more training examples4.训练LoRA适配器
flywheel_train {
baseModel: "mlx-community/Qwen2.5-Coder-3B-Instruct-4bit",
trainData: "/tmp/train.jsonl"
}5.评估
flywheel_eval {
baseModel: "mlx-community/Qwen2.5-Coder-3B-Instruct-4bit",
adapterPath: "~/.config/eden-flywheel/models/adapters/lora-...",
testData: "/tmp/train.eval.jsonl"
}6.推广和部署
flywheel_promote { adapterPath: "..." }
// GGUF adapters auto-deploy to Ollama
// MLX adapters use mlx-lm directlyMCP工具(14)
会话录制
| 工具 | 说明 |
|---|---|
flywheel_record_start | 使用可选元数据开始录制会话 |
flywheel_record_stop | 停止记录并计算质量分数 |
flywheel_list | 列出所有记录的会话及其统计数据 |
自动捕获(克劳德代码)
| 工具 | 说明 |
|---|---|
flywheel_autocapture | 启用/禁用自动会话捕获 |
flywheel_ingest | 将原始消息摄入活动的自动捕获会话 |
flywheel_cost | 估计会话的API成本 |
出口与质量
| 工具 | 说明 |
|---|---|
flywheel_export | 将会话导出为训练JSONL,可选10%eval分割 |
flywheel_filter | 按质量、工具使用情况、错误导出过滤后的数据 |
flywheel_status | 显示捕获统计数据、质量分布、数据健康状况 |
合成数据
| 工具 | 说明 |
|---|---|
flywheel_generate | 通过Qwen 3.6 Plus(免费OpenRouter)生成合成训练数据 |
flywheel_validate | 使用Claude对合成数据质量进行评分 |
培训管道
| 工具 | 说明 |
|---|---|
flywheel_train | 触发MLX LoRA微调 |
flywheel_eval | 根据保留的测试数据评估适配器 |
flywheel_promote | 将适配器部署到Ollama或活动插槽 |
MCP资源(4)
| URI | 描述 |
|---|---|
flywheel://status | 当前捕获状态和统计数据 |
flywheel://sessions | 所有录制的会话 |
flywheel://latest-export | 最近的ChatML JSONL导出 |
flywheel://training-history | 训练跑和主动适配器 |
支持的培训后端
| 后端 | 硬件 | 用例 |
|---|---|---|
| 当地MLX LoRA (mlx-lm) | Mac M1+ | 快速迭代,小型适配器 |
| 本地纳米帽 (mlx纳米帽) | Mac M1+ | mlx全SFT |
| 远程HPC (伊甸园模型+Slurm) | GPU集群 | 大规模微调 |
支持的部署目标
| 目标 | 注释 |
|---|---|
| 奥拉玛 | 通过模型文件自动部署GGUF适配器 |
| mlx lm | 使用MLX安全张量适配器进行直接推理 |
配置
配置文件位于 ~/.config/eden-flywheel/config.json:
{
"logLevel": "info",
"dbPath": "~/.config/eden-flywheel/flywheel.db",
"autoCapture": true,
"defaultExportFormat": "chatml"
}CLI标志
eden-flywheel --verbose # Debug logging
eden-flywheel --quiet # Error-only logging
eden-flywheel --log-level warn # Specific log level
eden-flywheel --db-path /tmp/f.db # Custom database path环境变量
| 变量 | 描述 |
|---|---|
OPENROUTER_API_KEY | 需要 flywheel_generate (合成数据) |
ANTHROPIC_API_KEY | 需要 flywheel_validate (质量评分) |
FLYWHEEL_DB | 覆盖数据库路径 |
质量评分
根据以下因素,会话得分为0-1:
| 信号 | 重量 | 描述 |
|---|---|---|
| 工具调用存在 | +0.15 | 使用工具的会话更有价值 |
| 存在错误 | -0.15 | 错误严重的会话将受到惩罚 |
| 多回合(4+) | +0.10 | 更深入的对话是首选 |
| 成功的工具模式 | 每次+0.05 | 工具调用→ 结果→ 响应链 |
| 长度好 | +0.05 | 不要太短,也不要太长 |
| 角色多样性(3+个角色) | +0.05 | 用户+助手+工具多样性 |
导出格式
- 聊天ML (默认):标准SFT格式,系统提示+工具调用为XML
- 羊驼:用于简单微调的指令/输入/输出
- 分享GPT:多回合人工/gpt对话格式
- 原始:保留所有角色,包括工具消息
相关项目
许可证
Apache 2.0
