Parallel Execution Consensus · Agent Failover to Agent
병렬 실행 합의 — 둘에게 같은 것을 묻는다
맥락
금융 위험 평가나 의료 진단처럼 판돈이 큰 환경. 에이전트 하나의 잘못된 결정이 치르는 대가가 크다. 단일하고 비결정론적인 LLM에 이런 결정을 맡기는 것은 단일 실패 지점을 들이는 일이다. 모델은 환각할 수 있고, 표류할 수 있고, 나쁜 입력을 처리할 수 있다.
문제
결정적 판단을 단일 에이전트에 의존해 생기는 단일 실패 지점을 어떻게 완화할 것인가. 고립된 에이전트의 결론에 결함이 있어도 두 번째 의견이 없으면 그 오류는 발각되지 않는다.
해법
둘 이상의 독립 에이전트를 병렬로 불러 같은 과업을 수행시키는 자동 중복을 구현한다. 오케스트레이터가 출력을 비교해, 정의된 허용 오차 안에서 일치하면 결과를 검증된 것으로 본다. 유의미하게 어긋나면 해결자 에이전트나 사람에게 에스컬레이션해, 검증되지 않은 결과가 퍼지는 것을 막는다.
사례 — 신용 점수 평가 검증
구현 예시 · Python
class LoanOrchestrator: def get_credit_score(self, applicant_id: str): # 실제 시스템에서는 병렬 API 호출이 된다 score_a = PrimaryCreditAgent().calculate_score(applicant_id) score_b = BackupCreditAgent().calculate_score(applicant_id) # 정의된 허용 오차와 결과를 비교한다 if abs(score_a - score_b) < 10: final_score = (score_a + score_b) / 2 print(f"Result: Scores agree. Final validated score is {final_score}") return final_score else: # 불일치가 유의미하면 수동 검토로 에스컬레이션한다 self.escalate_to_human("Credit score disagreement", applicant_id) return "Error: Disagreement in credit scores." class PrimaryCreditAgent: def calculate_score(self, applicant_id: str) -> int: return random.randint(700, 750) # 주 모델 호출 시뮬레이션 class BackupCreditAgent: def calculate_score(self, applicant_id: str) -> int: # 독립된 다른 모델. 모델 편차를 흉내 내려 범위가 약간 다르다 return random.randint(705, 755)
장점
- 신뢰성과 검증 — 결정적 판단에 결정적인 검증 계층을 더한다. 단일 비결정론적 에이전트의 검증되지 않은 오답 위험을 크게 줄인다.
- 내결함성 — 단일 모델이나 서비스의 장애에 회복력을 갖춘다. 하나가 응답하지 못해도 다른 쪽 출력으로 진행하거나, 최소한 명확한 실패 신호를 얻는다.
단점
- 비용과 지연 — 같은 과업에 여러 에이전트를 돌리면 계산 비용(중복 LLM 호출)이 커지고, 여러 응답을 기다려야 하므로 전체 지연도 늘어난다.
- 복잡도 — 병렬 실행·비교 로직·에스컬레이션 경로를 관리할 추가 오케스트레이션 계층이 필요해 아키텍처가 복잡해진다.
구현 지침
에이전트 출력 사이의 “일치”가 무엇인지 명확하고 적절한 허용 오차를 정의하라. 이 허용치는 용례에 따라 크게 달라진다. 재무 예측의 5% 차이와 신용 점수의 5점 차이는 다르다. 아울러 출력이 어긋났을 때를 위한 견고한 에스컬레이션 경로를 세워야 한다. 세 번째 “결정투표” 에이전트를 부르거나, 결정론적 규칙 기반 시스템으로 물러서거나, 사람 검토로 플래그하는 방법이 있다.