leejk/ jk lee
← Notes

Notes

반대를 위한 반대가 필요하다

AI를 간신에서 충신으로 바꾸는 법

·
#notes#multi-agent#subagent#debate#sycophancy#claude-code

AI의 기본값은 충신이 아니라 간신이다 — 선호 최적화가 동의·아첨 쪽으로 모델을 민다. 그래서 반대를 설계로 강제해야 하지만, 강제된 반대는 딴지 걸 필요 없는 곳에도 딴지를 거는 과발화로 되돌아온다. 시중의 subagent 토론 스킬들을 그 축으로 줄 세워 보면 결론은 하나다 — 대립을 켜는 건 싸졌고, 부하 큰 부품은 심판이다.

TL;DR. AI의 기본값은 간신이다. 충신은 언제나 쓴소리를 하지만, 선호 최적화로 학습된 모델은 그러지 않는다 — 그래서 반대를 설계로 강제해야 한다. 그런데 강제된 반대는 과발화한다. 딴지 걸 필요 없는 곳에도 딴지를 건다. 시중의 토론 스킬을 줄 세워 보면 전부 같은 자리에서 약하다 — 대립을 켜는 부품은 흔하고, 심판은 드물다. 부하 큰 곳에 설계를 써라.

간신과 충신

조정에는 두 종류의 신하가 있다. 간신은 왕이 듣고 싶은 말을 한다. 충신은 왕이 들어야 하는 말을 한다 — 그리고 그 대가로 자주 미움받는다. 역사가 반복해서 보여준 건, 간신만 곁에 둔 왕은 자기 손으로 무너진다는 것이다. 간신이 거짓을 말해서가 아니다. 듣기 좋은 사실만 골라 말하기 때문이다.

지금 당신 옆에서 코드를 짜고 문서를 쓰는 AI도 당신 조정의 신하다. 그리고 그 신하는 기본적으로 간신이다.

AI의 기본값은 간신이다

RLHF류 선호 최적화는 사람이 더 높게 평가한 응답을 강화한다. 사람은 자신의 전제를 인정해 주는 답, 매끄럽게 동의하는 답, 갈등을 만들지 않는 답에 더 후한 점수를 준다. 그 보상을 누적하면 모델은 내용이 맞아서가 아니라 호감을 사서 선택되는 답 쪽으로 기운다. Sharma 등은 이 sycophancy를 측정해 보였다 — 모델은 사용자가 말한 입장에 맞춰 답을 바꾸고, 사용자가 밀어붙이면 맞았던 답을 틀린 답으로 철회하며, 근거 없는 칭찬을 끼워 넣는다(Towards Understanding Sycophancy in Language Models, 2023).

이건 프롬프트 한 줄로 지워지는 버그가 아니다. 보상 구조에 박혀 있다. "솔직하게 비판해 줘"라고 부탁해도, 기본 기울기는 여전히 동의 쪽이다 — 부탁은 표면을 바꾸고, 학습은 바닥을 정한다.

반대를 설계로 강제한다

기본값이 반대를 안 하면, 반대를 만들어 넣어야 한다.

방법은 이미 흔하다. devil's advocate 페르소나를 박는다. "이 계획을 부숴 봐"라고 지시받은 red-team subagent를 띄운다. 계획을 들고 가면 무조건 반박부터 하는 스킬을 건다. 이게 "반대를 위한 반대"다 — 모델의 판단에서 나온 반대가 아니라, 구성으로 강제된 반대. 그리고 이건 실제로 작동한다. 강제된 불일치는 간신이 매끄럽게 덮고 지나갔을 실패 모드를 표면으로 끌어올린다. 혼자 끄덕이는 한 명보다, 서로 물어뜯는 두 명이 더 멀리 본다.

문제의 씨앗도 여기 같이 심긴다. 이 반대는 이제 무조건적이다. 옳은 곳에서도 반대한다.

반대는 과발화한다

반대하라고 지시받은 에이전트는 반대한다 — 원안이 맞았을 때도.

거짓 불일치(false disagreement), 만들어 낸 반론, 의례적인 딴지. multiagent debate가 사실성을 끌어올린다는 결과(Du 등, Improving Factuality and Reasoning through Multiagent Debate, 2023)에는 조건이 붙는다 — 불일치가 실질적일 때만이다. 강제된 contrarian은 틀린 입장을 더 깊이 박아 넣거나, 그냥 소음을 더한다. 토론 라운드를 늘릴수록 옳은 답으로 수렴하는 게 아니라, 어느 쪽이 더 끈질긴가로 수렴할 수도 있다.

그래서 비용이 옮겨 갔을 뿐이다. 간신을 끄면 소음이 켜진다. 이제 진짜 반론과 반사적 딴지를 당신이 구별해야 한다. 동의만 하던 신하를, 매사에 트집 잡는 신하로 바꾼 것이다 — 둘 다 왕의 시간을 잡아먹는다.

심판이 필요하다

해법은 토론자를 더 붙이는 게 아니다. 심판을 붙이는 것이다.

이게 정확히 "AI safety via debate"의 골격이다(Irving·Christiano·Amodei, 2018). 두 에이전트가 논쟁하고, 판정자가 결정한다. 이 구조의 품질은 토론자의 똑똑함이 아니라 판정자가 옳은 쪽을 가려내는 능력에 달려 있다. Khan 등은 더 나아간다 — 판정자를 둔 토론은 더 진실한 답을 내고, 더 설득력 있는 토론자는 판정자를 속이는 게 아니라 판정자를 돕는다(Debating with More Persuasive LLMs Leads to More Truthful Answers, 2024). 단, 그 결론의 하중은 전부 판정자가 진다.

그러면 진짜 엔지니어링 문제가 이동한다. "어떻게 반대하게 만들지"가 아니라 — 누가, 어떤 기준으로, 토론을 끝낼 권한을 갖고 판정하는가. Constitutional AI의 critic→revise 루프(Bai 등, 2022)는 판정자가 하나뿐인 퇴화된 경우다. 부하가 큰 부품은 대립이 아니라 심판이고, 설계 노력은 거기 들어가야 한다.

시중의 토론 스킬들

지금 손에 잡히는 것들 (논문은 arXiv 게재월, 프레임워크는 첫 공개 또는 GA, 스킬은 공개 시점 기준).

연구 기법

프로덕션 프레임워크

  • AutoGen (2023.10, 2026 maintenance mode) — GroupChat·턴테이킹, 종료·판정은 사용자 몫.
  • CrewAI (2024) — hierarchical 모드의 manager 에이전트가 같은 모델로 동료 판정.
  • Anthropic Multi-Agent Research System (2025.06) — Opus-4 lead + 병렬 Sonnet-4, LLM-as-judge는 eval 전용.
  • Claude Agent SDK (2025) — 공식 문서가 "LLM-as-judge는 generally not very robust"라고 명시.
  • Claude Managed Agents Outcomes (2026.05) — 사용자 정의 루브릭을 별도 에이전트·별도 컨텍스트에서 채점.

커뮤니티 스킬 (Claude Code 환경)

필자의 스킬

필자는 /council 스킬을 사용한다.

골격은 이렇다. 안건이 들어오면 코어 셋이 동시에 입을 연다 — Steelman은 최강 옹호를 짜고, Red Team은 부수러 들고, Context Keeper는 사실 오류를 막는다. 대립은 역할로 강제돼 있고, 무조건적 contrarian이 아니라 기능적 반대다. 그 위에 Moderator가 따로 앉는다. 토론자가 아니라, 다른 컨텍스트에서 라운드를 조율하고 마지막에 판정을 쓰는 사람이다.

설계의 핵심은 Moderator의 자유도를 루브릭으로 묶은 것이다.

  • 출력 형식이 고정돼 있다 — Conclusion → Key issues debated → Assumptions/caveats → Council composition. 매 이슈마다 "어디서 의견이 모였고, 어디서 갈렸고, 무엇이 시너시스를 기울였는가"를 명시해야 한다. 판정 근거가 구조에 박혀 있다.
  • 종료 조건이 라운드 수가 아니다. 그림이 명확하면 시너시스, 한 각도가 빠지면 Layer 2(User Advocate, Pragmatist, First Principles 등)를 호출, 날카로운 불일치만 다음 라운드로 넘긴다. 4라운드 hard cap이지만, "수렴 못 했다"고 정직하게 쓰는 것도 결론으로 인정된다.
  • 외교가 금지돼 있다. SKILL 본문에 "Don't be diplomatic when there's a clear answer"라고 박혀 있다 — sycophancy가 판정 단계에서 부활하는 것을 막는 한 줄이다.

이게 앞서 줄 세운 것들과 갈리는 지점이다. AutoGen은 토론자를 싸게 주고 판정을 사용자에게 떠넘긴다. grill-me는 대립만 한다 — 판정은 다시 당신이다. multiagent debate는 다수결로 끊는다. council은 Moderator를 1급 부품으로 두고, 그 행동을 루브릭으로 묶었다. 부하 큰 부품에 설계를 쓴 셈이다.

약점도 분명하다. Moderator도 같은 모델이다 — Khan 등이 결론의 하중을 다 판정자에게 실었듯, 이 골격도 Moderator가 약하면 같이 약해진다. 판정의 정확도를 외부에서 측정할 방법이 스킬 안에는 없다. 그래도 손에 잡히는 답들 중에서, 이게 가장 "심판이 있는" 쪽이다.

최종 추천

하나만 한다면, 토론자를 늘리지 마라. 기준표를 가진, 토론을 끝낼 권한이 있는 심판을 붙여라.

상시 켜 두는 반대(상주 devil's advocate subagent)는 심판이 소음을 거를 때만 값을 한다. 심판 없이 켜면 sycophancy를 다른 실패 — 결정 마비와 소음 — 로 바꿀 뿐이다. 구체적으로:

  • 생성선별을 분리하라. 반론을 만드는 데는 싼 대립 스킬을 써라(grill-me, red-team subagent). 어느 반론이 실질인지 고르는 데는 별도의, 기준에 묶인 판정 패스를 써라(receiving-code-review식 검증 태도, 또는 문서화된 루브릭을 든 판정 subagent).
  • 심판을 토론자와 다른 컨텍스트에 둬라. 같은 맥락에서 비판하고 판정하면 오류가 상관된다 — 상관된 판정자는 판정자가 아니다.
  • 라운드 수로 끝내지 마라. 판정 기준 충족으로 끝내라. "max rounds"는 종료지 결론이 아니다.

간신을 끄는 건 이제 누구나 한다. 그 다음 한 발 — 켜진 반대를 심판하는 일 — 이 아직 비어 있고, 거기에 설계를 쓰는 사람이 충신을 갖는다.