LoginSignup
9
4

【Amazom Bedrock】Anthropicのclaude-v2をboto3経由でストリーミング応答させてみた

Last updated at Posted at 2023-09-29

Amazom Bedrockとは

AmazonやStable DiffusionなどAI企業が提供する基盤モデル(FM)をAPIを通じて利用できるようにする完全マネージド型サービスです。

先日(9/28)にようやくGAしたので検証アカウントで早速使ってみました!!

■公式ブログ

■ ドキュメント

■ 料金

Bedrockを有効化

スクショを取り忘れたので、以下を参考に有効化すると流れが分かると思います。

早速ローカルから動かしてみる

先ずは普通に

import boto3
import json

session = boto3.Session(profile_name='AWSプロファイル')
client = session.client(
    'bedrock-runtime',
    region_name='us-east-1',
    )

prompt = '''
Human: AWSについて教えて
Assistant:
'''

body = {
    'prompt': prompt,
    'max_tokens_to_sample': 300,
}

response = client.invoke_model(
    modelId="anthropic.claude-v2",
    body=json.dumps(body)
)

body = response['body'].readlines()

completion = json.loads(body[0].decode('utf-8'))['completion']

print(completion)

ezgif.com-video-to-gif.gif

Tokenを300にしてるせいもありますがレスポンスが返ってくるまで20数秒かかってますね。

OpenAIなどに慣れすぎたせいかストリーミングでないとややもたつきを感じる身体になってしまったので、ストリーミング応答で挙動を確認したいと思います。

ストリーミング応答

import boto3
import json

session = boto3.Session(profile_name='AWSプロファイル')

bedrock = session.client(
    service_name='bedrock-runtime', 
    region_name='us-east-1',
    endpoint_url='https://invoke-bedrock.us-east-1.amazonaws.com'
)

prompt = '''
Human: AWSについて教えて
Assistant:
'''

body = json.dumps({
    "prompt": prompt,
    "max_tokens_to_sample": 300,
    })

response = bedrock.invoke_model_with_response_stream(
    modelId='anthropic.claude-v2',
    body=body
)

stream = response.get('body')
if stream:
    for event in stream:
        chunk = event.get('chunk')
        if chunk:
            print(json.loads(chunk.get('bytes').decode()))

ezgif.com-video-to-gif (1).gif

無事ストリーミング応答が出来ましたね!

おわり

あっさりですが、先ずはともあれ軽く試してみました。
引き続き他のモデルを使ってみてたりアプリケーションに組み込んでの比較など随時検証していきたいと思います。

9
4
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
9
4