3/27追記:ようやく本家What's Newも僕らに追いついて来たようです😆
ついにSonnetにも対応!
まだAWS公式のアナウンスはありませんが、ドキュメントが更新されているのがいち早く発見されました。
ひるたさん、いつも発見が早い!
現状、3つあるモデルのうちSonnetだけですが、既にBedrockにリリースされているHaikuモデルへの対応も時間の問題だと思われます。
また、エージェント for Amazon BedrockもじきにClaude 3対応されることが予想されます。
何が嬉しいの?
ナレッジベースとは、いわゆる「社内文書検索AIチャット」などを実現できるRAGアーキテクチャをAmazon Bedrockで簡単に作成できる機能です。
先日、BedrockのメインLLMと言えるAnthropic社のClaudeモデル最新版 v3がリリースされていましたが、ナレッジベースへの対応はまだでした。
ナレッジベースには2種類のAPIメソッドがある
お気づきの方もいるかもですが、ナレッジベース自体にClaude 3が未対応のときでもRAG回答生成にClaude 3を利用することは可能でした。なぜなら、ナレッジベースのAPIには2種類のメソッドがあるためです。
-
Retrieve
:ドキュメントの検索結果のみを返す -
RetrieveAndGenerate
:ドキュメントの検索結果をもとに、LLMで生成した回答を返す
RetrieveAndGenerate
には回答生成用のLLMをナレッジベースへ組み込む必要があるため、Claude 3の利用ができませんでした。
Retrieve
を使えば、ナレッジベースの外(アプリケーションロジック内など)で自分の好きなLLMを組み合わせることができるため、Claude 3も利用可能だったというわけです。
実機確認(マネコン)
マネジメントコンソールを見ると、ナレッジベースのテスト画面にはまだSonnetが出現していませんでした。
※人によってはすでに出現しているようです。
実機確認(API)
APIも確認してみます。Cloud9などを使って検証してみましょう。
まずはAWS SDK for Python (Boto3)のバージョンを最新化しておきます。
pip install -U boto3
Claude 3 Sonnetで RetrieveAndGenerate
を試してみます。
# Python外部ライブラリをインポート
import boto3
# Bedrockクライアントを作成
kb = boto3.client("bedrock-agent-runtime")
# ナレッジベースを定義
response = kb.retrieve_and_generate(
input={"text": "ECSとEKSの使い分けは?"},
retrieveAndGenerateConfiguration={
"type": 'KNOWLEDGE_BASE',
"knowledgeBaseConfiguration": {
"knowledgeBaseId": "XXXXXXXXXX", # ここにナレッジベースIDを記載する
"modelArn": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
},
},
)
# RAG結果を画面に表示
print(response["output"]["text"])
AWS活用ナレッジ集を食わせたナレッジベースを用いて、RAGで簡単に回答生成することができました!(内容の是非についてはここでは言及しません😷)
minorun365:~/environment $ python3 RAG-Sonnet.py
ECSとEKSの主な違いは以下の通りです:
- ECSはAWS独自のコンテナオーケストレーションサービスで、EKSはKubernetesをベースにしています。EKSの方が機能が豊富ですが、Kubernetesのバージョンアップ対応が必要になります。
- ECSはコントロールプレーンの管理が不要ですが、EKSではKubernetesのバージョンアップに合わせてコントロールプレーンの管理が必要です。
- データプレーンでは、ECSはEC2インスタンスの管理が必要ですが、Fargateを使えばサーバーレスで運用できます。EKSでもEC2インスタンスまたはFargateを選択できます。 使い分けとしては、以下のようなケースが考えられます:
- 既存のKubernetesスキルを活かしたい場合や、Kubernetesの豊富なエコシステムを活用したい場合はEKSを選択します。
- 単純なコンテナワークロードで、Kubernetesの複雑さを避けたい場合はECSを選択します。
- サーバーレスでコンテナを運用したい場合は、ECS+FargateまたはEKS+Fargate
おまけ:Retrieve単体で実行するコード例
以下のように実行すると、JSON形式でドキュメント検索結果のみが返却されます。
# Python外部ライブラリをインポート
import boto3
# Bedrockクライアントを作成
kb = boto3.client("bedrock-agent-runtime")
# ナレッジベースを定義
response = kb.retrieve(
knowledgeBaseId="XXXXXXXXXX", # ここにナレッジベースIDを記載する
retrievalQuery={"text": "ECSとEKSの使い分けは?"}
)
# 取得結果を画面に表示
print(response)