TL;DR(先に結論)
- マネージドナレッジベース(
type: MANAGED)をマネジメントコンソールで作ると、チャンクは「固定サイズ 300トークン / 20%オーバーラップ」となり変更できない -
AWS CLI から作り直すと、
FIXED_SIZEでチャンクサイズ、オーバラップを指定できる
※20260617時点の内容になります
背景
Amazon Bedrock のマネージドナレッジベースをマネジメントコンソールの「Create Managed Knowledge Base」で作成したところ、チャンク戦略が 固定(300トークン / 20%オーバーラップ) となっており変更できませんでした。(カスタムできるって書いてるくせに...)
どうしてもチャンクサイズを変えたかったので、CLIで作成してみました。
Managed Knowledge Basesとは?
こちらの素晴らしい記事をご参照ください
環境
| 項目 | 値 |
|---|---|
| リージョン |
ap-northeast-1(東京) |
| AWS CLI | 2.35.7 |
| 埋め込みモデル | Amazon Titan Text Embeddings V2(1024次元 / FLOAT32) |
| ソースデータ | S3バケット my-source-bucket(社内規程の .md ×10 + 画像数点) |
全体の流れ
1. IAMロール作成(S3読み取り + 埋め込みモデル呼び出し権限)
2. ナレッジベース作成(★ embeddingModelType: CUSTOM)
3. データソース作成(★ FIXED_SIZE / 512 / 25%)
4. 同期(取り込みジョブ)
5. 検索(Retrieve)で確認
Step 1. IAMロールを作成する
必要な権限を付与します(割愛します)
Step 2. ナレッジベースを作成する(★ ここが本記事の核心)
❌ 失敗:マネージド埋め込みのままチャンクを変えようとする
最初、埋め込みを 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固定)。
✅ 解決:embeddingModelType を CUSTOM にする
チャンクをカスタムしたいなら、埋め込みモデルも自分で指定(CUSTOM)する必要がある。
kb-config-custom.json
{
"type": "MANAGED",
"managedKnowledgeBaseConfiguration": {
"embeddingModelType": "CUSTOM",
"embeddingModelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-embed-text-v2:0",
"embeddingModelConfiguration": {
"bedrockEmbeddingModelConfiguration": {
"dimensions": 1024,
"embeddingDataType": "FLOAT32"
}
}
}
}
KB 作成コマンド。
aws bedrock-agent create-knowledge-base \
--region ap-northeast-1 \
--name "kb-custom" \
--description "Managed KB (custom embedding)" \
--role-arn "arn:aws:iam::123456789012:role/BedrockManagedKBRole" \
--knowledge-base-configuration file://kb-config-custom.json
成功すると knowledgeBaseId が返るので控えておく(以降 <KNOWLEDGE_BASE_ID> と表記)。
成功時のレスポンス例(クリックで展開)
{
"knowledgeBase": {
"knowledgeBaseId": "<KNOWLEDGE_BASE_ID>",
"knowledgeBaseConfiguration": {
"type": "MANAGED",
"managedKnowledgeBaseConfiguration": {
"embeddingModelType": "CUSTOM",
"embeddingModelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-embed-text-v2:0",
"embeddingModelConfiguration": {
"bedrockEmbeddingModelConfiguration": { "dimensions": 1024, "embeddingDataType": "FLOAT32" }
}
}
},
"status": "CREATING"
}
}
[公式]
https://docs.aws.amazon.com/cli/latest/reference/bedrock-agent/create-knowledge-base.html
Step 3. データソースを作成する(★ FIXED_SIZE / 512 / 25%)
ds-config.json
{
"type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
"managedKnowledgeBaseConnectorConfiguration": {
"connectorParameters": {
"type": "S3",
"version": "1",
"connectionConfiguration": {
"bucketName": "my-source-bucket",
"bucketOwnerAccountId": "123456789012"
},
"deletionProtectionConfiguration": {
"enableDeletionProtection": false
}
}
}
}
チャンク設定を --vector-ingestion-configuration で渡す。maxTokens: 512 と overlapPercentage: 25 がここで効いてくる。
aws bedrock-agent create-data-source \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
--name "S3-connector" \
--data-source-configuration file://ds-config.json \
--vector-ingestion-configuration '{
"chunkingConfiguration": {
"chunkingStrategy": "FIXED_SIZE",
"fixedSizeChunkingConfiguration": {
"maxTokens": 512,
"overlapPercentage": 25
}
}
}'
レスポンスでチャンク設定が反映されていることを確認する。
できたんご♪
成功時のレスポンス例(クリックで展開)
{
"dataSource": {
"dataSourceId": "<DATA_SOURCE_ID>",
"vectorIngestionConfiguration": {
"chunkingConfiguration": {
"chunkingStrategy": "FIXED_SIZE",
"fixedSizeChunkingConfiguration": { "maxTokens": 512, "overlapPercentage": 25 }
}
},
"status": "CREATING"
}
}
[公式]
https://docs.aws.amazon.com/cli/latest/reference/bedrock-agent/create-data-source.html
Step 4. 同期(取り込みジョブ)
aws bedrock-agent start-ingestion-job \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
--data-source-id <DATA_SOURCE_ID>
マネージメントコンソール時は自動で同期されましたが、CLIの時は明示的に同期コマンドが必要でした
進捗・結果の確認。
aws bedrock-agent list-ingestion-jobs \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
--data-source-id <DATA_SOURCE_ID>
Step 5. 検索(Retrieve)で中身を確認する
❌ ハマり:vectorSearchConfiguration is not supported
従来型KBのノリで vectorSearchConfiguration を使うと弾かれる👇
ValidationException: Incompatible configuration:
vectorSearchConfiguration is not supported for managed knowledge bases.
Use managedSearchConfiguration instead.
→ マネージドKBでは managedSearchConfiguration を使う。
aws bedrock-agent-runtime retrieve \
--region ap-northeast-1 \
--knowledge-base-id <KNOWLEDGE_BASE_ID> \
--retrieval-query '{"text": "労働時間 休憩 年次有給休暇"}' \
--retrieval-configuration '{"managedSearchConfiguration": {"numberOfResults": 50}}'
[公式]
https://docs.aws.amazon.com/cli/latest/reference/bedrock-agent-runtime/retrieve.html
おまけ:チャンク設定が本当に効いているかの検証
「512/25% が本当に適用されているか」を確かめるため、同じファイルを「512/25%のKB」と「標準300/20%のKB」の両方で取り込み、Retrieve で取り出したチャンクを比較した。
- 対象ファイル:
01_就業規則.md(2,907文字の日本語) - 比較方法: 両KBで同じファイルのチャンクを取得し、元ファイル上の位置に並べてチャンク数・サイズ・重なりを実測
| 項目 | 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
**制定日**: 2020年4月1日
...
## 第1章 総則
### 第1条(目的)
この規則は、株式会社XXXXXX(以下「...
--- チャンク1 (位置467, 402文字) ---
履歴書(写真貼付)
2. 職務経歴書
...
### 第5条(試用期間)
新たに採用した従業員については、採用日から3か月間を試用期間とする。...
--- チャンク2 (位置763, 539文字) ---
従業員は、正当な理由なくこれを拒否することはできない。
---
## 第3章 勤務時間・休憩
### 第7条(所定労働時間)
所定労働時間は1週間につき40時間とし、1日の所定労働時間は8時間とする。...
標準 300トークン / 20%(先頭4チャンク) — 1チャンクが小さい(200〜260文字)。同じ範囲がより細かく分割されている
--- チャンク0 (位置0, 260文字) ---
# 就業規則
**文書番号**: TSP-HR-001
...
### 第1条(目的)
この規則は、株式会社XXXXXX(以下「...
--- チャンク1 (位置260, 243文字) ---
パートタイム労働者、契約社員、派遣社員については、別に定める各規則によるものとする。
### 第3条(遵守義務)
...
### 第4条(採用)...
--- チャンク2 (位置489, 200文字) ---
住民票記載事項証明書
4. 源泉徴収票(直近1年分、該当者)
...
### 第5条(試用期間)...
--- チャンク3 (位置653, 216文字) ---
試用期間は業務上の限度として延長することがある。
### 第6条(異動・配置転換)...
同じ「第1条(目的)」周辺を見ると、512版はチャンク0の1個に収まっているのに対し、300版はチャンク0・チャンク1に分割されている。チャンクの切れ目が設定によって変わっていることが本文からも確認できる。
オーバーラップの実例(512版)
512版のチャンク1(位置467〜869)とチャンク2(位置763〜1302)には、106文字ぶんの重なりがある。下記ブロックがチャンク1の末尾であり、かつチャンク2の先頭でもある(=両チャンクに重複して含まれる)。
従業員は、正当な理由なくこれを拒否することはできない。
---
## 第3章 勤務時間・休憩
### 第7条(所定労働時間)
所定労働時間は1週間につき40時間とし、1日の所定労働時間は8時間とする。
このように、隣り合うチャンクが末尾↔先頭で重複している=オーバーラップが効いていることが、実テキストで確認できる。
まとめ:マネージドKBのチャンク設定の早見表
| 埋め込み設定 | チャンク設定 | 512トークンにできる? |
|---|---|---|
embeddingModelType: MANAGED |
指定不可(標準300/20固定) | ❌ |
embeddingModelType: CUSTOM |
指定可能(FIXED_SIZE/512/25 等) | ✅ |
- マネージドKBでチャンクをカスタムしたいなら CUSTOM 埋め込みが前提
- CUSTOM にすると マネージドのリランカーは使えなくなる点だけ注意(トレードオフ)
マネコンでも自由に設定できる日が来ること願います(>人<)

