
AI의 자기 검수는 내부 식구에게 관대하다. 별도 계통 AI(codex/GPT/Gemini)에게 채점하게 하는 OSS 「loop-verify」
요약
AI 모델이 자신의 결과물을 검증할 때 발생하는 사각지대 문제를 해결하기 위해, 서로 다른 계통의 모델(Codex, GPT, Gemini 등)을 검품자로 사용하는 오픈소스 도구 loop-verify를 소개합니다. MCP 서버 형태로 동작하며 기존 자기 검증 루프에 즉시 적용할 수 있습니다.
핵심 포인트
- 동일 계통 모델 간의 사각지대 공유 문제를 교차 모델 검증으로 해결
- MCP 서버 및 Python 함수 형태로 제공되어 기존 루프에 즉시 적용 가능
- 계정 등록이나 과금 없는 MIT 라이선스의 가벼운 도구
- 벤치마크 결과, 버그를 모두 찾아내고 오검출이 없는 높은 성능 확인
AI에게 결과물을 만들게 하고, AI에게 검품(Inspection)을 시킨다. 이 자기 검증 루프(Self-verification loop)에는 구조적인 구멍이 하나 있다. 작성한 본인과 같은 계통의 모델이 검품하면, 사각지대(Blind spot)까지 공유하게 된다는 점이다.
loop-verify는 그 구멍을 메우기 위한 작은 도구로, 검품만을 별도 계통의 모델(codex / GPT / Gemini)에 넘기는 MCP 서버 겸 Python 함수로서 공개되었다. MIT 라이선스이며, README의 설명대로 "no accounts, no metering, no billing"[1]이다. 계정 등록도 과금도 없는, 단순한 도구이다.
자기 검증 루프(고정된 YES/NO 기준 → 구현 → 기계 체크 → AI 검품 → 수정의 반복)는 AI 개발 실무에서 자주 기능한다. 하지만 검품 역할을 Claude에게 맡기고 Claude의 결과물을 보여주는 구성에는 한계가 있다. 동족 모델은 학습 방식과 습관이 비슷하여, 작성자가 빠진 함정을 검품 측도 똑같이 빠지게 된다.
이는 정신론의 문제가 아니라, 채점자의 독립성 문제다. README의 설계 설명에 나와 있듯이, 검품자를 별도 계통으로 만드는 이유는 "so it doesn't share their blind spots"[2], 즉 사각지대를 공유하지 않기 위함이다.
입력은 두 가지다.
criteria
: 고정된 YES/NO 수락 기준
artifact
: 검품 대상(diff 또는 파일 내용)
출력은 하나의 verdict(판결)이다. PASS / FAIL, 기준별 OK / NG, 기준 외에서 발견한 결함, 그리고 구체적인 fix_instructions(수정 지침).
핵심은 이 verdict의 규약을 loop-kit(자기 검증 루프의 Claude Code 플러그인)의 동족인 validator와 동일하게 만들어 두었기에, 기존 루프에 drop-in(교체) 방식으로 바로 적용할 수 있다는 점이다. loop-kit 측의 loop-protocol은 "세션 내에 cross-vendor checker가 있다면 그것을 우선한다"는 설계이므로, loop-verify를 MCP 서버로 띄워두기만 하면 패치 없이 독립 검품으로 전환된다.
동봉된 bench로 측정해 보았다. README의 기재[3]대로, 동봉된 9개의 fixtures(clean 4 / buggy 5 · 버그 종류는 다양함)에 대해 codex 백엔드의 성적은 "recall 1.0, false-positive 0.0 → GO"[4]였다. 심어놓은 실제 버그를 모두 찾아냈고, 건전한 fixture를 단 하나도 오검출(False positive)하지 않았다.
python bench/edge_bench.py --backend codex # independent checker -> GO/NO-GO
bench 자체가 GO/NO-GO를 반환하므로, "이 환경에서 독립 검품을 채택해도 좋은가"를 판단하는 데 그대로 사용할 수 있다.
# install(표준적인 venv)
python3 -m venv ~/.venvs/loop-verify
~/.venvs/loop-verify/bin/pip install -r requirements.txt
...
MCP 서버로 띄우면 independent_verify(criteria, artifact) 툴이 세션에 생성된다. Claude Code에서 사용할 경우 이것만으로 loop-kit의 루프가 독립 검품으로 전환된다.
Docker로 운용할 경우에는 codex CLI가 이미지에 포함되지 않기 때문에 키 방식의 백엔드(LOOP_VERIFY_BACKEND=openai 등)를 사용한다. hosted 인스턴스는 제공하지 않는다. Dockerfile을 배포할 뿐, 실행은 각자의 환경에서 하는 것으로 설계 판단을 내렸다(검품 대상 코드를 타인의 서버로 보내는 구조를 만들고 싶지 않았기 때문이다).
검품 프롬프트에 "반드시 결함을 찾아라"라고 쓰면 정밀도가 떨어진다. checker가 눈치를 보며(忖度) 건전한 결과물에도 트집을 잡기 시작하여, false positive가 급증한다. "결함이 있으면 열거하고, 없으면 PASS"라는 중립적인 지시와 기준(criteria)의 고정이 독립 검품의 정밀도를 뒷받침한다. 채점자를 바꾸는 것뿐만 아니라, 채점자에게 질문하는 방식 또한 설계 대상이 된다.
- 자기 검증 루프 (self-verification loop)의 검품을 작성자와 다른 계통의 모델에게 맡기는 OSS
- verdict 계약은 loop-kit validator와 동일 = drop-in
- 실측: 9개의 fixtures에서 codex backend가 recall 1.0 / false-positive 0.0 → GO
- MIT 라이선스 · 계정 불필요 · hosted 없음
리포지토리: https://github.com/akihidem/loop-verify
본고의 인용은 모두 1차 자료와 축어 대조(verify_article 통과)를 거친 후 게재하였습니다 (2026-07-02 검증).
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기