UVA는 코드 에이전트가 비밀 코드를 덜 노출하며 질문하도록 훈련한다

Teaching Code Agents to Ask Without Leaking Private Code

arXiv2610.24824v1

Wenjia Jiang2026-10-17

무엇인가

이 논문은 로컬에서 도는 코드 에이전트가 더 강한 클라우드 모델에 조언을 구할 때 저장소의 비공개 식별자, 파일 경로, 소스 코드가 그대로 전송되는 문제를 다룬다. 호스트 측 마스킹은 인식된 식별자만 가리고 주변 코드와 질문 표현은 남기며, 공개를 줄이도록 프롬프트를 주면 질문 자체를 하지 않거나 너무 모호한 질문을 만들 수 있다. 저자들은 질문의 유용성을 유지하면서 전송되는 비공개 정보를 줄이는 훈련 절차 UVA를 제안한다.

어떻게 동작하나

UVA의 핵심은 질문을 역할과 유형 중심으로 추상화하되, 그 추상화가 실제 수리에 도움이 되는지 재실행으로 검증하는 것이다. 먼저 성공한 수리 궤적에서 제약 없는 상담 질문을 모은다. 오프라인 교사 모델이 각 질문을 비공개 엔티티의 역할과 유형으로 설명하고 관찰된 증상, 관련 기술 제약, 조언이 필요한 결정을 보존하도록 다시 쓴다. 이때 하드 시크릿이 없고, 탐지된 P1 스팬이 2개 이하이며, 원래 질문보다 비공개 엔티티를 엄격히 적게 노출하고, 코드 펜스나 셸 명령, 불투명 플레이스홀더가 없는 평문 질문인지 확인한다.

무엇과 다른가

그다음이 재실행 게이트다. 원래 상담 시점의 저장소 스냅샷, 상호작용 이력, 남은 예산을 복원하고, 전문가에게 재작성된 질문을 보내 답을 받은 뒤 학생이 수리를 이어간다. 재작성 질문으로 이어간 수리가 테스트를 통과해야만 훈련 예제로 채택한다. 채택된 질문-이력 쌍은 LoRA 기반 지도 미세조정으로 학생이 원래 이력에서 추상화 질문을 생성하도록 학습시키고, 상담 턴을 타깃에서 제외한 전체 수리 궤적도 함께 섞어 수리 능력 저하를 막는다. 배포 시에는 교사나 호스트 측 재작성 없이 학생이 스스로 상담 시점과 질문을 결정한다.

어떻게 쓰나

실험은 SWE-bench Verified 500개 이슈와 Terminal-Bench 2.0 89개 과제에서 진행됐다. 학생은 Qwen3.5-9B이고 기본 전문가는 DeepSeek-V3.2이며 GPT-5.6 Sol과 Claude Opus 4.8도 사용했다. 비교 대상은 상담 없는 Solo, 제약 없는 Natural, 추상화 지시를 시스템 프롬프트에 넣은 Privacy prompt, 결정적 호스트 새니타이저다. DeepSeek-V3.2 전문가에서 UVA의 SWE-bench Verified pass@1은 37.6%로 Natural 24.6%, Solo 25.3%보다 높았고 pass@3은 45.6% 대 32.4%였다. Terminal-Bench에서는 89개 중 26개를 풀어 Natural 22개, Solo 18개보다 많았지만 4개 차이는 이 검정으로 유의하지 않았다. 상담률은 Verified에서 7.4%로 Natural 4.8%보다 높았고, 질문당 비공개 엔티티는 4.42개에서 1.20개로, 소스 코드 5-gram 중첩은 8.4에서 5.9로 줄었다. 상담 시점 중앙값은 39단계로 Natural 38단계와 비슷해 훈련은 상담 빈도를 바꾸지만 시점은 바꾸지 않았다. 전문가 없이 훈련된 학생만으로도 36.2%를 기록해 성능 향상이 상담만의 효과는 아니라고 저자들은 해석한다.

전제와 한계

베이스라인 비교에서 Privacy prompt는 상담을 덜 해 전체 노출을 줄인 대신 질문당 노출은 줄이지 못했다. Verified에서 500회 중 7회만 상담해 Natural의 1,500회 중 72회보다 적었지만, 질문당 비공개 엔티티는 4.64개로 4.42개보다 오히려 많고 소스 코드 5-gram은 9.5로 8.4보다 많았다. 저자들은 이를 침묵에 의한 프라이버시라고 부르며 상담률과 질문당 노출을 함께 보고해야 한다고 주장한다. 호스트 새니타이저는 상담을 유지하고 인식된 이름을 가리지만 주변 코드를 계속 보내 소스 코드 5-gram이 6.0이었고, 해결률은 25.0%, 비공개 엔티티는 0.97개였다. UVA는 해결률 37.6%로 더 높지만 비공개 엔티티 노출은 1.20개로 새니타이저보다 높고, 소스 코드 중첩은 5.9로 새니타이저의 6.0과 비슷하거나 낮다.

절제 실험은 각 구성 요소가 해결률에 필요함을 보여준다. 수리 궤적 혼합을 빼면 질문당 비공개 엔티티는 2.67개로 낮아지지만 pass@1이 40.6%에서 32.2%로 떨어진다. 재실행 게이트를 빼면 노출은 1.60개까지 줄지만 pass@1이 22.4%로 Solo 25.3%보다 낮아진다. q+와 q-의 대조에 DPO를 쓰면 노출은 2.40개로 UVA의 2.31개와 비슷하지만 해결률은 25.0%에 그쳤고, 새니타이저 출력을 모방한 Host-SFT는 18.4% 해결과 1.70개 노출을 기록했다. 훈련 데이터를 100, 200, 300, 400쌍으로 늘린 실험에서는 300쌍까지 pass@1이 40.6%로 오르고 소스 코드 중첩이 4.8로 내려갔지만 400쌍에서는 39.4%와 5.5로 더 나아지지 않았다. 비용은 1,000개 과제당 DeepSeek-V3.2 상담이 0.012달러, GPT-5.6 Sol이 0.21달러, Claude Opus 4.8이 0.48달러로 학생 자체 추론 비용 약 268달러의 0.2% 미만이었다.

개발자 관점에서 UVA는 로컬 에이전트가 민감한 저장소를 다루면서 클라우드 전문가를 호출하는 구조에 바로 참고할 만하다. 다만 저자들이 밝힌 전제를 확인해야 한다. 로컬 호스트, 학생, 오프라인 교사는 신뢰 경계 안에 있어야 하고 교사는 원래 질문을 읽으므로 사설 저장소에서는 내부에서 실행해야 한다. 전문가 제공자는 정직하지만 호기심이 많다고 가정하며, 전송된 내용으로부터 추론되는 정보는 범위 밖이다. 프라이버시 주장은 문자 그대로의 노출에 관한 것이고 추론 공격 방어를 입증하지 않는다. 또한 재실행 게이트는 상담이 필수였거나 재작성이 성공 확률을 보존한다는 것을 증명하지 않는다. 따라서 실무에서는 상담률, 질문당 비공개 엔티티 수, 소스 코드 중첩, 재실행 통과율을 함께 측정해야 한다.