저는 Sonar와 Snyk의 발견 사항을 수정하는 AI 에이전트를 구축했습니다.
AutoRemediate AI는 Java/Spring Boot 프로젝트에서 저위험 코드 품질 및 종속성 취약점을 자동으로 수정하도록 설계된 에이전트입니다. 이 에이전트는 사용되지 않는 import, 변수, 그리고 흔히 지루한 작업으로 인해 간과되기 쉬운 알려진 취약한 라이브러리와 같은 일반적인 문제를 해결합니다. 에이전트는 안전성과 검증을 강력하게 강조하며 작동하며, AI의 제안을 절대 맹목적으로 신뢰하지 않습니다. 대신, AI가 최소한의 패치를 제안하고, 결정론적 도구가 안전성을 검증하며, 최종적으로 사람이 승인하는 다단계 프로세스를 사용합니다.워크플로우는 리포지토리를 클론하고, 테스트 및 스캔으로 기준선을 설정한 다음, 발견 사항을 분류하는 것으로 시작됩니다. 각 "안전한" 발견 사항에 대해 AI는 작고 검증된 패치를 생성하며, 이는 엄격한 검토를 거칩니다. 성공은 빌드가 녹색 상태를 유지하고, 모든 테스트를 통과하며, 대상 문제가 해결되고, 새로운 문제가 발생하지 않았음을 검증하는 "안전 게이트"에 달려 있습니다.AI가 해를 끼치는 것을 방지하기 위해 중요한 안전 장치가 마련되어 있습니다. 편집은 매우 작고 특정 파일 유형으로 엄격하게 제한되며, 종속성 업그레이드는 LLM이 아닌 코드로 처리됩니다. 시스템은 명확하지 않거나 오류가 있는 패치를 거부하는 실패 폐쇄(fail-closed) 방식으로 작동하며, 보안 문제는 사람의 검토를 위해 남겨두고 안전한 범주의 발견 사항만 자동화합니다.신뢰할 수 없는 코드를 실행하는 것을 방지하기 위해 에이전트는 프로세스를 격리하고, 환경 변수를 정리하며, 리포지토리 콘텐츠를 신뢰할 수 없는 입력으로 취급합니다. 작업 수명 주기는 명시적인 상태 머신으로 관리되어 예측 가능한 전환을 보장하고, 에이전트에게 사전 존재하던 실패를 탓하는 것과 같은 문제를 방지합니다. 기술 스택에는 Java 21, Spring Boot, Maven이 포함되며, LLM에는 Anthropic의 Messages API를 활용합니다.이 프로젝트에서 얻은 주요 학습 내용은 측정 가능한 기준선의 중요성, AI에 대한 엄격한 출력 제약 조건, 그리고 LLM을 "사고" 능력에만 활용하면서 중요한 프로세스는 결정론적으로 유지하는 것의 중요성을 강조합니다. 이 시스템은 롤백, 체크포인팅, 재시도를 위해 설계되었으며, 결정적으로 최종 승인을 위해 항상 사람을 참여시킵니다. 이 프로젝트는 코드 수정 AI 에이전트에서 안전한 자동화를 접근하는 방법에 대한 논의를 장려합니다.