서론
AI에게 코드 리뷰를 맡길 때, 많은 시스템은 '점수(Score)'로 판정합니다. 임계값을 넘으면 통과, 미달하면 반려하는 방식입니다. 빠르고 이해하기 쉬운 방법이죠.
하지만 저희 대창사에서 AI와의 공동 창작을 지속하면서, 다른 관점에 도달했습니다. 점수에 의한 평가는 '정답이 하나 존재한다'는 전제를 깔고 있습니다. 하지만 실제 개발에서 중요한 것은 단순히 코드가 올바른 것뿐만이 아닙니다. 의도가 통하는지, 문맥에 적합한지, 사람에게 미치는 영향은 어떤지 등입니다.
이에 저희는 여러 AI 에이전트가 각기 다른 시각으로 변경안을 읽어내고, 합의를 통해 결정하는 시스템을 설계했습니다. 본 글에서는 그 설계 사상과 구현 방식을 소개합니다.
5가지 관점에서 읽어내기
합의에 참여하는 멤버는 역할이 다른 5개의 에이전트로 구성되어 있습니다.
- 일관성 감시자: 프로젝트 원칙집과 대조하여, 방향에서 벗어난 변경을 막습니다(거부권 보유).
- 안전 감시자: 건드려서는 안 되는 파일이나 과거의 약속을 지키게 합니다(거부권 보유).
- 기술 심사위원: 기술적인 품질을 다단계 관점에서 확인합니다.
- 표현 편집 담당: 문장이나 표현의 깊이와 문맥과의 일관성을 살핍니다.
- 윤리 확인 담당: 사람에게 미치는 영향을 마지막으로 점검합니다.
진행 방식은 간단합니다. 거부권을 가진 감시자가 막는 변경안은 그 자리에서 부적격 처리됩니다. 그 외의 경우, 3개 이상의 찬성이 있어야 다음 단계(검증 환경에서의 테스트)로 진행됩니다.
class Council:
def __init__(self, principle_db):
self.judges = [
...
심사 전에 '문맥'을 전달하기
각 에이전트는 변경된 차이점(diff)만 보고 판단하지 않습니다. 변경의 의도와 프로젝트 원칙집에서 검색한 관련 내용을 함께 읽습니다.
async def evaluate(self, proposal):
# 원칙집에서 관련된 생각을 검색하여 문맥을 보충합니다
context = await self.principle_db.search(proposal["intent"])
...
핵심은 마지막 질문입니다. '올바른가'가 아니라 '사용자에게 이로운가'를 물음으로써, 효율성만으로는 측정할 수 없는 부분이 심사의 장 위에 오르게 됩니다.
전체적인 흐름
운영은 다음의 흐름을 하나의 사이클로 순환시킵니다.
- 감시(Monitoring): 현재 지표를 수집합니다.
- 탐지(Detection): 개선해야 할 점을 찾아냅니다.
- 생성(Generation): 경량 모델을 이용해 여러 개의 개선안을 만듭니다.
- 심사(Review): 합의를 통해 읽어냅니다.
- 검증(Verification): 테스트 환경에서 작동시켜 확인합니다.
- 적용(Application): 심사와 검증을 모두 통과한 것만 반영합니다.
생성 단계에는 가벼운 모델을, 심사 단계에는 깊이 있게 읽는 모델을 사용하는 등 역할에 따라 모델을 분배하여 비용과 품질의 균형을 맞추고 있습니다.
왜 '감상(Appreciation)'인가
Evaluation(평가)는 정답이 존재한다는 것을 전제로 합니다. Appreciation(감상)은 그 대상만이 가진 가치를 발견해내는 활동입니다.
합의제를 채택한 이유는, 하나의 AI 판단을 정답으로 삼지 않기 위함입니다. 시점이 다르면 보이는 것이 다르기 때문입니다. 그 차이점들을 모아 읽어냄으로써, 효율성만 추구하는 변경이나 원칙에서 벗어난 변경을 막을 수 있습니다.
코드 너머에는 작성한 사람과 사용하는 사람이 존재합니다. 이 두 가지 모두를 읽어내는 시스템을 만들고 싶습니다. 합의제 리뷰는 그 형태 중 하나입니다.
저자: 등대지기 MASATAKA|대창사
대창사 공식 웹사이트: https://daisosha.com/
학습 감상 포트폴리오: https://learning-appreciation.daisosha.com/
Discussion