인간 vs AI - 코드 줄 단위 작성자 추적 도구
AI 코딩 에이전트가 활약하는 시대에, 텍스트의 각 줄이 인간이 작성한 것인지 AI가 작성한 것인지 버전 기록을 통해 추적하는 도구가 공개되었습니다. 이 도구는 인간이 작성한 핵심 코드는 AI가 함부로 수정하지 않도록 보호하고, AI가 작성한 부분은 자유롭게 수정할 수 있게 해줍니다. CLI(명령줄) 환경이나 라이브러리 형태로 사용할 수 있어 AI 기반 코딩(vibe coding) 프로젝트를 관리하는 실무자에게 매우 유용합니다.
인간 vs AI — 에이전트 기반 편집 환경에서 텍스트의 줄 단위 작성자 추적하기
텍스트의 버전 기록을 활용하여, 에이전트 기반 편집 환경에서 특정 줄을 누가 작성했는지(우리가, 즉 인간이 썼는지 아니면 AI가 썼는지) 추적합니다. 라이브러리나 CLI 도구로 사용할 수 있습니다.
문제 상황 에이전트(AI)가 코딩과 편집을 주도하는 환경에서 '작성자(provenance)'는 매우 중요한 문제가 됩니다. 인간이 직접 작성하거나 수정한 텍스트는 신성할 정도로 존중되어야 하며, AI 에이전트는 이를 건드리기 전에 주저해야 하고 그럴 만한 타당한 이유가 있어야 합니다. 반면, 다른 AI 에이전트가 만들어낸 저품질 결과물(Slop)은 얼마든지 자유롭게 수정해도 됩니다.
이 도구의 활용 사례는 다음과 같습니다: 주로 AI 코딩 도구를 이용해 만든 앱에서, 개발자 본인의 아이디어와 소유권을 확고히 하고 싶은 특정 코드 영역을 설정하고 싶을 때 유용합니다. 다음 세션에서 또 다른 AI 에이전트가 이 중요한 코드 영역을 무참히 덮어써 버리는 일을 원치 않을 것입니다. 또 다른 활용 사례는 최초에 AI로 생성된 README.md 파일에서 도입부의 단락만 인간이 직접 다시 작성하는 경우입니다. 이때 AI 에이전트는 하단의 다른 부분은 자유롭게 다시 작성하거나 내용을 덧붙일 수 있지만, 인간이 작성한 도입부는 수정하기 전에 정말 신중하게 고민해야 합니다.
작동 방식 이 도구가 작동할 때의 주요 전제 조건은, 이를 위해 텍스트에 특별한 마크업(Markup)을 할 필요가 없다는 것입니다. 어디에나 있는 일반 텍스트(마크다운 등)를 있는 그대로 지원해야 합니다. 따라서 활용할 수 있는 유일한 단서는 텍스트의 각 새 버전이 인간 또는 AI 에이전트라는 식별 가능한 작성자에 의해 생성된다는 점뿐입니다.
주어진 텍스트를 평가한 결과는 AI가 생성한 텍스트라는 '바다(Sea)' 속에 있는 인간 작성 라인의 '섬(Islands)' 형태인 '구간 범위 세트'입니다. 기술적으로 간단한 diff(차이점 비교)를 기반으로 하며, 이것이 알고리즘 개발을 위한 핵심 비유입니다. 단순히 개별 줄의 작성자만 추적하는 것이 아니라, 의미 있게 응집된 텍스트 조각 단위로 추적하고자 합니다. 따라서 작성자의 권한이 합쳐지거나(Joining), 분할되거나(Splitting), 희석되는(Dilution) 동작을 고려해야 하며, 결과가 온통 바다나 온통 섬으로 수렴하지 않도록 적절히 조정합니다.
사용법 us-vs-them을 CLI 도구로 사용하려면 로컬 설치를 위해 bbin이 필요합니다.
make install
git 저장소는 이미 각 버전마다 작성자 마커를 포함하는 기록의 결정체입니다. 즉, 파일의 각 수정본에는 해당 변경을 가한 작성자의 정보가 순서대로 기록되어 있습니다. git 저장소 내의 어느 곳에서든 이를 사용하려면 다음 명령어를 실행합니다:
us-vs-them --ours dan@eighttrigrams.net README.md
이 명령은 다음과 같은 목록을 출력합니다:
1-3 0.00 4 1.00 5-7 0.00 8-20 0.46 21-164 0.00
여기서 1.0은 완전히 인간이 작성한 구간을 의미합니다. 0.46은 원래 인간이 작성했던 구간이지만 AI 에이전트에 의해 어느 정도 수정되었음을 뜻합니다. 0.00은 완전히 AI 에이전트가 작성했음을 의미합니다.
매개변수는 다음과 같습니다: --ours : 인간으로 간주할 작성자입니다. 이 목록에 없는 사람은 모두 AI 에이전트로 간주됩니다. --theirs : AI 에이전트로 간주할 작성자입니다. 이 목록에 없는 사람은 모두 인간으로 간주됩니다.
목록이 더 짧은 쪽의 이름을 지정하는 것이 효율적입니다. 두 인수를 동시에 전달하면 오류로 처리됩니다.
개발 make test
동작 원리 이 도구의 동작 방식을 이해하는 가장 좋은 방법은 caution_test.clj 파일을 살펴보는 것입니다.