【AWS】GitHub CodespacesとLangChainでClaude 3.5 Sonnetを実行してみる

## はじめに

この記事では[GitHub Codespaces](https://docs.github.com/ja/codespaces/overview)を使って、Amazon BedrockのClaude 3.5 Sonnetを試す内容になっています。

主な内容としては実践したときのメモを中心に書きます。（忘れやすいことなど）誤りなどがあれば書き直していく予定です。

なお、環境のセットアップについては以下を参考にしてください。
[【GitHub】GitHub CodespacesでAWS CLIをセットアップする](https://qiita.com/ymd65536/items/64ad445946570d7c78e2)

## 実行環境

開発利用する環境は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をCodespacesのターミナルで実行します。

[Codespacesのリンク](https://github.com/codespaces)

```bash
pip install boto3==1.34.87 langchain==0.2.0 langchain-aws==0.1.4 langchain-community==0.2.0
```

### モデルを有効化する

次にデフォルトではモデルのアクセスが有効になっていないため、モデルアクセスを有効化します。

リージョンが`us-east-1`のAWSマネジメントコンソールからAmazon Bedrockを開きます。

![Screenshot 2024-06-20 at 21.59.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/01385cc5-a2cd-324b-3c4f-820d27140cde.png)

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

![Screenshot 2024-06-20 at 22.01.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/bb71c189-7618-6c3b-a779-395235899adc.png)

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

![Screenshot 2024-06-20 at 22.01.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/e965508d-ae34-1296-bc3d-6f55bbf9293e.png)

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

![Screenshot 2024-06-21 at 0.00.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/3c036a2a-7cf3-e02b-40f3-7f77f98d6005.png)

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

![Screenshot 2024-06-21 at 0.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/fe987efe-e6e9-83b6-06b8-194ab5ab7fb1.png)

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

![Screenshot 2024-06-20 at 22.02.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/8b466fcc-7258-8068-8767-a551db27039d.png)

`Submit`をクリックします。

![Screenshot 2024-06-20 at 22.02.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/f92bdae9-4737-e9af-ab40-acc532bc6d59.png)

これで有効化完了です。

## 実際に動かしてみる

### aws sso login

認証方法は設定済みだけどもしばらく時間が経過してしまった場合は以下のコマンドを実行して再度、認証してください。認証済みの場合は実行しなくても良いです。

```bash
aws sso login
```

### Bedrockするためのコードを書く

では、コードを書いて実際に動かしてみましょう。
今回はLangChainを使って、Amazon BedrockのAPIを実行します。

```py:main.py
from langchain_aws import ChatBedrock
from langchain_core.messages import HumanMessage, SystemMessage

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

messages = [
    SystemMessage(content="あなたは仕事はユーザーの質問に答えることです。"),
    HumanMessage(content="雲の上には何がありますか？"),
]
try:
    response = chat.invoke(messages)
    print(response.content)
except Exception as e:
    print(str(e))
```

pythonで実行します。

```bash
python main.py
```

実行結果

```text
雲の上には主に以下のようなものがあります：

1. 大気層: 雲の上にはさらに大気が広がっています。成層圏、中間圏、熱圏などの層があります。

2. 他の雲: 雲の種類や高度によっては、その上にさらに別の雲があることもあります。

3. 飛行機: 多くの旅客機は雲の上を飛行します。

4. 人工衛星: 地球を周回する様々な人工衛星があります。

5. 宇宙: 大気圏を超えると宇宙空間があります。

6. 天体: 太陽、月、星などの天体が見えます。

7. オーロラ: 極地方では、雲の上空でオーロラを観察できることがあります。

8. 気象現象: 高高度で発生する特殊な気象現象もあります。

雲の上の世界は、地上とは全く異なる環境であり、多くの興味深い現象や物体が存在しています。
```

Claude 3 Sonnetの実行結果と比較してみる。

```text
雲の上には主に以下のようなものがあります。

- 成層圏 - 雲の上にある大気の層で、高度約12km〜50kmまでを占めています。この層は非常に安定しており、気温の低下率が小さくなっています。

- 飛行機 - ジェット旅客機の多くは高度約9km〜12kmで飛行しており、雲の上の成層圏を飛行しています。

- 宇宙 - 高度約100kmより上は熱圏と呼ばれ、さらに高ければ宇宙空間に至ります。国際宇宙ステーションは約400km上空を周回しています。

- オゾン層 - 成層圏の高度約15km〜35kmにオゾンが多く存在する層があり、有害な紫外線を吸収する働きがあります。

- 気球や人工衛星なども雲の上を飛行・周回しています。

つまり、雲の上には大気の別の層や宇宙空間があり、航空機や人工物体が活動している領域なのです。

```

## まとめ

今回はGitHub CodespacesとLangChainでClaude 3.5 Sonnetを実行してみました。
Claude 3 Sonnetとはまた違った答えが返ってきた上に返す内容も3.5の方がより細かくなっていることがわかります。たとえば、オーロラのくだりはClaude 3 Sonnetではありません。

また、Claude 3.5 Sonnetはさまざまなところで検証がされており、それらをいるだけでもかなり優秀な基盤モデルであることがわかります。

ちなみに[【AWS】GitHub CodespacesとLangChainでBedrockするための開発（その1）](https://qiita.com/ymd65536/items/ee6c25a3bde34f2d3e92)を出してから数分後にClaude 3.5 Sonnetが登場したので神タイミングでした。

https://x.com/AnthropicAI/status/1803790689408332059

今後の発展に期待です。

## トラブルシューティング

以下、トラブシューティングです。詰まった時の参考にしてください。

### 認証エラー

以下のようなエラーが出てしまう場合は`aws sso login`を実行しましょう。

```text
Error raised by bedrock service: The SSO session associated with this profile has expired or is otherwise invalid. To refresh this SSO session run aws sso login with the corresponding profile.
```

## おわり