AWS社が公開しているBedrock + Kendraを用いたRAGアプリのハンズオンを実施しましたので、簡単にシェアしたいと思います
また、ChatGPのアップデートによりKendra+Bedrockと同様の振る舞いができるようになったため、簡単な性能比較を実施しました
Bedrock + Kendraを用いたRAGアプリ
システム概要
ハンズオンを実施すると、下記の図のような生成系AIを用いたChatサイトを構築できます
このサイトは事前に2136ページのPDFのマニュアルを読み込ませています
事前にドキュメントを読み込ませておくことで、検索結果をドキュメントの範囲に限定し、ハルシネーション(誤った発言)を軽減することが可能です
システム構成
システム構成は下記になります
S3に置いてあるPDFファイルをKendraが取得し、Bedrockと連携させることでドキュメントの範囲に限定した応答が可能になります
フロント画面はAmplifyを使用して作成します
構築時間
4時間程度
費用
826ドル/月 ※オレゴンリージョンで構築した場合
【内訳】
- Kendraの利用料金(810ドル/月) ※最初30 日最大 750 時間の無料利用枠あり
- Fargate (0.5 vCPU, 1 GB Memory)(10ドル/月)
- Amplify(5ドル/月)
- Bedrock(1ドル/月)
基盤モデル
Claude Instant ※安価で高速なモデル
機能・性能
- Bedrockは入力データを再学習しないため安心して利用することができる
- AWSのサンプルコードではClaude Instant以外の基盤モデルが使用できない
- PDFの読み込みでも正しく文章を理解
- 読み込んだデータが量は少なかったが、生成指示に対するOUTPUT精度は高い
- 表示速度も悪くはない印象(5秒程度)
- INPUTデータに出現しない単語を質問に含めると精度が落ちる
- 図やグラフが多いドキュメントには不向き
Bedrock + Kendra vs ChatGPT
ChatGPTのファイル読み込み機能
ChatGPTの最近のアップデートによりファイル読み込み機能が追加され、Kendra+ Bedrockと同様の振る舞いが可能になりました
※ChatGPTでファイルを読み込ませるためには、「ChatGPT Plus」に登録する必要があります(料金は月20ドル)
Kendra+Bedrock vs ChatGPT 性能比較
ChatGPTとKendra+Bedrockに同じINPUTデータと質問を与え精度を検証しました
質問 | 正解の回答 | ChatGPTの回答 | Kendra+Bedrockの回答 |
---|---|---|---|
「JAXWS0220: Address in an EPR cannot be null」のエラーが出た際の対処方法を教えてください | EPRのAddressに値が設定されている状態で、再度実行してください。 | ◎「JAXWS0220: Address in an EPR cannot be null」というエラーは、EPR (Endpoint Reference) のアドレスに値が設定されていないことを意味します。このエラーに対処するためには、EPRのアドレスに値を設定してから、処理を再度実行する必要があります。 | ◎このエラーは、EPR(Endpoint Reference)のAddressに値が設定されていないことを意味しています。対処方法は、EPRのAddressに値を設定した上で、再度処理を実行することです。 |
Java VMログの出力先は、変更できますか | Java VMログの出力先は、変更できません。 | ◎Java VMのログの出力先は変更することができません。 | ◎変更できません。 |
インスタンスを起動するコマンドを教えてください | インスタンスを起動するコマンドはasadmin start-local-instanceです。 | ◎インスタンスを起動するためのコマンドは start-local-instance [instance_name] です。このコマンドを使用してサーバーインスタンスを起動することができます。詳細な利用方法や注意事項については、資料の「10.1 asadmin」と「10.1.2 asadminコマンドの共通オプション」のセクションを参照してください。 | ◎asadmin start-local-instance です。 |
セッションの永続化を無効にするにはどうすればいいですか | 永続化の有効・無効は、IJServer クラスタのJVMオプション「-Dcom.fujitsu.interstage.jservlet.sessionrecovery.session.store」で指定します。 | ✕セッションの永続化(セッションの状態をディスクに保存する機能)を無効にする方法は、使用しているウェブアプリケーションサーバーによって異なります。例えば、Tomcatのようなサーバーでは、context.xml ファイルを編集してセッション永続化を無効にすることが一般的です。 | ◎セッションの永続化を無効にするには、定義名が「com.fujitsu.interstage.jservlet.sessionrecovery.session.store」の定義値を「off」に設定します。 |
Tomcat5.5ベースのServlet サービスでHttpSessionのgetAttribute(null) 呼出し時に、何が返却されますか | NullPointerExceptionが発生します。 | ◎Tomcat 5.5 ベースの Servlet サービスで HttpSession の getAttribute(null) を呼び出した場合、NullPointerException が発生し、結果として null が返却されます。Servlet の仕様では、HttpSession の setAttribute メソッドのキーに null を指定することはできません。 | ✕HttpSessionのgetAttribute(null)呼び出し時にnullが返却されます。 |
検証結果
- 精度はChatGPTと大差ないように感じました(個人の感想です)
- 返答スピードはKendra+Bedrockの方が早い(ChatGPTは質問する度にファイルを添付する必要がある)
- 両方とも図やグラフの内容までは読み取れない
- 表の読み取りはChatGPTの方が得意
- Kendra+BedrockはINPUTデータにURLを指定することが可能だが、ChatGPTではできない
付録
基盤モデルの選択において、完璧な基盤モデルなど存在せず、評価項目はトレードオフの関係であることが多いです
※AWS社の資料に合った図を載せます
業務で生成系AIを使用する場合は、お客様のユースケースに応じ、どの評価項目を優先するか最初に決めましょう