에이전트를 위한 합의와 Byzantine Fault Tolerance
고전적인 분산 시스템의 비잔틴 장애 허용(Byzantine Fault Tolerance; BFT)이 확률적인 LLM과 만납니다. 2025-2026년에 세 가지 연구 방향이 등장했습니다. CP-WBFT(arXiv:2511.10400)는 신뢰도 프로브(confidence probe)로 각 투표(vote)에 가중치를 부여합니다. DecentLLMs(arXiv:2507.14928)는 리더(leader) 없는 구조에서 작업자(worker) 에이전트가 병렬로 제안을 내고, 기하 중앙값(geometric median)으로 결과를 집계합니다. WBFT(arXiv:2505.05103)는 가중 투표(weighted voting)와 계층 구조 클러스터링(Hierarchical Structure Clustering)을 결합해 코어(Core) 노드와 엣지(Edge) 노드를 나눕니다. "Can AI Agents Agree?"(arXiv:2603.01213) 논문의 솔직한 실증 결과는, 오늘날에는 단일 수치에 대한 합의(scalar agreement)조차 취약하다는 것입니다. 기만적(deceptive)으로 행동하는 에이전트 하나만으로도 에이전트 혼합(Mixture-of-Agents)이 무너질 수 있습니다. BFT는 필요하지만 충분하지 않습니다. 이번 강의에서는 최소한의 BFT 프로토콜을 만들고, LLM 에이전트에 특화된 세 가지 공격(byzantine lie, sycophantic conformity, correlated-error monoculture)을 주입한 뒤, 각 합의 방식(consensus variant)이 이를 어떻게 견뎌내는지 측정해 봅니다.
유형: Learn + Build
언어: Python (stdlib)
선수 지식: Phase 16 · 07 (Society of Mind와 멀티 에이전트 토론), Phase 16 · 13 (공유 메모리)
예상 시간: 약 75분
문제
N개의 LLM 에이전트가 각각 답을 내놓습니다. 그런데 답이 서로 다릅니다. 다수결 투표(majority vote)는 잘못된 답을 고릅니다. 두 에이전트가 서로 상관되어 있기 때문입니다. 같은 기본 모델(base model)을 쓰고, 같은 학습 데이터(training data)를 공유하며, 같은 실패 양상(failure mode)을 보입니다. 세 번째 에이전트는 전혀 새로운 방식으로 우연히 틀립니다. 그 결과 다수결은 거짓 다수(false majority)가 되고 맙니다.
이제 기만적인 에이전트를 한 명 추가해 봅시다. 이 에이전트는 의도적으로 거짓말을 합니다. 또는 아첨적인(sycophantic) 에이전트를 추가해 봅시다. 이 에이전트는 가장 마지막에 말한 쪽에 동의합니다. 고전적인 BFT에서는 비잔틴(Byzantine) 노드가 전체의 f < n/3 비율을 차지하고, 그 안에서 임의로(arbitrarily) 행동한다고 가정합니다. 그러나 2026년의 현실에서 LLM 노드는 정직(honest)할 때조차 확률적이고, 모델 사이에 상관관계가 있으며, 서로의 출력에 영향을 받습니다. 이들을 독립적인 베르누이 투표자(Bernoulli voter)처럼 다룰 수는 없습니다.
고전적인 BFT(PBFT, 1999)가 틀렸다는 뜻은 아닙니다. 다만 불완전할 뿐입니다. PBFT는 임의의 비트 뒤집힘(bit-flipping)은 처리합니다. 그러나 "세 명의 정직한 에이전트가 같은 학습 데이터를 공유한 탓에 같은 환각(hallucination)을 낸다"는 경우는 처리하지 못합니다. 이번 강의는 PBFT라는 기반 위에서 출발해, 2025-2026년에 등장한 세 가지 변형을 그 위에 차례로 얹어 갑니다.
개념
고전적인 BFT가 제공하는 것
실용적 비잔틴 장애 허용(Practical Byzantine Fault Tolerance; PBFT, Castro & Liskov, OSDI 1999)은 f < n/3 범위의 비잔틴 노드를 견딥니다. 이 프로토콜은 세 단계(pre-prepare, prepare, commit)와 두 가지 기본 요소(서명된 메시지(signed messages), 정족수 인증서(quorum certificates))로 구성됩니다. n >= 3f + 1개의 정직하거나 악의적인 노드 사이에서 하나의 값(value)에 대한 합의를 만들어 냅니다.
그 보장은 강력하지만, 다음과 같은 가정에 의존합니다.
- 독립적인 결함(independent faults). 비잔틴 노드들이 서로 공모(coordinate)하지 않습니다.
- 정직한 노드는 진짜로 정직합니다. 정직한 출력의 정확성(correctness)은 따지지 않습니다. 프로토콜은 어디까지나 의견 불일치(disagreement)를 정렬할 뿐입니다.
- 질문에는 사실 기반의 정답(ground-truth answer)이 존재합니다. 잘못된 사실에 대한 합의도 합의는 합의입니다.
LLM 에이전트는 이 세 가지를 모두 위반합니다. 같은 기본 모델을 돌리는 두 에이전트는 결함을 공유합니다. "정직한" LLM도 여전히 환각을 일으킵니다. 그리고 모호한 질문에서는 "진실"이 결국 에이전트들이 결정한 결과가 되며, 별도의 외부 기준(oracle)도 없습니다.
LLM 환경에 특화된 세 가지 공격
비잔틴 거짓말(Byzantine lie). 한 에이전트가 의도적으로 잘못된 답을 내놓습니다. f < n/3 조건이 만족되면 고전적인 BFT가 이 경우를 처리합니다.
아첨적 동조(Sycophantic conformity). 한 에이전트가 투표 전에 다른 에이전트들의 답을 먼저 읽고, 가장 마지막에 말한 쪽으로 답을 맞춥니다. 악의적이지는 않지만 가장 큰 목소리와 상관관계가 생깁니다. 이 에이전트는 모든 서명 검증(signature check)을 통과하기 때문에 고전적인 BFT로는 막을 수 없습니다.
상관 오류로 인한 단일 문화(Correlated-error monoculture). 세 에이전트가 같은 기본 모델을 공유합니다. 그래서 같은 잘못된 답을 함께 환각합니다. 결국 다수가 틀린 답을 냅니다. 이 세 에이전트가 모두 "정직하게" 동의하는 모양이 되기 때문에 고전적인 BFT는 도움이 되지 않습니다.
2025-2026년의 대응
CP-WBFT (arXiv:2511.10400) — 신뢰도 프로브 기반의 가중 BFT(Confidence-Probed Weighted BFT)입니다. 각 투표자는 자신의 답에 신뢰도 프로브를 함께 붙입니다. 이 값은 스스로 보고한 확률(self-reported probability)일 수도 있고, 별도의 보정 모델(calibration model)이 예측한 값일 수도 있습니다. 투표 가중치는 신뢰도에 비례합니다. 완전 그래프(complete graph) 환경에서 +85.71%의 BFT 성능 향상이 보고되었습니다. 완화 대상은 아첨적 동조입니다. 동조하는 에이전트는 자기가 자발적으로 낸 입장에 대해서는 신뢰도가 낮은 경향이 있기 때문입니다.
DecentLLMs (arXiv:2507.14928) — 리더 없는 방식입니다. 작업자 에이전트가 병렬로 제안을 내고, 평가자(evaluator) 에이전트가 그 제안들에 점수를 매긴 다음, 최종 답은 점수가 부여된 입장들의 기하 중앙값으로 결정합니다. f < n/2 조건에서 견고(robust)합니다. 비잔틴 거짓말과 상관 오류를 함께 완화합니다. 기하 중앙값은 이상치(outlier)에 강하고, 모델 편향이 섞인 평균이 아니라 밀집한 군집(dense cluster) 쪽으로 끌어당기기 때문입니다.
WBFT (arXiv:2505.05103) — 계층 구조 클러스터링과 결합된 가중 BFT입니다. 응답 품질과 이력에서 학습한 신뢰 점수(trust score)를 함께 사용해 투표 가중치를 정합니다. 에이전트들을 코어와 엣지로 군집화하여, 코어 에이전트가 먼저 합의를 달성하고 엣지 에이전트가 그 뒤를 따르도록 합니다. 확장성(scalability) 측면을 개선하며(코어 합의는 규모가 작고 빠릅니다), 코어를 다양성 기준으로 선택하면 단일 문화 문제도 부분적으로 완화합니다.
실증: "Can AI Agents Agree?" (arXiv:2603.01213)
이 논문은 여러 최전선(frontier) 모델에서 단일 수치에 대한 합의, 즉 LLM 에이전트들이 하나의 숫자 값에 동의하는 정도를 측정합니다. 결과는 다소 불편한 진실을 보여 줍니다.
- 적대적인 행위자(adversary)가 없는 상황에서도 LLM 에이전트들은 여러 벤치마크의 수치형 질문에서 30%가 넘는 비율로 서로 다른 답을 냅니다.
- 기만적인 페르소나(deceptive persona)를 채택한 에이전트가 하나만 들어가도, 에이전트 혼합(Mixture-of-Agents)의 합의를 정직한 기준선(honest baseline)에서 40퍼센트포인트 이상 끌어내릴 수 있습니다.
- 의견 불일치율은 모델 다양성과 상관관계를 보입니다. 이질적인(heterogeneous) 앙상블은 동질적인(homogeneous) 앙상블보다 더 많이 의견이 갈립니다. 오류 사이의 상관관계가 적다는 점에서는 좋지만, 합의까지 걸리는 시간(time-to-agreement)이 더 길어진다는 점에서는 좋지 않습니다.
핵심은 이렇습니다. BFT는 출력을 정렬하는 도구를 제공할 뿐, 정렬된 출력이 실제로 맞는지를 알려 주지는 않습니다. 따라서 검증(verification, Phase 16 · 08 역할 분담), 다양성(diversity, Phase 16 · 15 토론 변형), 평가자 에이전트(Phase 16 · 24 벤치마크)와 함께 사용해야 합니다.
핵심 프로토콜을 단순화해 보기
LLM 에이전트를 위한 최소한의 BFT 한 라운드는 다음과 같습니다.
1. task arrives; each agent i produces answer a_i
2. each agent attaches confidence probe c_i in [0, 1]
3. aggregator collects (a_i, c_i) from all n agents
4. aggregator groups by semantic cluster (equivalent answers)
5. aggregator computes weight for each cluster C:
w(C) = sum_{i in C} c_i
6. winner = cluster with max weight, if max > threshold * sum(c_i)
else: retry or escalate
7. minority clusters logged with provenance for post-hoc audit
LLM 환경 특유의 차이는 의미 기반 군집화(semantic clustering) 단계에 있습니다. "the study reports 4.2%"와 "4.2% improvement"는 같은 군집(cluster)으로 묶여야 합니다. 단순한 문자열 일치 검사로는 이를 잡아내지 못합니다. 실제 서비스 환경에서는 가벼운 임베딩 모델(embedding model)이나 명시적 정규화(canonicalization)를 사용합니다.
임계값(threshold) 튜닝
threshold 매개변수(parameter)는 언제 결과를 받아들이고 언제 다시 시도할지를 결정합니다. 너무 낮게 잡으면 약한 다수도 그대로 통과시킵니다. 너무 높게 잡으면 어떤 결과도 받아들이지 못합니다. 실증 범위는 에이전트 수가 n=5-7일 때 0.5-0.67 정도이고, n이 더 작으면 더 높은 임계값이 필요합니다. 이 임계값에 미치지 못하면 사람이나 다른 에이전트 앙상블로 단계를 올려야(escalate) 합니다.
합의로 풀 수 없는 영역
- 모호한 질문(Ambiguous questions). 질문 자체에 사실 기반의 정답이 없다면, 합의는 그저 하나의 의견입니다. 그것을 의견이라고 분명히 부르는 편이 좋습니다.
- 복합 질문(Compound questions). "코드를 작성하고 그것을 설명하라"는 사실상 두 개의 답을 요구합니다. 각각에 대해 독립적으로 투표해야 합니다.
- 적대적 다중 라운드(Adversarial multi-round). 에이전트들이 이전 라운드를 관찰하고 그것을 흉내 낼 수 있다면(Du 2023 debate), 진실과 관계없이 서로에게 동의하기 시작합니다. 라운드 수에 상한을 둡니다. 보통 2-3회 정도가 적당합니다.
직접 만들기
code/main.py는 다음을 구현합니다.
AgentVoter — (answer, confidence) 쌍을 가진 사전 정의 정책(scripted policy)입니다.
MajorityVote — 고전적인 다수결(plurality)입니다.
CPWBFT — 의미 기반 군집화를 사용하는 신뢰도 가중 투표입니다.
DecentLLMs — 점수가 부여된 제안에 대한 기하 중앙값 집계입니다.
Scenario — 세 가지 공격 패턴 아래에서 각 집계기(aggregator)를 실행합니다.
구현된 공격 패턴은 다음과 같습니다.
byzantine: 한 에이전트가 높은 신뢰도로 거짓 답을 냅니다.
sycophancy: 한 에이전트가 가장 먼저 본 답을 그대로 복사하고, 같은 신뢰도를 붙입니다.
monoculture: 세 에이전트가 같은 잘못된 답을 공유합니다. 상관 오류이며 신뢰도는 중간 수준입니다.
다음과 같이 실행합니다.
python3 code/main.py
예상 출력은 (attack, aggregator) -> final answer 형태의 표이며, 올바른 답이 강조되어 표시됩니다. 다수결은 단일 문화 시나리오에서 실패합니다. CP-WBFT의 신뢰도 가중은 아첨적 동조를 완화합니다. DecentLLMs의 기하 중앙값은 단일 문화 군집이 전체의 절반에 미치지 못할 때, 정직한 군집 쪽으로 결과를 끌어당깁니다.
사용해보기
outputs/skill-consensus-designer.md는 멀티 에이전트 앙상블을 위한 합의 프로토콜을 설계합니다. 군집화 방식, 가중 방식, 임계값, 그리고 임계값을 넘기지 못한 라운드에 대한 단계 상승 정책(escalation policy)을 결정합니다.
배포 전 확인
어떤 합의 메커니즘이라도 실제로 배포하기 전에 다음을 확인해야 합니다.
- 앞서 살펴본 세 가지 패턴으로 공격 테스트(attack-test)를 수행합니다. 프로토콜은 조용히 실패하는 것이 아니라, 예측 가능한 방식으로 실패해야 합니다.
- 모든 소수 군집을 출처(provenance)와 함께 기록합니다. 소수 군집은 상관 오류의 조기 경보 시스템입니다.
- 라운드 수에 상한을 두는 정책을 강제합니다. "합의가 될 때까지 계속 토론"하는 방식은 아첨적 동조를 보상해 줍니다.
- 합의(agreement)와 정확성(correctness)을 분리합니다. 합의 결과는 검증자(verifier)로 전달하고, 검증자는 앙상블과 독립적으로 동작해야 합니다.
- 합의율(agreement rate)을 모니터링합니다. 합의율이 급격히 높아지면 동조 편향(conformity bias)을 의심해야 하고, 급격히 낮아지면 모델 드리프트(model drift)를 의심해야 합니다.
연습문제
code/main.py를 실행합니다. 단일 문화 공격에서 다수결은 실패하지만, 단일 문화 군집의 신뢰도가 0.7 아래일 때 CP-WBFT가 이를 부분적으로 완화하는지 확인합니다.
- 네 번째 공격 패턴을 추가합니다. 무응답 기권(silent abstention) — 한 에이전트가 "I don't know"라며 답하기를 거부합니다. 각 집계기는 기권을 어떻게 처리해야 합니까? 선택한 방식을 구현해 봅니다.
- 의미 기반 군집화 방식을 문자열 정규화(string canonicalization)에서 임베딩 유사도(embedding similarity) 기반으로 바꿉니다. 오픈 소스 임베딩 모델이라면 무엇이든 사용해도 좋습니다. 아첨적 동조 공격에는 어떤 변화가 생깁니까?
- CP-WBFT(arXiv:2511.10400)를 읽어 봅니다. 신뢰도 프로브 보정(confidence-probe calibration) 단계를 구현합니다. 별도의 보정 모델이 각 에이전트가 스스로 보고한 신뢰도를 검사하도록 합니다. 단일 문화 시나리오에서 정확도가 얼마나 향상되는지 측정합니다.
- "Can AI Agents Agree?"(arXiv:2603.01213)를 읽어 봅니다. 단순화한 단일 수치 합의 실험을 재현합니다. 에이전트 세 명, 하나의 수치형 질문, 기만적인 페르소나 프롬프트(deceptive-persona prompt)를 사용합니다. CP-WBFT나 DecentLLMs가 이 공격을 잡아냅니까?
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| BFT | "Byzantine fault tolerance" | f < n/3 범위의 임의 결함이 있을 때 합의를 만드는 Castro-Liskov 1999 프로토콜이다. |
| 비잔틴(Byzantine) | "나쁜 행동 전부" | 거짓말, 메시지 누락, 조용한 실패 등 단순 충돌이 아닌 임의의 행동을 할 수 있는 노드다. |
| 신뢰도 프로브(Confidence probe) | "얼마나 확신하는가?" | 투표에 함께 붙는 자기 보고(self-reported) 또는 보정자가 예측한(calibrator-predicted) 확률 값이다. |
| 의미 기반 군집화(Semantic clustering) | "같은 답, 다른 표현" | 표를 세기 전에 의미가 같은 답을 하나의 군집으로 묶는 과정이다. |
| 기하 중앙값(Geometric median) | "강건한 중심" | 표본점까지의 거리 합을 최소화하는 점이다. 평균(mean)과 달리 이상치에 강하다. |
| 단일 문화(Monoculture) | "같은 모델, 같은 실패" | 에이전트들이 학습 데이터나 기본 모델을 공유할 때 생기는 상관 오류다. |
| 아첨적 동조(Sycophantic conformity) | "큰 목소리에 동의하기" | 에이전트의 투표가 가장 먼저 말했거나 가장 크게 말한 쪽으로 편향되는 현상이다. |
| 코어/엣지(Core/Edge) | "계층적 BFT" | WBFT의 분리 방식이다. 작은 코어가 먼저 합의를 만들고 엣지 노드가 그 뒤를 따른다. 지연(latency)에 상한을 둔다. |
더 읽을거리