背景や目的
引き続き、生成AIの実装面を中心に色々とウオッチしています。
最近は、流行りのAIエージェントに注目し、その開発方法をいくつか調べていました。以下はその試用記事です。ご興味あれば御覧下さい。
OpenAIのAgents SDKの試用レポート
Difyの試用レポート
そして今回は、Amazon Bedrock Agentsを試してみました。日本ではAWS利用者が多いので、企業ではこれが選択され易いかもしれませんね。Difyの試用と同様に、RAGを組んでみます。簡単かどうかと精度について確認をします。
試用の方針
AIエージェントツールは、以下の様に試してゆきます。
1.利用ツール
冒頭でも記載した通り、Amazon Bedrock Agentsを使います。→公式ページ
2.試す機能
AIエージェントの中心機能と思われるRAGを実現してみます。
3.使うデータ
別途構築済で試験運用中のRAGツールのデータを使います。精度比較がし易いので。
内容的には、社内ナレッジの情報です。Dify試用でもこれを使いました。
4.精度確認の方法
別途稼働中のRAGツールと、同じ質問を投げて比較してみます。
手順サマリー
AWSなので基本的にはコンソール上で操作をしてゆきます。以下はその大まかな流れです。
1.データの用意
別途稼働中のRAGツールから、Bedrock Agentsで使うためのデータを抽出しておきます。
2.ナレッジベースの作成
用意したデータをBedrock上で扱える形にします。
3.エージェントの作成
このAIアプリ本体の作成をします。
4.動作確認
今回はBedrock Agentsコンソール上で使う事にしますが、簡単な動作確認をしておきます。
5.RAG精度の確認
別途稼働中の自前のRAGツールと比較評価をしてみます。
1.データの用意
冒頭で示した通り、別途構築済運用中RAGツールのデータをそのまま使いたく、まずそのベクトルデータベースからデータを抜き出しました。
手順は割愛しますが、最終的な書式は以下の通りです。
| データ形態 | テキストファイル |
| ファイル数 | 1 |
| 情報の概要 | 社内のルール情報を収容 |
| 情報の数 | 1038個 |
| 情報の区切り文字 | ¥n¥n |
| ファイル名 | rag_base_data.txt |
ルール情報の内容は、イメージ的には以下のようなものです。
| 以下は、社内ルール等の応答情報です。 user:A メール受信を開始したいです。どうしたら良いですか? user:B 以下のルール集に記載があります。項目「メールの利用」を参照して、設定等を進めて下さい。 https://drive.google.com/file/d/xxxxx user:A ありがとう。わかりました。 |
ご自身でお試しになる際は、このようなデータを何件か作成されたら良いと思います。
そして、これをAWS S3 へセットしておきます。
・AWSコンソールでS3メニューを開き「バケットを作成」を押します。


・下表の値を入力し最後に「バケットを作成」を押します。
| 設定項目 | 値 |
|---|---|
| バケットタイプ | 汎用 |
| バケット名 | devais-vol33 ※お好きな名称で |
| このバケットのブロックパブリックアクセス設定 | パブリックアクセスをすべてブロック |
| (その他) | 全てデフォルト |
数秒で、下図のように作成したバケットが表示されたらOKです。

ここに先ほどのデータファイルをアップしておきます。
・上画面で該当バケットを押し、下の左図でアップロードを押します。


・右上の画面で、先ほどのファイルをドラッグアンドドロップし、アップロードを押します。

上のような画面が表示されたらOKです。S3へのアップが出来ました。
RAG用データをBedrockで使う準備はこれで完了です。次に進みます。
2.ナレッジベースの作成
いよいよBedrockメニューの操作となりまして、先にナレッジベースを作成します。
・Bedrockメニューを開き、左メニューBuild欄のナレッジベースを押します。

・この画面で、作成を押し(左下図)、小窓ではUnstructured dataの方を選択します。
#Unstructured dataかstructured dataか迷いましたが、これで進めてみます。


・ステップ1~4と続きます(右上図)。下表の値を入力し、確認画面まで進めます。
| 設定項目 | 値 |
|---|---|
| ナレッジベース名 | rag-testdata ※お好きな名称で |
| IAM 許可/ランタイムロール | 新しいサービスロールを作成して使用 |
| IAM 許可/サービスロール名 | AmazonBed・・b6 ※自動生成のまま(でもお好きなものでも) |
| データソースを選択 | Amazon S3 |
| データソース名 | rag-testdata-source |
| データソースの場所 | この AWS アカウント |
| S3 の URI | s3://devais-vol33 *上で作成したバケット |
| 解析戦略 | Amazon Bedrock デフォルトパーサー ※画像不要なので |
| チャンキング戦略 | セマンティックチャンキング ※意味のあるまとまりで分割しそうなのはこれしかない |
| チャンキング戦略/文のグループを比較するための最大バッファサイズ | 1 ※セマンティックの類似性評価時にグループ化する文の数との事。1では足りないと思いつつも、それがMAX |
| チャンキング戦略/チャンクの最大トークンサイズ | 8192 ※既存RAGの前述のデータを考慮してMAX値に |
| チャンキング戦略/文グループの類似度のブレークポイントしきい値 | 95 ※テキスト内の自然なブレークポイントを識別して、意味のあるチャンクを作成します。例: 90% の距離で区別できる場合、新しいチャンクが作成されます。との事。謎なので初期値のまま |
| 埋め込みモデル | Titan Text Embeddings V2 |
| 埋め込みモデル/埋め込みタイプ | 浮動小数点ベクトル埋め込み (初期値) |
| 埋め込みモデル/ベクトルの次元 | 1024 (初期値) |
| ベクトルストアの作成方法 | 新しいベクトルストアをクイック作成 ※作成する場合の選択肢はこれのみ |
| ベクトルストア | Amazon OpenSearch Serverless ※PostgreSQLかGraphRAGかこれ、ならこれか |
・ステップ4で確認画面(下図)が表示されるので、そこでナレッジベースを作成を押します。


しばらくすると(5分位)以下の画面が表示され、ナレッジベース作成が完了しました。

・この状態ではデータが未作成なので、データソースの画面で同期を押します(左下図)。


右上図のように埋め込みモデルアクセス権限でエラーが出たら、以下の対応をします。
・モデルアクセスを押し、その画面で特定のモデルを有効にする を押します(左下図)。


・表示された画面(右上図)で、今回エラーで指摘されたモデルを選択し、最後まで進めて送信を押します。

そうすると、上図のように直ぐに許可された状態になりました。
・改めて、先ほどの手順で同期をしますと、、

同期が1、Documentも1になって、ステータス=INDEXEDになりました。
これで、ナレッジベースは内部のデータベースも含めて全て作成された(はず)で、チャンクがどうなったか、見たいのですが、見れません。。
気になりますが、先に進みます!
3.エージェントの作成
本丸のAIアプリ本体?を作成します。上で作成したナレッジベースを紐付ければ良いはずです。
・Bedrockメニューで、今度はBuild欄のエージェントを押します。「最初から作成」を押し、作成画面(右図)を開きます。

・上の画面で、エージェントを作成を押すと左下→右下図の順に進みます。下表の値で作成を進めます。


| 入力項目 | 値 |
|---|---|
| 名前 | agent-ragtest ※お好きな名称で |
| Multi-agent collaboration | (未チェック) |
| エージェントリソースロール | 新しいサービスロールを作成して使用 ※初回は既存は選べない |
| モデルを選択 | Claude Sonnet 4 *最新を選びました *前述の要領で先にモデルアクセスメニューで権限を付与して下さい。 *モデル選択欄でBedrock Agents optimizedのチェックを外すと選択可能。 *Claude 3.7 Sonnet v1は、謎のエラーで使えませんでした。 |
| エージェント向けの指示 | あなたは質問に回答するテクニカルセンターのチャットbotです。 以下のユーザーからの質問に対して、以下の検索結果を参考にして回答して下さい。 検索結果の中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。 回答文に「https://」や「http://」で始まるリンク箇所があればその部分はそのwebページを別ウィンドウで開くようにHTMLタグを追記してください。 ※既存RAGツールのプロンプトと同等の内容にしました |
| その他の設定/ユーザー入力 | 無効 ※既存RAGツールと比較したく、RAG以外の機能はカットする意図 |
| アクショングループ | (そのまま) ※0件のまま |
| Memory/Enable session summarization | 無効 ※一問一答が出来ればOKなので |
| ナレッジベース/ナレッジベースを選択 | rag-testdata ※上で作成済のナレッジベース |
| ナレッジベース/エージェント向けのナレッジベースの指示 | ユーザーからの質問に回答するために参照する検索結果として使って下さい。 ※既存RAGツールで、これに相当する部分は無いが、書くならこうかな |
| ガードレールの詳細 | (そのまま) ※特別な機能は追加しない |
| Orchestration strategy | (そのまま) ※今回は検索&回答作成なので、処理順の定義等は不要だろう |
| Multi-agent collaboration | (そのまま) ※今回は本エージェントのみで試すので関係なし |
・部分的に保存し、最終作成ボタンが無かったので、一旦エージェントのトップに移動してみます。

・ステータスがNot preparedですね。作成したエージェント(agent-ragtest)を再度押してみます。

・上の画面の右欄にある「準備」を押してみます。

・5、6秒で「・・準備されました。」のメッセージが出ました。再度トップを開いてみます。

はい。Preparedになりました。
これでエージェントの作成が終わりました。
これで全て終えたはずなので、動作確認をしてみます。
4.動作確認
今回はAWSのコンソール上で使う事にしますが、簡単に動作確認をしておきます。
・Bedrockメニューで先ほど作成したエージェントを開きます。

右側にあるのが、チャット画面ですね。それを使います。
・「LINEの開発者環境を作成したい。」と入力し、実行を押します。


はい、回答文が返ってきました。検索の精度は良く分かりませんが、まずは良しですね。
AIアプリとしてはこれで完成です。本題のRAG精度の確認に進みます。
5.RAG精度の確認(既存RAGと比較)
既存RAGとは、私がローコードツール等を使わず構築し、数か月試験運用をしていて、比較的精度が高い状態のものです。それと比較をしてみます。
以前の記事で、Difyでも同じ評価をしています。ご参考まで。→Difyでの評価記事
同じ質問を双方で試しました。以下の5問です。(実際の質問文は少し長いので、要約してあります。)
| No. | 質問文(要約) |
|---|---|
| 1 | 個人情報保護に関する調査票が届いた。申請はどうすれば良い? |
| 2 | アルバイト経験者のテレワーク勤務許可申請はどうする? |
| 3 | PCを物理破壊するが、必要な申請等を教えて下さい。 |
| 4 | PCの管理者アカウントを登録する場合の申請等はありますか? |
| 5 | 常駐先で利用中のメールを社内PCでも受信したい。手続きを教えて。 |
そして、試した結果は以下の通りでした。
| No. | 既存RAG | Bedrock agents | 内容評価 |
|---|---|---|---|
| 1 | 検索結果に正解情報が無し。たまたま似た話題があり回答文はOK、と妙な結果。 | ||
| 2 | 検索結果に正解情報を概ね含んだチャンクがあり(1位)、要約文も問題無し。 | ||
| 3 | 検索結果に正解情報を概ね含んだチャンクがあり(1位)、要約文も問題無し。 | ||
| 4 | 検索結果に正解情報が無し。他で似た情報があり回答文はOK、というNo.1と同じ結果。 | ||
| 5 | 検索結果に正解情報の前半半分を含んだチャンクがある(1位)が、後半が無い。 回答文は嘘にならない優れた表現をしているが、本来回答できるので✕。 |
ナレッジベース作成時に厳しいかなぁ、と思っていましたが、それよりは少し良かった印象です。
Bedrock agents試用後の考察
触ってみて色々と分かりました。これを本番利用する事を念頭にして少し考察してみます。
1.検索の精度
・埋め込みモデルはTitan Text Embeddings V2を使用。
・チャンキング戦略は、セマンティックチャンキングを指定。
→人が用意した通りに分割された場合、上位にきていたので埋め込みモデルの問題は無さそう。
→期待した分割にならない場合もあり。検索自体は問題無いが、後続の回答文作成で支障が出る。
→本ツールに合ったデータ作成が必要そう。
或いは、チャンキング戦略周辺でもっと良い設定があるのか(ご存じの方は教えて下さい)。
→データ再整理不可で精度ソコソコで良いよう案件なら、これで良いかも。
2.回答文の質
・LLMはClaude Sonnet 4を選択。
→設定時にモデル選択で手戻りする事が少しあったが、設定操作の大問題は無し。
→回答文自体は良かった印象を持ちました。普段はGPT4oを使っていますが、違和感無しです。
→指摘済ですが、検索結果に情報が無い場合は、正解を回答出来ません(LLMの問題では無い)。
→価格はざっくり計算して、約4.5円/回です。案件利用時は、予算に合致するか要確認です。
3.開発方法(ノーコードツールの効果)
・別途PGで整形した元データを使用し、メニュー操作でナレッジ(ベクトルDB)を作成。
・検索処理相当部も、回答生成部も、メニューで作成。
・チャット画面自体は今回は未作成。
→メニューでの操作はとっつきやすいけど、設定値で悩む事は多いかも・・です。
→特にチャンキングの部分が肝ですね。期待との差を埋めるための試行錯誤は必要かも、です。
まとめ
AWSのAIエージェントツールBedrock Agentsを試してみました。繰り返しになりますが、RAGの精度としては、とにかくチャンキング次第ですね。データの方を合わせる事が課題だと思いました。
今回は、一般ユーザがアクセスするチャット画面のAPIのコア処理部を作った、という事になりまして、その作成の操作自体は簡単でした。ただ、設定値の決め方は少し難しい・・、そんな印象です。
引き続き、参考になりそうな情報をご紹介させて頂きます。お読み頂きましてありがとうございました。
お気づきの点がありましたら、以下の「ご連絡フォーム」から、コメントを頂けますと幸いです。
