마이외틱 프롬프팅 (Maieutic prompting): 신뢰해야만 하는 사슬이 아닌, 감사하고 가지치기할 수 있는 트리로서의 추론 — 투표가
요약
단일 사고 사슬(CoT)이나 단순 투표 방식의 한계를 극복하기 위해, 명제를 참과 거짓 양방향으로 설명하게 하여 논리적 무결성을 검증하는 '마이외틱 프롬프팅' 기법을 제안합니다. 이 방식은 설명을 트리 구조로 확장하고 논리적 모순을 식별하여 모델의 추론 신뢰도를 높입니다.
핵심 포인트
- CoT의 단일 오류 전파 및 투표 방식의 공유된 편향 문제 해결
- 소크라테스식 산파법을 응용한 양방향 설명 트리 구축
- 논리적 무결성(Integrity)을 통한 사실과 과잉 일반화 구분
- MAX-SAT 해결 방식을 통한 논리적 제약 조건 및 모순 최적화
모델에게 "고래는 물고기인가요?"와 같이 기만적일 정도로 단순한 질문을 던지면, 단일한 사고의 사슬 (Chain-of-thought)은 직관적이지만 틀린 답변으로 빠질 수 있습니다. 즉, "물속에 살고 헤엄을 치니까 물고기다"라는 식입니다. 사고의 사슬 (Chain-of-thought)은 자체 점검 기능이 없기에, 한 번의 잘못된 단계가 그대로 이어집니다. 자기 일관성 (Self-consistency)은 여러 사슬을 샘플링하여 투표를 진행하는데, 이는 무작위적인 실수는 바로잡을 수 있지만 공유된 잘못된 직관은 바로잡지 못합니다. 투표는 합의를 측정할 뿐, 진실을 측정하는 것이 아니기 때문입니다. 저는 이 두 가지 방식을 모두 능가하는 세 번째 옵션의 대화형 데모를 구축했습니다. 여기서 트리(tree)와 가지치기(pruning)는 정해진 애니메이션이 아닌 실제 JavaScript로 구현되었습니다. 그 아이디어는 다음과 같습니다.
두 가지 방식으로 설명한 후, 트리로 재귀 호출하기
마이외틱 프롬프팅 (Maieutic prompting, 그리스어의 소크라테스식 "산파"법에서 유래)은 "정답이 무엇인가?"라고 묻지 않습니다. 대신 모델에게 해당 명제를 참인 경우와 거짓인 경우로 각각 _설명_하도록 요청합니다. 설명을 통해 결론이 근거하고 있는 _전제 (premises)_가 드러나게 됩니다. 그다음 재귀적인 단계로, 각 전제를 새로운 명제로 취급하여 정해진 깊이까지 양방향으로 그것 또한 설명하도록 합니다. 이렇게 하면 얻게 되는 것은 단순한 사슬이 아니라, 단순하고 확인 가능한 주장들로 끝을 맺는 설명의 트리 (tree of explanations)입니다.
async function grow(prop, depth) {
const node = { prop, children: [] };
if (depth === 0) return node; // 최대 깊이에서 중단
...
논리적 무결성 (Logical integrity)이 핵심 필터입니다
모든 노드에 대해, 모델에게 그것을 참인 경우와 거짓인 경우 모두로 방어하도록 요청합니다. 만약 모델이 한쪽 측면을 확고하게 유지하며 다른 쪽을 정직하게 논증하지 못한다면 — 즉, 말을 흐리거나, 거부하거나, 스스로 모순된다면 — 해당 노드는 논리적으로 무결한 (logically integral) 상태이며, 거의 확정된 사실처럼 취급할 수 있는 신뢰할 수 있는 닻이 됩니다. 만약 양쪽 모두를 즐겁게 논증한다면, 그것은 불확실하며 낮은 가중치를 받게 됩니다. "고래는 포유류이다"는 한 가지 방식으로만 방어되지만, "물에 사는 것은 무엇이든 물고기이다"는 압박을 받으면 뒤집힙니다. 무결성 (Integrity)은 이 방법론이 실제 사실과 모델의 부주의한 과잉 일반화를 구분해내는 방식입니다.
일관성 그래프를 구축한 후, MAX-SAT 해결하기
다음으로, 명제 쌍들이 일관적인지(consistent) 아니면 모순되는지(contradictory)를 묻습니다. 모순은 에지(edge)가 되며, 이제 트리는 논리적 제약 조건(logical constraints)의 그래프가 됩니다. 즉, 노드는 무결성(integrity)에 의해 가중치가 부여되고, 에지는 불일치를 표시합니다. 고래 트리(whale tree)에는 명확한 모순이 하나 있습니다. 불안정한 "물속에 있는 것은 무엇이든 물고기다"라는 명제는 무결한 명제 쌍인 "고래는 포유류다" + "포유류는 물고기가 아니다"와 직접적으로 모순됩니다. 두 가지 모두 참일 수는 없습니다. 이 충돌이야말로 단일 사슬(single chain)이나 투표(vote) 방식으로는 결코 만들어낼 수 없는 신호입니다.
이를 해결하는 방법은 가중치 만족도 문제(weighted satisfiability)입니다. 각 노드는 변수이며, 무결한(integral) 노드는 거의 경직된 제약 조건(near-hard constraints, 높은 가중치)이고, 불안정한(shaky) 노드는 완화된 제약 조건(soft constraints)입니다. 각 모순에 대해, 더 많은 무결성 가중치(integrity weight)를 지지하는 쪽이 승리하며, 패배한 쪽과 그 위에 구축된 서브트리(subtree)는 가지치기(pruned)됩니다.
function resolve(nodes, edges) {
const weight = n => n.integral ? 100 : 5; // 무결성 = 제약 조건 가중치
for (const e of edges.filter(e => e.type === "contradict")) {
...
가지치기가 국소적이지 않은 이유
전제를 잃는 것은 국소적인 수정(local edit)이 아닙니다. 그 전제 위에 구축된 설명 또한 함께 붕괴합니다. "물속에 있는 것은 무엇이든 물고기다"가 가지치기되면, 그 전제에 의존했던 "참(TRUE)이라고 주장하는" 분기 전체가 붉게 변합니다. 왜냐하면 그 결론은 더 이상 지탱할 근거를 잃기 때문입니다. 해당 분기에 포함된 참인 무결한 사실("고래는 물속에 산다")조차도, 거짓인 가교(bridge)가 사라지면 더 이상 "물고기"를 함의하지 않게 됩니다. 남는 것은 논리적으로 일관된 서브트리이며, 살아남은 모든 노드는 서로 호환됩니다.
살아남은 노드들은 모두 한 방향을 가리킵니다. 그것이 정답이며, 그들은 정답의 근거(rationale)가 됩니다. 즉, 블랙박스 판결이 아닌 감사 가능한 흔적(auditable trail)이 되는 것입니다. 데모는 실제 트리(루트 + 두 개의 설명 + 다섯 개의 전제)를 성장시키고, 모순 순회(contradiction traversal)를 실행하며, 무결한 사실들을 불안정한 전제와 대조하여 가중치를 부여한 뒤, 남은 결과로부터 "물고기가 아니라 포유류다"라는 결론을 읽어냅니다.
문제는 비용입니다. Maieutic은 호출 횟수를 배가시킵니다. 양방향 설명(explain both ways) × 재귀(recurse) × 무결성 조사(integrity probes)를 수행하기 때문에, 단순 정보 검색(lookups)이나 개방형 생성(open-ended generation)에는 적합하지 않습니다. 정확성과 방어 가능한 근거가 비용을 지불할 가치가 있는 어려운 참/거짓(true/false), 상식, 그리고 논리적 질문에 이 방식을 사용하십시오. 즉, 모델이 말단 노드(leaves)에서는 신뢰할 수 없을지라도 그 논리는 여전히 검증 가능한 경우에 사용해야 합니다.
트리를 키우고 실시간으로 가지치기하세요:
https://dev48v.infy.uk/prompt/day42-maieutic.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기