omuronの備忘録

個人的な備忘録

「Amazon Bedrock生成AIアプリ開発入門」本の感想を宇宙最速で述べる #Bedrock開発入門

はじめに

期待のAmazon Bedrock本ですね。 皆さま予約はしたのでしょうか?
発売日を待っていたところ、なんとみのるんさんから献本をいただきました!!!

みのるんさんでBedrockと言えば「宇宙最速*1*2」として有名ですね。

ということで 「著者から献本をもらったので、盛り上げ企画としてアウトプットする」 という状況です。 もとより購入予定ではあったのですが、せっかくいただけたのだからアウトプットしないとね。 微力ながらも盛り上げ企画に貢献したく、本書の内容を読んで、各章ごとに感想を書いていきます。

感想をながながと書いてしまったので、この記事を「Claude 3 Sonnet」で要約してもらいました。

生成AIサービスAmazon Bedrockの入門書で、Bedrockの基礎からアプリ開発手法、RAGやエージェントの作成、さまざまな連携例などが丁寧に解説されている。実践を通して生成AIの活用方法が具体的にイメージできる。初心者にもわかりやすく、充実した内容となっている。

とのことでした。

なお、試し読みもできるようです。
(この試し読みに、ハンズオンのGitHubのリンクがあるのですが、正直コレだけでも価値があると思います...大盤振る舞いですね。)

では、これより各章の感想を書きつつ、ハンズオンで試したときに自分の環境に合わせて変更したところなどにも触れていきます。

各章の感想

第1章 生成AIの基本と動向

「生成AIとは何か」の基本的なお話をChatGPTが発表されてから一大トレンドとなった生成AIの基本的な概念を解説しています。 "モデル"や"トークン数"など生成AIでは基礎となる概念を解説しています。 GitHubを使っているならGitHub Copilotについて触れることも多いと思いますが、この章ではGitHub Copilotの基本的な仕組みも解説しており、 手っ取り早く生成AIの凄さを体感できる近道としてGitHub Copilotに課金するのもありかもしれません。 私は普段プログラムはそこまで書かないのですが、Copilotチャットがとても優秀ですし、VSCode内で完結して触れるということで、普段の仕事としてはChatGPTへの課金よりもGitHub Copilotへの課金の方がコスパが良いと感じました。

第2章 Amazon Bedrock入門

Amazonの提供する生成AIサービスのBedrock入門です。 まさに入門という内容で初学者にも優しい内容になってます。 BedrockはAWSのサービスの一つですし、エコシステムに則れるのが強いですね。 Bedrockの大きな特徴の一つとしては、Amazon以外の会社のモデルを利用することができるです。 簡単に試せるプレイグラウンドもありますが、先に利用するモデルの有効化が必要です、 この部分が少し他のAWSサービスと比べてハードルが高いのですが、リクエストのやり方も丁寧に書かれているので、記載の内容に従えば簡単に試すことができます。

後半では、AWS SDKを利用して、BedrockのAPIを直接呼ぶハンズオンもあります。 ハンズオンというと身構えてしまいそうですが、ソースがGitHubで公開されているので、気軽に試すこともできますね。 Cloud9を利用した構築方法の案内があるため、ローカルPCのスペックに関係なく簡単に試すこともできます。

ローカルで試すときの注意点

ローカルで試すときは、Cloud9と同じPythonのバージョンを利用するために pyenv などを利用して Python 3.9.16 に切り替えた後、必要に応じてAWS Profileを利用したセッション作成やリージョンの指定も行うとよさそうです。 私は以下のような変更を行い、ローカルPCで試すことにしました。

# プロファイル指定してセッションの作成
session = boto3.Session(profile_name='your-profile-name')

# Bedrockクライアントの作成
bedrock = session.client("bedrock", region_name="us-east-1")

マルチモーダルのサンプルを試してみる

試しに AWS App Runner の VPC ネットワーキングを解説してもらいました。

画像は「AWSブログ」より引用させていただいております。

この画像は、AWS (Amazon Web Services) のネットワーク環境におけるVPCネットワーキングモードのアーキテクチャを示す図です。アプリケーションの実行環境、Fargate、顧客環境の3つのVPCが描かれており、それぞれの役割と通信の流れが矢印で示されています。 画像の左側には、インターネットからのリクエストラフィックを受け取るApp Runnerがあります。App Runnerは複数のタスクに対してプライマリーENIを使って通信を行います。 中央のFargateのVPCには、それぞれのタスクに対応したHyperplane ENIがあり、アウトバウンドのアプリケーショントラフィックをお客様側のHyperplane ENIに送信します。 右側のCustomerのVPCには、お客様のプライベートVPCリソースとHyperplane ENIが描かれています。Hyperplane ENIはFargateから受け取ったトラフィックをプライベートリソースに転送します。 さらに、アウトバウンドのイメージプルやログプッシュの通信経路もAmazon ECR、CloudWatchに示されています。最終的にNATゲートウェイを経由してインターネットゲートウェイに出ていく流れが描かれています。

ちゃんと画像を理解して、正確に解説してくれていそうです。 特にAWSのサービスなどは得意分野なのかもしれません。

第3章 生成アプリの開発手法

生成AIとのやり取りの基本となる「プロンプト」の説明から始まります。 生成AIに指定したい内容を伝える システムプロンプト 、利用者となるユーザーの質問などの ユーザープロンプト 、生成AIの回答となる アシスタントプロンプト などのプロンプトの基礎の説明から、生成AIとやり取りの単位となる「トークン」の説明まで、まずは基礎的な内容を押さえています。 全ページカラーも相まって、初心者を置いていかない仕組みが素晴らしいですね。

そして、生成AIを上手に使うために必要な「プロンプトエンジニアリング」の手法も詳細に解説があります。 この「プロンプトエンジニアリング」は、プログラマー以外の一般の人でも工夫して良い答えを生成AIから引き出せるというのが、今まで私がしてきた「エンジニアリング」的な仕事とは大きく異なる点かなと感じてます。 この「プロンプトエンジニアリング」のお陰で、今までプログラムに触れたことが無い人たちでも活用することができており、生成AIの民主化に大きく貢献したのではと思っております。 やっていることは、チームの人などに指示するのと同じですしね。 上手にマニュアル化したり指示できたりする人は、生成AIの活用もうまくできそうです。

LangChainをローカルで試すときの注意点

ローカルでLangChainを使う場合、私の環境ではAWS Profileを設定する必要がありました。
環境変数に設定することで、問題なく実行できました。

export AWS_PROFILE=your_profile_name

あわせてリージョンも ChatBedrock() に指定することで、問題なく実行できました。

chat = ChatBedrock(
    model_id="anthropic.claude-3-sonnet-20240229-v1:0",
    model_kwargs={"max_tokens": 1000},
    region_name="us-east-1",
)

Streamlit

Streamlit を使えば少しのコードでWebアプリとして生成AIを利用することができます。 よくあるLLMのチャットアプリをPoC的に試すことが本当に簡単にできます。 LangChain と組み合わせることで、数行で生成AIを利用したアプリができてしまうことに感動しました。

Streamlitawscli v2 と同じ環境に入れる場合は注意が必要そうです。 最新版の streamlit を入れると以下のエラーが発生しました。

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
awscli 2.15.30 requires python-dateutil<=2.8.2,>=2.1, but you have python-dateutil 2.9.0.post0 which is incompatible.

このエラーは、awscliとstreamlitが依存しているpython-dateutilパッケージのバージョンに互換性の問題があることを示しています。awscliはpython-dateutilのバージョンを2.8.2以下に制限していますが、streamlitのインストールによりpython-dateutilのバージョンが2.9.0.post0に更新され、互換性の問題が発生しています。 Pythonの仮想環境を使うか、書籍にも記載しているバージョンの streamlit==1.33.0 を利用しましょう。

第4章 社内検索RAGアプリを作ってみよう

RAGの基本的な説明から始まり、生成AIを使ったRAGアーキテクチャの実装例を解説しています。 その中で、自然言語をベクトル化してコサイン類似度で比較する図があり、検索の仕組みがわかりやすく説明されています。

Knowledge base for Amazon Bedrock を利用したRAG作成方法が丁寧に解説されており、マネジメントコンソールでポチポチするだけで簡単にRAGを作成することができます。 ただ、OpenSearch Serverlessを利用するため、こちらは本当に値段が高いので使う場合は注意が必要です。 RAGは簡単に作れても、公開するにはFrontendも必要になります。 ここでも StreamlitLangChain を利用して、簡単にWebアプリ化する方法も解説されています。 Streamlit は本当に便利ですね。 LangChain を利用せずに Boto3 のみでの例があるのも助かります。

第5章 便利な自立型AIエージェントを作ってみよう

ここではベクトルデータベースに Pinecone を利用しています。 Pinecone は、ベクトルデータベースを提供するSaaSですが、今回はAWS Marketplaceの製品を利用しています。 Marketplace初心者でもわかるように丁寧に説明しているから安心感がありますね。 AWSの他のベクトルデータベースに比べてかなり安いため、セットアップに少し手間暇はかかりますが、初めてベクトルデータベースを利用する人にはおすすめです。

Agent detail で指定するエージェント向けの指示のプロンプトが非常に参考になりますね。 エージェントを利用したことがなかったのですが、エージェントのトレース情報を見ることにより、生成AIの挙動を理解することができますね。 ここが面白く興味深い内容でした。

第6章 Bedrockの機能を使いこなそう

ファインチューニングのやり方が解説されてます。 教師あり、教師なし両方のやり方が解説されているので、試してみたくなるもののファインチューニングはオンデマンドでは利用できず、プロビジョンドスループットじゃないと使えないので、ちょっとハードルが高いですね。 やはりファインチューニングはある程度予算がないと難しそうです。

Berock Studioの使い方も解説されています。 現在はまだプレビューのようですが、手軽にBedrockを使ってもらうために良さそうな機能です。

第7章 さまざまなAWSサービスとBedrockを連携しよう

CloudWatchで出力できる項目の説明や、CloudTrailでの監査ログのサンプルなど、AWSのサービスとBedrockを連携するための基本的な知識が書かれています。 CloudFormationのサンプルの掲載もありました。 BedrockはすでにCloudFormation対応しているんですね。

第8章 生成AIアプリをローコードで開発しよう

Step Functionsを利用した生成AIアプリの開発方法が解説されています。 Step Functionsの詳細な説明から入っているのがありがたいですね。 Qiitaの記事を取ってきて、各記事の要点をまとめて、作者の自己紹介文とキャッチコピーまで生成するアプリを作成しています。 最後にアイキャッチまで生成しているのがすごいですね。 応用できそうな例でとても興味深く感じました。

第9章 Bedrock以外の生成AI関連サービスの紹介

Amazon QやSageMakerなどの紹介がされています。 Amazon Qは期待のサービスですが、まだ英語メインなのでその点で少し使いづらいかもしれません。 出たばかりのAmazon Qの情報がまとまって載っているので、Amazon Qを試してみたい人にはオススメの章です。 私はデータ分析基盤も作っているため、Amazon Q in QuickSightが気になりました。

第10章 Bedrockの活用事例

作者3名の会社での活用事例が紹介されています。 企業での活用事例は、生成AIの活用方法がより具体的にイメージできるので、とても参考になりますね。 実際に使っている人の話を聞くことができ、とても貴重な情報です。

第11章 お勧めの最新情報のキャッチアップ方法

AWS公式ドキュメントやブログ、技術コミュニティなどが紹介されています。 お馴染みの情報源が紹介されているのですが、新たにAWSを学ぶ人にはとても参考になると思います。

付録

AWSアカウントの作成から、開発環境のCloud9の構築まで丁寧に解説されています。 MFAを設定するなど、ベストプラクティスな内容も含まれているので、初心者にはとてもありがたいですね。

まとめ

一通り読んで試した感想としては、 誰も置いてきぼりにならないように配慮して丁寧に説明している本 と感じました。 生成AIの基本概念や動向、プロンプトエンジニアリングの手法、RAGやエージェントの作成、さまざまなAWSサービスとの連携例など、充実した内容となっています。 マネジメントコンソールの操作手順やコードサンプルが用意されているため、実際に手を動かしながら学習できます。

  • 丁寧な説明から入る
    • AWSのサインアップから説明がある
    • コサイン類似度などベクトル検索の説明などにも触れている
  • 全編カラーで読みやすい
    • しかも重要な文章は、ハイライトされている
  • マネジメントコンソールの操作は、キャプチャーが準備されている
    • マネジメントコンソールはアップデートが激しいので、今後改定など考えると大変そう
  • コードについては、GitHub で公開されている
    • git clone してそのまま動かすこともできる

また、AWSをある程度知っている人向けの本かなと思っていたのですが、AWSのサインアップから説明があるので、これを機会にAWSを触ってみたい人にも勧めれる内容になっています。 AWSは豊富なサービスを組み合わせて「ビルディングブロック」でアプリケーションを構築していきます。 特定のサービスのみ使おうとしても、IAMなどの理解も必要だったり、初学者には大変な要素もありますが、Bedrockを中心にビルディングブロックでアプリケーションを組み立てるサンプルなどもあったりします。 Amazon Bedrock を中心に、生成AIの基礎から実践的な開発手法までを幅広く解説した入門書になっていました。

丁寧な解説と実践を通して、生成AIの活用方法が具体的にイメージできる点はとても役に立つと思いました。 Streamlit などの解説もあり、Bedrockを利用したWebアプリを簡単に実現できるところなど、PoCとして活用することができそうです。 生成AIは新しい技術分野ですが、今後誰もが利用する技術になっていくと思われます。 まずは、本書を読んで活用する足がかりにすることができそうと感じました。