AI 코딩 에이전트를 사용하는 경우 출력의 품질과 함께 중요하게 다뤄야 할 것은 효율성이며, 작업을 신속하고 효율적으로 적절한 컨텍스트 내에서 완료하는 것이 효율성 향상으로 이어집니다. 즉, 개별 상호작용의 토큰 수를 줄이는 것보다 적절한 양의 컨텍스트를 활용하여 작업을 진행하는 것을 목표로 삼아야 합니다. GitHub가 '툴 호출이 아닌 결과에 초점을 맞춘 최적화'에 기반하여 Copilot Copilot에 적용한 개선점에 대해 블로그를 공개했습니다. How we make AI coding more cost efficient without sacrificing task quality - The GitHub Bloghttps://github.blog/ai-and-ml/github-copilot/how-we-make-ai-coding-more-cost-efficient-without-sacrificing-task-quality/AI 코딩 효율을 극대화하기 위해 GitHub Copilot CLI에 대해 적용된 변경 사항은 다음 4가지입니다.・반복 출력을 줄이고 유용한 컨텍스트를 유지함・작업에 가치를 더하지 않는 불필요한 포맷을 삭제하고 정보를 유지함・필요한 동작을 바꾸지 않고 프롬프트를 압축함・추가적인 가져오기 턴 없이 완료된 백그라운드 작업의 결과를 제공함검토된 변경안은 에이전트형 코딩용 벤치마크를 사용하여 오프라인으로 평가된 후, 가장 유망한 변경안에 대해서는 출시 전 통제된 온라인 실험을 통해 검증이 진행되었습니다. 아래 그림은 GitHub Copilot CLI에서 실시된 4가지 비용 최적화에 대해 각각 독립된 A/B 테스트로 AI 크레딧 지표에 미치는 영향을 측정한 결과입니다. '뷰 툴의 행 번호 등 접두사 삭제'로 3.1%, '출력의 선택적 압축'으로 5.5%, '태스크 툴의 프롬프트 압축'으로 2.9%, '알림 시 불필요한 왕복 처리 줄이기'로 2.3%의 비용 절감이 확인되었습니다.
◆반복 출력을 줄이고 유용한 컨텍스트를 유지함AI 에이전트의 비용을 절감하는 방법으로 일반적으로 생각되는 것이 각 툴 호출의 출력을 단축하는 것입니다. 에이전트가 읽기 전에 셸 출력을 단축하는 유틸리티인 RTK(Rust Token Killer)를 GitHub Copilot에 대해 사용하고, 에이전트 코딩 벤치마크에서 효과를 평가한 결과, 하네스와 벤치마크 구성에서는 RTK에 의해 일부 응답이 단축되었으나, 생략된 텍스트가 중요한 경우 모델이 출력을 다시 열거나 필요한 것을 복구하기 위해 명령을 재실행하는 케이스가 관찰되었습니다. 복구 단계가 실행되면 처리 단계가 늘어나고 더 많은 컨텍스트가 이월되었습니다. 개별 툴의 응답은 짧아졌지만 더 많은 토큰이 소비되고 소요 시간도 길어진 것입니다. 결과적으로 필요한 순간순간에는 토큰을 절약할 수 있었지만, 전체적으로는 더 많은 토큰을 소비하게 되었습니다.
이 결과는 툴 호출당 토큰 목표가 잘못되었음을 의미합니다. 효율성 평가는 사용자 요청부터 최종 결과에 이르기까지 전체 태스크에 걸쳐 수행되어야 합니다. 또한 벤치마크 분석을 더 진행한 결과, 설치·빌드·테스트·lint 출력에는 반복적인 노이즈가 포함된 경우가 많고, 소스 코드류의 출력이나 임의 명령의 실행 결과에는 에이전트에 필요한 정보가 포함될 가능성이 높다는 것을 알게 되었습니다. 시행착오를 거쳐 확립된 정책은 다음 3가지입니다. ・소스 코드류의 출력이나 임의 명령의 실행 결과는 유지한다 ・콘텐츠를 삭제하지 않고 검색 결과를 재구성한다 ・반복되는 노이즈는 선택적으로 압축한다
이 "컴프레서"는 에이전트가 "저장된 오리지널을 열었는가" "명령을 재실행했는가" "탐색을 반복했는가" "검색을 좁혔는가" "추가 턴을 실행했는가"를 추적하고 빈도를 조사함으로써 유효성이 검증되었습니다. ◆태스크에 가치를 추가하지 않는 불필요한 포맷을 삭제하고 정보를 유지 기존에는 뷰 툴이 모델에 내용을 표시하기 전에 각 행의 맨 앞에 번호를 붙였습니다. 과거의 파일 편집 툴에서는 행 번호를 사용해 변경 위치를 특정했지만, 현재 툴에서는 대신 주변 코드와 대조하기 때문에 행 번호는 사용되지 않게 되었습니다. 따라서 일반적인 워크플로에서는 더 이상 행 번호가 사용되지 않았으나, 행 번호는 남은 채로 있었습니다. 행 수준에서는 행 번호가 있는 영향이 미미했지만, 파일 내의 전체 행에서 반복됨으로써 세션 동안 미사용 포맷이 축적되어 있었기 때문에 행 번호는 삭제하기로 했습니다.
행 번호를 삭제함으로써 모델 추론 비용이 약 5% 절감되었으며, 게다가 성공률에는 영향이 없었습니다. 결과적으로 개발자는 실제 작업에 필요한 컨텍스트에 더 많은 윈도우 공간을 할당할 수 있게 되었습니다. ◆필요한 동작을 바꾸지 않고 프롬프트를 압축 프롬프트는 에이전트의 동작을 지시하는 것으로 각 턴마다 모델로 전송됩니다. 에이전트가 개발자가 의존하는 동작을 유지하는 경우에 한해, 프롬프트를 단축하더라도 효율성이 향상됩니다. GitHub Copilot CLI의 task 툴은 병렬 작업을 위한 특수 에이전트를 실행하지만, 에이전트의 가이던스가 툴 설명·스키마·에이전트 정의·시스템 명령·컴패니언 툴에 축적되어 있었습니다. Copilot이 자체 프롬프트를 반복해서 작성·개선하는 "메타 프롬프트 루프"를 사용하여 프롬프트를 약 절반으로 줄인 결과, 처음에는 병렬 실행 가이던스가 순차 실행 정책으로 다시 쓰이는 리그레션이 발생했으나, 최종적으로 "독립된 에이전트는 병행하여 실행할 수 있으므로 부작용을 고려하십시오"라는 간결한 지시를 내림으로써 해결되었습니다. 결과적으로 1턴당 약 1300토큰 분량의 프롬프트를 줄였으며, 1세션당 총 프롬프트 토큰 수가 약 1.8% 감소하고 활성 시간당 정규화 비용이 2.9% 하락한 것에 해당합니다. 참고로 측정된 평가에서는 품질 저하가 감지되지 않았습니다.
◆ 추가 턴 없이 완료된 백그라운드 작업 결과 제공
에이전트는 예를 들어 장시간 실행되는 셸 명령처럼 백그라운드에서 독립적인 작업을 실행하는 경우가 많습니다. 이전에는 작업 완료 통지에 결과가 포함되어 있지 않았기 때문에, 에이전트는 Copilot이 수신한 통지의 결과를 가져오기 위해 추가로 1턴을 소비해야 했습니다. 즉, 완료된 작업에는 '결과를 요청하기 위한' 호출과 '결과를 처리하기 위한' 호출, 총 2번의 모델 호출이 필요했습니다. 개선된 Copilot은 하네스가 두 작업 완료를 배치 처리하여 결과를 함께 제공하므로 1번의 모델 호출만으로 충분해졌습니다. 하네스가 압축·요약·보류 없이 완료된 결과를 직접 전달함으로써, AI 크레딧으로 측정되는 토큰 관련 평균 사용량을 약 2.3% 절감할 수 있게 되었습니다.
◆ 요약
중요한 것은 작업 전체를 최적화하는 것입니다. 어떤 워크플로에서 토큰을 절약하도록 변경하면 다른 워크플로의 비용이 증가할 가능성이 있습니다. 비용 효율의 변화를 평가하려면 실제로 실행하는 워크플로 내에서 측정해야 한다는 뜻입니다. 이를 바탕으로 효율적인 AI 코딩 에이전트를 구축하기 위해 유념해야 할 점은 다음 5가지라고 합니다.
・도구 호출이 아닌 작업 최적화
・모델 출력뿐만 아니라 오케스트레이션 최적화
・출력이 의미하는 바에 기반한 압축 수행
・프롬프트 재작성은 예기치 않은 결과를 초래할 수 있음
・근거(증거)는 워크로드에 고유함
원문 보기 | 출처: Gigazine