개념
verified · type: concept · verified: 2026-07 · review: 180d · updated: 2026-08-01 · [concept]

환각(hallucination) — 원인·유형·완화·시스템 설계

모델이 그럴듯하지만 틀린 말을 내놓을 때 왜 그런지, 무엇을 하면 실제로 줄고 무엇은 헛수고인지 찾아볼 때.

전제부터 못박는다. 환각은 완전히 없앨 수 없다. next-token 디코딩은 진실이 아니라 그럴듯함(plausibility)을 최적화하기 때문에, "0% 환각"을 목표로 삼는 설계는 잘못된 목표다. 목표는 제거가 아니라 완화 + 사람 검토 지점 배치 + 교정된 불확실성(calibrated uncertainty) 이다.


왜 생기나 (근본 원인)

  • 디코딩 목표 자체. next-token 학습은 "정확히 불확실성을 전달하는 출력"이 아니라 "그럴듯한 사람 글처럼 보이는 출력"을 보상한다. 이게 1차 원인이다.
  • 구조적 인센티브. 학습·벤치마크가 abstention("모른다")에 페널티를 주고, 불확실성 표현보다 자신 있는 추측을 보상한다. 그래서 모델은 모를 때도 확신 있게 지어낸다.
  • 학습 데이터. 웹스케일 코퍼스의 노이즈·모순·오류를 그대로 흡수한다.
  • 디코딩 랜덤성. temperature·sampling 이 매번 다른 토큰을 뽑는다 — 단, 이건 조연이지 주연이 아니다(아래 "헛수고" 참고).
  • 롱컨텍스트 실패. 컨텍스트가 길수록 needle-in-haystack 실패로 관련 근거를 놓친다. → tokens-and-context-windows
  • RAG 가 새 실패면을 추가. 검색 청크 무시·오독·근거 초과 추론. RAG 는 환각을 줄이지만 공짜가 아니다. → build-a-rag-pipeline

유형 분류

유형 정의
무엇에 어긋나나 factuality(사실성) 세상 사실에 어긋남 튜링 출생 1925 라고 함(실제 1912)
faithfulness(충실성) 주어진 컨텍스트·프롬프트를 왜곡 문서에 없는 결론을 문서 근거라 우김
입력과의 관계 intrinsic 입력과 직접 모순 제공된 표와 반대되는 수치
extrinsic 입력으로 검증 불가한 내용 생성 출처 없는 통계 창작

RAG·요약·문서 QA 같은 grounding 태스크에서 실무상 더 위험한 건 faithfulness 오류다. 근거를 붙여줘도 왜곡하기 때문에, 답이 그럴듯할수록 잡기 어렵다.


완화 기법 — 효과 순

위로 갈수록 효과가 크다. 오류 클래스가 서로 달라서 조합이 단일 기법보다 훨씬 낫다.

순위 기법 무엇을 자르나 비용/함정
1 Grounding (RAG + 근거 제시) extrinsic·factuality. 답을 검색된 정형 지식에 묶는다 검색 품질이 상한을 정함. 나쁜 검색 = 나쁜 근거
2 인용 강제 (span-level verification) faithfulness. 각 주장을 검색 근거와 매칭, 미지원이면 flag 인용을 붙이되 실제 지지 여부는 별도 검증해야 함
3 구조화 출력 (constrained output) 형식 이탈·자유서술 창작. 스키마로 필드 강제 형식만 맞고 값은 여전히 틀릴 수 있음 → structured-output
4 자기검증 (self-verification) reasoning 단계 오류. Chain-of-Verification(CoVe): 검증 질문 생성→자답→최종 확정. self-consistency 지연·비용 증가. 모델이 자기 오류를 못 볼 때도 있음

1순위 grounding 은 "답의 재료를 통제"하고, 나머지는 "재료를 어떻게 쓰는지 통제"한다. 재료가 틀리면 아래 셋이 다 무의미하므로 검색·임베딩 품질에 먼저 투자하라. → embeddings-and-vector-search

targeted finetuning 은 특정 도메인에서 환각률을 크게 낮춘 연구 결과가 있으나(NAACL 2025, 환각률 약 90~96% 감소·품질 유지 [MED], 재확인 필요), 대부분의 애플리케이션 개발자에겐 grounding·검증 조합이 먼저다.


효과 없거나 착각인 완화책

  • temperature 낮추기. 디코딩 랜덤성만 줄일 뿐, factuality 오류를 못 잡는다. temperature 0 이어도 그럴듯한 거짓을 결정론적으로 반복한다. 게다가 Claude Opus 4.7/4.8/5·Fable 5 는 temperature 자체가 400 에러다(verified 2026-07) — 애초에 못 돌린다. → anti-patterns
  • "환각하지 마 / 사실만 말해" 지시. 모델은 자기가 언제 환각하는지 모른다. 이 지시는 톤만 자신감 있게 만들 뿐 실제 사실성을 올리지 않는다. 오히려 hedging 을 줄여 더 위험할 수 있다.
  • 더 큰 모델로 바꾸기. 빈도는 줄지만 구조적 원인이 그대로라 남는다. grounding 없는 "큰 모델"은 여전히 확신 있게 틀린다.

측정 / 모니터링

방법 외부자원 쓰는 곳
SelfCheckGPT 불필요(zero-resource, black-box) 같은 프롬프트 여러 번 샘플링 → 응답 간 불일치로 환각 의심. 아는 주제면 일관된 사실을 냄
span verification 검색 근거 주장별로 근거 매칭, 미지원 span 카운트
후보 리랭킹 경량 factuality 지표 여러 후보 중 사실성 높은 것 선택
내부 프로브 모델 활성값 접근 CLAP(활성값 분류기), MetaQA(프롬프트 변형). self-host 모델에서만 [MED]

핵심 태도 전환: "환각 제로" 추구를 버리고 calibrated uncertainty + 투명한 신뢰도 신호로 간다. 모델이 "확실치 않음"을 표시하게 만들고, 그 신호로 사람 검토를 라우팅하는 편이 현실적이다.


"없앨 수 없다" 전제의 시스템 설계

완화로 빈도를 낮춘 뒤, 남는 환각을 사람 검토 지점으로 받아낸다. 되돌릴 수 없거나 비용 큰 출력일수록 검토를 앞에 둔다.

출력의 성격 검토 지점
되돌릴 수 없음 (자금 이체, 계약 문구, DB 삭제) 실행 전 사람 승인 게이트 필수
사실 주장 (수치·인용·법령) 인용 강제 + span 미지원이면 자동 flag → 사람 확인
탐색·초안 (브레인스토밍, 코드 초안) 사후 검토로 충분, 게이트 불필요
저위험 대량 (분류·태깅) 샘플링 모니터링 + 드리프트 알림

에이전트 루프에선 되돌릴 수 없는 툴(결제·삭제·전송) 앞에 확인 지점을 강제로 끼운다. → agent-design-patterns

언제 무엇을 쓰나

상황 우선 수단
회사 문서·KB 기반 답변 grounding(RAG) + 인용 강제
출력이 다운스트림 시스템에 그대로 들어감 구조화 출력 + 스키마 검증
수치·사실 정확도가 핵심 span verification + 사람 검토 게이트
되돌릴 수 없는 액션 사람 승인 게이트(완화 기법과 무관하게 항상)
temperature 로 "안정화"하고 싶음 하지 마라 — 근본 원인이 아니고 Claude 는 400

함정 (gotcha)

  • 인용이 있다고 사실인 게 아니다. 모델은 그럴듯한 인용을 지어내거나, 진짜 근거에 없는 주장을 그 근거에 매달 수 있다. 인용은 검증의 시작이지 끝이 아니다.
  • 자기검증의 순환. 환각한 모델에게 "맞는지 검토해줘" 하면 자기 답을 옹호할 수 있다. 검증은 다른 근거(검색)나 다른 관점(변형 프롬프트)으로 해야 한다.
  • 구조화 출력의 착시. 스키마를 통과했다고 값이 맞는 건 아니다. 형식 강제와 사실성은 별개다.
  • RAG 도입이 환각을 늘릴 수 있다. 검색이 무관한 청크를 물어오면 모델이 그걸 근거로 새 거짓을 만든다. 검색 품질 먼저.
  • "큰 모델이니 괜찮겠지" 로 검토 게이트를 빼는 것. 빈도만 줄었지 0 이 아니다.

참고

출처: 원인·유형·완화·측정은 리서치 요약 기반 [MED], span·프로브·finetuning 수치는 재확인 필요. Claude temperature 400 은 first-party [HIGH]. 원본 → 2026-07-25-concepts-retrieval-quality