← Ascendy EN

meta

루프 엔지니어링의 심장은 '검증'이다 — 그리고 검증자는 '다른' 모델이어야 한다

· Ascendy Engineering


TL;DR

소스 노트. 루프 엔지니어링의 계보·정의는 공개 자료로 확인했다(Cobus Greyling, explainx). redteam의 동작은 public OSS(AscendyProject/redteam)라 README·CHANGELOG에서 직접 확인했다. 같은 적대적 검증 결의 두 번째 AI를 어떻게 부르고 언제 멈추나, 기능을 거부하는 법과 이어진다.

프롬프트에서 루프까지

AI를 부리는 기술의 계보를, 루프 엔지니어링 글들은 4단계로 정리한다.

질문 자체가 “뭐라고 말하지?”에서 “어떤 시스템을 만들면 에이전트가 알아서 일하지?”로 옮겨갔다. 모델이 이미 몇 시간씩 자율로 도는 시대가 되자, 병목이 모델 능력에서 오케스트레이션 설계로 넘어온 것이다.

자율 루프의 전부는 ‘검증’이다

루프의 구성요소는 보통 이렇게 꼽힌다 — 트리거(스케줄/이벤트), 검증 가능한 목표, 액션(툴), 검증, 메모리(상태 보존). 그런데 이 중 진짜 어려운 하나가 있다.

검증 게이트. 루프 엔지니어링을 정리한 한 글(Cobus Greyling)이 짚는 한 줄이 이거다:

“무인 루프에서, verifier가 있어야 어느 정도 안심하고 자리를 비우고 맡길 수 있다.”

당연하다. 에이전트가 나 없이 몇 시간을 도는 루프라면, 그 결과를 믿을 수 있게 해주는 건 검증뿐이다. 검증이 약하면 — “검증이 없으면 루프는 영원히 돌거나 너무 일찍 멈춘다.” 자율성의 가치 전체가 verifier 하나에 달려 있다.

그런데 검증자가 자기 자신이면 무너진다

검증의 핵심 원칙은 더 날카롭다. 루프 엔지니어링 캐논이 그대로 적는다:

“코드를 쓴 에이전트는 자기 일의 나쁜 심판이다.” (maker/checker 분리)

자기가 쓴 코드를 자기가 검증하면, 자기 추론의 빈틈은 두 번째로 봐도 똑같이 안 보인다. 통과시킨다. 그래서 좋은 루프는 만드는 에이전트(maker)와 검증하는 에이전트(checker)를 분리하고, 다른 지시(때로 다른 모델)로 검증한다 — 여기까진 캐논이다.

여기서부터는 이 글의 주장이다. 검증자가 같은 프로바이더의 서브에이전트면, 그건 자기-리뷰의 한 변종에 가깝다고 본다 — 같은 계열은 같은 맹점을 공유할 위험이 크기 때문이다. 그래서 독립성을 프로바이더 경계까지 밀어야 한다는 게 redteam의 설계 선택이다(캐논이 요구하는 건 아니다).

redteam — 검증 게이트를 cross-provider 적대로 박는다

redteam(우리가 만든 적대적 에이전트-페어 하네스, Apache-2.0)은 정확히 그 검증 게이트를 끝까지 민 루프다. 핵심은 세 가지다.

  1. 검증자가 다른 프로바이더다. 한 모델이 pipeline(plan → implement → review)으로 코드를 쓰고, 다른 벤더의 모델이 그 diff를 적대적으로 리뷰한다. 기본 설정은 Claude가 쓰고 Codex가 리뷰한다(설정으로 반대도 가능). maker/checker를 cross-provider로 끌어올린 것이다.
  2. 자기-리뷰를 fail-closed로 거부한다. 같은 프로바이더의 모델이 자기 코드를 리뷰하려 하면, 하네스가 fail-closed로 막는다. “다른 서브에이전트인 척”으로 통과하는 길을 구조로 닫았다.
  3. findings는 pass/fail이 아니라 tiered. 리뷰어가 심각도를 매긴 findings를 내고, common path는 사람 게이트 없이 draft PR 생성까지 자동으로 진행한다 — 적대적 페어 + 검증 자체가 신뢰이기 때문이다. (그 draft PR이 머지 전 사람 체크포인트이고, 하네스는 절대 자율 머지하지 않는다.)

그리고 이게 말이 아니라 기록으로 받쳐진다. redteam의 CHANGELOG는 한 줄로 적는다 — “cross-provider adversarial review가 머지 전 real HIGH 결함 4개를 잡았다.” CHANGELOG가 확증하는 건 다른 모델이 그 4개를 잡았다는 사실까지다 — 자기-리뷰라면 그냥 통과시켰을 법한 종류라는 건 이 글의 해석이다.

나머지 루프 구성요소도 다 있다

검증만 강한 게 아니라, 루프 엔지니어링이 꼽는 구성요소가 전부 들어 있다.

루프 설계엔 ‘안 만들기로’도 포함된다

흥미로운 디테일 하나. 루프 엔지니어링 글들은 “서브에이전트를 쓴다”고 말하는데, redteam은 한 사이클에서 세션 안에서 서브에이전트 리뷰어를 띄우는 어댑터를 거부했다. 이유는 한계 효용은 작은데(headless 리뷰어가 이미 cross-provider를 커버) 새 실행 표면까다로운 보안 선결조건(같은 세션 서브에이전트가 키우는 자기-리뷰 우회 위험 등)을 떠안아야 했기 때문이다 — 비용 대비 이득이 안 맞았다. 그래서 headless cross-provider 쪽을 택하고, 그 거부를 결정문으로 남겼다. (기능을 거부하는 법) 루프 설계는 무엇을 넣느냐만이 아니라 무엇을 안 넣느냐이기도 하다.

가져갈 것

저장소: github.com/AscendyProject/redteam (Apache-2.0).


저작·인용: 이 글은 Ascendy Engineering이 작성했으며 출처 표기 시 재인용 가능합니다. 잘못된 정보를 발견하면 GitHub 이슈로 알려주세요.


Tags: loop-engineering, agents, adversarial-review, redteam, oss