# 5.3 오류 유도 및 방지 예시

언어 모델(LLM)은 매우 유능하지만, 인간의 추론 능력을 완전히 대체하는 존재는 아닙니다. 따라서 주어진 프롬프트에 따라 부정확하거나 잘못된 정보를 생성할 수 있으며, 이를 "hallucination(환각)" 현상이라고도 부릅니다. LLM이 오류를 유발하는 구조적 원인을 이해하고, 이를 방지하기 위해 적절한 프롬프트 문법과 전략을 적용하는 것이 매우 중요합니다. 이 절에서는 다음 내용을 중심으로 설명합니다:

* 자주 발생하는 오류 유형과 그 원인
* 오류를 유도하는 나쁜 프롬프트 예시
* 개선된 프롬프트로 오류를 방지하는 방법
* 프롬프트 기반 디버깅을 위한 팁

## 5.3.1 LLM 오류의 주요 유형

LLM에서 발생하는 오류는 다음과 같은 패턴으로 요약할 수 있습니다:

| 유형                       | 설명                               | 예시                                                  |
| ------------------------ | -------------------------------- | --------------------------------------------------- |
| Hallucination            | 잘못된 사실을 날조하거나 존재하지 않는 정보를 생성     | "2023년 노벨 평화상 수상자는 누구인가요?" → LLM이 실존하지 않는 인물로 응답    |
| Fabrication of Structure | 예상과 다른 형식 또는 구조로 열거하거나 요약        | 테이블로 작성하라는 요청에 문단으로 응답                              |
| Misinterpretation        | 질문 또는 요청을 잘못 이해                  | "5개로 요약해 줘" 요청을 무시하고 10개 항목 제공                      |
| Overconfidence           | 정보의 불확실성을 명시하지 않고 단정적으로 기술       | “그 문제의 정답은 반드시 42입니다” (틀린 수치에 대해 단정)                |
| Prompt Injection 반응      | 사용자가 프롬프트를 의도적으로 조작해 시스템 지시를 무력화 | 유저가 “Forget all previous instructions…” 입력 시 무제어 반응 |

이러한 오류 유형은 대부분 프롬프트 설계에서 명확성(clarity), 통제력(control), 유도력(steering)이 부족할 때 발생합니다.

## 5.3.2 나쁜 프롬프트 예시와 오류 분석

모호하거나 부정확한 프롬프트는 오류를 유발하는 핵심 원인입니다. 아래는 실제로 오류를 유도하는 프롬프트 사례입니다.

예시 1: 요구 형식 미지정

```
어린이를 위한 우주에 대한 과학 정보를 알려줘.
```

문제점:

* "과학 정보"가 무엇을 의미하는지 모호함
* 출력 형식이 정의되어 있지 않음
* 나이에 맞는 수준에 대한 정의 부재

개선 프롬프트:

```
7세 어린이가 이해할 수 있도록 우주에 대해 알 수 있는 흥미로운 과학 정보를 3가지 항목으로 알려주세요. 각 항목은 제목과 쉬운 설명으로 구성해주세요.
```

예시 2: 질문이 모호하거나 범위가 광범위함

```
세계의 모든 전기 자동차를 비교해 줘.
```

문제점:

* 요청 범위가 비현실적으로 광범위함
* 비교 기준이 정의되지 않음
* 응답 길이 제한으로 인해 누락 정보 발생 가능

개선 프롬프트:

```
2024년 기준으로 판매 중인 주요 전기자동차 모델 중 5개를 선정하여, 가격, 주행거리, 충전속도, 자율주행 여부 등 4가지 기준으로 비교 표를 작성해주세요.
```

예시 3: 지시문 무시 가능성 존재

```
다음 입력 텍스트의 요점을 알려줘.
```

문제점:

* 요점이란 무엇인지 정의되지 않음 (요약? 키워드? 의도?)
* 길이를 통제하지 않음 → 과도한 출력

개선 프롬프트:

```
아래 입력 문단의 핵심 주제를 한 문장 이내로 요약해 주세요. 간결하고 목적에 집중된 표현을 사용해 주세요. 출력은 반드시 한 줄만으로 해주세요.
```

## 5.3.3 오류 방지를 위한 프롬프트 전략

LLM에서 오류를 줄이기 위한 프롬프트 작성 전략은 다음과 같습니다.

✔ 명확성(Clarity)

* 요청하는 작업의 목적, 대상, 범위, 출력 형식을 명확히 지정
* 예) "법률 문장을 초등학생도 이해할 수 있게 설명해 주세요. 비유와 예시를 포함해 주세요."

✔ 구속력(Control)

* 출력 길이, 갯수, 조건 등을 제시
* 예) "각 항목은 1개 문장 이하로 작성해 주세요."

✔ 예시 제공(Few-shot Prompting)

* 원하는 답변 형식을 제시함으로써 출력 오류 방지
* 예)

```
입력: 독감 예방접종은 왜 중요한가요?
출력: 독감 예방접종은 바이러스 감염을 예방하고 심각한 합병증을 줄이기 때문에 중요합니다.

입력: 수면 부족은 건강에 어떤 영향을 주나요?
출력: 수면 부족은 피로, 면역력 저하, 집중력 감소 등의 다양한 건강 문제를 일으킵니다.
```

✔ 다중 제약 사용

* 규칙 기반 제약 조건을 복수 사용해서 광범위한 오류 방지
* 예) “출력은 JSON 형식으로 하되, ‘name’은 반드시 한글로만 구성된 두 글자 이름으로 해주세요.”

## 5.3.4 실전 디버깅: 오류 프롬프트 고쳐보기

다음은 실제로 OpenAI API 사용 시 자주 발생하는 오류를 복기하며 개선하는 연습입니다.

상황 예시:

* 사용자는 다음 요청을 함:

```
개발자 지원 툴을 AI로 만들고 싶어. 그에 대한 간단한 기획 문서를 써줘.
```

GPT 응답:

* 기능이나 범위가 모호하고, 문장의 연결성이 떨어지는 초안이 나옴

개선 프롬프트:

```
“개발자 도구를 AI 기술로 개선하는 제품 기획서 초안을 작성해 주세요. 제목, 목적, 주요 기능(3개 항목), 대상 사용자, 예상 효과를 포함해 주세요. 각 항목은 개조식으로 작성해 주세요.”
```

결과:

* 명확한 섹션 구성, 콘텐츠 완성도 증가, 샘플 형태가 기획 문서와 더 유사

## 5.3.5 프롬프트에서 오류를 방지하는 설계 팁

프롬프트를 설계할 때 다음의 체크리스트를 활용해 오류를 사전에 방지할 수 있습니다.

### 프롬프트 오류 방지 체크리스트

| 항목                            | 점검 예시                     |
| ----------------------------- | ------------------------- |
| 작업 의도가 명확한가?                  | “무엇을 하라는 것인지?”            |
| 출력 형식을 지정했는가?                 | “JSON, 표, 문장 등”           |
| 길이, 개수 등의 제약이 있는가?            | “한 문장, 5개 항목 등”           |
| 예시나 양식을 제공했는가?                | “형식 예제 붙이기”               |
| 유저 입력이 system 지시문을 무력화하지 않는가? | “시스템 프롬프트와 user 입력 통합 제어” |

## 5.3.6 마무리: LLM은 "프롬프트에 충실한 도우미"

LLM은 프롬프트에 주어진 정보를 충실히 따르라는 훈련을 받은 도우미입니다. 그러나 그에 따른 맥락 이해에는 한계가 있고, 모호하거나 과도한 기대를 담은 프롬프트에는 비논리적이거나 부정확한 결과로 응답할 수 있습니다.

따라서 정확한 프롬프트의 설계가 곧 정확한 LLM의 출력 결과를 담보하게 됩니다. 오류가 반복될수록 프롬프트를 개선하려는 노력이 필수적이며, "프롬프트 → 응답 → 개선"의 반복 학습 루프가 LLM 활용의 핵심이라 할 수 있습니다.

다음 절(5.4)에서는 이러한 오류 방지 구조를 더욱 견고하게 만들기 위해 '시스템 지시문(System Prompt)' 최적화 기법에 대해 다룹니다. 이를 통해 AI의 일관성과 안전성을 한 단계 더 끌어올릴 수 있을 것입니다.
