서브에이전트 자기리뷰는 왜 편향될까 — 평가자를 루프 밖에 두기
구현한 에이전트가 자기 결과를 리뷰하면 거의 통과시킵니다. 평가자를 실행 루프 밖에 분리하는 구조와 실제 적용 방법을 정리했어요.
에이전트 워크플로우를 짜다 보면 자연스럽게 이런 모양이 나와요. 서브에이전트가 코드를 쓰고, 같은 서브에이전트에게 "네 결과를 검토해줘"라고 시키는 구조요. 저도 처음엔 이게 효율적이라고 생각했어요. 컨텍스트가 이미 있으니 다시 설명할 필요도 없고요.
직접 돌려 보니 문제가 있더라고요. 자기가 쓴 코드를 검토한 결과는 거의 다 "문제없음"이었습니다. 같은 작업을 새 세션의 다른 에이전트에게 검토시켰더니 그때는 지적이 나왔어요. 코드는 똑같았는데요.
왜 통과시킬까
이건 모델이 게을러서가 아니에요. 구조 때문입니다.
리뷰를 요청받은 시점에 그 에이전트의 컨텍스트에는 이미 "내가 이렇게 판단했고 이래서 이 코드를 썼다"는 추론 과정이 통째로 들어 있어요. 그 판단 근거를 그대로 들고 검토에 들어가니, 검토라기보다 방금 내린 결론을 다시 읽는 일에 가까워집니다. 놓친 전제는 검토할 때도 똑같이 놓쳐요. 전제가 컨텍스트 안에 참으로 박혀 있으니까요.
같은 컨텍스트 안의 자기리뷰 vs 컨텍스트 밖의 독립 평가
여기에 프롬프트 관성도 더해집니다. "이 요구사항대로 구현해줘" 다음에 "검토해줘"가 오면, 모델 입장에서 대화의 흐름은 완성 쪽으로 기울어 있어요. 반박은 흐름을 거스르는 출력이 됩니다.
평가자를 루프 밖으로
해법은 단순해요. 평가자를 실행 루프 밖에 둡니다. 구현 에이전트와 검증 에이전트가 컨텍스트를 공유하지 않게요.
핵심은 3가지예요.
- 컨텍스트 차단: 평가자에게 넘기는 건 결과물과 원래 요구사항뿐. 구현 과정의 추론은 넘기지 않아요. "왜 이렇게 했는지"를 같이 주면 그 설명이 다시 변명처럼 작동합니다.
- 다른 모델 쓰기: 가능하면 구현과 검증에 서로 다른 모델을 씁니다. 같은 모델은 같은 실수 패턴을 공유하거든요. 저는 구현 쪽과 검증 쪽을 아예 다른 벤더로 나눠서 돌려 봤는데, 한쪽이 자연스럽게 넘긴 걸 다른 쪽이 잡는 경우가 꾸준히 나왔어요.
- 판정은 통과/불통과 2값으로: "대체로 괜찮습니다" 같은 서술형 응답은 게이트로 못 씁니다. 불확실하면 불통과 쪽으로 떨어뜨리는 쪽이 안전해요.
실제로 붙여 보면
워크플로우에 적용할 땐 이렇게 나눴어요. 구현 단계가 끝나면 결과물을 파일로 떨어뜨리고, 새 프로세스에서 평가자를 띄워서 그 파일만 읽게 합니다. 평가자 프롬프트에는 원래 요구사항과 판정 기준만 들어가요. 체크 항목은 5개 정도로 고정해 두면 매번 판정 폭이 흔들리지 않더라고요.
테스트해 보면 재밌는 게, 평가자가 통과시킨 결과와 자기리뷰가 통과시킨 결과의 차이가 대부분 "요구사항에 명시 안 된 부분"에서 나옵니다. 구현 에이전트는 빈칸을 자기 판단으로 메우고 그걸 맞다고 기억해요. 밖에서 보는 평가자는 "이건 요구사항에 없는데 어디서 나왔나"를 물어봅니다.
그래서 평가자 응답에 unknown 칸을 하나 두는 게 좋아요. 통과도 불통과도 아닌, "판단 근거가 부족함" 칸이요. 이게 없으면 애매한 건 통과로 밀려 들어갑니다.
사람은 어디에 있나
마지막으로 짚을 게, 평가자를 붙였다고 사람이 빠지는 건 아니에요. 평가자는 반복 검사를 대신할 뿐, 반영 여부는 사람이 정합니다. 특히 아키텍처나 데이터 모델 같은 결정은 그대로 사람 몫이에요.
플랜티 같은 AI 기능이 들어간 제품을 만들면서 이 구조가 더 중요해졌어요. 모델이 만든 걸 모델이 검증하고 그대로 나가는 경로가 하나라도 있으면, 문제가 조용히 통과할 자리가 생기더라고요. 플랜씨나 플랜엘처럼 계산·검색 결과가 바로 사용자에게 보이는 서비스는 특히요.
- 컨텍스트 분리
- 다른 모델로 교차
- 판정은 2값 + unknown
- 반영은 사람
정리하면 이래요. 에이전트가 똑똑해져도 자기 컨텍스트 안에서는 자기를 못 봅니다. 루프 안에서 평가하면 루프의 전제를 그대로 물려받아요. 평가자를 밖에 두는 건 모델 성능 문제가 아니라 배선 문제입니다. 오늘 워크플로우에서 "같은 에이전트가 만들고 같은 에이전트가 확인하는" 자리를 한 군데만 찾아서 끊어 보세요. 10분이면 충분하고, 그 한 군데에서 바로 차이가 보일 거예요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.