모델이 외부 지식으로 답하는 구조
RAG(Retrieval Augmented Generation, 검색 증강 생성)는 질문이 들어올 때 관련 문서를 먼저 검색하고, 찾은 내용을 모델 입력에 함께 넣어 답하게 하는 구조입니다. 모델을 다시 학습시키지 않고도 사내 안내문처럼 모델이 모르는 정보나 자주 바뀌는 정보로 답할 수 있습니다. Amazon Bedrock에서는 Knowledge Bases가 문서 수집과 검색 과정을 관리합니다. 다만 검색이 실패하거나 문서에 답이 없으면 RAG도 정확하게 답할 수 없습니다.
가상의 사내 안내 도우미를 예로 RAG가 필요한 이유, Bedrock Knowledge Bases 기준의 수집 단계와 질문 처리 단계, 검색 결과를 입력에 넣는 방식, 프롬프트·미세 조정과의 차이, RAG로 해결할 수 없는 문제를 설명합니다.
모델의 학습 지식과 최신 업무 정보
기반 모델은 학습할 때 본 데이터로 답합니다. 그래서 학습 이후에 바뀐 정보나 회사 안에서만 쓰는 정보는 알지 못합니다. 예를 들어 사내 휴게실 운영 시간이 지난달 바뀌었다면, 모델은 그 사실을 모릅니다. 그런데도 질문을 받으면 그럴듯한 시간을 지어내 답할 수 있습니다.
가장 단순한 해결책은 안내문 전체를 매번 입력에 넣는 것입니다. 안내문이 몇 쪽이라면 이 방법으로 충분하고, 반복 비용은 22편의 프롬프트 캐싱으로 줄일 수 있습니다. 하지만 문서가 수백 개로 늘어나면 컨텍스트 창에 다 들어가지 않고, 들어가더라도 질문과 무관한 내용 때문에 비용과 지연이 커집니다.
RAG는 문서 전체 대신 질문과 관련된 부분만 찾아 입력에 넣습니다. 정보가 바뀌면 모델이 아니라 문서를 고치면 되므로, 자주 바뀌는 업무 정보에 맞습니다.
수집 단계와 질문 처리 단계
Bedrock Knowledge Bases 기준으로 RAG는 두 단계로 나뉩니다. 수집 단계(pre-processing)는 문서를 검색할 수 있는 형태로 미리 바꿔 두는 작업이고, 질문 처리 단계(runtime execution)는 질문이 들어올 때마다 검색하고 답하는 작업입니다. Knowledge Bases 동작 방식
수집 단계는 문서가 추가되거나 바뀔 때 실행됩니다.
- 문서를 텍스트로 변환합니다.
- 텍스트를 다루기 쉬운 크기의 조각(chunk)으로 나눕니다.
- 임베딩 모델로 각 조각을 숫자 벡터로 바꿉니다.
- 벡터를 원본 문서와의 연결 정보와 함께 벡터 인덱스에 저장합니다.
질문 처리 단계는 질문마다 실행됩니다.
- 같은 임베딩 모델로 질문을 벡터로 바꿉니다.
- 벡터 인덱스에서 질문과 의미가 가까운 조각을 찾습니다.
- 찾은 조각을 질문과 함께 모델 입력에 넣습니다.
- 모델이 그 내용을 근거로 답변을 만듭니다.
두 단계는 실패하는 지점도 다릅니다. 수집 단계에서 문서 변환이나 분할이 잘못되면 질문을 아무리 잘해도 필요한 조각이 검색되지 않습니다. 질문 처리 단계에서는 검색은 됐는데 모델이 근거를 잘못 해석하는 문제가 생길 수 있습니다. 답이 틀렸을 때는 어느 단계의 문제인지부터 나눠 봐야 합니다.
| 항목 | 수집 단계 | 질문 처리 단계 |
|---|---|---|
| 실행 시점 | 문서 추가·변경 시 | 질문마다 |
| 주요 결과 | 벡터 인덱스 | 근거가 포함된 답변 |
| 대표 실패 | 변환·분할 오류, 수집 누락 | 관련 없는 조각 검색, 근거 해석 오류 |
| 자세히 다루는 편 | 25~27편 | 28~29편 |
Knowledge Bases는 구성 방식에 따라 관리형, 직접 선택한 벡터 저장소를 쓰는 비정형 문서용, Amazon Redshift의 정형 데이터를 조회하는 정형 데이터용으로 나뉩니다. 이 차이와 선택 기준은 24편에서 다룹니다.
검색 결과를 입력에 넣는 방식
검색된 조각은 그대로 답이 되는 것이 아니라, 모델이 참고할 근거로 입력에 들어갑니다. 아래는 휴게실 질문에 대해 조각 두 개를 찾았을 때 모델에 전달되는 입력의 구성 예시입니다. 안내문 내용과 문서 이름은 가상의 예시입니다.
아래 근거만 사용해 답하세요. 근거에 없으면 확인이 필요하다고 답하고, 사용한 근거 번호를 표시하세요.
[근거 1] 출처: 시설안내.docx
휴게실은 평일 오전 9시부터 오후 6시까지 운영합니다.
[근거 2] 출처: 공지_2026-10.txt
10월부터 휴게실 운영 종료 시간이 오후 7시로 바뀝니다.
[질문]
휴게실은 몇 시까지 이용할 수 있나요?
이 구성에서 중요한 부분은 세 가지입니다. 지시는 근거 밖의 내용을 지어내지 말라고 범위를 정합니다. 근거마다 출처를 붙여 두면 답변에 인용을 표시할 수 있고, 틀린 답이 나왔을 때 어떤 조각 때문인지 추적할 수 있습니다. 또 근거 1과 2처럼 서로 다른 내용이 함께 검색될 수 있으므로, 최신 문서를 우선한다는 기준이 필요하면 지시나 메타데이터로 정해 줘야 합니다.
넣는 조각 수도 판단 대상입니다. 조각을 많이 넣으면 필요한 내용을 놓칠 가능성은 줄지만, 무관한 내용이 섞이고 입력 토큰이 늘어납니다. 또 검색 결과는 질문마다 달라지므로, 프롬프트 캐싱을 함께 쓴다면 검색 결과를 캐시 지점 뒤에 둡니다.
Bedrock에서는 이 조립을 두 가지 방식으로 할 수 있습니다. RetrieveAndGenerate API는 검색과 입력 구성, 답변 생성을 한 번에 처리합니다. Retrieve API는 검색 결과만 돌려주고, 입력 구성과 모델 호출은 애플리케이션이 직접 합니다. 두 API의 차이와 인용 처리는 29편에서 다룹니다.
RAG·프롬프트·미세 조정의 차이
모델의 답을 바꾸는 방법은 RAG만이 아닙니다. 프롬프트를 고치는 방법과 모델을 추가로 학습시키는 미세 조정(fine-tuning)도 있습니다. 세 방법은 바꾸는 대상이 다르므로, 해결하려는 문제가 무엇인지에 따라 고릅니다.
| 방법 | 바꾸는 것 | 맞는 문제 | 정보 변경 반영 |
|---|---|---|---|
| 프롬프트 수정 | 지시·형식·예시 | 답변 형식, 어조, 판단 기준 | 프롬프트를 고치면 즉시 |
| RAG | 질문 시점에 넣는 근거 | 모델이 모르는 정보, 자주 바뀌는 정보 | 문서를 고치고 다시 수집하면 반영 |
| 미세 조정 | 모델 가중치 | 반복되는 작업 방식·출력 행동 | 다시 학습해야 반영 |
흔한 오해는 사내 지식을 넣으려면 미세 조정이 필요하다는 생각입니다. 운영 시간이나 신청 절차처럼 자주 바뀌는 사실은 학습시킨 뒤에도 또 바뀌므로, 바뀔 때마다 다시 학습해야 합니다. 이런 정보는 RAG로 넣고, 미세 조정은 특정 형식으로 분류하거나 일정한 방식으로 요약하는 것처럼 작업 방식 자체를 바꿀 때 검토합니다. 세 방법은 함께 쓸 수 있으며, Bedrock의 맞춤화 방식별 선택 기준은 34편에서 다룹니다. 모델 맞춤화 가이드라인
RAG로 해결할 수 없는 문제
RAG는 검색된 근거의 품질을 넘어서지 못합니다. 다음과 같은 문제는 RAG를 붙여도 그대로 남거나 다른 방법이 필요합니다.
- 문서에 없는 정보: 근거가 없으면 정확한 답도 없습니다. 이때는 "확인이 필요하다"고 답하게 하는 것이 목표입니다.
- 검색 실패: 질문 표현이 문서와 다르거나 필요한 내용이 조각 경계에서 잘리면 관련 조각을 찾지 못합니다. 분할과 검색 설정은 26·28편에서 다룹니다.
- 문서 간 충돌: 오래된 안내문과 새 공지가 함께 검색되면 모델이 어느 쪽을 따를지 흔들립니다. 문서 정리와 메타데이터가 필요합니다.
- 집계·계산 질문: "신청이 가장 많은 달은?"처럼 전체 데이터를 세야 하는 질문은 몇 개 조각을 찾는 방식으로 답하기 어렵습니다. 정형 데이터 조회는 30편에서 다룹니다.
- 권한 통제: 원본 시스템에서 문서별로 접근 권한을 걸어 두었더라도, 검색 결과에 그 권한이 그대로 적용된다고 가정하면 안 됩니다. 원본 권한과 검색 권한의 차이는 25편에서 다룹니다.
- 근거를 벗어난 답변: 근거를 넣어도 모델이 그 밖의 내용을 덧붙일 수 있습니다. 답변이 근거와 맞는지 검사하는 방법은 42편에서 다룹니다.
또 RAG는 질문마다 검색 단계가 추가되므로 응답 지연과 비용이 늘어납니다. 문서가 적고 거의 바뀌지 않는다면 RAG 없이 안내문을 직접 넣는 쪽이 더 단순할 수 있습니다. RAG는 문서가 많거나 자주 바뀌어 전체를 넣기 어려울 때 선택하는 구조입니다.
'AI' 카테고리의 다른 글
| 프롬프트 캐싱과 긴 입력 관리: 반복 처리 비용 줄이기 | Bedrock 22편 (0) | 2026.11.03 |
|---|---|
| 프롬프트 최적화와 모델 라우팅: 무엇을 자동화할 수 있는가 | Bedrock 21편 (0) | 2026.11.03 |
| Bedrock Prompt Management: 변수·버전·배포 관리 | Bedrock 20편 (0) | 2026.11.01 |
| 프롬프트 설계 원리: 지시·맥락·예시·출력 조건 | Bedrock 19편 (0) | 2026.11.01 |
| PrivateLink·데이터 위치: 사설 연결이 보장하는 범위 | Bedrock 18편 (0) | 2026.11.01 |
