Weights & Biases Weave로 최고의 AI 프로그래밍 에이전트 구축하기
저는 Weights & Biases의 공동 창업자이자 CTO입니다. 지난 몇 달 동안 저희 도구를 직접 사용해 보며 자율 프로그래밍 에이전트를 구축해 왔습니다. 그 과정에서 알게 된 내용을 공유합니다. 이 글은 AI 번역본입니다. 오역이 의심되면 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
나는 …을 만들었다 OpenAI o1-기반 AI 프로그래밍 에이전트로, 현재 최첨단 수준에 있습니다 SWE-Bench-Verified! 이 에이전트는 이슈의 64.6%를 해결합니다. 이를 위해 저는 다음을 적극적으로 활용했습니다 우리 Weave 툴킷 AI 애플리케이션을 위해 o1에 대해 많은 것을 배웠고, 그 과정에서 새로운 것들도 많이 만들었습니다.

혹시 익숙하지 않다면, SWE-Bench-Verified 은 현재 소프트웨어 엔지니어링 에이전트를 평가하는 데 가장 뛰어난 벤치마크입니다. 500개의 GitHub 이슈, Docker 이미지, 그리고 비공개 유닛 테스트로 구성되어 있습니다. 그 이유는 일반적인 에이전트 Docker 컨테이너 안에서 인간 프로그래머처럼 자율적으로 동작하며, 문제가 해결되었다고 판단할 때까지 코드와 테스트를 반복적으로 읽고 작성합니다.
우리가 아는 한, 우리의 솔루션은 최초의 o1 기반 에이전트이며, 현재 최고 성능을 기록하고 있습니다. SWE-Bench Verified 리더보드또한 기본 에이전트 프레임워크를 사용한 OpenAI의 공개된 o1 결과 대비로도 큰 향상입니다.
어떻게 이 점수를 달성했는지, o1을 사용하며 얻은 교훈은 무엇인지, 그리고 Weights & Biases가 이를 바탕으로 어디로 나아가고 있는지 계속 읽어 확인하세요.
작동 방식
우리의 SWE-Bench-Verified 에이전트는 다음을 사용합니다:
- o1과 함께 reasoning_mode 모든 에이전트 단계와 ��집 로직에 대해 높게 설정
- 에이전트의 단계 이력을 압축하는 GPT-4o 기반 메모리 구성 요소
- 모델 컨텍스트를 효율적으로 활용하도록 설계된 맞춤형 Python 코드 편집 도구 세트
- 모든 편집 단계 이후에 실행되는 “자동 명령”을 등록하는 기능
- 각 인스턴스마다 5개의 병렬 롤아웃을 실행하고, 마지막에는 o1 타이브레이커를 사용한 “크로스체크” 단계로 최적의 롤아웃을 선택합니다.
이 에이전트가 어떻게 작동하는지 공유할 내용이 정말 많습니다. 특히 N개의 에이전트 롤아웃 중 최적의 결과를 알고리즘으로 선택하는 새로운 “크로스체크” 메커니즘이 꽤 잘 작동하고, 어느 정도는 새로운 접근일 수도 있습니다. 하지만 그 이야기는 다음에 다루겠습니다.
OpenAI의 o1과 함께 작업하기
o1 자체로도 놀라운 모델입니다. 그리고 이전의 토큰 완성형 모델들과 비교하면, o1과 함께 작업하는 방식은 상당히 다릅니다.
o1은 방대한 코드 컨텍스트에서 버그를 정확히 찾아내는 데 이전 모델들보다 더 뛰어납니다. 또한 지시한 내용을 그대로 수행하는 데에도 더 능숙합니다. 수천 개의 트레이스를 분석해 보면, o1은 해당 GitHub 리포지토리에 대한 사전 지식에 덜 의존하고, 문제를 “차근차근 사고”하여 해결하는 방식에 더 의존한다는 점이 분명합니다.
o1은 당신이 지시한 대로 수행합니다
프롬프트에 더 많은 세부사항을 넣으면 o1은 그 세부사항을 충실히 따릅니다. 예를 들어, 제 제출물의 기본 프롬프트에서 발췌한 한 부분은 다음과 같습니다:
Important test script instructions:- Must exit with status 0 if the problem is fixed, and a non-zero exit code if the problem is not fixed- Must print step by step output to the console- Must print full values used in assertions to console, or log them to files.- You must manually inspect the output of the test script to confirm it is working as expected.- You must manually inspect printed or logged values used in assertions to confirm they are correct.- Bad test scripts lead to bad results! Make sure your assertions are as narrow as possible, and that values are actually what your test script expects.
프롬프트의 전체 작업 지침 중 58줄 가운데 7줄에 해당합니다. 이 한 줄 한 줄은 수많은 평가를 돌리고 에이전트의 진행 경로를 면밀히 검토하며 어렵게 얻어낸 것입니다.
o1이 특히 다르게 느껴지는 점은, 거의 항상 이런 지침들을 실제로 모두 존중한다는 것입니다. 이전 모델들과 작업할 때는 프롬프트에 한 줄만 더 추가해도 나머지 지침을 따르는 능력이 떨어질 수 있다는 불안감이 늘 있었어요. 하지만 o1에서는 그런 일이 단 한 번도 일어나지 않았습니다.
결과 중심 프롬프팅
많은 분들이 지적했듯이, 원하는 결과를 o1에게 명확히 제시하고 그 결과를 달성하는 방법은 스스로 찾아갈 수 있도록 여지를 주는 것이 최상의 성과를 가져옵니다.
원하는 결과를 명시하는 프롬프트의 해당 부분은 다음과 같습니다:
Only call task_done if the following are all true:- your correct fix for the problem is present in the diff_observation under "Your modifications" in the Observation message- the most recent run of your test script exits zero, meaning the problem is fixed- you've shown that your test script exits non-zero on head- you've successfully run existing unit tests and inspected the output- any remaining existing unit tests failures also fail on head
본질적으로 이것이 에이전트의 중지 조건입니다. o1은 위의 모든 조건이 충족될 때까지 매우 잘 반복합니다.
이벤트의 시간 순서 혼동
o1을 에이전트 구동 모델로 사용할 때 매우 중요한 요소가 하나 있습니다. 사건의 시간 순서를 항상 정확하게 추론하지는 않는다는 점입니다.
예를 들어, 다음과 같은 에이전트 동작 순서를 살펴보십시오:
- 파일에 첫 번째 수정을 가하다
- 실패하는 단위 테스트를 실행하다
- 파일에 두 번째 수정을 가하다
이런 순서가 끝난 뒤에 에이전트가 두 번째 수정을 마친 후 실제로 테스트를 실행하지 않았음에도 “X를 하도록 코드를 수정했지만, 단위 테스트가 여전히 실패합니다”라고 말하는 경우가 종종 있습니다.
이에 대한 해결책으로, 에이전트가 시간 순서가 있는 사건들을 추론해야 하는 필요 자체를 줄였습니다. “auto-command” 도구를 통해 에이전트가 파일을 수정할 때마다 실행할 명령을 등록할 수 있도록 했습니다.
o1은 지시한 내용을 그대로 수행하는 능력이 매우 뛰어나서, “지금까지 수행한 각 단계를 순서대로 검토하고, 그 과정에서 현재 세계 상태에 대한 지식을 점진적으로 구축하라”와 같이 말하면 사건의 시간 순서를 올바르게 처리하도록 실제로 안내할 수 있다고 ���각합니다. 다만, 이런 형태의 프롬프트는 현재 OpenAI의 잘못된 프롬프트 감지 로직을 더 자주 트리거하기 때문에, 저는 이 접근법에 많은 시간을 들이지 않았습니다.
이 개념을 바탕으로 평가를 만들어 보는 사람이 나오면 정말 좋겠습니다.
최고의 도구가 최고의 결과를 만든다
이 문제에 뛰어들고 싶었던 이유 중 하나는 W&B가 가지고 있는 신념, 즉 최고의 도구가 최고의 결과를 이끈다는 것을 증명하고 싶었기 때문입니다. 이 말이 사실이라면, 우리 스스로 만든 도구를 사용해 세계적 수준의 성과를 내야 합니다. 그리고 우리는 실제로 해냈습니다.
지난 두 달 동안 수없이 반복하고 분석한 끝에 이 에이전트를 지금 수준까지 끌어올릴 수 있었습니다. 제가 사용한 것은 다음과 같습니다:
W&B Weave
Weave 는 AI 애플리케이션 개발을 위한 우리의 툴킷입니다. 저는 제가 수행한 모든 작업을 추적하기 위해 Weave를 사용했고, 진행한 모든 실험에는 Weave의 평가 프레임워크를 사용했습니다. 실제로, 이 해결책에 도달하기까지 총 977회의 평가를 실행했습니다.

이 작업을 진행하는 동안 Weave 자체도 크게 개선되었습니다. 특히 동일한 프롬프트의 여러 시도를 1급으로 지원하는 새 플레이그라운드는 매우 유용했습니다.
Eval Studio
그 과정에서 저는 지금 우리가 “Eval Studio”라고 부르는 것을 구성하는 새로운 도구들을 만들었습니다. 이 도구는 자체 서버 구성 요소 없이 전적으로 Weave 데이터로만 동작합니다.
이 차트 뷰는 실시간 실행을 모니터링하고, 결과를 통계적으로 분석하는 데 매우 유용합니다.

새 모델이 이전 모델보다 성능이 나쁘거나 더 나은 사례를 파악하기 위해, 테이블 뷰와 rollout 드로어에서 정말 많은 시간을 보냈습니다.

Eval Studio의 개념들은 향후 몇 달에 걸쳐 Weave에 반영될 예정이며, 그와 관련해 더 많은 것들을 준비하고 있습니다. 이것을 제대로 구현하면 AI 안전을 포함한 다양한 애플리케이션 전반에서 진전을 이끌어낼 수 있다고 믿습니다.
Phaseshift
Phaseshift는 AI 에이전트를 구성하기 위한 새로운 프레임워크입니다. 저는 인터페이스와 구성 방식을 더 잘 사고할 수 있도록, 강력한 타입 시스템을 가진 TypeScript로 이를 작성했습니다.
Phaseshift는 Weave의 핵심 개념을 중심으로 구축되었습니다. 이는 데이터와 코드를 함께 버전 관리할 수 있어, 반복 ��업을 진행하면서 무엇을 변경했는지 파악할 수 있다는 뜻입니다.
이걸 할 수 있는 다른 도구는 없습니다:

Weave UI에서 두 개의 Phaseshift 에이전트를 비교(diff)하기.
그리고 여러분이 작성할 수 있는 모든 함수나 파이프라인에 대해, Weave의 ‘Evaluations’ 개념을 일급 시민으로 내장합니다.
기회가 생기면 Phaseshift를 다듬어 공개할 생각에 기대가 큽니다
Weights & Biases의 다음 계획은 무엇인가요?
우리는 AI 프로그래밍의 최전선에서 경쟁할 수 있는 역량에 매우 기대하고 있으며, 이러한 기능을 통해 고객이 더 빠르게 구축하도록 돕고자 합니다.
우리는 세계적 수준의 도구를 만드는 일도 사랑하며, 이 여정에서 개발한 새로운 모든 도구를 제공하게 되어 매우 기대하고 있습니다.
우리는 현재 공식 SWE-Bench Verified 제출을 준비하고 있으며, 최전선을 한 걸음 더 앞으로 나아가게 만들 생각에 매우 기대하고 있습니다.
Add a comment