我在 Burr 上如何构建一个用于 LLM 代理的时间旅行调... 笔记

我在 Burr 上如何构建一个用于 LLM 代理的时间旅行调试器,以及“重放未变更的分支并证明一切未变”实际意味着什么。

现有的代理追踪工具存在局限性,迫使用户重新运行整个流水线以调试问题,难以将变更与非确定性模型行为区分开来。Rewind 通过允许用户在任意步骤分叉已完成的运行、修改单个输入并仅重放下游步骤来解决这一问题。这使得轨迹的精确差异比对成为可能,从而区分真实变更与模型抖动。Rewind 的架构包括浏览器界面、FastAPI 后端和 Burr 应用,状态持久化于 SQLite,并按节点捕获遥测数据。一个关键的设计原则是:状态仅包含语义信息,排除延迟或令牌数量等非确定性元素。在状态影响提示词或哈希之前,还会剥离可能导致分歧的框架特定键。分叉运行的覆盖配置在状态之外进行管理,确保未变更的分支仍能命中缓存。工件哈希基于内容字节生成,而非包含文件路径,从而避免虚假差异。缓存机制使用基于模型、温度、提示词和工具结果的确定性键。工具节点拥有独立的缓存,键由工具名称和规范化参数组成。差异引擎将嵌套字典扁平化,以识别特定字段级别的差异,提供清晰且可操作的调试信息。Rewind 实现了健壮的错误处理,在解析错误或无法消费的覆盖配置时发出明确错误。验证测试确认 Rewind 实现了 100% 缓存命中率和零增量令牌消耗用于未变更的重放。这种确定性非常有用,因为即使某个提供商宕机,只要所有 LLM 调用均已缓存,运行仍可继续。潜在陷阱包括 SDK 错误处理元数据以及不同提供商对模型 ID 验证不一致。该工具还解决了常见开发环境问题,如端口冲突和 Vite 的 IPv6 默认设置。未来的增强功能包括用于并行化多个覆盖配置的“假设”网格,以及对非线性图拓扑的支持。