Knowledge base for Amazon Bedrock で「こけし」に関する回答を正確に!

記事タイトルとURLをコピーする

Knowledge base for Amazon Bedrock で「こけし」に関する回答を正確に!

 こんにちは、こけしが趣味の坂本(@t_sakam)です。今回は、先日公開した、Amazon Bedrock を利用した Alexa スキル「AI 基盤くん」にある課題の一つを、Knowledge base for Amazon Bedrock で、解決できるか、検証してみたいと思います。

Knowledge base for Amazon Bedrock とは

 Knowledge base for Amazon Bedrock は、簡単にまとめると「AWS の生成 AI サービスである Amazon Bedrock を RAG で自分仕様にカスタマイズできる Amazon Bedrock の機能の一つ」です。
 AWS re:Invent 2023 で一般公開(GA)となりました。公式ページでの説明は、以下となっています。

 Knowledge Bases for Amazon Bedrockを使用すると、FMやエージェントに、貴社のプライベート・データ・ソースからのコンテキスト情報を提供し、RAG(Retrieval Augmented Generation:検索機能拡張型ジェネレーション)により、より適切で正確な、カスタマイズされた回答を提供することができます。

 「生成 AI + 自分で用意したデータの検索」で、生成 AI のみのときより、正確な回答が得られるようになるイメージです。

生成 AI + 自分で用意したデータ
生成 AI + 自分で用意した「こけし」のデータ

AI 基盤くんの課題

 AI 基盤くんの課題の一つに『(わたし個人にとっては重要な)「こけし」について、正確に答えてくれない。』というものがあります。
 Claude Instant V1 という Claude の軽量版のモデルを利用していることも理由の 1 つだと思いますが、こけしは基本的に日本独自のものなので、AI が知らない、ということもありそうです。
 こけしに限らず、例えば、生成 AI を業務で利用をしている場合は『「業務情報」について正確に答えてくれない。』というような課題があると思います。その課題を簡単に解決してくれそうな機能が、Knowledge base for Amazon Bedrock というわけです。

AI 基盤くんの「こけしについて詳しい内容を教えて」の回答

 以下は、Alexa 開発者コンソールの会話のテストができるページの画面です。画面左が、AI 基盤くんとの会話の結果となっています。2 つ質問をしていますが、まず、回答が長めの 2 つ目の質問の結果をみてみましょう。

Alexa の開発者コンソール(AI 基盤くん)
Alexa の開発者コンソール(AI 基盤くん)

 いろいろ間違ってしまっており、ハルシネーションが起きているようです。
 主な素材は、陶器ではなく木ですし、基本的にこけしは笠をかぶっていません。また、(伝統)こけしは、東北地方で作られており、茨城県や四国はあまり関係がありません。
 
 上記の画像の最後の回答を「取り消し線」と「(正しい内容やコメント)」を使って直すと以下のようになります。


こけしとは、日本の伝統工芸の一つで、陶器(木)の人形のこと。 主に(伝統こけしは)茨城県(東北各県)で作られる。頭には笠をかぶり、(かぶっていない)体は丸みを帯びた形状(円柱)。 顔は小さな目と口が描かれ、体色は茶色(肌色? 木の素材の色?)が基本。 四国など各地にも地域色のある(伝統こけし以外の)こけし(も)存在する。 縁起物としても親しまれ、観光名所となっている場所もある。 日本の郷土玩具の代表的な存在の一つ。


 この結果を Knowledge base for Amazon Bedrock 機能を使って、正確なものにしていきたいと思います。

データの準備

 まず、検索に利用する「こけし」のデータを準備します。今回は、Wikipedia の「こけし」のページの PDF を利用させていただきました。画面右上の「ツール」からダウンロードできます。

Wikipedia の「こけし」のページ
Wikipedia の「こけし」のページ

データを S3 へアップロード

 Wikipedia からダウンロードした PDF を S3 バケットにアップロードします。S3 バケットは、オレゴンリージョンに作成済みです。Knowledge base for Amazon Bedrock は、現時点では、バージニアリージョンとオレゴンリージョンで利用が可能です。今回は、オレゴンリージョンを利用します。

こけし.pdf を S3 へアップロード
こけし.pdf を S3 へアップロード

Knowledge base の作成

 データの準備ができたので、AWS のマネジメントコンソールで Knowledge base を作成します。先ほどデータを保存した S3 バケットを選択する箇所以外は、デフォルトの設定のまま、ポチポチとボタンを押して進めるだけで、作成することができます。

メニューで Knowledge base を選択し、Create Knowledge base ボタンを押下
メニューで Knowledge base を選択し、Create Knowledge base ボタンを押下

自動で IAM ロールを作成してくれる
自動で IAM ロールを作成してくれる

先ほどデータを保存した S3 バケットを選択する
先ほどデータを保存した S3 バケットを選択する

Amazon OpenSearch Serverless でのベクトルストアの作成をおまかせするのまま進む
Amazon OpenSearch Serverless でのベクトルストアの作成をおまかせする、のまま進む

 「ベクトルストアの作成は Amazon にお任せください。」と言ってくれているので、「新規ベクトルストアのクイック作成」が選択されたまま進みます。Amazon OpenSearch Serverless を利用したベクトルストアの作成を代行しておこなってくれるとのことです。
 このあとも、デフォルトの設定のまま進んで、最後に右下の「Create Knowledge base」ボタンを押します。しばらく待つと画面上に「Knowledge base 'knowledge-base-quick-start-xxxxx' が正常に作成されました。データを同期してテストを開始してください。」と表示され、その右に「Sync」ボタンも表示されるので、ボタンを押して完了です。

コードの変更箇所

 Boto 3 のバージョンを最新にし、以下リンクのの Boto 3 のドキュメントを参考に、コードの変更をおこないます。関数まわりで変更した箇所は以下の辺りです。変数の箇所もあるので、イメージとしてみていただけると幸いです。

AgentsforBedrockRuntime - Boto3 1.33.4 documentation

client = boto3.client('bedrock-runtime')

↓

client = boto3.client('bedrock-agent-runtime')

retrieve_and_generate - Boto3 1.33.4 documentation

response = client.invoke_model(
    body=body,
    modelId='anthropic.claude-instant-v1'
)

↓

response = client.retrieve_and_generate(
    input={
        'text': text
    },
    retrieveAndGenerateConfiguration={
        'type': 'KNOWLEDGE_BASE',
        'knowledgeBaseConfiguration': {
            'knowledgeBaseId': 'XXXXXXXXXX',
            'modelArn': 'arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-instant-v1'
        }
    }
)

 AI 基盤くんは、公開中のスキルなので、Alexa の開発者コンソールで別の検証用スキルを作成して、デプロイしておきます。

Alexa 開発者コンソールで検証用スキルの動作確認

 AI 基盤くんのときと同じ質問をしていきます。 まずは、1 つ目の短めの「こけしとは何でしょうか」という質問から。

AI 基盤くんの「こけしとは何でしょうか」の回答

 先ほどは、触れていませんでしたが、1 つ目の質問に AI 基盤くんは、以下のように答えてしまっていました。


こけしとは、日本の伝統工芸の一つで、陶器や木、金属などの材料で作られた人形のことを指します。顔は丸みを帯び、髪は房毛状に表現されています。四国地方を起源とするこけしは、農作業をはじめ日常生活の様子を楽しく表現した人形で、地域おこしの一助ともなっています。


 「四国地方を起源とする」、「農作業をはじめ日常生活の様子を楽しく表現した人形」というのは、「こけし」とはかなり違うイメージの人形です。さて、検証用スキルではどうなるでしょうか?

検証用スキルの「こけしとは何でしょうか」の回答

Alexa の開発者コンソール(検証用スキルのこけしナレッジ)
Alexa の開発者コンソール(検証用スキルのこけしナレッジ)


こけしは江戸時代後期から東北地方の温泉地で作られ始めた木製の人形玩具です。


 シンプル且つ、正しい回答が返ってきました!

検証用スキルの「こけしについて詳しい内容を教えて」の回答

 次も AI 基盤くんのときと同じ質問をしてみます。AI 基盤くんは、陶器で作られている、笠をかぶっている、主に茨城県で作られている、等々間違った回答をしていました。

正確な情報を答えるようになる
正確な情報を答えるようになる


こけしは江戸時代後期から東北地方の温泉地で土産物として売られるようになった木製の人形玩具です。一般的な形は球形の頭部と円柱の胴部のシンプルな形状です。 こけしはもともと子供の玩具として生まれましたが、大正時代以降は趣味人による蒐集対象となりました。現在でも伝統工芸品として生産されています。 第二次世界大戦後は東北地方だけでなく、全国各地でこけしが生産されるようになりました。東北を代表する民芸品としての認知度も高く、様々な場面でモチーフとして利用されています。


 こちらも、詳細で正しい回答が返ってきました! 東北地方の温泉地、土産物、木製、等々の正しいキーワードが入っています。きちんと、S3 にアップロードしたデータが検索され、活かされていることがわかります。

まとめ

 今回は、Knowledge base for Amazon Bedrock 機能を利用することで、Alexa スキル「AI 基盤くん」の課題の一つ、『「こけし」について、正確に答えてくれない。』が解決されるかを検証してみました!
 
 Knowledge base for Amazon Bedrock 機能は、現在は利用できるリージョンが限られているため、前回のブログにも記載した『Alexa スキルの仕様である、Lambda からの応答時間「8 秒以内」という制限』にひっかかってしまいます。そのため、実際に Alexa スキルをアップデートできるかどうかは、まだわかりません。
 
 とはいえ、今回の検証で Knowledge base for Amazon Bedrock 機能を使うと、本当に簡単に自分仕様にカスタマイズできることがよくわかりました! 生成 AI の誤回答にお悩みの方は、ぜひ一度試してみてはいかがでしょうか?

 いや〜、Amazon Bedrock って本当にいいものですね。
 

坂本 知子(記事一覧)

サーバーワークスのこけしの人(@t_sakam)。2020 APN AWS Top Engineers。