Skip to main content

Weights & Biases Weave로 최첨단 AI 프로그래머 구축

저는 Weights & Biases의 공동 창업자이자 CTO입니다. 지난 몇 달 동안 우리 도구를 직접 사용해 보며 자율 프로그래밍 에이전트를 구축해 왔습니다. 제가 발견한 내용은 다음과 같습니다. 이 글은 AI 번역 기사입니다. 오역이 있다면 댓글로 알려 주세요.
Created on September 15|Last edited on September 15
나는 만들었다 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은 해당 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 자체도 크게 향상됐습니다. 특히 동일한 프롬프트를 여러 번 시험할 수 있도록 일급 지원을 제공하는 새로운 플레이그라운드는 매우 유용했습니다.

Eval Studio

그 과정에서 저는 지금 우리가 “Eval Studio”라고 부르는 것을 구성하는 새로운 도구들을 몇 가지 만들었습니다. 이 도구는 자체 서버 컴포넌트 없이 전적으로 Weave 데이터로만 구동됩니다.
이 차트 뷰는 라이브 실행을 모니터링하고 결과를 통계적으로 파고드는 데 매우 유용합니다.


새 모델이 이전 모델보다 성능이 더 나쁘거나 좋았던 사례를 파악하기 위해, 표 보기와 롤아웃 서랍에서 정말 많은 시간을 보냈습니다.

앞으로 몇 달에 걸쳐 Eval Studio의 개념들이 Weave에 통합될 예정이며, 그 과정에서 선보일 것들이 훨씬 더 많습니다. 이것을 제대로 구현해 내면 AI 안전을 포함한 온갖 유형의 애플리케이션에서 진전을 이끌어낼 수 있다고 믿습니다.

Phaseshift

Phaseshift는 AI 에이전트를 조합하기 위한 새로운 프레임워크입니다. 저는 인터페이스와 합성 방식을 더 잘 추론할 수 있게 해주는 강력한 타입 시스템 때문에 TypeScript로 작성했습니다.
Phaseshift는 Weave의 핵심 개념을 중심으로 구축되었습니다. 즉, 데이터와 코드의 버전을 함께 관리하여 반복 작업 중에 무엇을 변경했는지 파악할 수 있습니다.
이것을 할 수 있는 다른 도구는 없���니다:
Weave UI에서 두 Phaseshift 에이전트를 비교(diff)하기.
그리고 당신이 작성할 수 있는 모든 함수나 파이프라인에 대해 Weave의 Evaluation 개념을 퍼스트클래스 시민으로 내장합니다.
기회가 생기는 대로 Phaseshift를 다듬어 공개할 생각에 기대가 큽니다.

Weights & Biases의 다음 행보는 무엇일까요?

우리는 AI 프로그래밍의 최전선에서 경쟁할 수 있는 역량에 매우 기대하고 있으며, 이러한 기능을 통해 고객이 더 빠르게 구축할 수 있도록 돕고자 합니다.
우리는 세계적 수준의 도구를 만드는 일도 사랑하며, 이 과정에서 개발한 새로운 도구들을 모두 여러분께 선보일 수 있게 되어 매우 기대하고 있습니다.
당장은 공식 SWE-Bench Verified 제출을 준비하고 있으며, 최전선을 한 걸음 더 앞으로 나아가게 될 것에 기대하고 있습니다.
업데이트는 X에서 팔로우하세요 우리의 도구와 AI 프로그래밍 진전에 관하여!

이 글은 AI가 번역한 기사입니다. 오역이 있을 수 있으니 댓글로 알려 주세요. 원문은 다음 링크에서 확인하실 수 있습니다: 원문 보고서 보기