Amazon BedrockのKnowledge baseがGAとなり、Amazon BedrockでもRAGが作成できるようになりました。
今回はKnowledgeベースを実際に作成して統計データを検索するRAGを構築してみます。
RAGとは
RAGアーキテクチャ(Retrieval-Augmented Generation)は、自然言語処理において、Google検索のような検索技術と、ChatGPTのような文章生成技術を組み合わせた技術です。
このアーキテクチャを利用すると、生成AIが学習していないデータ、例えば自社の内部レポートのようなデータを用いて、ChatGPTライクな応答システムを構築できます。
具体的には、何か質問を受けると、質問に関連した文章を検索し、その検索結果を元に自然となるような回答を生成する方法を採用しています。
Knowledge baseとは
Knowledge baseの概要
Knowledge baseは、Amazon Bedrockで簡単にRAGを実現するためのサービスです。 次のように動作します。
前処理
まず前処理として、回答生成のためのデータを読み込みます。
ユーザーが回答生成時に参照させたいドキュメントのファイル一式を、S3にデータソース(図中のData Source)として登録します。
Knowledge baseはドキュメントをチャンクに分割(Splitting int chunks)、埋め込みモデル(Embedding Model)を用いてベクトル変換(Generating Embeddings)します。その結果をベクターDB(Vector DB)に保存します。
このようにすることで、次段の質問処理で、質問文と関連のある文章をスピーディーに検索することができるようになります。
質問処理
Knowledge baseは、ユーザの質問(User Query)を受け取ったら、前処理に使ったのと同じ埋め込みモデル(Embedding Model)を用いて質問をベクトル変換(Generating Embeddings)し、この質問文のベクトルと前処理で構築したベクターDBにあるベクトルたちと比較することで、質問文に一番近いドキュメントを引き当てます(Retrieve similar documents)。
文章モデル(Text Model)は、この引き当てられたドキュメントとユーザの質問文を拡張して(Augment User Query with retrieved documents)、ユーザへの応答を生成し、返します(Respond to User) 。
詳細はAmazonの公式ページをご覧ください。
利用できるデータ、データ容量制限
利用できるデータは以下の形式になります。
- .txt
- .md
- .html
- .doc/.docx
- .csv
- .xls/.xlsx
調べたり使ったりしてみたところ、次のような動きでした。
項目 | 内容 |
---|---|
容量 | 1ファイルにつき最大50MBまでの制限があります。 全体での容量制限はない模様です。 |
ディレクトリ階層 | ディレクトリ階層を作ってアップロードしても、階層をたどって読み取ってくれます。 |
日本語対応 | 日本語でデータを登録して検索させることも可能です。 |
複数のファイル | 質問のターゲットとなるようなファイルが複数あってもそれぞれに対して検索を実行してくれるようなので、ファイルの事前の結合処理なども不要なようです。 |
利用できるリージョン | 現時点ではバージニア北部(us-east-1)、オレゴン(us-west-2)の二か所のみ対応しています。 |
利用できる言語モデル | 現時点では、Anthropic Claude Instant v1、Anthropic Claude v2.0の2モデルが対応しています。 |
Knowledge base の構築
それでは実際にKnowledge baseを作成してみましょう。
利用するデータ
今回は、IPAが公開している以下の資料でKnowledge baseを作成していきます。
デジタルスキル標準 Ver.1.1
https://www.ipa.go.jp/jinzai/skill-standard/dss/ps6vr700000083ki-att/000106872.pdf
安全なウェブサイト運営にむけて
https://www.ipa.go.jp/security/todokede/vuln/ug65p90000019gda-att/000089537.pdf
上記pdfをダウンロードし、S3に以下のようなディレクトリ構造で配置します。
├─スキル │ デジタルスキル標準.pdf │ └─セキュリティ 企業ウェブサイトのための脆弱性対応ガイド.pdf
Knowledge baseでは指定したバケット内を探索してデータを登録するため、上記のようにディレクトリ構造を作成しても全ファイルを対象として取得できる模様です。
データの中身は以下のようになっています。
Knowledge baseの作成
Bedrock画面の、Orchestration>Knowledge baseから、Create knowledge baseを選択します。
Knowledge baseの詳細入力画面が出てくるのでそれぞれ以下の情報を入力しNextをクリックします。
項目 | 必須 | 入力内容 |
---|---|---|
Knowledge base name | ○ | 作成するKnowledge baseの名前 |
Knowledge base description | 作成するKnowledge baseの詳細説明 | |
Runtime role | ○ | 既存のロールを選択するか、新規のロールを作成する |
Agent resource role | ○ | Agentが利用するAWSのIAM Roleを自動で生成するかあらかじめ作成したIAM Roleを用いるかを選択 |
Service role name | ○(自動で生成を選択した場合) | 作成するRole名 |
Service role name | ○(既存のロールを利用するを選択した場合) | 利用するRole名を選択 |
Tags | 生成されるAWSリソースへのタグ |
データソースの定義を入力してNextをクリックします。
項目 | 必須 | 入力内容 |
---|---|---|
Data source name | ○ | 作成するデータソースの名前 |
S3 URI | ○ | 利用するS3バケットを選択 |
ベクターDBの設定項目を入力してNextをクリックします。
項目 | 必須 | 入力内容 |
---|---|---|
Embeddings model | ○ | 埋め込みモデル(現時点ではTitan Embeddings G1以外選択不可) |
Vector database | ○ | 新規のベクターDB作成か、既存のベクターDBを利用するか選択 |
新規のベクターDBを作成をするとOpenSearch Serverlessのインスタンスが作成されます。 こちらのインスタンスはKnowledgeBaseを削除しても残り続け、料金が発生し続ける為検証が完了したら直接OpenSerch Serverlessのコンソールに移動して削除を忘れないようにしましょう。
プレビューで今まで入力した情報が表示されるので、確認後Create knowledge baseを押下します。
無事Knowledge baseが作成されました、動作確認をする前にData sourceとのSyncを忘れずに実施しておきましょう。
このタイミングでTitan Embeddings G1モデルの利用申請をしていないとエラーになるので、Model Accessから申請をしておきましょう。
Knowledge baseを利用して文章を生成する
Knowledge baseのsyncが完了すると、Testボタンが表示されるようになります。
Testボタンを押下すると、テスト用のチャット欄が表示されます。
文章生成に利用するモデルを選択し、問い合わせのメッセージを入力しましょう。
出力された回答の括弧を押下すると、出典データが表示されます。
Show detailsで詳細データも確認することができます。
複数PDFに跨る検索も可能なようで、それぞれpdfのこの部分を要約して応答を作成してくれてますね。
まとめ
Amazon BedrockのKnowledge baseを利用してマネージドなRAGを作成しました。
エクセルファイルや、pdf、HTMLなど様々な形式のファイルをデータソースに設定できるので手軽に社内ドキュメントの検索タスクを生成AIに組み込んだりしていくことが出来そうです。
今後も生成AIの可能性を模索していきます。
Acroquest Technologyでは、キャリア採用を行っています。少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。 www.wantedly.com
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSやクラウドサービスを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長