메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

AI 할루시네이션 극복 방법 ① - ‘지시’ 대신 ‘예시’로 말해라

 

할루시네이션은 버그가 아니라 LLM의 가장 큰 특징입니다. 

LLM 어시스턴트는 할루시네이션 문제가 있으므로 우리가 고쳐야 할 것입니다. 

_안드레 카파시

 

컴퓨터 과학자인 안드레 카파시의 이 말은 AI (LLM)가 가진 할루시네이션에 대한 본질을 잘 보여준다. 거짓된 정보를 그럴듯하게 제공하는 할루시네이션 현상은 LLM의 구조에서부터 발현되는 창의성을 드러내는 특징이다. 이는 모델의 설계와 작동 원리를 깊이 이해할 때 비로소 적절히 다룰 수 있다.

 

 

단순 프롬프트의 한계 

 

LLM은 단순하게 질문해도 깊이 있는 답변을 제공해주긴 하지만, 정교한 프롬프팅 기법을 적용하면 할루시네이션을 억제할 뿐만 아니라 특정한 주제에 대해 더욱 정확한 답변을 얻을 수 있다. 마치 숙련된 장인이 도구의 미묘한 특징마저 파악해 최고의 걸작을 만들어내는 것과 같이 프롬프트 엔지니어링은 LLM의 잠재력을 최대한 끌어내는 기술이다.

 

“이 코드 오류를 수정해줘.”

“이 파일을 바탕으로 보고서를 정리해줘.”

 

이런 단순한 질문으로도 기대했던 답변이 나올 때도 있고 그렇지 못할 때도 있을 것이다. AI가 알아서 ‘내가 원하는’ 수준과 유형의 답변을 찰떡같이 알아주면 좋겠지만 AI는 패턴 지향적이기 때문에 가장 보편적이고 그럴 듯한 답변을 골라낼 뿐이다. 

 

그래서 정교한 답변을 얻기 위해선 좀 더 명확한 지시, 즉 원하는 ‘답변 예시’를 AI에게 먼저 제시해주는 것이 좋다. 프롬프트를 작성하기 전에, 먼저 일상 속 대화에서 예시의 중요성부터 이해해보자. 어떤 팀장과 팀원의 대화다.

 

아라: 지우님, 오늘부터 고객 문의 메일 분류 작업을 좀 도와주세요. 

내용은 간단해요. 메일 읽어보고 ‘긴급’, ‘일반’, ‘스팸’ 세 가지로 나눠서 폴더에 정리해주면 됩니다.

 

지우: 네, 알겠습니다. 팀장님. 

그런데... 어떤 기준으로 ‘긴급’으로 분류해야 할까요?

혹시 이전에 분류하셨던 메일 몇 개만 보여주실 수 있을까요?

 

아라: 아, 그렇군요. 잠시만요. 

(이전 메일 몇 개를 보여주며) 자, 여기 보세요.

이렇게 계약 관련 문의나 즉각적인 답변이 필요한 기술 지원 요청은 ‘긴급’으로 분류했어요.

그리고 이런 광고성 메일은 ‘스팸’으로, 나머지는 대부분 ‘일반’으로 처리하면 됩니다.

 

지우: 아하! 이제 훨씬 명확하네요. 

예시를 보니 어떤 기준으로 분류해야 할지 감이 잡힙니다. 감사합니다!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이 둘의 대화에서 알 수 있듯 아무리 명확히 설명하려 해도 처음 접하는 작업은 예시 없이는 모호하게 느껴질 수 있다. 하지만 단 몇 개의 구체적인 예시(Shot)만으로도 작업의 기준과 방식을 훨씬 쉽게 파악할 수 있게 된다. LLM과의 상호작용에서도 이와 유사한 접근 방식이 적용된다.

 

제로샷(Zero-Shot)과 퓨샷(Few-Shot) 프롬프팅은 모델에게 작업을 지시할 때 예시를 전혀 보여주지 않거나 (아라 팀장이 지우 팀원에게 처음 지시했을 때처럼) 몇 개만 보여주는 (아라 팀장이 예시 메일을 보여준 것처럼) 전략이다.

 

① 제로샷 프롬프팅모델에게 어떠한 예시도 제공하지 않고 오직 설명만으로 원하는 결과를 요청하는 방식이다. 예를 들어 “다음 문장의 감정을 분석해줘: ‘오늘 날씨가 정말 좋아서 기분이 상쾌하다.’”와 같이 직접적인 지시만으로 작업을 수행하게 한다. 이는 모델이 사전 학습 과정에서 습득한 방대한 지식과 언어 이해 능력을 기반으로 작동한다.

 

② 퓨샷 프롬프팅모델에게 작업 수행 방법을 이해시키기 위해 몇 개의 예시를 프롬프트에 포함하는 방식이다. 예를 들어 긍정/부정 감성 분석 작업을 수행하기 위해 다음과 같이 예시를 제공할 수 있다.

 

다음은 문장의 감정을 분석하는 작업입니다.

 

문장: 이 영화는 정말 지루했다.

감정: 부정

 

문장: 배우들의 연기가 인상 깊었다.

감정: 긍정

 

문장: 오늘 하루는 완벽했다.

감정:

 

모델은 제공된 예시를 통해 작업 패턴과 요구사항을 학습하고 마지막 예시에 대한 답변(긍정)을 생성하게 된다.

 

 

퓨샷 프롬프팅 - 좋은 예시와 나쁜 예시 

 

퓨샷 프롬프팅의 성공은 전적으로 ‘어떤 예시를 보여주는가’에 달려있다고 해도 과언이 아니다. 마치 학생에게 잘못된 예시 문제만 계속 보여주면 오히려 개념을 혼동하게 되는 것처럼 부적절한 예시는 LLM의 성능을 향상시키기는 커녕 오히려 저해할 수 있다. 따라서 효과적인 퓨샷 프롬프팅을 위해서는 신중하게 예시를 선택하고 구성하는 과정이 필수적이다. 

 

좋은 예시는 다음 세 가지 원칙을 따르는 것이 좋다.

 

① 작업 관련성 및 명확성

예시는 당연하게도 수행하고자 하는 작업과 직접적으로 관련이 있어야 하며, 입력과 출력의 관계가 명확해야 한다. 모호하거나 작업과 동떨어진 예시는 모델에게 혼란만 가중시킨다.

 

② 다양성 및 대표성

예시는 가능한 다양한 경우의 수를 보여주는 것이 좋다. 특정 패턴이나 유형에만 치우친 예시는 모델이 해당 패턴에 과적합(Overfitting)되어 새로운 유형의 입력에 제대로 대응하지 못하게 만들 수 있다. 예를 들어 감성 분석 예시를 만드는 데 긍정적인 예시만 계속 보여주면, 모델은 부정적인 문장이 들어왔을 때 제대로 판단하지 못할 수 있다.

 

③ 형식 일관성

예시들의 입력과 출력 형식을 일관되게 유지하는 것이 중요하다. 형식이 들쑥날쑥하면 모델이 예시로부터 일관된 패턴을 학습하기 어렵다. 다음은 고객 피드백을 ‘버그 리포트’, ‘기능 제안’, ‘단순 문의’로 분류하는 작업을 위한 퓨샷 예시를 비교한 것이다.

 

1) 퓨샷 프롬프팅의 나쁜 예시

피드백: 앱 실행 시 자꾸 튕깁니다. → 버그 리포트

피드백: 로그인 오류가 계속 발생해요. 어떻게 해야 하나요? = 버그 리포트

내용: 글씨 크기 조절 기능이 있었으면 좋겠어요. 분류: 기능 제안

 

이 프롬프팅의 문제점은 처음 두 예시가 모두 ‘버그 리포트’에 편중되어 있으며(다양성 부족), 세 번째 예시는 앞선 두 예시와 입력(‘피드백:’, ‘내용:’)과 출력(‘→’, ‘=’, ‘분류:’) 형식이 다르다는 점이다.

 

2) 퓨샷 프롬프팅의 좋은 예시

[피드백 시작]

앱 실행 시 자꾸 튕깁니다. 빠른 수정 부탁드립니다.

[피드백 끝]

분류: 버그 리포트

 

[피드백 시작]

사진 편집 기능에 스티커 추가 옵션이 있으면 더 좋을 것 같아요!

[피드백 끝]

분류: 기능 제안

 

[피드백 시작]

비밀번호를 잊어버렸는데 어떻게 찾을 수 있나요?

[피드백 끝]

분류: 단순 문의

 

개선된 프롬프팅을 보면 세 가지 분류(‘버그 리포트‘, ‘기능 제안‘, ‘단순 문의‘)를 골고루 포함하고 있으며, 입력과 출력 형식이 ‘[피드백 시작]...[피드백 끝] 분류: ...’ 로 일관된 형식을 가지고 있다. 또한 각 피드백 내용이 해당 분류와 명확하게 연결된다.

 

결론적으로 퓨샷 프롬프팅에서 예시를 선택하는 것은 단순히 몇 줄의 텍스트를 추가하는 것이 아니라, 모델에게 작업을 가르치는 미니 훈련 세트를 설계하는 과정과 같다. 신중하게 선택된 양질의 예시는 LLM의 성능을 극대화하는 가장 효과적인 방법 중 하나이다.

 

이 외에도 LLM의 성능을 개선하는 다양한 프롬프트 엔지니어링 기법은 『할루시네이션을 줄여주는 프롬프트 엔지니어링』에서 자세히 볼 수 있다. 10년 차 MLOps 엔지니어이자 GDG, GDE로 오랜 기간 활동해온 한성민 저자가 안내하는 최신 프롬프팅 기법과 RAG, 리플렉션, 멀티 에이전트 등의 개발 기술을 풍부한 코드 예제와 함께 익힐 수 있다. 


*위 콘텐츠는 『할루시네이션을 줄여주는 프롬프트 엔지니어링』내용을 기반으로 작성하였습니다.

댓글

댓글 입력