软件的影响
- 软件正在改变各个行业,正如 Marc Andreessen 在 2011 年所预测的那样。
- 使每个人都能编写软件以实现其目标的潜在影响。
软件开发 工作流程
- 时间分配:
- 17% 编码
- 36% 修复错误
- 10% 测试
- 8% 文档/评审
- 14% 沟通
- 15% 其他任务
开发工具
- Copilots:
- 编写代码的同步支持(例如,GitHub Copilot)。
- 开发代理:
- 用于编码的自主工具(例如,SWE-Agent,Aider)和更广泛的任务(例如,Devin,OpenHands)。
编码代理的挑战
- 定义环境。
- 设计观察/行动空间。
- 文件定位和代码生成。
- 规划、错误恢复和确保安全。
软件开发环境
指标和数据集
- Pass@K (Chen et al., 2021):衡量生成代码通过单元测试的成功率。
- 语义重叠指标:
- BLEU, CodeBLEU, CodeBERTScore。
- 关键数据集:
- HumanEval, ARCADE, SWEBench, Design2Code。
文件定位的解决方案
- 用户输入:依赖有经验的用户指定文件。
- 搜索工具:集成搜索功能(例如,SWE-Agent)。
- 库映射:预构建的映射(例如,Aider repomap)。
- 检索增强生成:结合检索到的代码和 LMs。
规划和恢复
- 硬编码流程:文件定位、补丁生成等的预定义步骤。
- LLM 生成的计划:使用 LMs 进行规划和执行(例如,CodeR)。
- 重访错误:基于错误信息的自动修复(例如,InterCode)。
安全措施
- 沙盒:限制执行环境(例如,Docker)。
- 凭证管理:最小特权原则。
- 事后审计:使用 LMs 和其他工具进行安全分析。