Deli AutoResearch 开源深度拆解:从 SKILL.md 到 285B 模型 RL 实验,一个自博弈 Agent 框架的配置骨架与验证路径
1. 先搞清楚 Deli AutoResearch 到底解决什么问题Deli AutoResearch 是一个自博弈 Agent 框架核心卖点是让 Agent 在无人值守的情况下连续跑几十小时甚至几天完成文献综述、实验设计、论文撰写这类长程任务。它适合谁适合手里有 285B 级别模型推理资源、想跑 RL 实验验证链路、又不想被 Agent 反复“假死”拖垮的工程团队。大部分 Agent 框架跑不过 24 小时原因不是模型不够聪明而是三个工程层面的死穴认知循环、假死停滞、运行时崩溃。认知循环指的是 Agent 连续迭代相似方向收益递减却跳不出来假死停滞更隐蔽Agent 输出一段摘要后等用户确认外部看轮询还在跑实际工作已经停了运行时脆弱性则是上下文压缩静默破坏循环、关闭会话连带关闭定时器而且这些失败默认不会被注意到。Deli AutoResearch 的解法很 radical不开源代码只开源协议。整个框架就是一个自包含的 SKILL.md 文件定义了行为约束、状态文件格式、停滞检测规则、看门狗机制和子 Agent 调度模式。工程实现细节留给使用者自己填反而让它能适配任何支持 cron 和文件系统的平台。我试过把这套协议骨架接到自己的 285B 模型 RL 实验链路上下面把配置骨架和验证路径完整拆一遍。你需要准备的是一个能跑 285B 模型推理的 API 通道、一台常驻的 Linux 机器、以及基础的 shell 和 cron 操作能力。2. TaoToken 前置统一 Key/API 通道接入Deli AutoResearch 的 SKILL.md 协议本身不绑定任何模型供应商但你要跑 285B 模型的 RL 实验需要一个稳定的 API 通道来承载 GRPO 训练中的采样请求。TaoToken 在这里的角色是统一 Key 和 API 入口让你不用在多个供应商之间来回切换配置。接入方式很简单先拿到 API Key然后配置到环境变量里。访问 https://taotoken.net/api-keys 创建 Key注意这个页面是 deep link创建后复制保存。拿到 Key 之后在项目根目录创建.env文件# .env TAOTOKEN_API_KEYsk-your-key-here TAOTOKEN_BASE_URLhttps://taotoken.net/api然后在 settings.json 里引用这个环境变量。Deli AutoResearch 的 settings.json 是框架级配置控制模型通道、超时、重试策略{ model_provider: { name: taotoken, base_url: ${TAOTOKEN_BASE_URL}, api_key_env: TAOTOKEN_API_KEY, default_model: deepseek-v4-285b, timeout_seconds: 120, max_retries: 3, retry_backoff: exponential }, runtime: { max_session_rounds: 15, max_session_minutes: 30, stale_threshold: 2, escalate_threshold: 4 }, watchdog: { l0_heartbeat_timeout_hours: 2, l1_cron_interval_minutes: 60, l2_callback_first_line: update_last_seen } }这里的关键参数是max_session_rounds和max_session_minutes它们直接对应 SKILL.md 里的“单会话上限 15 轮或 30 分钟”约束。超过就强制重启新会话切断认知循环的根因。如果你要跑长期编码或 Agent 任务可以考虑 Coding Plan 方案在 https://taotoken.net/coding-plan 查看具体配额和接入方式。对于 285B 模型的 RL 实验采样请求量大建议先确认配额是否覆盖你的 batch size 和 N 值。3. 可复制配置SKILL.md 骨架与 config.tomlSKILL.md 是整个框架的协议核心它不是代码而是一份行为约束文档。你需要把它放在任务目录的根下框架启动时会读取它来约束 Agent 行为。下面是一个可直接复制的最小骨架# SKILL.md - Deli AutoResearch Protocol ## Hard Rules 1. Zero-interaction: 运行期间不提示用户不进入 Plan Mode不结束于问题。 2. Ready means execute: 准备完毕直接执行不问“要不要提交”。 3. Callback means report-alive: 每次回调第一行更新 last_seen。 4. Persist state to files: 所有进度写入文件不依赖对话记忆。 5. Guardian/worker separation: 看门狗不读取任务数据、不修改状态。 ## State Files - state/task_spec.md: 目标 / 里程碑 / 成功标准 - state/progress.json: {iteration, total_findings, status, stale_count} - state/findings.jsonl: 累积发现追加模式 - state/directions_tried.json: 已尝试方向防循环 - state/iteration_log.jsonl: 每轮迭代摘要 ## Stale Detection - 一轮迭代 0 新发现或指标下降 → stale_count 1 - stale_count 2 → 改变结构约束不是战术参数 - stale_count 4 → 标记需要人工关注 - 新方向必须与所有历史方向不同 ## Pivot Strategies 1. 从相反的假设重新开始 2. 找结构上相似的跨领域案例 3. 改变验证标准必要条件换充分条件 4. 缩小/扩大问题范围 ## Sub-Agent Modes - A. 目标驱动研究迭代 - B. 并行探索复杂子问题 - C. 实验运行长计算任务 - D. 验证迭代后 QAconfig.toml 则是运行时配置控制看门狗层级和子 Agent 调度[watchdog.l0] type shell_guard heartbeat_timeout_hours 2 action emergency_patrol [watchdog.l1] type persistent_cron interval_minutes 60 action check_last_seen_and_restart [watchdog.l2] type business_loop callback_first_line update_last_seen [sub_agent] mode_a_max_rounds 15 mode_b_parallel_limit 4 mode_c_poll_interval_minutes 5 mode_d_qa_enabled true [experiment] model deepseek-v4-285b method grpo batch_size 512 group_size 16 context_length 32768 dataset_size 18953 verifier_noise [0, 0.10, 0.30, 0.45] total_runs 12这里verifier_noise数组对应论文里的验证器噪声实验ε 从 0 到 0.45 四档。group_size是 GRPO 的 N 值每组采样 16 条。这些参数直接决定你的 GPU 时间消耗3570 卡时是 12 次 run 的总量单次约 297 卡时。状态文件系统需要提前创建目录结构mkdir -p {task}/state {task}/logs touch {task}/state/findings.jsonl touch {task}/state/iteration_log.jsonl echo {iteration:0,total_findings:0,status:init,stale_count:0} {task}/state/progress.json echo [] {task}/state/directions_tried.json4. 验证请求确认 RL 实验链路可用配置写完之后不要直接上 285B 全量实验先用小规模请求验证链路。第一步是确认 API 通道能正常返回curl -s -X POST ${TAOTOKEN_BASE_URL}/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: deepseek-v4-285b, messages: [{role: user, content: Reply with OK only.}], max_tokens: 8 } | jq -r .choices[0].message.content如果返回OK说明 Key 和通道正常。接着验证 GRPO 采样接口用一个小 batch 模拟训练时的采样请求import os, requests, json base os.environ[TAOTOKEN_BASE_URL] key os.environ[TAOTOKEN_API_KEY] payload { model: deepseek-v4-285b, prompt: Solve: 2x 3 11. Show steps., n: 4, temperature: 0.7, max_tokens: 256 } resp requests.post( f{base}/v1/completions, headers{Authorization: fBearer {key}}, jsonpayload, timeout120 ) data resp.json() for i, choice in enumerate(data[choices]): print(fsample {i}: {choice[text][:80]}...)n4对应 GRPO 的 group size 缩小版实际训练用 16。如果 4 条采样都能返回且格式正确说明采样链路通了。第三步验证看门狗心跳。手动触发一次 L2 回调检查 last_seen 是否更新python3 -c import json, time p {task}/state/progress.json d json.load(open(p)) d[last_seen] int(time.time()) d[iteration] 1 json.dump(d, open(p, w)) print(last_seen updated:, d[last_seen]) 然后检查 L1 cron 是否能检测到超时。把 last_seen 改成 3 小时前等 cron 跑一轮看是否触发重启python3 -c import json, time p {task}/state/progress.json d json.load(open(p)) d[last_seen] int(time.time()) - 3*3600 json.dump(d, open(p, w)) print(simulated stale:, d[last_seen]) 如果 cron 配置正确下一轮 L1 检查会读取到超时并重启对应循环。这一步验证通过说明三层看门狗机制可用。最后验证停滞检测。手动把 stale_count 设为 2观察框架是否注入扰动策略python3 -c import json p {task}/state/progress.json d json.load(open(p)) d[stale_count] 2 json.dump(d, open(p, w)) print(stale_count set to 2) 下一轮迭代启动时框架应该读取到 stale_count 2并改变结构约束而非调参。你可以在 iteration_log.jsonl 里看到转向记录。5. 本篇常见错排查报错一TAOTOKEN_API_KEY not found原因通常是.env文件没有被加载。Deli AutoResearch 的 settings.json 用${TAOTOKEN_API_KEY}引用环境变量但 shell 不会自动读取.env。解决方式是在启动脚本里显式 sourceset -a source .env set a python3 run_agent.pyset -a让所有变量自动 exportset a恢复。如果你用 systemd 管理常驻进程在 service 文件里加EnvironmentFile/path/to/.env。报错二stale_count一直不增长Agent 卡住但没被检测到检查 L2 回调是否真的在每次回调第一行更新 last_seen。SKILL.md 里写了Callback means report-alive但如果你自己实现的 worker 没有遵守这条看门狗就瞎了。验证方式tail -f {task}/logs/heartbeat.jsonl如果这个文件长时间没有新行说明 L2 回调没在写。检查你的 worker 代码确保每次回调入口处有def on_callback(state): state[last_seen] int(time.time()) save_state(state) # ... 业务逻辑报错三GRPO 采样返回model not found285B 模型的名称在不同通道可能不一样。先用模型列表接口确认可用名称curl -s ${TAOTOKEN_BASE_URL}/v1/models \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} | jq -r .data[].id把返回的模型 ID 填到 settings.json 的default_model和 config.toml 的model字段。不要硬编码猜测的名称。报错四cron 任务不执行L1 看门狗依赖持久 cron但很多环境的 cron 需要显式指定用户和路径。检查 crontabcrontab -l确保有类似这样的条目*/60 * * * * cd /path/to/task /usr/bin/python3 watchdog_l1.py logs/cron.log 21注意用绝对路径cron 的环境变量和交互式 shell 不一样。如果 cron 日志为空先手动跑一遍watchdog_l1.py确认脚本本身没问题。报错五上下文压缩后定时器丢失这是运行时脆弱性的典型表现。SKILL.md 的 Hard Rule 4 要求所有进度写入文件但如果你在 worker 里用了内存定时器上下文压缩会把它干掉。解决方式是把定时逻辑外置到 L0 shell guard#!/bin/bash # l0_guard.sh while true; do now$(date %s) last$(python3 -c import json; print(json.load(open({task}/state/progress.json))[last_seen])) diff$((now - last)) if [ $diff -gt 7200 ]; then echo L0 emergency patrol triggered at $(date) logs/heartbeat.jsonl python3 emergency_patrol.py fi sleep 300 done这个脚本不依赖任何会话常驻 shell 里跑上下文压缩影响不到它。6. 语义一致 CTA把链路跑通之后配置骨架和验证路径都跑通之后你手里应该有一个能自主运行、带三层看门狗、支持 GRPO 采样的 Agent 框架。接下来要做的是把它接到真实的 285B 模型 RL 实验上。如果你在接入过程中遇到 API 通道问题先去 https://taotoken.net/api-keys 确认 Key 状态然后对照 https://taotoken.net/doc 的接入文档检查 base_url 和认证头格式。文档里有完整的请求示例和错误码说明。验证模型本身是否可用可以用模型对话页面快速测试在 https://taotoken.net/model-chat 发一条简单请求确认 285B 模型能正常响应。这一步能排除模型名称错误或配额不足的问题。如果你打算长期跑编码或 Agent 任务Coding Plan 的配额模式可能比按量计费更划算具体在 https://taotoken.net/coding-plan 查看。对于 3570 卡时这种量级的实验提前确认配额上限能避免跑到一半被限流。最后提醒一点Deli AutoResearch 的 SKILL.md 协议约束的是行为不是模型能力。去掉约束越界行为就会回来。三层看门狗和状态文件系统是这套框架真正值钱的地方配置的时候不要偷懒省掉任何一层。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →