프로젝트 기록

PROJECT RECORD

SkyDiscover에 같은 코드를 여러 번 보내지 않도록 제안했다

EN 한국어

AI에게 네 가지 코드 후보를 비교해 달라고 할 때, 각 후보에 똑같은 실행용 코드가 길게 붙어 있다면 그 부분도 네 번 읽히게 된다. SkyDiscover의 프롬프트에는 이런 반복이 있었다. 후보별로 달라지는 해법을 보여주면서, 탐색 과정에서 바뀌지 않는 보조 코드까지 매번 함께 실어 보내고 있었다.

SkyDiscover는 AI 모델이 프로그램을 고치고 평가 결과를 참고해 다음 후보를 만드는 도구다. 모델에 주는 입력에는 현재 해법과 참고할 다른 프로그램들이 함께 들어간다. 기존 사용자 yifandai27의 이슈 #61는 이 참고 프로그램마다 같은 코드가 반복된다는 점을 지적했다. 나는 이 이슈를 바탕으로 기본 프롬프트 구성기인 DefaultContextBuilder를 수정해 PR #104를 냈다.

생략할 코드를 어떻게 골랐나

SkyDiscover의 코드에는 EVOLVE-BLOCK-START와 EVOLVE-BLOCK-END라는 표식이 있다. 모델이 개선할 부분의 시작과 끝을 표시하는 줄이다. 이 표식 바깥에는 실행을 돕거나 결과를 그리는 고정 코드가 놓일 수 있다. 수정안은 참고 프로그램의 고정 구간을 현재 해법의 같은 위치에 있는 구간과 비교한다.

비교한 내용이 같고 생략 안내 한 줄이 원래 코드보다 짧을 때만 그 구간을 안내 문구로 바꾼다. 현재 해법은 전체를 보여주므로 모델은 공통 코드를 그곳에서 읽을 수 있다. 구간 양끝의 공백을 제외하고 비교한 코드 내용이 다르면 그 구간은 남긴다. 후보가 공유하는 내용과 각 후보만 가진 차이를 구분해 줄이는 방식이다.

표식이 없거나 시작과 끝이 맞지 않으면 기존처럼 전체 코드를 보여준다. 현재 해법과 참고 후보의 구간 수가 다르거나 비교할 현재 해법 자체가 없어도 생략하지 않는다. Python의 #뿐 아니라 C++의 //처럼 원래 표식의 주석 문법을 안내 문구에 사용한다. 이 변경은 DefaultContextBuilder를 쓰는 탐색에 적용되며, 별도 구성기를 사용하는 EvoX의 입력 형식까지 바꾸지는 않는다.

예시에서 줄어든 것은 문자 수다

PR의 예시는 원을 겹치지 않게 배치하는 문제(benchmarks/math/circle_packing)에서 참고 프로그램 네 개를 사용한다. 이때 참고 코드 구역은 564줄에서 384줄, 15,862자에서 11,362자로 줄었다. 현재 해법과 지시문 등을 포함한 전체 사용자 메시지의 문자 수는 약 21% 감소했다. 참고 코드 구역과 전체 메시지는 서로 다른 분모다.

이 수치는 해당 예시의 입력 길이를 비교한 결과다. 모델마다 글을 토큰으로 나누는 방식이 다르고, 실제 요금은 캐시나 호출 조건에도 영향을 받으므로 토큰 수·비용·실행 시간이 모두 21% 줄었다고 환산할 수는 없다. 후보가 공유하는 고정 코드의 양에 따라 다른 문제에서의 감소 폭도 달라진다.

검사에서는 잘 줄어드는 사례와 함께, 내용이 다른 고정 코드를 보존하는지, 표식이 어긋났을 때 전체 코드를 남기는지를 다뤘다. PR에는 이 변경을 겨냥한 테스트 14개를 추가했고, 느린 테스트와 통합 테스트를 제외한 792개 테스트를 Python 3.10·3.11·3.12·3.13에서 통과했다고 기록했다. 이 숫자는 PR 작성 시 남긴 실행 기록이다.

2026년 9월 28일 확인 기준 PR은 열려 있으며 아직 병합되지 않았다. 원 저장소의 초기 자동 검사는 action_required 상태여서 실행 승인과 유지관리자 검토를 기다리고 있다. 현재 공개한 결과는 반복 코드를 줄이는 구현과 그 검사이며, 실제 탐색 성능이나 서비스 운영비의 개선은 후속 측정이 필요하다.

연구 목록 · 작업 목록

Research index · Work index

Woong Works에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기