# 자료를 찾아 붙이기

> **이 장에서 배우는 것**
> 사내 자료를 모델에게 어떻게 주는지, 왜 "그냥 전부 넣기"가 안 되는지, 그리고
> 답에 출처가 붙는다는 것이 왜 결정적인지.

## 모델은 배운 것만 압니다

[언어 모델](/guide/ai-language-model)은 학습할 때 본 것을 바탕으로 다음 말을
맞힙니다. 그러니 이런 질문에는 구조적으로 답할 수 없습니다.

```
"작년 4분기 우리 회사 반품률이 얼마였죠?"
→ 학습 데이터에 우리 회사 반품률은 없습니다
→ 그런데 모델은 "모릅니다"보다 그럴듯한 숫자를 만들기 쉽습니다
```

이게 [환각](/guide/ai-hallucination)이 생기는 가장 흔한 자리입니다. **모르는
것을 물었기 때문**입니다.

## 해법은 한 줄입니다

> **묻기 전에 답의 근거가 될 자료를 찾아서 질문과 함께 넣어줍니다.**

업계에서는 이걸 **RAG**(Retrieval-Augmented Generation, 검색 증강 생성)라고
부릅니다. 이름은 어렵지만 하는 일은 단순합니다.

```mermaid
graph TD
  A["질문: 4분기 반품률은?"] --> B["1. 사내 자료에서 관련 문서 검색"]
  B --> C["2. 찾은 조각 3~5개 + 질문을 함께 모델에 전달"]
  C --> D["3. 모델이 그 조각만 근거로 답변"]
  D --> E["답변 + 출처(어느 문서 몇 페이지)"]
```

**모델의 가중치를 다시 학습시키는 게 아닙니다.** 매번 물을 때마다 자료를 찾아서
같이 넣어주는 것뿐입니다. 그래서 자료가 바뀌면 다음 질문부터 바로 반영됩니다.

이것도 학습이긴 합니다 — 다만 **모델이 아니라 자료 쪽에 쌓입니다.** 그 구분은
[어떤 학습을 고를까](/guide/ai-rag-vs-finetune)에서 넷으로 나눠 봅니다.

## "그냥 전부 넣으면 안 되나요"

가장 자주 나오는 질문이고, 답은 **문서가 적으면 그렇게 해도 됩니다**입니다.
사내 규정집 한 권이면 통째로 넣는 게 검색을 만드는 것보다 낫습니다.

문제는 늘어날 때입니다.

| 전부 넣기 | 검색해서 넣기 |
|---|---|
| [컨텍스트 창](/guide/ai-context-window)을 넘으면 아예 안 들어감 | 필요한 조각만 |
| 매 질문마다 전체 분량만큼 비용 | 조각 몇 개 분량만 |
| 관련 없는 내용이 섞여 정확도가 떨어짐 | 관련된 것만 보게 됨 |
| 문서가 늘면 못 씀 | 문서가 늘어도 그대로 |

세 번째 줄이 의외입니다. **넣는 자료가 많을수록 답이 좋아지는 게 아닙니다.**
관련 없는 문서 50개 속에 정답이 묻히면 모델도 사람과 똑같이 놓칩니다.

## 어떻게 찾나

두 가지 방식이 있고, 실무에서는 대개 둘 다 씁니다.

| 방식 | 원리 | 잘하는 것 | 못하는 것 |
|---|---|---|---|
| 키워드 검색 | 단어가 일치하는 문서 | 제품코드, 사번, 고유명사 | "환불 규정"으로 "반품 정책"을 못 찾음 |
| 의미 검색 | 뜻이 가까운 문서 | 표현이 달라도 찾아냄 | 정확한 코드·숫자에 약함 |

**의미 검색**은 문장을 숫자 목록(임베딩)으로 바꿔서 가까운 것끼리 묶는
방식입니다. "환불 규정"과 "반품 정책"은 글자가 하나도 안 겹치지만 숫자로
바꾸면 가까이 놓입니다.

> **둘을 섞는 게 표준입니다.** 어느 한쪽만 쓰면 반드시 놓치는 질문이 생깁니다.

## 쪼개기가 성패를 가릅니다

문서는 통째로 넣지 않고 **조각(청크)으로 쪼개서** 저장합니다. 그런데 조각만
떼어놓으면 문맥이 사라집니다.

```
원문 3페이지: "...B등급 고객의 경우 이 한도는 300만원입니다..."
→ 조각으로 떼면: "B등급 고객의 경우 이 한도는 300만원입니다"
→ 무슨 한도인가? 앞 문단에 있던 "월 신용 한도"가 사라졌습니다
```

**Anthropic이 공개한 실험**이 이 문제의 크기를 보여줍니다. 조각 앞에 "이건 어느
문서 어느 맥락의 내용인지"를 한 줄 붙여서 저장했더니 검색 실패율이 5.7% →
3.7%로 **35% 줄었습니다.** 키워드 검색을 함께 쓰면 49%, 찾아온 조각을 한 번 더
정렬하는 단계까지 붙이면 67%까지 줄었습니다.

정리하면 순서는 이렇습니다.

```
1. 문맥을 붙여서 쪼갠다        → 실패율 35% 감소
2. 키워드 검색을 함께 쓴다      → 49% 감소
3. 찾아온 조각을 재정렬한다     → 67% 감소
```

**"검색을 붙였는데 잘 못 찾는다"는 대개 1번을 안 한 것입니다.**

## 출처가 붙는다는 것

이게 실무에서 가장 중요한 부분입니다.

```
✗ "4분기 반품률은 3.2%입니다."
✓ "4분기 반품률은 3.2%입니다. (2024_4Q_품질보고서.pdf 7쪽)"
```

**아래쪽은 검증할 수 있습니다.** 담당자가 7쪽을 열어보고 5분이면 맞는지
확인합니다. 위쪽은 확인하려면 처음부터 다시 찾아야 합니다.

> **출처 없는 답은 조직에서 쓸 수 없습니다.** 맞아도 근거를 못 대고, 틀려도
> 어디서 틀렸는지 모릅니다. 검색을 붙이는 진짜 이유는 정확도보다 **검증
> 가능성**입니다.

## 제품에서는

| 하는 일 | 어디서 |
|---|---|
| 파일을 올려두면 답변의 재료가 됨 | [Connect 드라이브](/guide/cn-drive) |
| PDF·문서를 검색 가능한 텍스트로 변환 | [문서를 자료로 바꾸기](/guide/ht-documents) |
| 도구가 많을 때 관련된 것만 골라 씀 | [도구가 많아질 때](/guide/mcp-too-many-tools) |

마지막 줄이 재미있습니다. **도구를 고르는 것도 같은 원리**입니다. 도구 설명을
숫자로 바꿔두고 질문과 가까운 것만 꺼내 씁니다.

## 자주 하는 오해

### "검색을 붙이면 환각이 없어지나요?"

**줄지만 없어지지는 않습니다.** 세 가지가 남습니다. 검색이 엉뚱한 문서를 찾아온
경우, 찾아온 문서 자체가 낡거나 틀린 경우, 그리고 자료에 답이 없는데 모델이
근처 내용으로 메우는 경우입니다.

마지막 건 지시로 상당 부분 막힙니다. **"주어진 자료에 근거가 없으면 없다고
답하라"**를 명시하세요.

### "우리 문서를 다 넣으면 되나요?"

넣기 전에 **누가 봐도 되는 문서인지** 먼저 나눠야 합니다. 검색은 권한을 모릅니다.
인사 파일을 같은 곳에 넣으면 누구 질문에나 인사 파일이 딸려 나옵니다.
[도구는 권한이다](/guide/mcp-security)와 같은 이야기입니다.

---

## 확인

**1. "우리 회사 작년 반품률"을 물었을 때 모델이 숫자를 지어내는 이유는?**

<details>
<summary>답</summary>

**학습 데이터에 없는 것을 물었기 때문**입니다. 모델은 배운 것을 바탕으로 다음
말을 맞히므로, 모르는 영역에서는 "모릅니다"보다 그럴듯한 숫자가 더 자연스럽게
나옵니다. 자료를 찾아서 함께 넣어주는 것이 해법입니다.
</details>

**2. 문서를 조각으로 쪼갤 때 문맥을 한 줄 붙이면 무엇이 달라집니까?**

<details>
<summary>답</summary>

**검색 실패율이 크게 줄어듭니다.** 공개된 실험에서 5.7% → 3.7%로 35% 감소했고,
키워드 검색과 재정렬을 함께 쓰면 67%까지 줄었습니다. 조각만 떼어놓으면 "이
한도"가 무슨 한도인지 사라지기 때문입니다.
</details>

**3. 답변에 출처를 붙이는 것이 왜 정확도보다 중요합니까?**

<details>
<summary>답</summary>

**검증할 수 있게 되기 때문**입니다. 출처가 있으면 담당자가 5분 만에 확인합니다.
없으면 맞아도 근거를 못 대고 틀려도 어디서 틀렸는지 모릅니다. 조직에서 쓰려면
검증 가능성이 먼저입니다.
</details>

---

읽었으면 이제 30분만 직접 해봅니다. 자료를 붙였을 때와 안 붙였을 때가 어떻게
다른지 눈으로 확인하는 장입니다 → [자료를 붙여보기](/guide/ai-try-grounding)
