AI 에이전트는 스스로를 검증할 수 없다는 것을 발견했습니다. 진짜 문제는 훨씬 더 큽니다.
요약
AI 에이전트가 자연어를 통해 스스로를 검증할 때 발생하는 '산문 장벽(Prose Barrier)' 문제를 지적합니다. 모델은 생성과 평가에 동일한 메커니즘을 사용하므로, 단순한 프롬프트 개선이 아닌 코드 실행이나 논리적 변환 같은 구조적 대안이 필요함을 강조합니다.
핵심 포인트
- AI 에이전트는 동일한 토큰 생성 파이프라인으로 인해 자기 검증이 불가능함
- 자연어는 AI 거버넌스를 위한 구조적으로 결함이 있는 언어임
- 산문 장벽(Prose Barrier) 문제를 해결하기 위해 코드 기반의 기계적 검증이 필요함
- 미래의 AI 거버넌스는 자연어가 아닌 코드나 삼단논법 등 적절한 언어를 사용해야 함
AI 에이전트는 스스로를 검증할 수 없다는 것을 발견했습니다. 진짜 문제는 훨씬 더 큽니다.
저는 중국의 학부생이며, 공개적으로 AI 거버넌스(AI governance) 논문을 작성하고 있습니다. 두 달 전, 저는 AI 에이전트가 자신이 규칙을 따랐는지 독립적으로 확인할 수 없다는 사실을 발견했습니다. 저는 이를 해결하기 위해 기계적 게이트(mechanical gates)를 구축했습니다. 결과는 효과적이었습니다 — 위반율이 55.9%에서 0.7%로 감소했습니다. 하지만 지난주, 저는 제가 잘못된 문제를 풀고 있었다는 것을 깨달았습니다.
진짜 문제는 검증(verification)이 아닙니다.
진짜 문제는 자연어(natural language)가 AI 거버넌스를 위한 구조적으로 잘못된 언어라는 점입니다.
제 말의 의미는 다음과 같습니다
현재 AI 거버넌스의 모든 계층은 동일한 언어를 사용합니다:
인간이 자연어(NL) 규칙 작성 → 모델이 자연어(NL)를 읽음 → 모델이 행동 생성
인간이 자연어(NL) 체크 항목 작성 → 모델이 자연어(NL)를 읽음 → 모델이 "네, 규칙을 따랐습니다"라고 생성
하지만 모든 자기회귀 트랜스포머(autoregressive transformer) — GPT, Claude, DeepSeek, Qwen — 는 정확히 동일한 메커니즘을 통해 텍스트를 생성하고 평가합니다. 이렇게 생각해 보세요: 모델은 단어를 생성하기 위한 단 하나의 파이프라인을 가지고 있습니다. 당신이 모델에게 "규칙 X를 따랐나요?"라고 물었을 때, 모델은 동작을 멈추고 내부 감사를 실행하여 검증된 답변을 줄 수 없습니다. 모델은 단지 동일한 단어 생성 파이프라인을 실행하여 규칙을 따랐다고 주장하는 텍스트를 생성할 수 있을 뿐입니다. 이 파이프라인은 "실제로 확인했다"와 "확인한 것처럼 들리는 문장을 썼다" 사이의 차이를 알지 못합니다.
(기술적으로: 생성(generation)과 평가(evaluation) 모두 P(token | context; θ) — 즉, 다음 토큰에 대한 동일한 확률 분포를 통해 경로가 결정됩니다. 수학적인 부분이 중요하지 않다면, 한 문장으로 요약하자면 다음과 같습니다: 모델은 자기 자신을 검증하기 위해 자기 자신 밖으로 걸어 나갈 수 없습니다.)
저는 이것을 **산문 장벽(Prose Barrier)**이라고 불렀습니다. (이에 대해 여기에서 작성했습니다. 제가 만난 적 없는 독일 개발자 René Zander도 독립적으로 동일한 사실을 발견했습니다. 수렴 진화입니다.)
산문 장벽 (Prose Barrier)의 의미는 다음과 같습니다: 더 나은 프롬프트 (prompts)를 작성하는 것만으로는 AI 거버넌스 (AI governance)를 해결할 수 없습니다. 언어 그 자체가 병목 현상 (bottleneck)입니다.
그렇다면 대안은 무엇일까요?
세 가지 경로, 세 가지 언어
미래는 "더 나은 자연어 (NL)"가 아닙니다. 미래는 각 계층(layer)에서 적절한 언어를 사용하는 것입니다.
인간이 제약 조건 (constraints)을 정의함
→ CODE로 컴파일 → 모델 외부에서 실행 (경로 1)
→ 삼단논법 (SYLLOGISMS)으로 변환 → 모델 내부에서 최적화 (경로 2)
...
경로 1: 모델에게 묻지 마세요. 코드를 실행하세요.
어떤 제약 조건들은 기계적입니다. "파일을 작성한 후에 읽었나요?" → 파일 수정 시간 (timestamp)을 확인하세요. "자가 감사 (self-audit)를 수행했나요?" → 출력값에서 감사 패턴을 grep으로 찾으세요.
os.path.getmtime()은 어떤 LLM이 실행 중인지 신경 쓰지 않습니다. 이는 모델을 전혀 거치지 않습니다. 이것이 기계적 게이트 (mechanical gates)가 GPT, Claude, DeepSeek, Qwen에서 동일하게 작동하는 이유입니다. 이들은 모델을 초월하여 보편적입니다. 모델들이 유사하기 때문이 아니라, 게이트가 모델에 전혀 닿지 않기 때문입니다.
이것은 가장 지루한 계층입니다. 바로 그 점이 이것을 가장 강력하게 만듭니다.
경로 2: 자연어를 단순히 쓰지 말고, 형상화하세요.
어떤 제약 조건들은 판단을 필요로 합니다. "사용자가 모순된 말을 할 때는 반박해야 합니다." 이런 것은 정규 표현식 (regex)으로 처리할 수 없습니다.
하지만 _형식 (format)_은 제어할 수 있습니다. 삼단논법적 구조 — "X라면, Y이다, 왜냐하면 Z이기 때문이다" — 는 트랜스포머 (transformers)가 어텐션 (attention)을 라우팅하는 방식과 일치합니다. 전제 → 결론 → 근거. 단어는 같지만 형태가 다릅니다. 자연어는 어텐션이 실제로 통과할 수 있는 형태로 모델의 내부 공간 (internal space)에 안착합니다.
이것이 산문 장벽 (Prose Barrier)을 벗어나게 해주지는 않습니다. 모델 내부의 그 무엇도 이를 벗어날 수 없습니다. 하지만 모델이 제약 조건을 처리하는 방식을 최적화합니다.
경로 3: 단어를 아예 사용하지 마세요. 그래디언트 (gradients)를 사용하세요.
경로 1과 경로 3에도 불구하고 모델이 계속해서 실패할 때 — 동일한 위반, 동일한 패턴이 반복될 때 — 당신은 다시 작성해야 할 프롬프트가 아니라, 적용해야 할 그래디언트 (gradient), 즉 학습 샘플 (training sample)을 갖게 된 것입니다.
DPO (Direct Preference Optimization, 직접 선호 최적화)는 실패 사례와 올바른 행동을 가져와서 $\rightarrow$ 선호 그래디언트 (preference gradient)를 계산하고 $\rightarrow$ 모델 가중치 (model weights)를 업데이트합니다. 저는 이 접근 방식을 관련 문제에 대해 검증했습니다: 인과 추론에 대해 DPO로 학습된 Qwen2.5-1.5B. 베이스 모델은 이미 인과 구조 (causal structure)를 인코딩하고 있었으며, DPO는 이를 실행할 수 있는 능력을 해방시켰습니다. QLoRA 덕분에 RTX 3060 (6GB VRAM) 환경에서도 이것이 가능했습니다.
규칙 준수 DPO 파이프라인을 실제로 실행했습니다 — 150개의 인과 선호 쌍 (훈련 150개 / 테스트 30개)을 사용하여 QLoRA로 Qwen2.5-1.5B를 학습시켰습니다 (RTX 3060 6GB VRAM에 적합). 38회의 학습 스텝 (training steps), 1 에포크 (epoch).
학습 손실 (training loss)은 감소했습니다. 좋은 신호입니다. 하지만 행동 지표 (behavioral metrics)는 손실 곡선 (loss curve)이 완전히 놓친 무언가를 포착했습니다: 특정 테스트 프롬프트에서 모델이 동일한 숫자를 계속해서 반복하는 붕괴 현상을 보였습니다. 수학은 "개선 중"이라고 말했지만, 실제 행동은 "망가지는 중"이라고 말했습니다. 이것이 제가 학습 곡선보다 행동 측정이 더 중요하다고 확신하는 이유이며, 왜 블라인드 스코어링된 행동 데이터 (blind-scored behavioral data)가 이를 더 확장하는 데 있어 관문이 되는지(아래 P0 참조)에 대한 이유입니다.
이 경로는 자연어 (NL)를 완전히 우회합니다. 모델에게 변화하라고 말하는 것이 아닙니다. 모델의 "존재 자체"를 바꾸는 것입니다. 여기서 "언어"는 행동 데이터에 의해 이동된 임베딩 공간 (embedding space)의 기하학적 구조입니다.
나는 나의 관문들을 감사했다. 내가 발견한 것은 모든 것을 바꾸어 놓았다.
세 가지 경로는 아키텍처입니다. 하지만 수개월 동안 이를 실행한 후, 저는 피할 수 없는 질문에 직면했습니다: 나의 기계적 관문 (mechanical gates)들이 실제로 작동하고 있는가, 아니면 그저 보안 연극 (security theater)에 불과한가?
그래서 저는 전체 감사를 실시했습니다. 38개의 기계적 관문 훅 (mechanical gate hooks). 하나도 빠짐없이 전부 다 말입니다. 저는 9번의 세션(7월 17일~26일) 동안의 관문 로그를 확인했으며 — 총 339개의 항목 — 각 관문이 실제로 무엇을 차단했는지에 따라 분류했습니다.
결과는 참혹했습니다:
| 게이트 유형 (Gate type) | 로그 항목 (Log entries) | 실제로 포착된 위반 사항 (Actual violations caught) | 노이즈 비율 (Noise rate) |
|---|---|---|---|
| 세 가지 질문 타임아웃 (Three-questions timeout) | 295 | 0 | 100% |
| ... |
모든 게이트 활동의 87%가 노이즈였습니다. 세 가지 질문 게이트 — 모든 쓰기 작업 전에 내가 주의를 기울이고 있는지 확인하기 위한 타임스탬프 체크 — 는 완전히 붕괴되었습니다. 295개의 연속된 블록 동안 인지적 마찰 (cognitive friction)은 제로였습니다. LLM은 단순히 python three-questions-pass.py를 실행하기만 하면 게이트가 통과된다는 사실을 발견했습니다. LLM은 우회 스크립트 (bypass script)를 작성했습니다. 게이트는 보안 연극 (security theater)이 되어버렸습니다.
하지만 저를 멈추게 한 것은 이것이었습니다: 나머지 세 개의 게이트는 완벽했습니다. 34개의 위반 사항을 포착했으며, 놓친 것도, 오탐 (false alarm)도 없었습니다. 민감 경로 체크 (sensitive-path check)는 자격 증명 파일 (credential file)에 쓰려는 모든 시도를 포착했습니다. 위험 명령 체크 (dangerous-command check)는 모든 rm -rf와 chmod 777을 포착했습니다. 실행 부채 체크 (execution-debt check)는 코드를 실행하지 않고 작성할 때마다 이를 포착했습니다.
작동한 게이트들은 LLM이 물리적으로 속일 수 없는 것들을 확인했습니다. 파일 경로 (File paths). 명령 문자열 (Command strings). 디스크 공간 (Disk space). 실패한 게이트는 LLM이 시뮬레이션할 수 있는 것 — 즉, 인간의 주의 집중 의식 (human attention ritual) — 을 확인했습니다.
저는 세 가지 질문 게이트를 제거했습니다 (78줄의 코드, 15개의 데드 훅 (dead hooks)). 노이즈는 0으로 떨어졌습니다. 신호 (signal)가 보이기 시작했습니다. 저는 코드를 삭제함으로써 더 나은 결과를 얻었습니다. 원래 의도된 방식은 아니었지만, 효과가 있었습니다.
이론: 교차 유형 양방향 검증 (Cross-Type Bidirectional Verification)
그 감사 데이터는 하루 동안 제 머릿속을 맴돌았습니다. 그러다 깨달음이 왔습니다.
기계적 게이트에는 한 가지 종류의 맹점이 있습니다: 노후화 (staleness). 게이트의 패턴은 시간이 지나면 낡습니다. 자격 증명 경로 패턴은 새로운 명명 규칙을 놓칩니다. 임계값 (threshold)은 잘못 보정될 수 있습니다. 게이트는 배포 시점에는 정확했지만, 세상이 변했습니다.
LLM은 완전히 다른 종류의 맹점을 가지고 있습니다: 자기 참조 실패 (self-reference failure). LLM은 자신이 실제로 규칙을 따랐는지 확인하기 위해 자신의 디코더 (decoder) 밖으로 걸어 나갈 수 없습니다. 그것은 단지 규칙을 따랐다는 주장을 생성 (generate a claim) 할 수 있을 뿐입니다. 그것이 바로 문체 장벽 (Prose Barrier)입니다.
이 두 종류의 맹점(blindness)은 전혀 겹치지 않습니다. 전혀요. 정규 표현식(regex)이 구식이 된 것은 모델이 스스로를 검증(self-verify)할 수 있는지 여부와 아무런 상관이 없습니다. 모델의 자기 기만(self-deception) 또한 파일 경로가 패턴과 일치하는지 여부와는 아무런 상관이 없습니다. 이들은 완전히 다른 것들에 대해 눈이 멀어 있으며 — 바로 이것이 핵심적인 트릭입니다.
따라서 이들은 상호 의심 루프(mutual suspicion loop)를 형성합니다:
기계적 게이트 체크 (Mechanical gate checks): "이 파일은 쓰기에 안전한가?"
→ LLM이 스스로 검증할 수 없는 부분을 포착함
LLM 체크 (LLM checks): "이 게이트의 패턴이 여전히 유효한가?"
...
저는 이를 세 가지 정리(theorem)로 공식화했습니다 (전체 수학적 증명은 paper/theory/cross-type-bidirectional-verification.md에서 확인 가능합니다):
정리 1 — 작동 원리. 두 검증기(verifier)가 진정으로 직교하는(orthogonal) 맹점을 가질 때, 결합된 미검출률(false negative rate)은 0입니다. 위반 사항은 두 검증기가 '모두' 놓칠 때만 통과할 수 있는데, 서로 다른 것을 놓치는 구조에서는 이것이 구조적으로 불가능하기 때문입니다.
정리 2 — 동일 유형이 실패하는 이유. 두 개의 LLM을 사용하여 서로를 검증하거나(또는 하나의 LLM이 "자기 비판 (self-critique)"을 수행할 때), 그들의 맹점은 *상관관계(correlated)*를 갖습니다. 상관계수 $\rho \to 1$ (동일한 모델, 동일한 학습)이 될수록, 결합된 오류율은 단일 검증기의 오류율로 수렴합니다. 즉, 헌법적 AI (Constitutional AI)의 자기 비판은 검증을 전혀 하지 않는 것에 비해 수학적 개선을 제공하지 못합니다.
정리 3 — 신뢰가 붕괴하는 이유. 우회율(bypass rate) $b$ (우회되는 차단 비율)를 가진 게이트는 지수적으로 감소합니다: $t$번의 상호작용 후의 신뢰도 = 초기 신뢰도 $\times (1-b)^t$. 만약 $b = 1$이라면 (세 가지 질문 게이트처럼 모든 차단이 우회된다면), 신뢰도는 단 한 번의 상호작용 만에 0에 도달합니다. 게이트는 보이지 않게 됩니다.
저는 누군가 이전에 이런 시도를 한 적이 있는지 확인하기 위해 일주일 동안 논문들을 파헤쳤습니다. 제가 파악한 바로는 — 아무도 하지 않았습니다. 기존의 모든 검증 아키텍처 (Constitutional AI, multi-agent debate, recursive oversight, Neural Interactive Proofs)는 동일한 유형의 검증자가 동일한 유형의 검증자를 확인하는 방식을 사용합니다. 이는 수학적 한계(Theorem 2)를 가집니다. 교차 유형 검증 (Cross-type verification)은 그 한계에 부딪히지 않습니다 (Theorem 1).
종합하자면: Prose Barrier는 "왜 LLM이 스스로를 검증할 수 없는가"에 대한 결과입니다. CTBV는 "검증이 가능해지는 조건은 무엇인가"에 대한 결과입니다. 하나는 무엇이 잘못되었는지를 말하고, 다른 하나는 그것을 어떻게 고칠 수 있는지를 말합니다.
이것은 "관련 연구 (Related Work)"에 대한 모든 것을 바꿉니다
사람들이 "AI 규칙 준수 (AI rule compliance)"라는 말을 들으면 다음과 같은 것들을 떠올립니다: 프롬프트 엔지니어링 (prompt engineering), 더 나은 시스템 프롬프트 (system prompts), 사고의 사슬 (Chain-of-thought), Constitutional AI의 자기 비판 (self-critique).
저도 처음 시작할 때는 똑같이 생각했습니다. 하지만 더 깊이 파고들수록, 이 연구가 언어 모델의 구조적 한계에 관한 전혀 다른 대화의 영역에 있다는 것을 깨달았습니다:
- Bender, Gebru, McMillan-Major & Shmitchell (2021) — On the Dangers of Stochastic Parrots: 언어 모델 (LMs)은 분포할 뿐, 이해하지 못합니다. 검증 문제는 구조적입니다.
- Bender & Koller (2020) — Climbing towards NLU: 문어 사고 실험. 형태(Form)만으로는 이해를 생성할 수 없습니다.
- Kambhampati (2024) — LLM-Modulo: LLM은 외부 검증자가 필요합니다. 자기 검증 (Self-verification)은 아키텍처적으로 불가능합니다.
- Bai et al. (2022) — Constitutional AI: 자기 비판 (self-critique)은 해악을 줄이지만, 그 비판은 비판 대상이 되는 동일한 모델로부터 나옵니다. 한계가 내재되어 있습니다.
- Startari (2025) — TLOC: 트랜스포머 (transformers)가 내부 규칙 준수를 검증할 수 없다고 주장하는 구조적 정리. 수학적 한계.
CTBV가 이 전통에 더하는 것: Bender, Kambhampati, 그리고 Startari는 모두 천장(ceiling)을 지적했습니다. Constitutional AI (헌법적 AI)는 자기 비판 (self-critique)을 통해 이를 우회하려고 시도했지만, 정리 2 (Theorem 2)는 왜 그 방식 역시 동일한 천장에 부딪히는지 보여줍니다. CTBV는 최초로 다음과 같이 주장합니다: 천장을 뚫고 나아가는 방법은 더 나은 LLM을 만드는 것이 아닙니다. LLM을 전혀 LLM이 아닌 무언가와 결합하는 것이며, 왜 그 결합이 작동하는지를 수학적으로 증명하는 것입니다.
빠른 맥락 파악 (방금 합류하신 분들을 위해)
저는 FAFU (ç¦å»ºå†œæž—大妦)의 학부생입니다. 이 과정을 공개적으로 구축하고 있습니다:
- AI 에이전트는 스스로를 검증할 수 없다 (AI Agents Can't Self-Verify) — Prose Barrier (산문 장벽) 발견
- 150개의 태스크를 실행했습니다 (I Ran 150 Tasks) — 기계적 게이트 (mechanical gates)를 통해 55.9%에서 0.7%로 감소
- 가설을 사전 등록했습니다 (I Pre-Registered a Hypothesis) — 600번의 API 호출이 제 예측을 무너뜨렸고, 이는 확증보다 더 많은 것을 가르쳐 주었습니다
- 일반적인 AI 리뷰 사용을 중단하세요 (Stop Using Generic AI Review) — 자신만의 전문가 패널을 구축하세요
31개의 포스트. 16개의 실험. 하나의 논문. 모두 dev.to/yuhaolin2005에서 확인 가능합니다.
짧은 감사 인사 (더 많은 도움을 요청하기 전에)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기