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提供商的接口层
- 反馈循环集成:用于解析编译器、代码检查器及测试输出的解析器
实施步骤:
- 开发可启动隔离开发环境的沙箱服务
- 构建支持prompt提交与进度流式传输的WebSocket层
- 实现与模型无关的Agent接口
- 添加反馈循环集成(测试解析、错误采集)
- 对接版本控制系统,实现分支/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