はじめに
この記事ではGitHub Codespacesを使って、Amazon Bedrockにハンズオンしていく内容になっています。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)誤りなどがあれば書き直していく予定です。
今回は「Amazon Bedrock 生成AIアプリ開発入門」と公式ドキュメントを参考にAmazon BedrokをLangChainで動かしていきたいと思います。
Amazon Bedrock 生成AIアプリ開発入門
※発売前に献本いただきました。著者の皆様、ありがとうございます!
なお、環境のセットアップについては以下を参考にしてください。
【GitHub】GitHub CodespacesでAWS CLIをセットアップする
実行環境
開発利用する環境はGitHub Codespacesですが、その上で様々なものを扱うのでバージョンを明記しておきます。
- GitHub Codespaces
- Python 3.10.13
- GitHub Codespacesデフォルトのもの利用
- pip 24.0 from /usr/local/python/3.10.13/lib/python3.10/site-packages/pip (python 3.10)
- GitHub Codespacesデフォルトのもの利用
セットアップ
パッケージをインストール
まずは、Pythonのパッケージを整えていきます。以下のpipを実行します。
pip install boto3==1.34.87 langchain==0.2.0 langchain-aws==0.1.4 langchain-community==0.2.0
モデルを有効化する
次にデフォルトではモデルのアクセスが有効になっていないため、モデルアクセスを有効化します。
AWSマネジメントコンソールからAmazon Bedrockを開きます。
カッコイイ画面が開きましたら左側にある三本線、いわゆるハンバーガーメニューを開きましょう。
メニューの中からModel Access
をクリックします。
モデルの一覧が表示されますのでその中からClaude 3 Sonnet
のAvailable to request
にカーソルを合わせます。Request model access
のリンクが表示されるのでクリックします。
クリックするとSonnetにチェックが入ります。
そのまま下にスクロールしてNext
をクリックします。
Submit
をクリックします。
これで有効化完了です。
実際に動かしてみる
Bedrockするためのコードを書く
では、コードを書いて実際に動かしてみましょう。
今回はLangChainを使って、Amazon BedrockのAPIを実行します。
from langchain_aws import ChatBedrock
from langchain_core.messages import HumanMessage, SystemMessage
chat = ChatBedrock(
model_id="anthropic.claude-3-sonet-20240229-v1:0",
model_kwargs={"max_tokens": 1000},
region_name="us-west-2"
)
messages = [
SystemMessage(content="あなたは仕事はユーザーの質問に答えることです。"),
HumanMessage(content="雲の上には何がありますか?"),
]
try:
response = chat.invoke(messages)
print(response.content)
except Exception as e:
print(str(e))
実行結果
雲の上には主に以下のようなものがあります。
- 成層圏 - 雲の上にある大気の層で、高度約12km〜50kmまでを占めています。この層は非常に安定しており、気温の低下率が小さくなっています。
- 飛行機 - ジェット旅客機の多くは高度約9km〜12kmで飛行しており、雲の上の成層圏を飛行しています。
- 宇宙 - 高度約100kmより上は熱圏と呼ばれ、さらに高ければ宇宙空間に至ります。国際宇宙ステーションは約400km上空を周回しています。
- オゾン層 - 成層圏の高度約15km〜35kmにオゾンが多く存在する層があり、有害な紫外線を吸収する働きがあります。
- 気球や人工衛星なども雲の上を飛行・周回しています。
つまり、雲の上には大気の別の層や宇宙空間があり、航空機や人工物体が活動している領域なのです。
イイ感じに返してくれました。実はこの質問、過去に私が違うブログで実際に試したものです。
では、古い質問の再来ということで雲の上には何がありますか?
をくもの上には何がありますか?
と質問してみましょう。
これはクラウドのくも
とスパイダーのくも
、どちらとして認識するかのテストです。
message
変数を以下のように書き換えます。
messages = [
SystemMessage(content="あなたは仕事はユーザーの質問に答えることです。"),
HumanMessage(content="くもの上には何がありますか?"),
]
実行結果
くものうえには空があります。空には青空、雲、太陽、月、星などがあります。
空は大気の層で地球を取り囲んでおり、生物が住める環境を作り出しています。
空には鳥や飛行機も飛んでいますね。
雲として認識しました。
まとめ
GitHub CodespacesとLangChainでBedrockしてみました。LangChainは便利です。
この記事の筆者である私は業務においてGoogle Cloudを使っています。
業務ではGeminiをLangChainで呼び出しており、そこで思うのが「呼び出す生成AIのモデルが変わってもなんとなく使えてしまう」のがLangChainの良いところだと思います。
今回は初歩的な内容に留まりましたが、最近読んだ本を教えてくれるLINE botをGemini Proで作る
ということをやっているので今度はAmazon Bedrockで似たようなことをやっていきたいです。
トラブルシューティング
ここから下はトラブルシューティングです。必要に応じて参考にしてください。
ResourceNotFoundExceptionのエラーが出た
Error raised by bedrock service: An error occurred (ResourceNotFoundException) when calling the InvokeModel operation: Could not resolve the foundation model from the provided model identifier.
モデルアクセスを有効化できていないかもしくはモデルIDを間違えているので確認しましょう。
指定したリージョンでモデルが使えるかどうかの確認も必要です。