見出し画像

【LLM】Amazon BedrockとLangChainでClaude 3 Haikuを動かす

はじめに


AWS上で生成AIを実行することができる、Amazon Bedrockを試してみようと思います。

今回は、Bedrock上でClaude 3 Haikuを使えるようにし、LangChainを介してAPI実行できるようにしてみたいと思います。


Amazon Bedrock


AWSが提供するLLMのプラットフォームです。ClaudeをはじめとするAPI経由のLLMモデルや、オープンソースのLLMを同一のAPIから実行することができるという便利さがあります。

また、RAG環境を構築できるKnowledgeBaseやエージェントを構築できるAgents for Amazon Bedrock、モデルの入出力に制約をかけられるガードレールなどのツールも提供されている点もメリットのひとつです。

もちろん、AWSの各種サービスとの連携しやすいてんも強みのひとつです。

まぁこれらは全て調べたことを書いているだけですから、百聞は一見にしかずということで、実際に試していきたいと思います!

Amazon Bedrockへアクセス


Claude 3を使いたいのですが、2024/05/30現在は東京リージョンでは提供されていません。ということで、今回はバージニア北部リージョンを使っていきます。
AWSのコンソールから、Bedrockへアクセスします。 左上の「サービス」をクリックして、検索窓からBedrockを検索すると出てきます。

Amazon Bedrockをクリックします。

「使用を開始」をクリック。

「モデルアクセスを管理」をクリックします。ポップアップを消してしまった場合は、左下に「モデルアクセス」がありますので、そちらをクリックでも良いです。

ここから、BedrockでLLMモデルへアクセスできるように設定していきます。

モデルアクセスのリクエスト


Bedrockでは、基板モデルによる推論を行うために事前にモデルへのアクセスをリクエストしておく必要があります。

モデルアクセスの管理を行うための権限が必要となりますので、IAM Full Accessが付与されたアカウントを使えば便利です。最低限の権限で作業 を行いたい場合は、下記を参考に権限の付与を行うとよいと思います。
Identity-based policy examples for Amazon Bedrock - Amazon Bedrock

Claude 3を含む一部のモデルでは、リクエストするためにユースケースを送信する必要があります。その場合は、適当に必要事項を埋めて送信してください。数分後に、リクエストが可能になります。

使いたいモデルが「リクエスト可能」となっていることを確認し、「モデルアクセスを管理」をクリックします。

使用したいモデルにチェックを入れ、下部の「モデルアクセスをリクエスト」をクリック。これで完了です。

モデルが使えるようになったか、実験します。プレイグラウンドを使えば、簡単に試すことができます。画面左のメニューのプレイグラウンドより、「チャット」をクリックします。モデルを選択して、チャットしてみます。

適当にプロンプトを入力して実行を押すと

動きました!これで、BedrockからClaude 3 Haikuを使うことができるようになりました。

LangChain経由で実行


LangChainで色々作って遊びたいので、LangChain経由でBedrockにアクセスする練習をしておこうと思います。

まずはAWSの各種キーを環境変数に設定しておきます。

import os

os.environ["AWS_ACCESS_KEY_ID"] = "access_key"
os.environ["AWS_SECRET_ACCESS_KEY"] = "secret_access_key"
os.environ["AWS_DEFAULT_REGION"] = "us-east-1"

Bedrockの実行のため、langchain_awsを使います。まずは、関連ライブラリ含めpipでインストールします。

pip install langchain-aws langchain-community langchain-core boto3

HaikuはChatモデルなので、ChatBedrockを使います。Chatモデルではない場合はBedrockLLMを使うと良いみたいです。

from langchain_aws import ChatBedrock
from langchain_core.messages import HumanMessage


# チャットモデルを定義
chat = ChatBedrock(
    model_id="anthropic.claude-3-haiku-20240307-v1:0",
    model_kwargs={"temperature": 0.1},
)
# チャットを実行
result = chat.invoke(
    [
        HumanMessage(content="日本で一番高い山は?"),
    ]
)

# 結果を表示
print(result.content)

いざ実行!

日本で一番高い山は富士山(ふじさん)です。

富士山の標高は3,776メートルで、日本で最も高い山です。富士山は静岡県と山梨県にまたがる活火山で、日本の象徴的な山として知られています。

富士山は全国から多くの登山客や観光客が訪れる人気の観光地です。四季折々の表情を見せ、美しい山容と雄大な自然に多くの人々を魅了しています。富士山は2013年に世界文化遺産にも登録されました。

動きました!

最後に


Bedrockを使ってLangChainを動かせるようになりました。ローカルLLMとは違い、使えば使うほどお金はかかってしまいますが、性能のいいモデルを高速で使えるというのはやはり色々メリットがあると思います。

LangChainを使ってRAGやAgentの構築もやっていきたいと思います!



この記事が気に入ったらサポートをしてみませんか?