법률 RAG는 여전히 환각한다. 검증을 출구가 아니라 인계 지점에서 주장 단위로 하지 않으면, 그 부담은 가장 감당하기 어려운 사람에게 넘어간다.
초록 이번 주 공개된 세 편의 연구는 한 줄로 이어진다. 첫째, 여덟 개 법률 RAG 시스템을 두 개 법령 코퍼스에서 측정한 결과 환각은 여전히 만연하며 최고 시스템도 응답의 10% 미만, 최악은 절반에 가깝다. 둘째, 검증을 파이프라인 출구가 아니라 초안과 적대적 검토의 인계 지점에서 주장 단위로 수행하고 근거가 부족하면 기각하는 구조가 충실도를 실제로 끌어올린다. 셋째, 그 검증을 시스템이 하지 않으면 이용자가 형식과 정서적 안심만으로 행동한다. 이 칼럼은 세 결과를 법마디의 fail-closed 인용 게이트 설계에 대입해, 우리가 이미 지키는 것과 아직 지키지 못하는 것을 가른다.
법률 답변의 환각을 논할 때 우리는 흔히 '모델이 좋아지면 줄어든다'고 가정한다. 2026년 8월 14일 공개된 「How Much Do Legal RAG Systems Still Hallucinate?」는 그 가정을 정면으로 흔든다. 저자들은 여덟 개 법률 RAG 시스템을 GDPR(영어)과 한 국가의 민법(프랑스어) 두 코퍼스에서 주장 단위와 답변 단위로 각각 평가하고, 환각의 밀도와 심각도를 질문 범주·사용자 페르소나별로 분해한 뒤 법률 전문가가 직접 작성한 142개 문항으로 독립 검증했다. 결과는 최고 성능 시스템이 응답의 10% 미만, 최악의 경우 절반에 가까운 범위다. 검색을 붙였다는 사실 자체가 근거 없는 답을 막지 못한다는 뜻이다. 그렇다면 질문은 '모델을 무엇으로 바꿀까'가 아니라 '검증을 어디에서, 무엇 단위로 할까'로 옮겨가야 한다.
답변 전체를 하나의 산출물로 채점하는 대신, 답변을 더 이상 쪼갤 수 없는 개별 주장으로 분해해 각 주장마다 근거 연결을 따로 확인하는 방식이다. 답변 단위 평가는 여러 주장이 섞인 문서를 평균으로 뭉개므로, 한 문장만 근거가 없는 답변과 전부 근거가 없는 답변을 같은 점수로 보고할 수 있다.
질문 자체에 사실과 다른 가정이 들어 있어, 올바른 응답이 답을 제시하는 것이 아니라 그 가정을 거부하는 것이어야 하는 질문이다. 위 연구는 전문가가 작성한 문항에서 이 유형이 특히 높은 환각률을 유발했다고 보고한다.
근거가 부족할 때 답을 만들어내지 않고 '이 질문에는 답하지 않는다'를 산출로 내보내는 동작이다. 정확도 지표에는 기여하지 않지만, 근거 없는 답을 내보내지 않는다는 점에서 법률 도메인의 유일한 안전한 실패 방식이다.
위 연구가 방법론에서 먼저 한 일은 측정 단위를 둘로 나눈 것이다. 답변 단위 평가는 사용자가 실제로 받는 산출물 수준의 신뢰도를 말해 주지만, 그 답변 안에서 몇 개의 주장이 근거를 잃었는지는 말해 주지 않는다. 주장 단위 평가는 그 반대다. 두 축을 함께 두면 '환각 밀도'와 '심각도'를 분리해 볼 수 있고, 그때 비로소 시스템 간 격차가 드러난다. 실제 보고된 범위는 최고 시스템 10% 미만에서 최악 절반 근접까지다. 이 폭은 같은 기술 스택 안에서도 검증 설계에 따라 결과가 갈린다는 뜻으로 읽어야 한다. 우리 저장소가 반복해 적어 온 문장과 정확히 같은 구조다 — 세는 도구가 그 영역을 볼 수 있는지 먼저 묻지 않으면, '실패 0'은 이상 없음이 아니라 측정하지 않음을 뜻한다. 환각을 단일 불리언으로 집계하는 지표는 그 자체로 개선을 보이지 않게 만든다.
같은 주에 공개된 CLAIR-Fin은 이 문제를 파이프라인 구조로 다룬다. 저자들이 지적하는 기존 방어의 한계는 셋이다. 증거가 서로 어긋나는데도 그대로 신뢰된다는 것, 토론이 개별 주장이 아니라 집계된 보고서를 검증한다는 것, 그리고 그 검증이 초안 작성 이후에만 일어나 에이전트 사이에서 생긴 오류가 최종 텍스트까지 발견되지 않는다는 것이다. 이 프레임워크는 각 질문을 원자적 주장으로 분해해 유형이 붙은 주장 원장에 유지하고, 주장 유형에 따라 증거 신뢰도를 달리 조건화하며, 근거 확인을 파이프라인 출구가 아니라 초안 작성과 적대적 검토의 인계 지점에서 수행한다. 반박 주기의 깊이는 그 토론이 무엇을 찾아내는지에 따라 늘어난다. 마지막으로 종단 함의 감사와 함께 환각 위험 지수를 두어, 검증을 통과한 주장과 한 번도 반박된 적 없는 주장을 구분한다. 마지막 구분이 이 설계의 핵심이다 — 검증되지 않은 것을 검증 통과와 같은 칸에 넣지 않는다.
보고된 수치는 단일 패스 검색증강 기준선 대비 충실도가 0.780에서 0.889로 올랐고, 근거가 부족한 5.4%의 질문에서는 답을 강제로 만들지 않고 기각했다는 것이다. HyDE나 Graph-RAG 같은 더 강한 검색 전략 기준선의 충실도는 0.874 이하로 보고된다. 여기서 읽을 점은 순위가 아니라 기각이 지표와 함께 보고됐다는 사실이다. 기각률을 숨기면 충실도는 항상 좋아 보인다. 답하지 않은 질문은 틀린 답으로 세어지지 않기 때문이다. 반대로 기각률을 함께 내면 두 축의 교환이 드러나고, 그때부터 '얼마나 자주 침묵하는가'가 설계 결정의 대상이 된다. 법률 도메인에서 이 교환은 특히 비대칭이다. 사용자가 잘못된 조문 번호로 행동하면 되돌릴 수 없고, 침묵은 되돌릴 수 있다. 우리 시스템이 미검증 인용 문장을 서빙 직전 제거하고 그 사실을 고지하는 것도 같은 판단이다.
전문가가 작성한 문항에서 거짓 전제 질문이 높은 환각률을 낸 것은 예측 가능한 실패다. 검색증강 파이프라인은 질문을 참으로 가정하고 근거를 찾도록 설계돼 있다. 전제가 틀린 질문에 검색을 걸면 그 전제와 표면적으로 겹치는 문서가 회수되고, 생성 단계는 그 문서를 근거로 전제를 확인해 주는 답을 쓴다. 즉 검색이 전제를 검증하는 것이 아니라 전제를 보강한다. 법률 상담에서 이 유형은 드물지 않다. '그 조항이 폐지됐으니 이제 어떻게 되나요'처럼 폐지 사실 자체가 틀린 질문, 또는 존재하지 않는 절차를 전제한 질문이 그렇다. 조문 존재 검증은 이 축을 보지 못한다 — 인용된 조문이 실재하면 게이트는 통과하고, 틀린 전제는 그대로 답변에 남는다. 우리가 결정론적 법리 게이트를 따로 둔 이유가 여기 있다. 존재 검증과 전제 검증은 다른 축이며, 하나로 다른 하나를 대신할 수 없다.
세 번째 연구는 시스템 밖을 본다. 저자들은 153개의 Reddit 서사와 5,341개의 커뮤니티 반응을 이중 방법으로 분석해 이용자들의 검증 실천 스펙트럼을 그렸다. 한쪽 끝에는 여러 모델을 교차해 삼각측량하거나, 행동에 옮기기 전 커뮤니티에 AI 조언을 제출해 평가받는 소수가 있다. 저자들은 이 구성을 분산된 조언이라 부른다. 그러나 훨씬 흔한 쪽은 검증에 관해 아무 언급이 없는 서사다. 변호사스러운 형식과 정서적 안심만으로 조언이 실행된다. 저자들의 결론은 AI 법률 자기조력이 검증 노동을 그것을 감당할 능력이 가장 적은 사람에게 재분배하는 비공식 인프라 안에서 작동한다는 것이다. 이 문장은 우리 설계 원칙의 외부 근거다. 인용을 검증하지 않고 내보내는 시스템은 검증을 없앤 것이 아니라, 그 일을 사용자에게 청구한 것이다. 그리고 그 청구서는 형식이 그럴듯할수록 더 조용히 지나간다.
긴장 관계 주장 단위 검증과 기각은 근거 없는 답을 막지만, 그 대가로 답변이 짧아지고 침묵이 늘어난다. 인계 지점마다 검증을 걸면 왕복이 늘어 지연과 비용도 함께 커진다. 반대로 출구에서 한 번만 재면 빠르고 답변은 풍성하지만, 중간에 생긴 오류는 최종 텍스트까지 살아남는다.
실무적 해소 우리는 이 교환을 비대칭으로 해소한다. 되돌릴 수 없는 쪽(잘못된 조문·사건번호로 사용자가 행동하는 것)을 항상 더 무겁게 놓고, 되돌릴 수 있는 쪽(답변이 짧아지는 것)을 감수한다. 다만 비용을 줄일 여지는 설계로 만든다. 검증을 전량 재실행하지 않고 이미 검증된 자산에 정확일치하면 망 호출 없이 통과시키고, 부분 완료된 검증 결과를 전부 폐기하지 않고 완료분만 살린다. 그리고 침묵한 횟수를 지표로 함께 낸다 — 기각률을 숨기면 그 교환이 보이지 않고, 보이지 않는 교환은 조정할 수 없다.
법마디의 인용 게이트는 이미 두 가지를 지킨다. 인용을 문장 단위로 분해해 검증하고, 검증되지 않은 문장을 서빙 직전 제거하며 그 사실을 고지한다. 검증 서브시스템이 도달 불가일 때는 통과시키지 않고 차단하되, '없음'과 '확인 불가'를 종료코드로 구분해 조치가 갈리게 한다. 그러나 CLAIR-Fin의 기준으로 보면 아직 두 칸이 비어 있다. 첫째, 우리 검증은 생성 이후 출구에서 일어난다. 생성 전 프리패치와 생성 후 검증 사이의 인계 지점에서 같은 검사를 한 번 더 걸면, 프롬프트에 주입된 근거와 실제 인용된 근거가 어긋나는 경우를 최종 텍스트 이전에 잡을 수 있다. 둘째, 우리 답변 원장은 무엇을 제거했는지는 남기지만 각 주장이 반박을 통과한 것인지 한 번도 검사되지 않은 것인지를 구분하지 않는다. 환각 위험 지수처럼 '검증 통과'와 '미검사'를 별도 칸으로 기록하면, 지금 '실패 0'으로 보고되는 구간 중 실제로는 추출되지 않아 어느 축에도 행을 남기지 않은 인용이 드러난다. 마지막으로 기각률을 공개 지표로 낸다. 우리는 이미 미검증 인용을 제거하지만 그 빈도를 사용자·운영자 어느 쪽에도 정기적으로 보고하지 않는다.
"검증을 시스템이 하지 않으면 그것이 사라지는 것이 아니라, 가장 감당하기 어려운 사람에게 청구된다."