Skip to content

aws-samples/opensearch-intelligent-search-jp

opensearch-intelligent-search-jp

opensearch-intelligent-search-jp は、生成 AI を活用した日本語検索システムを自ら構築・チューニングしたい開発者の方に向けて、OpenSearch でのベースとなるサンプル実装をCDKで提供するリポジトリです。

このリポジトリをデプロイすると、サンプルシナリオとして用意されている AWS サービスのドキュメント (SageMaker, Bedrock, Kendra の開発者ガイド) の検索システムを構築します。 このサンプル実装には、以下のような要素が含まれます。

  • OpenSearch による日本語 Hybrid 検索 (= 全文検索とベクトル検索を組み合わせた検索)

目次

アーキテクチャ

デプロイ

リポジトリに付属する評価用のデータを用いたデモアプリケーションをデプロイする手順を説明します。

前提条件

  • CDK アプリケーションをデプロイできる環境。
    • 詳細は CDK の開発者ガイドをご参照ください。
    • CDK アプリケーションをデプロイするためには、事前に Bootstrap が必要です。
      npx -w packages/cdk cdk bootstrap
      
  • Bedrock 上の Embedding モデルへのアクセス。
    • Bedrock のコンソールから、Embedding モデル (Titan Text Embeddings V2 / Cohere Embed Models) へのアクセス権を取得してください (デフォルトでは、Bedrock のリージョンは us-east-1 を使用しています)。詳細については、Bedrock 開発者ガイドをご参照ください。

デモアプリのデプロイ

デモアプリをデプロイする大まかな手順は以下の通りです。

  1. 設定の確認
  2. AWS リソースの作成 (cdk deploy)
  3. サンプルデータ投入

1. 設定の確認

デモアプリの設定は、packages/cdk/cdk.json で指定しています。 設定可能なパラメータとその意味は以下の通りです。

パラメータ デフォルト値 意味
bedrockRegion us-east-1 Bedrock のモデルを呼び出すリージョン
selfSignUpEnabled true Cognito のセルフサインアップの有効化の有無 (trueの場合、フロントUIからユーザー作成可能になります)

2. AWS リソースの作成 (cdk deploy)

デモアプリをデプロイするためには、リポジトリのクローン & ルートディレクトリに移動の上、以下のコマンドを実行します。

$ 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

3. サンプルデータ投入

次に、サンプルデータを取り込み OpenSearch のインデックスを作成します。以下の手順は、CDK のデプロイが完了してから実施してください。

OpenSearch の Domain のステータスが Active になったら、サンプルデータの投入を行います。 実行には以下の2つの方法を用意しています。

  • Option 1: シェルスクリプトで実行 (おすすめ)
  • Option 2: 直接 run-task コマンドを実行
Option 1 (シェルスクリプトで実行)

以下のコマンドを実行します。

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 の状態をコンソールからご確認ください。

4. フロント UI へアクセス

cdk deploy 実行ログの Outputs に表示されている情報の中から、OpensearchIntelligentSearchJpStack.FrontFrontendUrl という項目を探してください。こちらの値 (URL) にブラウザからアクセスしてください。

ユーザー登録の上、以下のような画面が表示されて検索結果が返ってくればデプロイ完了です。

Next Steps

  • 自分のデータで試したい場合は、独自データで試すにはをご参照ください。
  • このリポジトリのサンプル実装の詳細については、実装詳細をご参照ください。

Security

See CONTRIBUTING for more information.

License

This library is licensed under the MIT-0 License. See the LICENSE file.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6