Tech Knowledge
October 10, 2023 · View on GitHub
特に日本のユーザー向けに Amazon Lex v2 と Amazon Kendra の Tech Knowledge を集約します。最新の情報とずれが生じる可能性があるため、必ず公式の AWS ドキュメントの情報と合わせてご覧ください。
Amazon Lex v2
音声入力について
このサンプルプロジェクトでは音声入力に Amazon Transcribe を利用しています。AWS SDK for JavaScript V3 でサポートされていないためです。AWS SDK for JavaScript V2 ではサポートされています。(サンプル実装) ただし、AWS SDK for JavaScript V2 は 2023 年中にメンテナンスモードに移行することが予定されているため、新規の利用の際には注意が必要です。
AMAZON.KendraSearchIntent について
Amazon Lex v2 では AMAZON.KendraSearchIntent を利用することで、Amazon Kendra による検索を組み込むことが可能です。ただし、現状 (2022/12) ではロケール=英語のみの対応なので、日本語では利用できません。そこで、このサンプルプロジェクトでは、FallbackIntent が呼び出された際に Amazon Kendra で検索するように実装しています。
Amazon Kendra
Identity Pool の Unauthenticated User に関して
前述した Amazon Lex v2 と Amazon Transcribe にアクセスする際には、Cognito の Identity Pool の Unauthenticated User (ゲストユーザー) で認証しています。一方、Amazon Kendra は Unauthenticated User ではアクセスできません。(Identity Pool の Unauthenticated User からアクセスできる AWS サービスに制限があるため) そこで、このサンプルプロジェクトでは Amazon API Gateway と AWS Lambda で API を作成しています。
AWS CDK (AWS CloudFormation) でデフォルト言語を指定できない件について
現状 (2023/10) は CloudFormation で FAQ を作成する際に、デフォルトの言語を指定することができません。日本人のユーザーにとっては、ほとんどの場合、言語を日本語に指定する必要があると思うので、このままではとても不便です。
そこで、simple-lex-kendra-jp では、Custom Resource を作成しています。(/cdk/custom-resources)
ドキュメントのアクセスコントロールについて
現状 (2023/05) 、アクセスコントロール機能は Amazon S3 の Data source connection に限り行うことができます。 ※ Amazon S3 以外でアクセスコントロールを実現したい場合は、Index を分けて IAM を使って制御する実装が一つの案として考えられます。
Amazon S3 ドキュメントのアクセスコントロールは、「メタデータ使う方法」と「設定ファイルを使う方法」の2つがあります。
- メタデータを使う方法
- Amazon S3 ドキュメントにはメタデータを設定することができますが、そのメタデータの一つとして
AccessControlListがあります。 AccessControlListにアクセス条件を設定することで、ファイルごとにアクセスコントロールを行うことができます。- 参考:Amazon S3 document metadata
- Amazon S3 ドキュメントにはメタデータを設定することができますが、そのメタデータの一つとして
- 設定ファイルを使う方法
- アクセスコントロール設定用の JSON ファイルを定義することで、一元的にアクセスコントロールを設定することが可能です。
- フォルダ単位での指定も可能ですので、大量のドキュメントに対してアクセスコントロールを行う場合は、こちらの方法が管理しやすいと思います。
keyPrefixはs3://から始まるフルパスを指定する必要があるのでご注意ください。- 参考:Access control for Amazon S3 data sources
アクセスコントロールはユーザ単位とグループ単位で行うことができます。
ユーザとグループの属性は Index の TokenConfiguration で変更することが可能です。
当サンプルでは、ユーザは cognito:username 、グループは cognito:groups を指定しています。
Amazon Kendra の Query を実行する際に、Amazon Cognito が発行した JWT トークンを設定することにより、アクセスコントロールが実行されます。
※ Cognito のアクセストークンと ID トークンのどちらも利用可能ですが、認証されたユーザの属性(アイデンティティ)を利用することが主な目的ですので、ID トークンを利用する方が適切です。
JWT トークンは、--user-context の Token に設定をしてください。
参考:AWS CLI Referense kendra qurey
Amazon Kendra で日本語検索する際の Tips
2022/11/27 に Amazon Kendra のセマンティック検索が日本語をサポートしました。日本語で検索する場合は、分かち書きをすることで、より正確な答えが得られる場合があります。
- 前: 「2022年のワールドカップ優勝国はどこですか」
- 後: 「2022年 ワールドカップ 優勝国 どこ」
このサンプルプロジェクトでは、検索結果が見つからなかった際に、ヒントとして分かち書きを提案するようにしています。
開発中に集めた Tips
こちらのブログに開発中に集めた Tips をまとめています。