Effective harnesses for long-running agents
AI/LLM 시리즈 : Anthropic 엔지니어링 블로그 리뷰
이번에 Anthropic에서 흥미로운 주제로 블로그 글을 올렸는데요. LLM을 채팅 형식의 솔루션으로 개발하시는 분들이라면 한번쯤 고민해보셨던 내용이 아닐까 싶습니다.
원문: Effective harnesses for long-running agents — anthropic.com
AI 에이전트가 점점 더 복잡한 작업을 수행하게 되면서, 하루나 이틀이 걸리는 긴 프로젝트를 완수해야 하는 상황이 늘고 있습니다. 그런데 여기에는 큰 문제가 하나 있습니다. 에이전트는 개별 세션으로 작동하며, 각 새로운 세션은 이전 세션의 기억이 전혀 없이 시작됩니다. 마치 교대 근무하는 엔지니어들이 인수인계를 전혀 받지 못한 채 일하는 것과 같습니다.
문제의 핵심
Claude Agent SDK는 코딩을 비롯한 다양한 작업을 수행할 수 있는 강력한 에이전트 도구입니다. 컨텍스트 압축 기능도 있어서 이론적으로는 무한정 작업을 계속할 수 있어야 합니다. 하지만 현실은 달랐습니다.
Claude에게 "claude.ai 클론을 만들어줘"처럼 상위 수준의 지시만 주면 두 가지 실패 패턴이 나타났습니다.
첫째, 한 번에 너무 많은 것을 하려는 경향: 앱을 한 번에 완성하려다 컨텍스트 윈도우가 부족해지고, 다음 세션에서는 반쯤 구현된 기능을 보며 무슨 일이 있었는지 추측해야 했습니다.
둘째, 조기 완료 선언: 몇 가지 기능이 구현되면 프로젝트가 끝났다고 판단해버리는 경우가 많았습니다.
해결책: 두 가지 에이전트 시스템
1. 초기화 에이전트 (Initializer Agent)
첫 번째 세션에서는 전체 프로젝트의 기반을 설정하는 특별한 에이전트를 사용합니다.
기능 목록 작성: 사용자의 초기 요청을 200개 이상의 구체적인 기능으로 확장합니다. 예를 들어 "사용자가 새 채팅을 열고, 질문을 입력하고, AI 응답을 받을 수 있다" 같은 식입니다. 이 목록은 JSON 형식으로 작성되며, 각 기능은 처음에 "failing"으로 표시됩니다.
환경 설정: init.sh 스크립트, claude-progress.txt 파일, 초기 git 커밋을 생성합니다.
2. 코딩 에이전트 (Coding Agent)
이후의 모든 세션에서는 점진적으로 작업하도록 설계된 에이전트를 사용합니다.
세션 시작 시:
- 현재 작업 디렉토리 확인
- git 로그와 진행 상황 파일 읽기
- 기능 목록에서 다음 작업할 기능 선택
- 개발 서버를 시작하고 기본 기능 테스트
세션 종료 시:
- git 커밋으로 변경사항 저장
- 진행 상황 파일 업데이트
- 코드를 깨끗한 상태로 유지
핵심 인사이트
이 접근법의 가장 중요한 통찰은 실제 소프트웨어 엔지니어들이 매일 하는 작업에서 영감을 받았다는 점입니다. git 히스토리와 progress 파일을 통해 에이전트가 새로운 컨텍스트 윈도우로 시작할 때도 빠르게 프로젝트 상태를 파악할 수 있게 했습니다.
테스팅의 중요성
또 하나의 중요한 개선점은 테스팅입니다. Claude는 코드 변경 후 제대로 테스트하지 않고 기능을 완료로 표시하는 경향이 있었습니다. 해결책은 브라우저 자동화 도구(Puppeteer)를 제공하여 실제 사용자처럼 엔드투엔드 테스트를 수행하도록 하는 것이었습니다. 이를 통해 코드만 봐서는 알기 어려운 버그들을 찾아낼 수 있었습니다.
남은 과제
이 연구는 장시간 실행되는 에이전트의 한 가지 해결책을 제시하지만, 여전히 해결해야 할 질문들이 있습니다.
첫째, 범용 코딩 에이전트 하나가 최선일까, 아니면 테스팅 에이전트, 품질 보증 에이전트 등 특화된 여러 에이전트를 사용하는 것이 나을까요?
둘째, 웹 앱 개발에 최적화된 이 방법을 과학 연구나 금융 모델링 같은 다른 분야에도 적용할 수 있을까요?
이번 연구는 AI 에이전트가 인간 개발자처럼 체계적으로 작업하고, 명확한 기록을 남기며, 점진적으로 진행할 때 훨씬 더 효과적이라는 것을 보여줍니다. 앞으로 더 많은 분야에서 이런 접근법이 활용될 것으로 기대됩니다.