昨晩時点では未対応だったPython用のAWS SDK(boto3)もようやくBedrockに対応したようです!
※宇宙最速でAPIを叩いたQiita記事は @moritalous さんでした!?
AWSのPython SDK(boto3)から叩いてみる
まずBedrockでAPIを利用したい基盤モデルへのアクセスを許可しておきます。こちらの記事を参照。
そして当該AWSアカウントへのCLIアクセスができるよう、あなたのPCにAWSプロファイルの認証情報を設定しておきます。こちらを参照。
そして適当な作業用ディレクトリを作り、test.py
的なファイルを作ってコードを書く準備をします。
また、Python用のAWS SDK(boto3)を最新バージョンに更新しておきましょう。
pip install --upgrade boto3
まずはClaude v2をPythonから呼んでみましょう。以下の公式ドキュメントのサンプルを参考。
import boto3
import json
bedrock = boto3.client(service_name='bedrock-runtime')
body = json.dumps({
"prompt": "\n\nHuman:KDDIアジャイル開発センターってどんな会社?\n\nAssistant:",
"max_tokens_to_sample": 300,
"temperature": 0.1,
"top_p": 0.9,
})
modelId = 'anthropic.claude-v2'
accept = 'application/json'
contentType = 'application/json'
response = bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)
response_body = json.loads(response.get('body').read())
# text
print(response_body.get('completion'))
するとエラーになりました。リージョンの指定が必要のようです。
botocore.exceptions.NoRegionError: You must specify a region.
AWS CLI用の認証情報ファイルにリージョンを記載しているのですが、うまく効いていないようだったので以下を参考に強制指定してみました。
aws configure set region us-east-1 --profile <プロファイル名>
すると無事にBedrockのAPIから応答を得ることが出来ました!
KDDIアジャイル開発センターは、KDDI株式会社のグループ会社です。
主な事業内容は以下の通りです。
- KDDIの新規事業やサービス開発のためのアジャイル開発
- KDDIグループ各社のシステム開発
- クラウド関連事業
- RPA(Robotic Process Automation)による業務自動化
KDDIグループの中でアジャイル開発を中心としたシステム開発を担う会社です。開発手法としてアジャイル開発を取り入れ、スピーディなサービス開発を行っています。
新規事業開発だけでなく、KDDIグループ各社のシステム開発も手がけているため、グループ全体のIT戦略立案・推進にも関与していると言えます。
※回答は微妙に嘘も混じっているので、正確な情報は弊社ホームページをご参照ください。笑
そしてLangChainから呼んでみるも…
LangChainの基本的な使い方は以下を参照。
まずはLangChainをインストールします。
pip install langchain
LangChainのLLMsとしてBedrockを呼び出すためのドキュメントが既にありました!
test2.py
という新規ファイルを作って試してみます。サンプルをClaude用に書き換えてみました。
from langchain.llms import Bedrock
llm = Bedrock(
credentials_profile_name="AWSプロファイル名",
model_id="anthropic.claude-v2"
)
output = llm.predict("日本の総理大臣は?")
print(output)
するとエラーになりました。Bedrockから「invoke_modelなんて属性ないよ」と怒られているようです。明示的に指定した覚えはないので、LangChainの内部動作がおかしい?
ValueError: Error raised by bedrock service: 'Bedrock' object has no attribute 'invoke_model'
Bedrockのユーザーガイドを見ていると、invoke_model
しているサービス名は bedrock
ではなく bedrock-runtime
の方なのでLangChainの不具合かも知れませんね。OSSコントリビューターの有志によりすぐに修正されるでしょう…。
なお、LangChain標準のBedrock用LLMラッパーではなく、自分で好きな基盤モデルを設定して使える「Custom LLM」を使えば現時点でもBedrockをLangChain LLM化出来るかも知れません。
マネコン派の方はこちらもどうぞ