지피지기 백전백퇴

Agent에게 어떤 툴을 쥐어주는게 좋은가?


SWE-bench의 leaderboard에서 Bash only 카테고리가 있다. 즉 bash 툴 하나만 쥐어주고 SWE-bench verified 데이터셋의 문제들을 풀게 하는건데,

의외로 점수가… 다른 툴을 자유롭게 쓰는 것에 비해 크게 밀리지 않는다. 같은 모델 기준으로 5~10% 정도? 생각보다 Tool의 효용성이 크지 않은 것 같아서 기존에 생각하던 아이디어도 조금 주춤해졌다.

What kind of tools make the differences?

SWE-bench에서 고득점을 얻는 agent라고 해서, 엄청나게 많은 툴을 추가한 것은 아니다.

  • 대형 코드베이스에서 작업할 때 코드의 맥락을 이해하기 쉽도록 요약해주는 툴
  • linter를 내장해서 코드변경 시점에 수정이 올바른지 검증해주는 툴

정도? 후자 또한 유닛 테스트가 적절히 주어진다면 불필요한 것 같다만 코드 요약 툴의 경우엔 확실히 쓰임새가 있을 것 같긴 하다…

Specialized coding agents - interpreter only

그럼에도 불구하고 해보고 싶은 아이디어 중 하나는 Jupyter 특화 agent… 각종 인터프리터 언어에서 debug 모드로 각 변수들을 필요할 때마다 접근할 수 있으니 강점이 있지 않을까 싶다. 다만 그런다고 코드를 획기적으로 잘 짜게 된다던가 하는 기대효과가 크진 않다. 단지 jupyter 위에서 뭔가 작업하다가 바로 agent에게 handoff하기가 쉬워진다는 정도의 소소한 장점 정도만 있을듯 하다.

Prompt engineering

요즘 짜는 프롬프트는 대충 다음과 같은 포맷을 쓴다.

See [path]. It has an issue on ... (대충 문제 설명) 

I'd like to see it work by ... (대충 내가 원하는 결과)

Start with ... (대충 내가 생각하는 high level approach)

중요한 것은 대화형식을 쓰지 않고, 전체 프롬프트를 텍스트 파일로 작성해서

cat prompt.md | ak 같은 식으로 한번에 전달하고 결과물만 확인한다는 것.

작업물 결과가 맘에 안들면 결과물만 날리고 prompt.md를 수정한 다음 다시 실행하는데, 대개는 문제 설명이나 요구사항을 조금씩 바꿔서 돌리는 정도로 한다.