opensearch-intelligent-search-jp は、生成 AI を活用した日本語検索システムを自ら構築・チューニングしたい開発者の方に向けて、OpenSearch でのベースとなるサンプル実装をCDKで提供するリポジトリです。
このリポジトリをデプロイすると、サンプルシナリオとして用意されている AWS サービスのドキュメント (SageMaker, Bedrock, Kendra の開発者ガイド) の検索システムを構築します。 このサンプル実装には、以下のような要素が含まれます。
- OpenSearch による日本語 Hybrid 検索 (= 全文検索とベクトル検索を組み合わせた検索)
- 全文検索のアナライザーとして、Sudachi プラグインを利用
- ベクトル検索用の Embedding 作成には、Amazon Bedrock 上のモデルを利用。
目次
リポジトリに付属する評価用のデータを用いたデモアプリケーションをデプロイする手順を説明します。
- CDK アプリケーションをデプロイできる環境。
- Bedrock 上の Embedding モデルへのアクセス。
- Bedrock のコンソールから、Embedding モデル (Titan Text Embeddings V2 / Cohere Embed Models) へのアクセス権を取得してください (デフォルトでは、Bedrock のリージョンは
us-east-1を使用しています)。詳細については、Bedrock 開発者ガイドをご参照ください。
- Bedrock のコンソールから、Embedding モデル (Titan Text Embeddings V2 / Cohere Embed Models) へのアクセス権を取得してください (デフォルトでは、Bedrock のリージョンは
デモアプリをデプロイする大まかな手順は以下の通りです。
- 設定の確認
- AWS リソースの作成 (cdk deploy)
- サンプルデータ投入
デモアプリの設定は、packages/cdk/cdk.json で指定しています。
設定可能なパラメータとその意味は以下の通りです。
| パラメータ | デフォルト値 | 意味 |
|---|---|---|
| bedrockRegion | us-east-1 | Bedrock のモデルを呼び出すリージョン |
| selfSignUpEnabled | true | Cognito のセルフサインアップの有効化の有無 (trueの場合、フロントUIからユーザー作成可能になります) |
デモアプリをデプロイするためには、リポジトリのクローン & ルートディレクトリに移動の上、以下のコマンドを実行します。
$ npm ci
$ npm run cdk:deploy
cdk deploy を実行すると、必要な AWS リソース (OpenSearchなど) を作成します。
実行には、30分ほどかかります。
※ Finch を使用する場合、環境変数 CDK_DOCKER=finch を export する必要があります。詳しくは以下をご参照ください。
https://github.com/aws/aws-cdk/tree/main/packages/cdk-assets#using-drop-in-docker-replacements
次に、サンプルデータを取り込み OpenSearch のインデックスを作成します。以下の手順は、CDK のデプロイが完了してから実施してください。
OpenSearch の Domain のステータスが Active になったら、サンプルデータの投入を行います。 実行には以下の2つの方法を用意しています。
- Option 1: シェルスクリプトで実行 (おすすめ)
- Option 2: 直接 run-task コマンドを実行
以下のコマンドを実行します。
bash run-ingest-ecs-task.sh --index-name <index-name> --embed-model-id <embed-model-id>指定可能なパラメータは以下の通りです。
| パラメータ | 意味 |
|---|---|
| --index-name | OpenSearch のインデックス名 |
| --embed-model-id | Embedding モデルの Bedrock 上での Model ID |
embed-model-id には、Titan Embeddings もしくは Cohere Embed が使用可能です。主なモデルのmodel id は以下の通りです。(詳細は Model ID 参照)
| モデル名 | モデルID |
|---|---|
| Titan Embedding Text v2 | amazon.titan-embed-text-v2:0 |
| Cohere Embed Multilingual | cohere.embed-multilingual-v3 |
Option 2 (直接 run-task コマンドを実行)
直接 ECS の run-task を実行する方法でもデータ投入可能です。
以下のコマンドの大文字で書かれている6箇所を書き換えてから実行してください。
書き換えは、cdk deploy 実行ログの最後にある Outputs に表示された以下の情報を使用して実施してください。
- {ECS_CLUSTER_NAME}: OpensearchIntelligentSearchJpStack.IngestDataecsClusterName
- {ECS_TASK_DEFINITION_ARN}: OpensearchIntelligentSearchJpStack.IngestDataecsTaskDefinition
- {ECS_SUBNET_ID}: OpensearchIntelligentSearchJpStack.IngestDataecsSubnet
- {SECURITY_GROUP_ID}: OpensearchIntelligentSearchJpStack.IngestDataecsSecurityGroup
- {OPENSEARCH_INDEX_NAME}: 作成する OpenSearch インデックス名
- {EMBED_MODEL_ID}: Embedding モデルの Bedrock 上での Model ID
$ aws ecs run-task --cluster {ECS_CLUSTER_NAME} --task-definition {ECS_TASK_DEFINITION_ARN} --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=["{ECS_SUBNET_ID}"],securityGroups=["{SECURITY_GROUP_ID}"],assignPublicIp=ENABLED}" --overrides '{
"containerOverrides": [{
"name": "Container",
"environment": [{
"name": "OPENSEARCH_INDEX_NAME",
"value": "{OPENSEARCH_INDEX_NAME}"
},{
"name": "EMBED_MODEL_ID",
"value": "{EMBED_MODEL_ID}"
}]
}]
}'書き込みが完了したかどうかは、ECS の Task の状態をコンソールからご確認ください。
cdk deploy 実行ログの Outputs に表示されている情報の中から、OpensearchIntelligentSearchJpStack.FrontFrontendUrl という項目を探してください。こちらの値 (URL) にブラウザからアクセスしてください。
ユーザー登録の上、以下のような画面が表示されて検索結果が返ってくればデプロイ完了です。
- 自分のデータで試したい場合は、独自データで試すにはをご参照ください。
- このリポジトリのサンプル実装の詳細については、実装詳細をご参照ください。
See CONTRIBUTING for more information.
This library is licensed under the MIT-0 License. See the LICENSE file.

