简要列举SWE-agent这篇文章的key observation
- SWE解决方案总体对比
- 有交互的方法将显著高于无交互的方法(比如直接搞一个简单的RAG)
- 有合理设计的ACI将显著高于直接与为人类设计的接口(linux shell之类)交互的方法
ACI=agent computer interface,和HCI相对,指根据LLM特点提供一系列对LLM更友好的交互指令,令其可以(相比于直接操作linux指令)更好完成SWE任务。
这里涉及到的LLM特征有(当然是相对人而言的):
- 更弱的记忆能力
- 本质上是无状态的
- 更弱的规划、纠错能力
- ……
因此相应的新ACI接口做如下设计
- find/navigation直接用search+文件名,避免多次使用ls/cd之后陷入文件树错误的分支出不来。即使ls/cd能找到正确的文件,find也能省下很多token
- file viewer精确定位行,标注行号,方便LLM引用
- edit指令直接指定若干范围的行进行修改,比sed之类方便,比vim简洁
- edit执行完了会返回修改结果,便于LLM跟随code的最新状态
- viewer-edit-linter这部分设计使得LLM可以更稳定地进行多次试错
(当然,也保留了LLM根据需要调用原始linux指令的能力)
(另外,感觉这篇文章更像是实现了一个mini text版的IDE,linux经验不足的人来用这套系统说不定也能很舒服)
- editing
- 有linting更好
- search
- 一次性给出结果最好,不要让模型去“翻下一条”
- viewer
- 查看范围(行数)适中最好
- context
- 只保留近期最好,完整历史反而不好
- failure
- 成功的案例都不需要太多步数
- 主要还是incorrect implementations