Custom Sandboxed Background Agent

Nikola Balic (@nibzard)· emerging

问题

现成的编码Agent(如Devin、Claude Code、Cursor)存在以下三类问题:

  • 过于通用——未与企业专属的开发环境、工具及工作流深度集成
  • 厂商锁定——与单一模型供应商深度绑定,限制灵活性并产生依赖
  • 上下文受限——无法访问内部基础设施、私有代码库或企业专属工具

企业所需的编码Agent应具备以下特性:

  • 可在自身专属开发环境中运行
  • 能通过闭环反馈(编译器、代码检查工具、测试)完成迭代
  • 可实时展示Agent的工作进度
  • 具备模型无关性,可根据需求切换供应商

方案

构建一款自定义后台Agent,运行在与开发者完全一致的沙箱环境中,具备以下特性:

1. 沙箱化执行环境

  • 采用Modal这类基础设施搭建临时的沙箱化开发环境
  • Agent运行在完全相同的context下:涵盖代码库、依赖项与开发工具
  • 与生产环境隔离,但镜像复刻开发环境的配置

2. 实时通信层

  • 通过WebSocket连接将标准输出(stdout)与标准错误(stderr)流式传输至客户端
  • 用户可实时查看Agent的执行进度(无需轮询)
  • 支持prompt与状态更新的双向通信

3. 闭环反馈机制

  • Agent可借助机器可读的反馈自主完成迭代
  • 编译错误、linter警告、测试失败结果均可指导迭代过程
  • 并非一次性实现,而是通过迭代逐步优化完善

4. 模型无关架构

  • 基于可插拔接口支持多种前沿模型
  • 无需重构基础设施即可切换不同模型提供商
  • 针对特定任务类型选用最优模型

5. 企业定制化集成

  • 与内部工具、脚本及工作流深度集成
  • 可访问私有代码仓库、内部API与文档资源
  • 依据团队独特的开发实践进行定制化适配

如何使用

架构组件:

  • 沙箱服务提供商:Modal、sprites.dev 或自定义容器编排
  • WebSocket服务器:用于实现实时双向通信
  • 模型抽象层:支持多LLM提供商的接口层
  • 反馈循环集成:用于解析编译器、代码检查器及测试输出的解析器

实施步骤:

  1. 开发可启动隔离开发环境的沙箱服务
  2. 构建支持prompt提交与进度流式传输的WebSocket层
  3. 实现与模型无关的Agent接口
  4. 添加反馈循环集成(测试解析、错误采集)
  5. 对接版本控制系统,实现分支/PR创建功能

自定义开发 vs. 现成方案:

  • 现成Agent(如Devin、Cursor)在通用任务上表现优异
  • 但它们无法与企业专属的基础设施深度集成
  • 自定义开发可针对企业自身的工作流、工具及安全需求进行优化

权衡

  • 优点:

    • 深度集成:与公司专属工具和工作流深度融合
    • 模型灵活性:不绑定单一供应商
    • 实时可见性:可实时查看Agent的进度及中间执行步骤
    • 一致的context:Agent运行在与开发者完全相同的环境中
    • 定制化反馈闭环:针对你的技术栈量身打造专属反馈循环
  • 缺点:

    • 工程开销:需要构建并维护基础设施
    • 安全考量:Agent需要访问代码仓库、凭证等资源
    • 持续维护负担:与SaaS解决方案不同,需自行承担运维责任
    • DevOps专业能力要求:需掌握沙箱管理、WebSocket扩容等技术

参考文献

关键词

包含Ramp工程团队发布的、解释其自研后台代理原因的技术博文链接,以及该博文在Hacker News平台的相关讨论帖链接。

来源摘要

正在获取来源并生成中文摘要…

来源: https://engineering.ramp.com/post/why-we-built-our-background-agent

← 返回社区