KabirKoratkar/forklab

GitHub: KabirKoratkar/forklab

ForkLab 是一个分布式 AI 系统的因果调试器,通过在隔离沙箱中运行反事实实验来识别和验证多 Agent 集群中故障传播的根因与干预效果。

Stars: 0 | Forks: 0

# ForkLab ### 一个用于分布式 AI 系统的因果调试器。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/KabirKoratkar/forklab/actions) [![Daytona](https://img.shields.io/badge/Daytona-counterfactual_compute-B5FF3D?style=flat-square)](https://www.daytona.io/) [![Braintrust](https://img.shields.io/badge/Braintrust-traces_%2B_evals-6C5CE7?style=flat-square)](https://www.braintrust.dev/) [![Fireworks AI](https://img.shields.io/badge/Fireworks_AI-interpretation-FF5A36?style=flat-square)](https://fireworks.ai/) [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) ForkLab 提出了一个看似简单却十分困难的问题:**当一个 agent 失败时,它的同伴是否应该了解该失败?** 它测试了广播一个 agent 的失败状态能否阻止整个集群进入同步重试级联。 一个不可变的工作负载被上传到八个独立的 Daytona 世界中,这些世界由相同的不可变容器快照创建。每个世界恰好更改一个预先注册的干预措施:基线、抖动、失败广播、重试队列余量、延迟注入、广播+抖动、强制重启或随机安慰剂。 - **Daytona** — 用于反事实执行的独立沙箱。 - **Braintrust** — 实验账本:根追踪、子世界跨度、确定性评分器和策略回归测试套件。 - **Fireworks AI** — 在收集证据后提供有界的技术解释。 ## 实时结果 实验 `rc-idem-c76577482663660c` 从相同的 Daytona 快照执行了所有八个世界,并在完成后将集群清理至零沙箱。 | 反事实世界 | 集群失败率 | 读数 | |---|---:|---| | 基线 | **22.500%** | 未处理的对照组 | | 失败广播 | **0.000%** | 假设得到支持 | | 重试抖动 | **0.000%** | 有效的替代干预 | | 广播 + 抖动 | **0.000%** | 组合使用时无回归 | | 随机安慰剂 | **22.500%** | 重现了基线结果 | | 延迟增加 | **40.625%** | 阳性对照加剧了失败 | | 强制重启 | **26.875%** | 在负载下破坏稳定性 | 该结果不仅仅是一张图表。Braintrust 记录了一个根实验追踪和八个带评分的子跨度。所有世界都完成并验证了共享的工作负载,同时因果有效性、公共随机数、安慰剂保真度、阳性对照方向、基础设施匹配度和清理均得分为 `1`。 **证据:** [重试级联策略评估](https://www.braintrust.dev/app/daytona%20sprinthack/p/forklab-retry-cascade-policy/experiments/agent%2Fimplement-retry-cascade-lab-1784928151) · [Daytona 容量评估](https://www.braintrust.dev/app/daytona%20sprinthack/p/forklab-daytona-capacity-policy/experiments/agent%2Fimplement-retry-cascade-lab-1784928151) · [获取策略评估](https://www.braintrust.dev/app/daytona%20sprinthack/p/forklab-acquisition-policy/experiments/agent%2Fimplement-retry-cascade-lab-1784928151) · 根追踪 `0589e317db671f764f5b5ef60ea27e58` [阅读黑客松提交故事 →](SUBMISSION.md) ## 架构 ``` flowchart LR O["Direct operator console"] -->|"zero-cost"| L["Local deterministic twin"] O -->|"preflight + human approval"| S["Immutable Daytona snapshot"] S --> W1["Baseline world"] S --> W2["Broadcast world"] S --> W3["Jitter world"] S --> WN["Five controls"] W1 --> C["Typed metric collector"] W2 --> C W3 --> C WN --> C C --> R["Evidence / compute ranking"] R --> F["Fireworks technical readout"] R -. "traces + scorers" .-> B["Braintrust"] F -. "model + tool telemetry" .-> B ``` 重试级联策略使用单侧配对证据评分为每个干预措施排名: ``` z_paired = (beneficial_discordant - harmful_discordant) / sqrt(total_discordant) evidence_bits = log2(1 + max(0, z_paired)^2) utility(intervention) = evidence_bits / mean_compute_units ``` 该工作负载使用基于计数器的随机性,因此即使控制流出现分歧,每个世界也会受到相同的外部冲击。每个世界返回所有 160 个有序的二进制回合结果,从而实现对齐的 McNemar 风格比较,而非独立分支近似。TypeScript 本地孪生体和无依赖的 Python 沙箱工作负载经过测试,确保具备位级一致性。 ## 执行边界 本地模拟是免费的,可直接在控制台中运行。真实的 Daytona 执行包含两阶段的人工检查点:只读的预检解析已配置的快照和集群锁,随后通过第二次点击进行授权,使用与该确切请求和快照资源指纹绑定的短期 token 进行计算。 默认运行的限制如下: - 8 个共享快照世界 - 一次仅激活 1 个世界 - 每个世界 10 分钟的 TTL - 保守的 133 沙箱分钟数审批上限 - `daytonaio/sandbox:0.8.0`:1 vCPU、1 GiB RAM 和 3 GiB 磁盘 - 在每个世界上显式禁用出站网络 - 进程本地执行锁以及账户范围内的现有集群预检 - 尽力而为的世界删除操作以及账户级别的零沙箱验证 该账户仅开放 `us` 区域,由于该区域无法使用 Linux VM 运行器,而 30 GiB 的 Windows VM 会在创建子分支之前耗尽整个组织的磁盘配额。因此,ForkLab 在此层级上使用了最强可行的隔离拓扑结构:来自同一不可变快照 ID 的顺序容器。预检会在审批前验证快照-区域成员资格以及 `snapshot disk × peak worlds`。每个世界还会获得相同的工作负载摘要和基于计数器的随机坐标。来源信息如实报告为 `common_snapshot`,绝不会报告为 `common_ancestor`。 执行锁位于进程本地。账户预检保护了正常的单进程、仅限本地回环的应用程序,但“先列出后创建”的检查在单独运行的 ForkLab 进程之间并不是原子操作。 取消操作会阻止新世界启动,但 Daytona SDK 无法中断已在世界内部运行的命令。该命令仍然受限于其命令超时,随后是显式的清理操作及其 TTL 故障保护。执行结果也会记录已解析的快照类、CPU、内存、GPU 和磁盘以及沙箱分钟数预算。 世界执行是失败隔离的。如果单个 Daytona 沙箱无法进行配置、执行或清理,ForkLab 会记录干预措施、生命周期阶段和有界的提供者错误,然后继续执行已处于批准预算内的剩余世界。存活的对齐基线的配对将作为明确的临时证据返回;如果基线缺失,则会完全保留因果决策。在返回任何部分结果之前,集群级别的协调仍必须确认不存在匹配的沙箱。 真实执行被有意限制在仅绑定本地回环的主机上。付费端点还需要同源 JSON、一次性 256 位审批 token、请求绑定的幂等性以及账户范围内的 Daytona 集群预检。除非添加了经过真实身份验证的执行服务,否则远程部署仅公开模拟功能。 ## 本地设置 要求:Node.js 20.12 或更高版本,以及通过身份验证的赞助商 CLI。 ``` npm install cp .env.example .env.local # 仅在受信任的本地 demo host 上设置 FORKLAB_DAYTONA_EXECUTION=enabled。 npm run doctor npm run dev ``` 打开 `http://127.0.0.1:3000`。 `npm run doctor` 会在不打印凭据的情况下验证本地的 GitHub、Daytona、Fireworks 和 Braintrust CLI 会话。运行时凭据保留在 `.env.local` 中,且永远不会被提交。 ## 验证 ``` npm run lint npm run typecheck npm test npm run build ``` 在设置 `BRAINTRUST_API_KEY` 后,运行获取和重试级联评估: ``` npm run eval ``` 在直接实验控制台中,首先运行本地排练。要创建真实的沙箱,请点击无计算的 Daytona 检查,验证解析出的资源配置,然后批准最终检查点。此账户使用兼容区域的 `daytonaio/sandbox:0.8.0` 容器快照。预检会验证它在 `DAYTONA_TARGET` 中是否处于活动状态,根据 `DAYTONA_DISK_QUOTA_GIB` 计算 `snapshot disk × peak worlds`,并在任一约束条件失败时拒绝审批。 每一次真实的实验都会成为一个 Braintrust 追踪,并为每个反事实世界生成一个子跨度。根追踪会对世界完成情况、共享快照来源、公共随机数、安慰剂保真度、阳性对照方向、基础设施匹配度和整体因果有效性进行评分。`npm run eval` 还会发布确定性的策略和 Daytona 容量回归测试套件。 ## 构建工具 Daytona · Braintrust · Fireworks AI · Next.js · React · TypeScript · Python · Vercel AI SDK · Zod · Vitest · GitHub Actions ## 团队 由 Daytona HackSprint SF 的 [Kabir Koratkar](https://github.com/KabirKoratkar) 构建。
标签:AI智能体, Daytona, TypeScript, 人工智能, 分布式系统, 响应大小分析, 因果调试, 安全插件, 故障分析, 用户模式Hook绕过, 自动化攻击, 逆向工具