Home / RAG 핵심 개념 / Knowledge Bases
Note

Knowledge Bases

매니지드 RAG — S3 동기화, 하이브리드 검색, Retrieve API

⏱ 45분 42 / 189

Knowledge Bases

매니지드 RAG — S3 동기화, 하이브리드 검색, Retrieve API

파이프라인 전체를 관리형으로

RAG 파이프라인의 파싱·청킹·임베딩·인덱싱·검색을 관리형으로

왜 Knowledge Bases인가

DIY의 무게 · 관리형 RAG · Knowledge Base 3종

PART 1 · 왜 Knowledge Bases인가

Knowledge Bases

RAG 파이프라인의 전 단계를 대신 돌리는 Bedrock의 관리형 RAG

Bedrock Knowledge Bases

문서를 연결하면 파싱 → 청킹 → 임베딩 → 인덱싱 → 검색까지 관리형으로

  • 동기화 한 줄 — start_ingestion_job
  • 검색 API 2종 — Retrieve · RetrieveAndGenerate
  • Knowledge Base 3종 — Managed · Vector Store · Structured
  • 개발자 몫 — 파싱·청킹·임베딩·벡터 스토어
takeaway

RAG 파이프라인 모듈에서 직접 만들던 것들이 전부 서비스의 파라미터가 됩니다 — 남는 결정은 데이터와 전략뿐입니다.

PART 1 · 왜 Knowledge Bases인가

Knowledge Base 처리 흐름

DIY 파이프라인이 하던 파싱·청킹·임베딩·검색 — 인제스트 잡 하나와 API 호출 하나로





"환불 규정이
어떻게 되나요?"

같은 질문 —
답은 사내 문서에만




Knowledge Base — RAG 여섯 단계를 대신 돌리는 관리형 구간

오프라인 — start_ingestion_job 잡 하나로 자동
① 인제스트② 청킹③ 임베딩·저장


온라인 — RetrieveAndGenerate 호출 하나로 자동
④ 검색⑤ 증강⑥ 생성· Retrieve는 ④만 — 청크+score

개발자 몫은 청킹 등 네 가지 전략 선택



"예약금은 이용일 3일 전까지 취소하면 전액 환불됩니다"
citations —
restaurant-policy.pdf 인용 첨부




RAG 파이프라인 모듈의 여섯 단계 그대로 — Knowledge Base가 ①~③은 잡 하나, ④~⑥은 호출 하나로 대신 돌립니다. 코드는 사라지고 결정만 남습니다


takeaway

같은 질문, 같은 문서, 같은 답 — 다른 것은 누가 파이프라인을 돌리는가뿐입니다. 이 예제가 모듈 끝까지 이어집니다.

PART 1 · 왜 Knowledge Bases인가

DIY에서 Knowledge Bases

직접 만든 파이프라인 각 단계의 관리형 대응

직접 구축 Knowledge Bases
파싱 pypdf 등 직접 구현 전략 선택만 — 자동 수행
벡터 스토어 프로비저닝·운영 직접 자동 프로비저닝
동기화 Lambda + EventBridge 구축 start_ingestion_job 한 줄
검색 쿼리 로직 직접 구현 Retrieve API 호출
운영 모니터링 + 스케일링 서버리스 — 운영 불필요
takeaway

개발자가 정하는 것은 데이터 소스와 네 가지 전략(파싱·청킹·임베딩·벡터 스토어)뿐 — 실행과 운영은 Knowledge Base가 맡습니다.

PART 1 · 왜 Knowledge Bases인가

Knowledge Bases 3종

워크로드에 맞는 Knowledge Base 유형 선택 — 셋 다 Knowledge Bases, 다른 것은 관리 범위

Vector Store Knowledge Base

BYO 벡터 스토어

  • OpenSearch/Aurora/Pinecone 선택
  • 커스텀 청킹/파싱 전략
  • 기존 벡터 스토어 활용

언제 — 세밀한 제어가 필요할 때

Structured Data Store

SQL 쿼리

  • Redshift 연결
  • Text-to-SQL 자동 생성
  • 정형 데이터 분석

언제 — 데이터 웨어하우스 질의

takeaway

이름 주의 — Knowledge Bases는 서비스 전체(관리형 RAG)의 이름이고, 그중 벡터 스토어까지 통째로 맡기는 유형의 이름이 "Managed Knowledge Base"입니다. Vector Store Knowledge Base도 파이프라인은 관리형이고, 벡터 스토어만 직접 고릅니다.

구축과 운영

데이터 소스 · 네 가지 결정 · 인제스트 운영

PART 2 · 구축과 운영

데이터 소스 6종

문서가 어디에 있든 연결하는 순간 지식이 되는 소스들 — Vector Store 기준 6종, Managed는 7종(Google Drive·OneDrive 포함)

S3

기본 소스 — 버킷·접두사로 범위 지정

  • inclusionPrefixes로 대상 문서 한정
  • 증분 동기화 — 변경분만 재처리

웹 크롤러

공개 웹사이트를 크롤링해 인제스트

  • 시드 URL과 범위 설정
  • 공개 문서·도움말 사이트에 적합

SaaS 커넥터 · Custom

Confluence · Salesforce · SharePoint + 커스텀

  • 사내 위키·CRM 문서를 그대로 연결
  • Managed는 Google Drive·OneDrive 추가 (Salesforce 대신)
  • Custom은 API로 직접 인제스트
takeaway

소스가 어디든 이후 파이프라인은 동일합니다 — 소스 연결이 곧 지식 연결입니다.

PART 2 · 구축과 운영

Knowledge Base 생성과 동기화

S3 연결 후 동기화 한 줄 — 파싱부터 인덱싱까지 자동

핵심 포인트

create_data_source
S3 버킷 연결 — inclusionPrefixes로 대상 문서 범위 지정
start_ingestion_job
동기화 한 줄 — 파싱 → 청킹 → 임베딩 → 인덱싱 자동 수행
증분 처리
변경된 문서만 재처리 — 전체 재인덱싱이 아님
bedrock-agent
구축은 bedrock-agent, 검색은 bedrock-agent-runtime 클라이언트

코드

python
import boto3
bedrock_agent = boto3.client("bedrock-agent", region_name="us-east-1")

# 데이터 소스 연결 — S3 버킷과 접두사만 지정
response = bedrock_agent.create_data_source(
    knowledgeBaseId="SUPPORT-KB-001",
    name="support-docs",
    dataSourceConfiguration={"type": "S3", "s3Configuration": {
        "bucketArn": "arn:aws:s3:::support-docs-bucket",
        # restaurant-policy.pdf는 policy/ 아래 — rag 모듈과 같은 문서
        "inclusionPrefixes": ["policy/", "faq/"],
    }},
)

# 동기화 시작 — 파싱, 청킹, 임베딩, 인덱싱을 자동 수행
bedrock_agent.start_ingestion_job(
    knowledgeBaseId="SUPPORT-KB-001",
    dataSourceId=response["dataSource"]["dataSourceId"])
PART 2 · 구축과 운영

개발자의 네 가지 결정

RAG 파이프라인 모듈에서 배운 판단이 여기서는 콘솔의 선택지가 됩니다 — 전부 생성 시점의 결정

파싱

문서 → 텍스트

  • 기본 파서 — 텍스트 중심 문서
  • 파운데이션 모델 파서 — 표·이미지를 모델이 해석
  • Data Automation — 대규모 비정형

청킹

텍스트 → 검색 단위

  • 고정 크기 + 오버랩 — 기본값
  • 계층적(Parent+Child) — 긴 약관·매뉴얼
  • 시맨틱 — FAQ·대화형 문서

임베딩 모델

텍스트 → 벡터

  • Titan Embed v2 — 1,024차원
  • 검색도 같은 모델을 쓰므로 생성 후 교체는 곧 전체 재인덱싱

벡터 스토어 (인덱싱)

벡터 저장 · 인덱스

  • Managed Knowledge Base — 자동 프로비저닝
  • Vector Store Knowledge Base — OpenSearch·Aurora 등 직접 선택
takeaway

판단 기준은 RAG 파이프라인 모듈 그대로 — 문서의 구조가 전략을 결정하고, 특히 임베딩 모델은 되돌리기 비싼 결정이니 처음에 신중히 고릅니다.

PART 2 · 구축과 운영

인제스트 운영 — 상태·실패·상한

동기화는 한 줄 — 상한과 실패를 아는 데서 시작하는 운영

파일 50MB 상한
초과 문서는 failureReasons에 기록되고 스킵 — 큰 문서는 분할·압축 후 업로드
동시 인제스트 잡 50/Knowledge Base
데이터 소스는 Knowledge Base당 최대 200개 — 둘 다 Managed Knowledge Base 전용 쿼터, 소스별 잡이 병렬로 돕니다.
직접 인제스트
IngestKnowledgeBaseDocuments로 S3 없이 최대 25문서 인라인 주입 (콘솔은 10)
원시 데이터 10TB/Knowledge Base
Managed Knowledge Base 기준 — 쿼리 입력 10,000자 · Retrieve 300회/분
takeaway

인제스트 잡의 실패 문서 목록(failureReasons)을 확인하는 습관이 검색 품질 디버깅의 첫 단추입니다 — "안 나오는 문서"의 절반은 들어가지 않은 문서입니다.

검색 API

Retrieve · RetrieveAndGenerate · 에이전트 연결

PART 3 · 검색 API

Retrieve vs RetrieveAndGenerate

검색만 가져올 것인가, 답변까지 맡길 것인가 — Knowledge Base의 두 가지 검색 API

Retrieve

검색만 — 프롬프트 직접 제어

  • 청크 텍스트 + 점수 + 메타데이터 반환
  • 프롬프트 커스터마이징 자유
  • 멀티스텝 RAG·후처리에 유리
  • 에이전트 도구(@tool) 연동에 적합

Strands 에이전트의 도구로 감싸는 Agentic RAG의 표준 패턴입니다.

RetrieveAndGenerate

검색 + 생성 한 번에

  • 답변 + 출처(citations) 반환
  • 모델·프롬프트 제어는 제한적
  • 하이브리드 검색 옵션 지정 가능
  • 빠른 PoC·단순 Q&A에 적합

한 번의 호출로 답변과 출처까지 — 가장 빨리 RAG를 체험하는 경로입니다.

takeaway

빠른 시작은 RetrieveAndGenerate, 에이전트 연동과 프롬프트 제어가 필요하면 Retrieve — 이 선택은 Agentic RAG 모듈로 이어집니다.

PART 3 · 검색 API

RetrieveAndGenerate — 답변과 출처 한 번에

가장 빨리 RAG를 체험하는 경로 — 검색·증강·생성이 호출 하나에

python
import boto3
rt = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

# 검색 + 증강 + 생성을 호출 하나로
response = rt.retrieve_and_generate(
    input={"text": "예약금 환불 규정이 어떻게 되나요?"},  # ① 자연어 질문
    retrieveAndGenerateConfiguration={
        "type": "KNOWLEDGE_BASE",
        # ② Knowledge Base ID + 생성에 쓸 모델
        "knowledgeBaseConfiguration": {
            "knowledgeBaseId": "SUPPORT-KB-001",
            "modelArn": "us.anthropic.claude-sonnet-4-6",
        },
    },
)

print(response["output"]["text"])          # ③ 생성된 답변
for c in response["citations"]:            # ④ 세그먼트별 근거
    for ref in c["retrievedReferences"]:
        print(ref["location"]["s3Location"]["uri"])
  • input.text — 자연어 질문. 검색과 생성이 한 번에 수행됨
  • knowledgeBaseConfiguration — Knowledge Base ID + 생성에 쓸 모델(modelArn) 지정
  • output['text'] — 생성된 답변 본문
  • citations — 답변 세그먼트별 근거. retrievedReferences에 원본 위치(location)
PART 3 · 검색 API

Retrieve 호출과 응답 구조

청크 텍스트 · 유사도 점수 · 원본 위치 — 프롬프트에 넣을 재료를 그대로 받는 검색 전용 API

핵심 포인트

retrievalQuery
자연어 질문 그대로 전달 — 임베딩 변환은 Knowledge Base가 수행
score
상대 관련도 점수 — 동일 설정 내 비교·임계값 필터 기준
location
원본 S3 문서 URI — 출처 표시(Citation)의 재료
다음 단계
이 호출을 @tool로 감싸면 Agentic RAG — 해당 모듈에서 계속

코드

python
import boto3
bedrock_rt = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

# 검색만 수행 — 프롬프트 구성과 생성은 직접 제어한다
response = bedrock_rt.retrieve(
    knowledgeBaseId="SUPPORT-KB-001",
    retrievalQuery={"text": "예약금 환불 규정이 어떻게 되나요?"},
    retrievalConfiguration={"vectorSearchConfiguration": {"numberOfResults": 3}},
)

# 응답 — 청크 텍스트 + 유사도 점수 + 원본 문서 위치
for r in response["retrievalResults"]:
    print(r["score"])                          # 상대 관련도 (동일 설정 내 비교용)
    print(r["content"]["text"])                # 청크 원문
    print(r["location"]["s3Location"]["uri"])  # 출처 문서
PART 3 · 검색 API

Retrieve 응답의 실물

앞 장 코드가 받는 것 — 필드별로 열어보는 retrievalResults 한 건




요청
retrieve(knowledgeBaseId="SUPPORT-KB-001", retrievalQuery="예약금 환불 규정이 어떻게 되나요?", numberOfResults=3)


retrievalResults[0] — 1위 청크

content.text
"예약금은 이용일 3일 전까지 취소하면 전액 환불됩니다. 이용일 1~2일 전 취소는 …" — 프롬프트에 넣을 근거 원문


score


0.87
상대 관련도 — 동일 설정 내 비교·임계값 필터용 (예시 수치)



location.s3Location.uri
s3://support-docs-bucket/policy/restaurant-policy.pdf
출처 표시(Citation)의 재료


retrievalResults[1]
score 0.79 · "당일 취소와 노쇼는 환불되지 않습니다 …" — 같은 문서의 다음 청크 (예시 수치)



RAG 파이프라인 모듈에서 임베딩 → ANN 검색 → Top-K로 직접 조립하던 세 가지가, 여기서는 응답 JSON에 이미 담겨 옵니다


takeaway

이 세 필드가 곧 증강의 재료입니다 — content.text는 근거, location은 출처, score는 필터 기준. 이 호출을 @tool로 감싸면 그대로 Agentic RAG의 도구가 됩니다.

검색 품질 조율

하이브리드 · 메타데이터 필터 · 리랭커

PART 4 · 검색 품질 조율

검색 품질 조율

요청 하나가 후보를 좁혀 가는 순서 — 네 단계 모두 요청 파라미터로 조절 가능

  1. 1
    메타데이터 필터

    찾아도 되는 범위부터 확정 — 부서·연도·테넌트 격리

  2. 2
    검색 타입

    SEMANTIC 또는 HYBRID로 유사 후보 선정

  3. 3
    리랭커

    후보를 쿼리와 정밀 비교하여 순서 재조정

  4. 4
    Top-K 반환

    numberOfResults만큼만 최종 반환

takeaway

네 단계 전부 재인덱싱 없이 요청 단위로 바꿉니다 — 같은 Knowledge Base에 질의 성격별로 다른 조율을 적용할 수 있습니다.

PART 4 · 검색 품질 조율

검색 타입 — 시맨틱과 하이브리드

RAG 파이프라인 모듈의 하이브리드 검색이 Knowledge Base에서는 요청 파라미터 하나

SEMANTIC

벡터 검색만

  • 의미 유사도로만 후보 선정
  • 동의어·다국어·유사 표현에 강함
  • 고유명사·코드·품번 매칭에 약함

기본 동작 — 대부분의 자연어 질의에 충분합니다.

HYBRID

벡터 + 키워드 결합

  • 벡터 결과와 키워드 매칭을 함께 반영
  • "SKU-1042" 같은 정확 매칭 보완
  • vectorSearchConfiguration의 overrideSearchType으로 전환

문서에 코드·모델명·고유명사가 많다면 하이브리드가 기본값이 됩니다.

takeaway

재인덱싱 없이 요청 단위로 전환합니다 — 같은 Knowledge Base에 질의 성격별로 다른 검색 타입을 쓸 수 있습니다.

PART 4 · 검색 품질 조율

필터와 Top-K — 후보를 다스리기

유사한 것을 찾는 일과 찾아도 되는 범위를 정하는 일의 차이

메타데이터 필터
문서에 붙인 메타데이터로 검색 범위 제한 — 부서·연도·문서 유형별 격리
numberOfResults
반환 청크 수(Top-K) — 많을수록 재현율↑, 컨텍스트 비용↑
score 임계값
응답의 score(상대 관련도)로 클라이언트 측 필터 — 절대 기준보다 동일 설정 내 상대 비교용
요청 상한
쿼리 입력 10,000자 · Retrieve 분당 300회 (Managed Knowledge Base 기준)
takeaway

멀티테넌트라면 필터가 곧 보안 경계입니다 — 유사도는 테넌트를 구분하지 않으므로, 메타데이터 필터로 강제해야 합니다.

PART 4 · 검색 품질 조율

리랭커 — 마지막 순서 재조정

벡터 검색이 빠르게 추린 후보를 리랭커가 다시 줄 세우는 2단 구조

rerankingConfiguration
vectorSearch 결과에 재순위 적용 — type은 BEDROCK_RERANKING_MODEL (유일값)
modelArn · numberOfRerankedResults
리랭킹에 쓸 모델과 최종 반환 개수 지정
metadataConfiguration
리랭킹 판단에 포함/제외할 메타데이터 필드 선택
Managed Knowledge Base
관리형 리랭커가 기본 포함 — 별도 구성 없이 적용
takeaway

넓게 뽑고(Top-K↑) 정밀하게 줄이는(리랭커) 조합이 실무 기본형 — 원리는 Advanced RAG 모듈에서, Knowledge Base에서는 설정 하나입니다.

OpenSearch Serverless

컬렉션 · 인덱스 매핑 · kNN · 거리 메트릭

PART 5 · OpenSearch Serverless

컬렉션과 인덱스

Vector Store Knowledge Base(BYO)가 소유하게 되는 저장 구조

컬렉션 — VECTORSEARCH 타입

서버리스 운영 단위 — OCU 자동 확장, Knowledge Base가 연결하는 대상

인덱스

벡터 필드 스키마(매핑)를 가진 저장 단위 — Knowledge Base 하나가 인덱스 하나를 사용

문서 — 청크당 1건

벡터 + 원문 텍스트 + 메타데이터가 한 문서로 기록

PART 5 · OpenSearch Serverless

인덱스 매핑

knn_vector 필드 선언 — dimension은 임베딩 모델 차원과 일치해야 한다

json
PUT /kb-refund-index
{
  "settings": { "index.knn": true },
  "mappings": { "properties": {
    "chunk_vector": {
      "type": "knn_vector", "dimension": 1024,
      "method": { "name": "hnsw", "engine": "faiss", "space_type": "l2" }
    },
    "chunk_text": { "type": "text" }, "metadata": { "type": "keyword" }
  } }
}
  • index.knn: true — kNN 검색 활성화
  • dimension — 임베딩 모델 차원과 일치 (Titan v2 = 256/512/1024)
  • method — HNSW 그래프 · faiss 엔진
  • space_type — 거리 메트릭 선언 (l2 = 유클리드)
PART 5 · OpenSearch Serverless

kNN 검색과 거리 메트릭

질의 벡터와 가까운 k개를 찾는 검색 — "가깝다"의 정의가 space_type

kNN 질의

json
GET /kb-refund-index/_search
{
  "size": 5,
  "query": { "knn": {
    "chunk_vector": {
      "vector": [0.12, -0.48, ...],
      "k": 5
    }
  } }
}

거리 메트릭 — space_type

l2
유클리드 거리 — 좌표 공간의 직선 거리
cosinesimil
코사인 유사도 — 크기를 무시한 방향 비교
innerproduct
내적 — 크기까지 반영한 유사도
takeaway

space_type은 임베딩 모델의 권장 메트릭과 일치시켜야 합니다 — BYO를 고르면 이 전부를 직접 소유하고, Managed를 고르면 보이지 않는 내부가 됩니다.

실습 — Knowledge Base

⏱ 60분

Bedrock Knowledge Base를 구축하고 동기화한 뒤, Retrieve로 검색 품질을 확인합니다

학습 목표

  • S3 데이터 소스 연결과 Knowledge Base 생성
  • start_ingestion_job으로 동기화 — 인제스트 상태 확인
  • Retrieve · RetrieveAndGenerate로 검색 품질 비교
파이프라인은 Knowledge Base가 돌리고, 여러분은 데이터와 전략만 정합니다.

DIY → Knowledge Base 전환 · 구축과 운영 · Retrieve vs RetrieveAndGenerate