1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事では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を開きます。

Screenshot 2024-06-20 at 21.59.58.png

カッコイイ画面が開きましたら左側にある三本線、いわゆるハンバーガーメニューを開きましょう。

Screenshot 2024-06-20 at 22.01.02.png

メニューの中からModel Accessをクリックします。

Screenshot 2024-06-20 at 22.01.15.png

モデルの一覧が表示されますのでその中からClaude 3 SonnetAvailable to requestにカーソルを合わせます。Request model accessのリンクが表示されるのでクリックします。

Screenshot 2024-06-20 at 22.01.43.png

クリックするとSonnetにチェックが入ります。

Screenshot 2024-06-20 at 22.02.00.png

そのまま下にスクロールしてNextをクリックします。

Screenshot 2024-06-20 at 22.02.15.png

Submitをクリックします。

Screenshot 2024-06-20 at 22.02.24.png

これで有効化完了です。

実際に動かしてみる

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を間違えているので確認しましょう。
指定したリージョンでモデルが使えるかどうかの確認も必要です。

参考資料

おわり

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?