はじめに
ゲームなみなさんこんにちは!Game Solutions Architect の川島です。
この記事は、2024 年 2 月の builders.flash 記事「品質管理に生成 AI は使えるのか!?テキストチェックを生成 AI にやらせてみた」(以下「前回の記事」) に続く内容となっています。まだの方は是非そちらの記事も併せてご覧ください。
前回の記事では、生成 AI を用いた QA (品質管理) をテーマに、生成 AI に誤字・脱字・衍字を校正してもらうプロンプトを紹介しました。この記事では、生成 AI を用いた QA (品質管理) をツール化・ソリューション化していきます。また、より発展的なソリューションとして、ヘルプの作成も紹介していきます。これにより、社内の様々な業務に携わるメンバーが、API 経由で生成 AI による支援を受けられるようになります。
今回特に主題となる技術は、RAG (Retrieval Augmented Generation) と呼ばれる、ドキュメントに書かれた内容をもとにして生成 AI がユーザーの質問に回答を返すソリューションです。
builders.flash メールメンバー登録
AWS for Games

生成 AI を用いたソリューション
前回の記事の内容をソリューション化するための構成として、まずは Amazon Bedrock を用いた基本的な構成を考えてみます。
下の図で、Amazon API Gateway がユーザーが入力したプロンプトを受け取り、AWS Lambda がそのプロンプトを整形します。そのあと、AWS Lambda は Amazon Bedrock がホストする生成 AI モデルにプロンプトを投げます。
今回は、前回の記事と同様に生成 AI のモデルとして Claude 2.1 を利用します。

プロンプトの整形
ここで、AWS Lambda が行うプロンプトの整形の役割を確認します。
エンドユーザーがある文章を校正してほしいとき、AWS Lambda はそれ以外の文章を補完して、前回の記事で見たようなプロンプトに変えます。これにより、エンドユーザーは校正してほしい文章を入力するだけで校正案を得られます。
AWS Lambda が変形したあとの文章例は下のようになります。詳細は 前回の記事 をご覧ください。
あなたはゲーム開発会社のバグチェッカーで優秀な校正チェッカーです。会話文の誤字や脱字や衍字や文章全体の表記揺れをすべて見つけて指摘することが仕事です。以下はあなたがこのタスクで使用する文章(<dialogue>)です。文章は日本語の会話文です。<dialogue>(エンドユーザーの入力した文章はここに入る)</dialogue>以下は指摘する際に使用するルールです。しっかり覚えて理解して下さい。<rule>(省略)</rule>Human:<dialogue>内には誤字、脱字、衍字、表記揺れが含まれています。<rule>内の内容すべてに従い、<dialogue>内の文章の文脈と意味の理解を深め、文字や単語のレベルでも注意深くチェックし可能な限りすべての誤字、脱字、衍字、表記揺れを指摘して下さい。Assistant:
また、社内や社外の一部ユーザーのみにアクセスを絞る場合は、Amazon API Gateway の前段に認可・認証を挿入することもできます。Amazon Cognito や AWS IAM Identity Center を利用すれば実現できますが、今回は詳しくは扱いません。
RAG を用いた社内ナレッジを活用するソリューション
上の章で紹介した校正作業は、決まったプロンプトさえ入力すれば、生成 AI が自身の持つ知識を利用して回答してくれるものでした。一方で、ゲーム業界であるユースケースを考えると、必ずしも生成 AI が持つ知識だけで回答できる問題ばかりとは限りません。例えば、あるゲームのヘルプを生成 AI で作成する場合、そのゲームの仕様を生成 AI は知らないので、何かしらの方法で伝える必要があります。
そんなときに使えるのが、この章で紹介する RAG (Retrieval Augmented Generation) と呼ばれるソリューションです。
RAG は日本語で「検索拡張生成」と呼ばれる技術で、ドキュメントの検索と生成 AI による回答生成を組み合わせたものです。AWS 上でよく構成される RAG の例を下の図に示しました。ここで登場する Amazon Kendra は、ドキュメントを検索するサービスです。
ユーザーがプロンプトを入力すると、アプリケーションは Amazon Kendra の API を実行して、プロンプトの内容に関連するドキュメントを検索します。そして Amazon Kendra により検索されたドキュメントの結果をもとに、アプリケーションは Amazon Bedrock の API を実行して生成 AI モデルから回答を受け取ります。これにより、生成 AI モデルはドキュメントの内容をもとに回答を返せるようになります。
また、アプリケーションが生成するプロンプト内で、ドキュメントに含まれていない内容は回答に含まないよう生成 AI に指示することで、一般に「ハルシネーション」と呼ばれる生成 AI が虚偽の回答をする現象が起こる可能性を逓減できます。
ゲームのヘルプを作りたい場合は、Amazon Kendra が検索する対象のドキュメントにゲームの仕様書を含めればいいだけです。使い方によっては、内部の開発者向けの確認のツールにも、ユーザー向けのヘルプにも利用できます。
この構成はよく使われるものですが、Amazon Kendra と Amazon Bedrock を独自のアプリケーションで繋げる必要があります。しかし、その RAG を簡単に構成するための 1 つの方法として、AWS の提供するサンプル の利用があります。また、もう 1 つの RAG を簡単に始める方法として、Amazon Bedrock Knowledge Base という Amazon Bedrock の持つ機能を利用する方法もあります。今回は、特に後者の Amazon Bedrock Knowledge Base を主眼に置いてご説明します。
次の章では、Amazon Bedrock Knowledge Base の特徴を、Amazon Kendra を用いた RAG と比較しながら確認していきます。

Amazon Bedrock Knowledge Base とは
埋め込みモデルのフロー
一方、ユーザーがプロンプトを入力した際には、従来通りテキスト入力に対してテキストを出力する生成 AI が用いられます。2 種類の生成 AI モデルが活躍するためわかりにくいので、こちらの図にその様子をまとめます。
ドキュメントを読み込んでデータベースに格納する流れがこちらの図です。入力する際の生成 AI モデルは、埋め込みモデルと呼ばれます。なお、このベクトルデータベースの選択肢としては、Amazon OpenSearch Serverless、Amazon Aurora、Pinecone、Redis Enterprise Cloud があります。

回答生成のフロー

機能比較
Amazon Bedrock Knowledge Base の対応するリージョンやモデルを、Amazon Bedrock と Amazon Kendra を組み合わせた場合と比較しながら下記に紹介します。ただし、仕様は 2024 年 2 月時点のものです。
対応しているリージョンやモデルなどは、今後追加される可能性もあります。詳しくは こちらのドキュメント をご覧ください。
Amazon Bedrock Knowledge Base |
Amazon Bedrock + Amazon Kendra |
|
読み込めるファイル |
プレーンテキスト (.txt) |
Amazon Kendra が対応しているすべてのファイルおよびデータソース |
リージョン |
北バージニア・オレゴンのみ |
Amazon Bedrock: 東京含む 6 リージョン |
日本語で使える埋め込みモデル (※) |
Amazon Titan Embeddings G1 - Text |
Amazon Kendra 内部の検索アルゴリズムに依存 |
プロンプトへの回答に |
Anthropic Claude (Instant v1, v2.0, v2.1) |
Amazon Bedrock がホストするすべてのモデル |
※ Amazon Titan Embeddings は正式には日本語対応が発表されていませんが、現状でも一定の性能でご利用いただけます。
Amazon Bedrock Knowledge Base の大きな制約の 1 つに、使えるリージョンが限られている点が挙げられます。また、Amazon Kendra は ネイティブコネクタ によりクローリングをはじめとした外部データソースの読み込みができますが、Amazon Bedrock Knowledge Base では一度ファイル化して Amazon S3 に格納しないとデータソースとして扱えません。それ以外にも、Amazon Bedrock Knowledge Base はプロンプトへの回答に使えるモデルも限られていますが、日本語で利用する場合は Amazon Bedrock と Amazon Kendra を組み合わせる場合と差異はありません。
一方で、埋め込みモデルの選択肢を考えると、Amazon Bedrock Knowledge Base は複数のモデルから選択できます。検索の精度がモデルによって変わる状況では、検索に使うモデルやサービスを基準にソリューションを選定してもいいかもしれません。そして Amazon Bedrock Knowledge Base の何よりの魅力は、その構築の簡単さです。ですので、複数のソリューションで精度を確認する際でも、まずは Amazon Bedrock Knowledge Base を利用して精度を確認してみるというのも 1 つの手です。次の章からは、Amazon Bedrock Knowledge Base のマネジメントコンソール上での構築方法を紹介していきます。
Amazon Bedrock Knowledge Base の利用開始方法
Amazon Bedrock のモデルアクセス設定
Amazon Bedrock を利用を開始するには、利用するモデルのアクセス設定が必要です。
マネジメントコンソールで Amazon Bedrock のページに遷移し、左側のペインで「モデルアクセス」を選択します。それから、右上の「モデルアクセスを管理」をクリックしてください。ここで、利用したいモデルにアクセスできるようにします。
Amazon Bedrock Knowledge Base を利用する場合は、テキストのベクトル化とプロンプト生成のそれぞれで 1 つずつ、少なくとも 2 つのモデルのアクセスが必要です。本ブログでは、テキストをベクトル化する埋め込みモデルとして「Amazon Titan Embeddings G1 - Text」を、プロンプトに回答するモデルとして「Anthropic Claude」を利用します。

Amazon Bedrock Knowledge Base の設定
ここからは、いよいよ Amazon Bedrock Knowledge Base の設定です。
マネジメントコンソールの Amazon Bedrock のページにおいて、左側のペインから「ナレッジベース」をクリックし、「ナレッジベースを作成」をクリックしてください。

ナレッジベースの詳細設定
ここから、ナレッジベースの設定を決めていきます。
まずはナレッジベースの詳細を決定します。ナレッジベース名はご自身の分かりやすいものにし、必要に応じてナレッジベースの説明も入力してください。
その下の IAM 許可では、特に設定にこだわりがなければ「新しいサービスロールを作成して使用」のままにしておきます。この場合、自動で IAM ロールが作成されます。必要に応じて分かりやすいロール名を設定してください。もし、自身の作った IAM ロールを利用したい場合は、「既存のサービスロールを使用」から対象のロールを選択してください。

データソースの設定
続いて、データソースの設定です。
データソース名を決めたあと、データを保存した Amazon S3 バケットの S3 URI を入力します。直接 URI を文字列で入力してもいいですが、右側の「S3 を参照」のボタンを押すと、バケットの一覧を表示して選択できます。
ここまで入力したら、また右下の「次へ」をクリックします。

埋め込みモデルの設定
続いて、埋め込みモデルとベクトルストアの設定です。埋め込みモデルは、自身の好きなものを選んでください。

ベクトルストアの設定
ベクトルデータベースは、そのまま「新しいベクトルストアをクイック作成」を選択すれば、Amazon OpenSearch Serverless でベクトルストアが作成されます。このベクトルストアは別途料金がかかり、削除の際は Amazon Bedrock Knowledge Base のリソースの削除とは別に削除する必要がある点に注意してください。
なお、既にベクトルストアを用意している場合は「作成したベクトルストアを選択」から既存のベクトルストアを選びます。設定したら「次へ」をクリックします。
最後のページで設定が正しいことを確認したら、右下の「ナレッジベースを作成」をクリックしてください。すると、ベクトルストアのセットアップが開始されます。この設定には数分ほどかかります。

データソースの同期
モデルの準備ができたら、作成した Amazon Bedrock Knowledge Base の詳細画面に自動で遷移します。
この画面で、右側にある「モデルを選択」をクリックして、プロンプトの回答に利用するモデルを選択します。今回は、Claude Anthropic v2.1 を利用します。
そのあと、「データソースを同期」のボタンをクリックします。このステップで初めて、Amazon S3 バケット内にあるデータが Amazon Bedrock Knowledge Base から参照されるようになります。データソースの同期が完了するまでには時間がかかります。

Amazon Bedrock Knowledge Base を使ってみる
用意するデータ
今回 Amazon Bedrock Knowledge Base に取り込むデータとして、架空のモンスターの仕様書を用いました。この画像は、モンスターの仕様書の例です。
このような仕様書が Excel 形式で、複数シートおよび複数ファイルにわたり格納されています。

実際に質問してみる
マネジメントコンソール上で質問してどのような回答が返ってくるか試すことができます。特に上のシートの内容について質問した場合の回答を、下の表にいくつかまとめてみました。記載されている内容が適切にまとめられていることが分かります.。
また、Excel シートはすべて日本語で書かれていますが、英語での質問にも回答してくれます。これは、生成 AI モデルが複数言語に対応しているためです。
質問 | 回答 | 実際の記載 |
スケルトンはどのように戦うモンスターですか? |
ガイコツは近距離主体のモンスターで、手に持った槍を使ってプレイヤーを攻撃します。プレイヤーを見つけるとまっすぐに槍を持って突き進んできます。 | ガイコツは近距離主体のモンスターです。 手に持った槍を使ってプレイヤーを攻撃します。 (中略) プレイヤーを見つけるとまっすぐに槍を持って突き進んできます。 |
スケルトンに攻撃されたときにはどのような効果が発生しますか。 | ガイコツの槍で攻撃された時、プレイヤーの防御力が10%下がる効果があります。 | 槍は闇の魔力をまとっており、槍で攻撃されたプレイヤーは防御力が 10% 下がります。 |
What is the weak point of skeletons? | The skeleton monster's weak point is wind. Attacking it with wind attacks will do extra damage. The skeleton can be broken apart with enough damage. When broken apart, it cannot attack but will revive after some time. It is important to defeat it while broken apart. | 弱点 風 (中略) 一定以上のダメージを与えれば、バラバラになります。 (中略) バラバラになったガイコツは攻撃ができなくなりますが、一定時間経つとまた復活します。バラバラになっている間に攻撃して倒すことが重要です。 |
リソースの削除
最後に
今回は生成 AI を利用したヘルプを構成するためのソリューションを取り上げました。また、後半では、Amazon Bedrock Knowledge Base を利用して、ゲームの仕様書からどのような回答が得られるのかを簡単に試しました。
RAG は、社内ナレッジの集約として社内外の人が検索する際に役立つとして今非常に注目されている技術です。Amazon Bedrock Knowledge Base なら、RAG の利用を簡単に始められます。皆様も、ご興味があればぜひお手元の環境で試してみてください。本記事が、皆様のナレッジ整理の一助になれば幸いです。
筆者プロフィール
川島 拓海
アマゾン ウェブサービスジャパン合同会社
ソリューションアーキテクト
2022 年 4 月に入社したソリューションアーキテクトです。食べることが大好きです。あと、ちょっとだけお笑いが好きです。
