AI 할루시네이션(환각)은 확신에 차 있지만 틀린 답입니다. 지어낸 사실, 존재하지 않는 논문 인용, 라이브러리에 원래 없던 함수 같은 것들입니다. ChatGPT, Claude, Gemini를 포함해 모든 채팅 모델이 할루시네이션을 일으킵니다. 패치로 사라질 버그가 아니라, 언어 모델이 텍스트를 만드는 방식에서 나오는 현상입니다. 프롬프트로 할루시네이션을 드물게 만들 수는 있고, 남은 것을 잡아내는 것은 확인뿐입니다.
언어 모델이 할루시네이션을 일으키는 이유
언어 모델은 토큰을 하나씩 쓰고, 각 토큰은 지금까지의 텍스트 뒤에 올 가능성이 높아서 선택됩니다. 여기서 가능성은 모델이 학습에서 본 모든 것을 기준으로 한 것입니다. 이 과정 어디에도 사실을 찾아보는 단계는 없습니다. 답이 학습 데이터에 흔했다면 가능성 높은 이어짐이 대개 참입니다. 드물었거나, 최근 것이거나, 아예 없었다면 모델은 그래도 가장 그럴듯한 이어짐을 만들어 내고, 모르는 사실에 대한 그럴듯한 텍스트가 바로 할루시네이션입니다.
어떤 종류의 질문은 다른 질문보다 더 취약합니다.
- 구체적인 세부 사항: 정확한 숫자, 날짜, 이름, 버전 번호, 쪽수. 답의 모양은 예측하기 쉽지만 세부 사항은 그렇지 않습니다.
- 인용과 링크. 참고 문헌은 예측 가능한 형식(저자, 연도, 제목, 학술지)을 가지므로, 모델은 쓰인 적 없는 논문에 대해서도 형식이 완벽한 인용을 만들 수 있습니다.
- 드물거나 최근의 주제: 작은 라이브러리, 지역 규정, 모델의 학습 데이터가 끝난 이후의 모든 것.
- 틀린 전제가 있는 질문. 어떤 함수가 무엇을 하는지 물으면, 모델은 그 함수가 존재하는 것처럼 답하는 경향이 있습니다.
매끄러움은 정확성의 신호가 아닙니다. 할루시네이션이 담긴 답도 올바른 답과 똑같이 자신 있는 말투, 똑같은 형식, 똑같은 수준의 세부 사항을 가지므로 놓치기 쉽습니다.
틀린 전제의 함정
아래 탭은 pandas의 DataFrame.smart_merge()에 대해 묻습니다. 이 메서드는 존재하지 않습니다. 첫 번째 질문은 존재한다고 가정하고, 두 번째 질문은 모델이 그렇게 말할 여지를 줍니다.
DataFrame.smart_merge()는 두 DataFrame을 병합하면서 열 이름과 데이터 타입을 비교해 조인 키를 자동으로 찾아 줍니다. user_id와 userId처럼 두 프레임의 키 열 이름이 조금씩 다를 때 자동으로 맞춰 주므로 유용합니다.
키와 조인 방식을 완전히 제어하고 싶다면 여전히 merge()가 더 나은 선택입니다.
첫 번째 답은 진짜 부품으로 만든 할루시네이션입니다. pandas는 실제로 DataFrame을 병합하고, 키를 자동으로 맞춰 주는 기능은 원할 만한 것입니다. 질문이 전제를 제공했고, 모델은 거기에 맞는 그럴듯한 함수를 제공했습니다. 요즘 모델은 예전 모델보다 틀린 전제를 더 자주 알아채지만, 가정으로 표현된 질문은 여전히 답을 동의 쪽으로 밀어붙입니다.
두 번째 프롬프트는 두 가지를 했습니다. 메서드가 무엇을 하는지 묻기 전에 존재하는지부터 물었고, 확실하지 않아도 된다고 명시적으로 허락했습니다. 답변은 확인하는 방법까지 돌려주었는데, 이것이 유지해야 할 습관입니다. hasattr 한 줄이면 실제 라이브러리를 확인할 수 있습니다.
인용과 함께 원자료로 답하기
할루시네이션을 줄이는 가장 강력한 방법은 사실을 프롬프트에 넣는 것입니다. 답이 모델이 볼 수 있는 텍스트에 있으면 무언가를 기억해 낼 필요가 없고, 여러분은 모든 주장을 그 텍스트와 대조할 수 있습니다. 주장마다 뒷받침하는 인용문을 요청하면 확인이 빨라지고, 문서에 없는 내용일 때 무엇이라고 말할지 알려 주면 모델이 빈틈을 추측으로 채울 가능성이 줄어듭니다.
프로덕션 백업 보관 기간: 30일. 문서는 백업 전반에 대해 30일을 제시하고, 7일은 스테이징에만 해당합니다. "백업은 매일 밤 02:00 UTC에 실행되며 30일간 보관됩니다."
직접 복원할 수 있는지: 문서에 없음. 문서는 복원을 어떻게 요청하는지만 말합니다. "복원은 #ops 채널에서 요청하며 보통 4시간 이내에 완료됩니다." 다른 팀이 복원을 수행한다는 뜻으로 보이지만, 직접 복원 기능이 있는지는 문서에 나와 있지 않습니다.
답변이 두 번째 질문을 어떻게 다뤘는지 보세요. 일반 지식으로 답하는 모델이라면 복원 명령어를 설명했을 수도 있습니다. 문서로 제한되자, 모델은 텍스트가 말하는 것과 암시만 하는 것을 구분했습니다. 제약 조건 부분을 끄고 다시 물어서, 답변이 여전히 둘을 구분하는지 확인해 보세요.
<document> 태그는 원자료를 여러분의 지시와 분리합니다. 그것이 왜 중요한지는 구분자와 XML 태그에서 설명하고, 모델에게 올바른 문서를 대규모로 공급하는 방법은 컨텍스트 엔지니어링에서 다룹니다. 웹 검색이나 파일 업로드가 있는 채팅 앱도 같은 원리로 동작합니다. 답은 대화에 있는 출처만큼만 근거가 있으므로, 요약만 읽지 말고 인용된 출처를 읽으세요.
도움이 되는 다른 프롬프트 습관
- 가정하지 말고 물어보세요. "X를 어떻게 해?" 전에 "X를 하는 방법이 있어?"라고 물으세요. 틀린 전제는 가장 쉽게 할루시네이션을 일으킵니다.
- 불확실성을 요청하세요. "확신이 없는 주장은 표시해 줘"라고 하면 먼저 확인할 곳의 목록을 얻습니다. 이 표시가 보정된 확률은 아니지만, 약한 곳을 가리키는 경우가 많습니다.
- 열어 볼 수 있는 출처를 요청하세요. 그리고 실제로 열어 보세요. 열어 보지 않은 출처는 확인된 것이 아니고, 링크가 존재하더라도 그것이 뒷받침한다는 주장과 다른 말을 하고 있을 수 있습니다.
- 대화가 길어지면 새로 시작하세요. 긴 대화의 초반 세부 사항은 대화가 커지면서 뒤섞이거나 빠질 수 있습니다. 중요한 사실이라면 관련 자료를 붙여 넣고 새 대화를 여세요. 이유는 토큰과 컨텍스트 윈도우에서 설명합니다.
- 새 대화에서 한 번 더 물어보세요. 같은 사실 질문에 대한 독립적인 두 답이 다르면 적어도 하나는 틀린 것입니다. 일치하는 것은 더 약한 증거입니다. 모델은 같은 실수를 반복할 수 있기 때문입니다.
중요한 것은 검증하기
어떤 프롬프트도 할루시네이션을 없애지 못하므로, 틀렸을 때의 대가에 따라 무엇을 확인할지 정하세요. 브레인스토밍이나 초안은 오류 몇 개가 있어도 괜찮습니다. 보고서 속 숫자, 법률이나 의료에 관한 주장, 특정 인물의 발언으로 인용된 말, 여러분의 작업에 들어가는 출처는 1차 자료가 필요합니다.
코드는 검증하기 가장 쉬운 출력입니다. 실행하는 것이 곧 테스트이기 때문입니다. 지어낸 메서드는 그것을 호출하는 줄이 실행되는 순간 AttributeError나 그에 해당하는 에러로 실패하므로, 테스트가 그 줄까지 도달하는지 확인하세요. 위험한 경우는 지어낸 패키지 이름입니다. 모델이 들어 본 적 없는 패키지를 설치하라고 하면, 설치하기 전에 그 패키지가 존재하는지, 여러분이 생각하는 그 프로젝트가 맞는지, 널리 쓰이는지 확인하세요. 보안 연구자들은 모델이 같은 가짜 패키지 이름을 반복해서 지어내는 경우가 많고, 그 이름으로 패키지를 배포한 공격자는 그 제안을 따르는 모든 사람의 컴퓨터에 자기 코드를 설치할 수 있다는 것을 보여 주었습니다. AI가 쓴 코드를 확인하는 방법은 코드 작성 프롬프트에서 다룹니다.
자주 묻는 질문
AI 할루시네이션이란 무엇인가요?
AI 할루시네이션은 언어 모델이 자신 있고 매끄럽게 말하지만 틀렸거나 근거 없는 답입니다. 지어낸 사실, 존재하지 않는 논문 인용, 라이브러리에 원래 없던 함수 같은 것들입니다. 모델이 일부러 거짓말하는 것은 아닙니다. 가장 그럴듯해 보이는 텍스트를 만들었을 뿐이고, 그럴듯한 것과 참인 것은 같지 않습니다.
ChatGPT는 왜 없는 말을 지어내나요?
채팅 모델은 학습에서 익힌 패턴을 바탕으로 다음 토큰을 하나씩 예측하며 텍스트를 생성합니다. 웹 검색이나 문서 같은 도구가 대화에 있지 않는 한, 답을 찾아보는 과정은 없습니다. 정답이 학습 데이터에 드물었거나 아예 없었다면 모델은 그래도 가장 그럴듯한 이어짐을 만들어 내고, 그럴듯한 오답은 정답과 똑같이 읽힙니다.
AI의 할루시네이션을 완전히 막을 수 있나요?
아니요. 요즘 모델은 예전 모델보다 할루시네이션이 적고, 여러분이 준 문서나 검색 결과로 답하게 하면 더 줄어들지만, 어떤 프롬프트도 할루시네이션을 없애지는 못합니다. 중요한 사실, 숫자, 인용문, 출처, API는 1차 자료와 대조해야 할 주장으로 다루세요.
AI 할루시네이션을 줄이는 프롬프트는 무엇인가요?
세 가지가 가장 도움이 됩니다. "모르겠다"고 말해도 된다고 명시적으로 허락하세요. 원자료를 주고 그것만으로 답하라고 하세요. 주장마다 뒷받침하는 인용문을 요청해서 텍스트와 대조할 수 있게 하세요. 무언가가 참이라고 가정하는 질문은 피하세요. 모델은 그 가정을 따라가는 경향이 있습니다.
코딩에서 AI 할루시네이션의 예는 무엇인가요?
라이브러리에 없는 메서드 호출, 존재하지 않는 옵션 전달, 아무도 배포하지 않은 패키지 import, 라이브러리의 예전 버전 동작을 현재 동작처럼 설명하기가 있습니다. 코드에서는 이런 것 대부분을 잡기 쉽습니다. 지어낸 메서드는 그것을 호출하는 줄이 실행되는 순간 실패하기 때문입니다. 위험한 것은 지어낸 패키지 이름입니다. 설치하기 전에 그 패키지가 실제로 있고 널리 알려진 것인지 확인하세요.