📚

Claude3 API使ってみる

2024/03/14に公開

みなさん!こんにちは。
kirigayaです。
AIの最新情報でお祭り騒ぎの日々を送っていますが、そんな中ついにClaude3がリリースされました!
注目はなんといってもGPT-4より高精度な日本語PDF読み取りかと思います。
夢広がりますよね。今までデータ化が難しかったファイルなんかも簡単に構造化データに変換して分析する未来が見えます。
※PDFで遊ぶ系は別の記事にしようと思います。今回はpngなどを扱います。
それではさっそく登録して無料で5ドルクレジットを入手していきましょう!
※WEB上で使うプレイグラウンドとAPIではアカウントが違うようなので注意してください。
環境はMacOSです。
https://www.anthropic.com/claude

Claude3のAPIドキュメントはこちら
https://docs.anthropic.com/claude/reference/getting-started-with-the-api

モデル一覧
https://docs.anthropic.com/claude/docs/models-overview

モデル 最新のAPIモデル名
Claude3 Opus claude-3-opus-20240229
Claude3 Sonnet claude-3-sonnet-20240229
Claude3 Haiku claude-3-haiku-20240307

Claude3はどのモデルも画像を理解することができるそうです。

さっそく環境変数を設定していきます

vim ~/.zshrc
export ANTHROPIC_API_KEY="********"

python SDKのインストール
ガイドはこちら
https://docs.anthropic.com/claude/docs/quickstart-guide

poetry add anthropic

とりあえずテキストを送信してみる

import anthropic

client = anthropic.Anthropic(
    # defaults to os.environ.get("ANTHROPIC_API_KEY")
)
message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "こんにちは!Claude3。今日からよろしくね。私の新しい相棒さん"}
    ]
)
print(message.content)

返ってきたコメントはこんな感じ

こんにちは!これから一緒に楽しく会話ができるのを楽しみにしています。
あなたの興味のあることや、お話ししたいことがあれば、どんなことでも聞かせてください。
できる限りお力になれるよう頑張ります。これからよろしくお願いします!

それでは画像を送信してみよう
画像を送信する時のベストプラクティス

  • 画像の鮮明さ:画像が鮮明で、ぼやけすぎたり、ピクセル化されすぎたりしていないことを確認します。Claude3は、不鮮明な画像または低品質の画像を正確に解釈するのに苦労する可能性があります。
  • 画像の配置:ドキュメント クエリの配置と同様に、Claude3は画像がテキストの前にある場合に最適に機能します。画像をテキストの後に配置したり、テキストを補間したりしてもパフォーマンスは良好ですが、ユースケースで許容される場合は、画像、テキストの順に構成することをお勧めします。
  • テキスト:画像に重要なテキストが含まれている場合は、読みやすく、小さすぎないことを確認してください。ただし、テキストを拡大するためだけに主要なビジュアルコンテキストを切り取ることは避けてください。
  • 複数の画像: 1 つのリクエストに複数の画像を含めることができます ( claude.aiの場合は最大 5 個、API リクエストの場合は最大 20 個)。クロードは、応答を作成する際に、提供されたすべての画像を分析します。これは、画像を比較または対照するのに役立ちます。

1枚の画像に質問してみる
media_typeはjpgとかpngとかです
画像はbase64にエンコードする必要があります

import base64
import anthropic

client = anthropic.Anthropic(
    # defaults to os.environ.get("ANTHROPIC_API_KEY")
)

# 画像をbase64にエンコードする
def get_base64_encoded_image(image_path: str) -> str:
    with open(image_path, "rb") as image_file:
        binary_data = image_file.read()
        base_64_encoded_data = base64.b64encode(binary_data)
        base64_string = base_64_encoded_data.decode('utf-8')
        return base64_string

image_path = "/test/work/test_img/test1.jpg"
message = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    messages = [
    {
        "role": 'user',
        "content": [
            {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": get_base64_encoded_image(image_path)}},
            {"type": "text", "text": "何が描かれていますか?できる限り詳細に教えてください"}
        ]
    }
]
)
print(message.content[0].text)

かなり認識精度高いです。いろいろ入力して遊んでみてください。
今回は1枚でしたが複数枚同時に入力やsystem="Respond only in Spanish.",のように設定もできるようです...やれることいっぱい

画像に関する制限

よくある質問 回答
Claude3がサポートしている画像ファイルの種類 JPEG、PNG、GIF、WebP
Claude3は画像のURLを読み取ることが可能か? 読み取り不可
アップロードできる画像ファイルのサイズ制限 5MB(API)
1つのリクエストに含めることができる画像枚数 MessagesAPIでは最大20枚、claude.aiでは最大5枚までです。
Claude3は画像のメタデータを読み取れるか? 読み取り不可
アップロードした画像は削除可能か? 不可能 アップロードした画像は一時的でAPIリクエストの後に削除される
Claude3は画像を生成、生成、編集、操作は可能か? 不可能、Claude3は画像を生成、生成、編集、操作することはできません。

一番重要かもしれない...コストについて

Claude3へのリクエストに含める各画像は、トークンの使用量にカウントされます。おおよそのコストを計算するには、イメージ トークンのおおよその数に、使用しているモデルのトークンごとの価格を掛けます。
tokens = (width px * height px)/750
入力トークン100万あたり3ドルでClaude3 Sonnetを使用する場合...

画像サイズ トークンの数 費用・イメージ コスト / 1K 画像
200x200ピクセル(0.04メガピクセル) ~54 ~$0.00016 ~$0.16
1000×1000ピクセル(100万画素) ~1334 ~$0.004 ~$4.00
1092x1092 ピクセル(119万画素) ~1590 ~$0.0048 ~$4.80

今日はここまでw
ここにクックブックがあるので色々遊べそうです。
https://github.com/anthropics/anthropic-cookbook/tree/main/multimodal

利用規約
https://www.anthropic.com/legal/consumer-terms

岩田組

Discussion