こちらは、デジタルキューブ & ヘプタゴン Advent Calendar 2023 12/23分の記事です。
はじめに
最近何かと話題の生成系AIですが、AWSで生成系AIを構築するためのサービス Amazon Bedrock を試してみたいと考えました。
数種類の基盤モデルをサーバーレスで試すことができ、検索拡張生成 (RAG : Retrieval-Augmented Generation) などの技術を用いて、独自のデータを活用してカスタマイズできることも魅力の一つです。
2023年9月に Amazon Bedrock がGAになり、その翌月には AWS AI Week For Developers というライブセッションも実施されました。
その中で紹介されていた、生成系AIを活用したビジネスユースケースをデモンストレーションできるサンプルコードを拝借し、どのようなことができるのかを確認してみました ... というお話です。
デプロイ
手順に沿ってCDKによるデプロイをするだけで、全ユースケースのデモが行えるwebアプリが出来上がります。
ユースケース
確認できるユースケースの一覧は以下の通り。
- チャット
- RAG チャット(デフォルトだと出てきません。後述する Kendora を使う設定が必要)
- 文章生成
- 要約
- 校正
- 翻訳
- Web コンテンツ抽出
- 画像生成
チャット
結構なトンデモ回答が飛んでくることもあります。
文章生成
要約
校正
文章の誤字脱字や、文章を理解し改善点を指摘してくれます。
そして結構辛辣
翻訳
Amazon Translate もあるし、個人的にはあまり使う機会がなさそう。
Web コンテンツ抽出
(これだけよくわかっていない)
画像生成
かわいい
RAG を試したい
LLMはあくまでも「与えられたテキストの次に来る単語の確率を算出する」だけなので、文章としては自然なのに、適切でない・正確ではない内容が出力されることがあります。
LLMにリクエストを送る前に、関連ドキュメントをまとめたデータベースから必要そうな情報を取得し、それらをまとめてLLMに送ることで、自社データの内容やドメインに特化した回答を生成することができるしくみをRAG(Retrieval-Augmented Generation)と言います。
AWS ではドキュメント検索サービスとして Amazon Kendra があり、今回使用しているサンプルでもすぐ使用できるようになります。
前後の比較
試しに、Bedrockで使用できる基盤モデルの開発元・提供元について質問を投げてみました。
...期待している回答にはなっていませんね^^;
そして、Kendraを使用するように設定しなおしてデプロイしなおすと、RAGチャットが使えるようになり、そちらにも同じ質問を投げてみました。
期待する結果が返ってきましたし、下に回答の元になったドキュメントも提示してくれています。
ソースコードを見ると、AWSの生成系AIのページやBedrockのページをデータソースとして持っていることがわかります。
new kendra.CfnDataSource(this, 'WebCrawler', {
indexId: kendraIndexId,
name: 'WebCrawler',
type: 'WEBCRAWLER',
roleArn: webCrawlerRole.roleArn,
languageCode: 'ja',
dataSourceConfiguration: {
webCrawlerConfiguration: {
urls: {
seedUrlConfiguration: {
webCrawlerMode: 'HOST_ONLY',
// デモ用に AWS の GenAI 関連のページを取り込む
seedUrls: [
'https://aws.amazon.com/jp/what-is/generative-ai/',
'https://aws.amazon.com/jp/generative-ai/',
'https://aws.amazon.com/jp/generative-ai/use-cases/',
'https://aws.amazon.com/jp/bedrock/',
'https://aws.amazon.com/jp/bedrock/features/',
'https://aws.amazon.com/jp/bedrock/testimonials/',
],
},
},
crawlDepth: 1,
urlInclusionPatterns: ['https://aws.amazon.com/jp/.*'],
},
},
});
}
今回はWebクローラによるものだけでしたが、Kendra はいろいろな場所にある情報をデータソースとして持てるようです。S3 や RDS の他にも、SlackやGithub、BoxやDropboxなど幅広いです。
どのように連携して活用させていけるのかが非常に気になるので、引き続き追っていこうと思います。