
【AWS】Managed Knowledge Bases에서 청크 크기를 CLI로 지정하기
요약
Amazon Bedrock의 Managed Knowledge Base 생성 시 콘솔에서는 변경할 수 없는 청크(Chunk) 사이즈와 오버랩 설정을 AWS CLI를 통해 커스텀하는 방법을 설명합니다. 매니지드 임베딩 모델 대신 커스텀 임베딩 모델을 지정해야 청크 설정을 적용할 수 있다는 핵심 팁을 제공합니다.
핵심 포인트
- 콘솔에서는 청크 사이즈가 300 토큰/20% 오버랩으로 고정됨
- AWS CLI를 사용하면 청크 사이즈와 오버랩을 자유롭게 지정 가능
- 청크 커스텀을 위해서는 임베딩 모델을 CUSTOM으로 설정해야 함
- create-data-source 명령 시 vector-ingestion-configuration을 통해 설정 적용
매니지드 나리지 베이스(Managed Knowledge Base, type: MANAGED)를 매니지먼트 콘솔(Management Console)에서 만들면, 청크(Chunk)는 「고정 사이즈 300 토큰 / 20% 오버랩(Overlap)」으로 설정되어 변경할 수 없습니다. -
AWS CLI를 통해 다시 만들면, FIXED_SIZE로 청크 사이즈와 오버랩을 지정할 수 있습니다.
※ 20260617 시점의 내용입니다.
Amazon Bedrock의 매니지드 나리지 베이스를 매니지먼트 콘솔의 「Create Managed Knowledge Base」로 생성했더니, 청크 전략이 **고정(300 토큰 / 20% 오버랩)**으로 되어 있어 변경할 수 없었습니다. (커스텀할 수 있다고 써놓고 말이죠...)
어떻게든 청크 사이즈를 바꾸고 싶어서, CLI로 생성해 보았습니다.
이 훌륭한 기사를 참조해 주세요.
| 항목 | 값 |
|---|---|
| 리전 (Region) | ap-northeast-1 (도쿄) |
| AWS CLI | 2.35.7 |
| 임베딩 모델 (Embedding Model) | Amazon Titan Text Embeddings V2 (1024차원 / FLOAT32) |
| 소스 데이터 (Source Data) | S3 버킷 my-source-bucket (사내 규정 .md ×10 + 이미지 수 점) |
1. IAM 역할(Role) 생성 (S3 읽기 + 임베딩 모델 호출 권한)
2. 나리지 베이스 생성 (★ embeddingModelType: CUSTOM)
3. 데이터 소스 생성 (★ FIXED_SIZE / 512 / 25%)
...
필요한 권한을 부여합니다 (생략합니다).
처음에 임베딩을 MANAGED (매니지드)로 설정한 KB에 대해, 후술할 chunkingConfiguration (512/25%)을 지정했더니 다음과 같은 오류가 발생했습니다 👇
ValidationException: A chunking strategy cannot be specified with a managed embedding model.
Omit chunkingConfiguration to use the default.
즉, **매니지드 임베딩을 사용할 때는 청크 설정 자체를 추가할 수 없다 (= 표준 300/20 고정)**는 뜻입니다.
청크를 커스텀하고 싶다면, 임베딩 모델도 직접 지정(CUSTOM)해야 합니다.
kb-config-custom.json
{
"type": "MANAGED",
"managedKnowledgeBaseConfiguration": {
...
KB 생성 명령어.
aws bedrock-agent create-knowledge-base \
--region ap-northeast-1 \
--name "kb-custom" \
...
성공하면 knowledgeBaseId가 반환되므로 기록해 둡니다 (이후 <KNOWLEDGE_BASE_ID>로 표기).
성공 시 응답 예시 (클릭하여 확장)
{
"knowledgeBase": {
"knowledgeBaseId": "<KNOWLEDGE_BASE_ID>",
...
ds-config.json
{
"type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
"managedKnowledgeBaseConnectorConfiguration": {
...
청크 설정을 --vector-ingestion-configuration으로 전달합니다. maxTokens: 512 및 overlapPercentage: 25가 여기서 적용됩니다.
aws bedrock-agent create-data-source \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
...
응답에서 청크 설정이 반영되었는지 확인합니다.
완성되었습니다♪
성공 시 응답 예시 (클릭하여 확장)
{
"dataSource": {
"dataSourceId": "<DATA_SOURCE_ID>",
...
aws bedrock-agent start-ingestion-job \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
...
매니지먼트 콘솔(Management Console) 사용 시에는 자동으로 동기화되었으나, CLI를 사용할 때는 명시적인 동기화 명령이 필요했습니다.
진행 상황 및 결과 확인.
aws bedrock-agent list-ingestion-jobs \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
...
기존 방식의 KB처럼 vectorSearchConfiguration을 사용하면 다음과 같이 오류가 발생하며 거부됩니다 👇
ValidationException: Incompatible configuration:
vectorSearchConfiguration is not supported for managed knowledge bases.
Use managedSearchConfiguration instead.
→ 매니지드 KB(Managed KB)에서는 managedSearchConfiguration을 사용해야 합니다.
aws bedrock-agent-runtime retrieve \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
...
"512/25% 설정이 정말로 적용되었는가"를 확인하기 위해, 동일한 파일을 '512/25% KB'와 '표준 300/20% KB' 양쪽 모두에 임베딩하고, Retrieve로 추출한 청크(Chunk)를 비교했습니다.
- 대상 파일:
01_就業規則.md(취업규칙.md)
(2,907자의 일본어) - 비교 방법: 양쪽 KB에서 동일한 파일의 청크를 가져온 뒤, 원본 파일상의 위치에 나열하여 청크 수, 크기, 중첩(Overlap)을 실측
| 항목 | 512 토큰 / 25% | 표준 300 토큰 / 20% |
|---|---|---|
| 청크 수 | 7개 | 14개 (약 2.0배) |
| 평균 크기 | 461자 | 220자 (약 절반) |
| 커버 범위 | 전체 (누락 없음) | 전체 (누락 없음) |
만약 설정이 무시되었다면, 동일한 파일이므로 양쪽의 청크가 일치해야 합니다. 실제로 청크 수와 크기가 약 2배 차이 났기 때문에, 512/25% 설정이 확실히 적용되었음을 확인할 수 있었습니다.
실제로 추출된 청크 (샘플) — 클릭하여 확장
512 토큰 / 25% (앞부분 3개 청크) — 1개 청크의 크기가 큼 (400~540자)
--- 청크 0 (위치 0, 489자) ---
# 就業規則 (취업규칙)
**文書番号 (문서번호)**: TSP-HR-001
...
표준 300 토큰 / 20% (앞부분 4개 청크) — 1개 청크의 크기가 작음 (200~260자). 동일한 범위가 더 세밀하게 분할됨
--- 청크 0 (위치 0, 260자) ---
# 就業規則 (취업규칙)
**文書番号 (문서번호)**: TSP-HR-001
...
동일한 "제1조 (목적)" 주변을 보면, 512 버전은 청크 0 하나에 포함되어 있는 반면, 300 버전은 청크 0과 청크 1으로 분할되어 있습니다.
청크의 경계가 설정에 따라 달라진다는 것을 본문을 통해서도 확인할 수 있습니다.
512 버전의 청크 1(위치 467869)과 청크 2(위치 7631302) 사이에는 **106자 분량의 중첩(Overlap)**이 있습니다. 아래 블록이 청크 1의 끝인 동시에 청크 2의 시작이기도 합니다 (즉, 두 청크에 중복되어 포함됨).
従業員は、正当な理由なくこれを拒否することはできない。
(종업원은 정당한 이유 없이 이를 거부할 수 없다.)
---
## 第3章 勤務時間・休憩 (제3장 근무시간·휴게)
...
이와 같이 인접한 청크가 끝과 시작 부분에서 중복되는 것, 즉 오버랩(Overlap)이 작동하고 있다는 점을 실제 텍스트로 확인할 수 있습니다.
| 임베딩 설정 | 청크 설정 | 512 토큰으로 설정 가능 여부? |
|---|---|---|
embeddingModelType: MANAGED | 지정 불가 (표준 300/20 고정) | ❌ |
embeddingModelType: CUSTOM | 지정 가능 (FIXED_SIZE/512/25 등) | ✅ |
- 관리형 KB (Knowledge Bases)에서 청크 (Chunk)를 커스텀하고 싶다면
CUSTOM 임베딩 (Embedding)이 전제 조건 - CUSTOM으로 설정하면
관리형 리랭커 (Managed Reranker)를 사용할 수 없게 된다는 점만 주의 (트레이드오프)
관리형 콘솔에서도 자유롭게 설정할 수 있는 날이 오기를 바랍니다 (>人<)
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기