[BETA] この機能はベータ版です。本番利用前に十分なテストを行ってください。
NemakiWare のセマンティック検索(RAG)では、ドキュメントをベクトル(数値配列)に変換し、意味的な類似度で検索を行います。このベクトル変換(Embedding)を担う仕組みとして、2 つのプロバイダが選択できます。
| TEI(デフォルト) | Amazon Bedrock | |
|---|---|---|
| 仕組み | 自前ホストの Docker コンテナ (Hugging Face) | AWS のフルマネージド AI 推論 API |
| インフラ管理 | TEI コンテナの運用が必要(メモリ、スケーリング、モデル更新) | 不要。API 呼び出しのみ |
| コスト | EC2 メモリ/CPU(コンテナ常駐) | API 従量課金(リクエスト単位) |
| レイテンシ | 低(ローカル推論) | 中(ネットワーク API コール) |
| モデル | intfloat/multilingual-e5-large | Amazon Titan Text Embeddings V2 |
| ベクトル次元数 | 1024 | 1024 |
| 多言語対応 | 100 言語以上 | 100 言語以上 |
| SLA | 自己管理 | AWS の SLA に基づく |
| 推奨ケース | 大量ドキュメント、低レイテンシ重視、クラウド非依存 | AWS ネイティブ運用、コンテナ数削減、運用負荷軽減 |
Bedrock を選択すると TEI コンテナが不要になり、AWS のセキュリティ基盤・SLA の上で高品質なセマンティック検索が実現できます。
Bedrock Embedding を利用するには、以下の 3 ステップを AWS 側で完了する必要があります。
Bedrock のモデルはデフォルトでは利用不可です。AWS コンソールから明示的に有効化します。
- AWS Management Console にサインイン
- 上部のリージョン選択で 利用したいリージョン を選択
- 推奨:
ap-northeast-1(東京)またはus-east-1(バージニア北部) - Titan Text Embeddings V2 の対応リージョンは AWS ドキュメント を参照
- 推奨:
- Amazon Bedrock サービスを検索して開く
- 左メニューの Bedrock configurations → Model access をクリック
- Modify model access をクリック
- Amazon セクションから Titan Text Embeddings V2 を探してチェック
- Next → Submit をクリック
- ステータスが Access granted になるまで待機(通常 1〜2 分)
注意: 組織の AWS アカウントで Service Control Policy (SCP) が適用されている場合、Bedrock へのアクセスが制限されていることがあります。その場合は組織の AWS 管理者に相談してください。
NemakiWare が Bedrock API を呼び出すための IAM 権限を設定します。
| 方式 | 設定場所 | セキュリティ | 推奨用途 |
|---|---|---|---|
| EC2 インスタンスロール | IAM ロール → EC2 | 高(認証情報なし) | EC2 上での本番運用 |
| 明示的アクセスキー | NemakiWare 設定 | 中(鍵の管理が必要) | ローカル開発、非 EC2 環境 |
| 環境変数 | AWS_ACCESS_KEY_ID 等 |
中 | Docker 環境 |
EC2 上で運用する場合、インスタンスロールを使うのが最もセキュアです。
- IAM コンソール → ロール → EC2 にアタッチしているロールを選択(なければ新規作成)
- 許可を追加 → インラインポリシーを作成
- JSON タブに以下を貼り付け:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "NemakiWareBedrock",
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0"
}
]
}- ポリシー名:
NemakiWare-Bedrock-Embedding→ ポリシーの作成 - EC2 インスタンスにロールがアタッチされていることを確認
Docker 環境の注意: EC2 インスタンスロールを Docker コンテナ内から使用するには、EC2 メタデータサービス (IMDS) のホップ制限を 2 に設定する必要があります:
aws ec2 modify-instance-metadata-options \ --instance-id i-xxxxxxxx \ --http-put-response-hop-limit 2
EC2 以外の環境(ローカル開発、オンプレミス等)では IAM ユーザーのアクセスキーを使用します。
- IAM コンソール → ユーザー → ユーザーを作成
- ユーザー名:
nemakiware-bedrock→ 次へ - ポリシーを直接アタッチ → 上記の JSON ポリシーと同じものを作成してアタッチ
- ユーザーを作成後、セキュリティ認証情報 タブ → アクセスキーを作成
- アクセスキー ID と シークレットアクセスキー を控える
重要: シークレットアクセスキーは作成時にしか表示されません。安全な場所に保管してください。
設定が正しいことを AWS CLI で確認します。
# AWS CLI がインストールされていない場合
# https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
# 認証情報の確認
aws sts get-caller-identity
# Bedrock Embedding テスト
aws bedrock-runtime invoke-model \
--model-id amazon.titan-embed-text-v2:0 \
--body '{"inputText": "テスト文書です"}' \
--region ap-northeast-1 \
--content-type "application/json" \
--accept "application/json" \
/dev/stdout | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'OK: {len(d[\"embedding\"])} dimensions')"期待される出力:
OK: 1024 dimensions
このコマンドが成功すれば、AWS 側の準備は完了です。
AWS 側の準備が完了したら、NemakiWare を Bedrock に接続します。2 つの方法があります。
NemakiWare の初回セットアップ時、または管理画面から Setup Wizard を使って設定できます。
- Setup Wizard の ベクトル検索設定 ステップに進む
- プロバイダ で Amazon Bedrock を選択
- 以下を入力:
- リージョン: Step 1 で有効化したリージョン(例:
ap-northeast-1) - モデル ID:
amazon.titan-embed-text-v2:0(デフォルト) - アクセスキー ID: 方式 B の場合のみ入力(EC2 ロール使用時は空欄)
- シークレットアクセスキー: 方式 B の場合のみ入力
- リージョン: Step 1 で有効化したリージョン(例:
- 接続テスト ボタンをクリック
- 成功:
接続成功 (1024次元)と表示 - 失敗: エラーメッセージに従って設定を修正
- 成功:
- 適用 をクリック
nemakiware.properties に以下を追加します:
# RAG セマンティック検索の有効化
rag.enabled=true
# プロバイダを Bedrock に設定
rag.embedding.provider=bedrock
# Bedrock 接続設定
rag.bedrock.region=ap-northeast-1
rag.bedrock.model.id=amazon.titan-embed-text-v2:0
rag.bedrock.vector.dimension=1024
rag.bedrock.timeout.ms=30000
rag.bedrock.max.input.chars=8000
# 明示的 AWS 認証情報(EC2 インスタンスロール使用時は空欄のまま)
#rag.bedrock.access.key.id=AKIAxxxxxxxxxxxxxxxx
#rag.bedrock.secret.access.key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx設定後、NemakiWare を再起動してください。
Bedrock 使用時は TEI コンテナが不要なため、rag プロファイルなしで起動します:
cd docker
# TEI なしで起動
docker compose -f docker-compose-simple.yml up -d --build --force-recreateこれにより TEI コンテナ分のメモリ(2〜4GB)が節約できます。
NemakiWare 起動後、ログに以下が表示されることを確認:
RAGConfig initialized
RAG enabled: true
Embedding provider: bedrock
[BETA] Bedrock embedding provider is beta - requires AWS subscription
Bedrock region: ap-northeast-1
Bedrock model id: amazon.titan-embed-text-v2:0
Bedrock vector dimension: 1024
- NemakiWare にテスト用ドキュメントをアップロード
- UI の検索バーでセマンティック検索を実行
- 意味的に関連するドキュメントが返されることを確認
Bedrock の接続状態は NemakiWare 内部で定期的にチェックされます(成功時 30 秒、失敗時 10 秒間隔)。 ヘルスチェックは軽量な InvokeModel 呼び出しで実際の API 接続性を検証します。
| 項目 | 料金(2026年3月時点の目安) |
|---|---|
| 入力トークン | $0.00002 / 1,000 トークン |
| 最小課金単位 | なし |
| 無料枠 | なし(Bedrock 初回利用時の無料トライアルを除く) |
| シナリオ | ドキュメント数 | チャンク数 | 月間検索数 | 推定月額 |
|---|---|---|---|---|
| 小規模 | 1,000 | 5,000 | 1,000 | < $1 |
| 中規模 | 10,000 | 50,000 | 10,000 | ~$5 |
| 大規模 | 100,000 | 500,000 | 50,000 | ~$30 |
注意: 実際の料金は AWS の最新料金表を確認してください。上記は目安です。 インデックス作成時(ドキュメント登録)と検索時の両方で API コールが発生します。
| TEI (CPU) | Bedrock | |
|---|---|---|
| 固定費 | EC2 メモリ 2-4GB 分 | なし |
| 変動費 | なし | API 従量課金 |
| 損益分岐 | ドキュメント数が多く検索頻度が高い場合に有利 | ドキュメント数が少ない〜中規模で有利 |
User: arn:aws:iam::123456789012:... is not authorized to perform: bedrock:InvokeModel
原因: IAM 権限が不足
対処:
- IAM ポリシーが正しくアタッチされているか確認
- ポリシーの
Resourceが正しいモデル ARN を指しているか確認 - SCP による制限がないか確認
Could not resolve the foundation model from the provided model identifier
原因: モデルアクセスが未有効化、またはリージョンが未対応
対処:
- Step 1 のモデルアクセス有効化を再確認
- 選択したリージョンで Titan Text Embeddings V2 が利用可能か確認
- モデル ID が正しいか確認(
amazon.titan-embed-text-v2:0)
原因: ネットワーク接続の問題
対処:
- EC2 の Security Group で HTTPS (443) のアウトバウンドが許可されているか確認
- VPC にインターネットゲートウェイ / NAT ゲートウェイがあるか確認
- Docker コンテナからインターネットにアクセスできるか確認:
docker exec docker-core-1 curl -s https://bedrock-runtime.ap-northeast-1.amazonaws.com
Unexpected embedding dimension: expected 1024, got 256
原因: モデルが返すベクトル次元数と rag.bedrock.vector.dimension の不一致
対処:
- Solr スキーマは
knn_vector_1024(1024 次元)で固定されています - Titan Text Embeddings V2 のデフォルトは 1024 次元で、そのまま利用できます
- 別のモデルを使用する場合は Solr スキーマの変更が必要です
原因: Setup Wizard で保存した設定は CouchDB(nemaki_conf)に永続化され、RAGConfig が PropertyManager 経由で動的に読み込むため、再起動なしで反映されます。テスト接続は成功するのに実運用で失敗する場合、以下を確認してください:
対処:
- 認証情報の確認: 明示的なアクセスキーが保存されている場合はそのキーの権限を確認。IAM ロール(デフォルト認証チェーン)を使用する場合は、Setup Wizard でアクセスキー/シークレットキーを空欄にして保存してください
- モデルアクセス権限: AWS コンソールで Bedrock の「Model access」が有効になっているか確認
- リージョンの一致: Setup Wizard で保存したリージョンに対象モデルがデプロイされているか確認
- Amazon Bedrock ユーザーガイド
- Titan Text Embeddings モデルカード
- Bedrock 対応リージョン一覧
- Bedrock 料金
- IAM ポリシーの作成
- EC2 インスタンスロール
- NemakiWare AWS デプロイガイド — セクション 7 にも Bedrock 設定の記載あり