【Python】Claude3のAPIを叩いてみよう~

# はじめに

最近話題のClaude3。
なかなか日本語がお得意なようで、ChatGPTから乗り換える人もちらほらいますね。
というわけでさらっとAPIを使ってみます。


## 前提

- Pythonがローカルで実行できる

今回はPythonを使っていくので実行環境を用意しておいてください。ローカルでなくとも問題ないです。


## 手順

### 1. APIキーを発行する

まずは[コンソール](https://console.anthropic.com)にアクセスします。

https://console.anthropic.com

ちなみに普段チャットで使うClaude3のページとは異なるので注意してください。

記事を作成している現在（2024/04/23）ですが、クレジットがいくらかもらえますので、無料で試すことができますよ~。

はい、では**API Keys**からキーを発行してコピペしておいてください。


### 2. 叩いてみる

ではでは...作業用のディレクトリに移動します。

まずは、ライブラリを持ってきます。

```bash
$ pip install anthropic
```

次にAPIキーを環境変数に設定しちゃいます。
私の場合はzshなので`/.zshrc`に書いておきます。

```
export ANTHROPIC_API_KEY="********"
```

ちょっと試してみるくらいだったら、プログラムの中にべた書きしちゃっていいと思います。

ではでは、リクエストを送っていきましょう~~

```python

import anthropic

client = anthropic.Anthropic(
    api_key="xxx", # もしも環境変数でAPIキーを設定していなかったら、ここで渡しておく
)


# client = anthropic.Anthropic() 設定していたらこっちでOK

message = client.messages.create(
    model="claude-3-opus-20240229", # モデル claude-3-opus-20240229, claude-3-sonnet-20240229, claude-3-haiku-20240307
    max_tokens=1000, # 4096 後述
    temperature=0.0, # 高ければはちゃめちゃになる
    system="", # プロンプト（なくてもいい）
    messages=[
        {"role": "user", "content": "明日のご飯は何がいいかな？"}
    ]
)

print(message.content)

```

生成されたメッセージはこちらです。
```

明日のご飯のおすすめは、以下のようなメニューはいかがでしょうか。

1. 鶏の照り焼き：鶏肉を醤油ベースのタレで焼いた、甘辛い味わいの一品です。ご飯との相性も抜群です。

2. 豚の生姜焼き：豚肉を生姜風味のタレで焼いた料理で、ご飯が進む一品です。

3. 野菜炒め：季節の野菜を使った炒め物は、ヘルシーで栄養バランスも良いです。

4. カレーライス：定番の家庭料理で、具材を変えることで様々なバリエーションが楽しめます。

5. 焼き魚：鮭や鯖など、お好みの魚を焼いて、ご飯と一緒にいただくのもおすすめです。

6. パスタ：トマトソースやクリームソースなど、お好みのソースで楽しめます。サラダと一緒に召し上がるのもおすすめです。

7. 肉じゃが：牛肉、じゃがいも、玉ねぎを甘辛く煮込んだ料理で、ご飯との相性も抜群です。

これらは一例ですが、お好みや手持ちの食材に合わせて、アレンジしてみてください。

```

レスポンスの構造自体はこんな感じですね〜。

```json

{
  "id": "msg_xxxxxxxx",
  "content": [
    {
      "text": "明日のご飯のおすすめは、以下のようなメニューはいかがでしょうか。\n\n1. 鶏の照り焼き：鶏肉を醤油ベースのタレで焼いた、甘辛い味わいの一品です。ご飯との相性も抜群です。\n\n2. 豚の生姜焼き：豚肉を生姜風味のタレで焼いた料理で、ご飯が進む一品です。\n\n3. 野菜炒め：季節の野菜を使った炒め物は、ヘルシーで栄養バランスも良いです。\n\n4. カレーライス：定番の家庭料理で、具材を変えることで様々なバリエーションが楽しめます。\n\n5. 焼き魚：鮭や鯖など、お好みの魚を焼いて、ご飯と一緒にいただくのもおすすめです。\n\n6. パスタ：トマトソースやクリームソースなど、お好みのソースで楽しめます。サラダと一緒に召し上がるのもおすすめです。\n\n7. 肉じゃが：牛肉、じゃがいも、玉ねぎを甘辛く煮込んだ料理で、ご飯との相性も抜群です。\n\nこれらは一例ですが、お好みや手持ちの食材に合わせて、アレンジしてみてください。",
      "type": "text"
    }
  ],
  "model": "claude-3-opus-20240229",
  "role": "assistant",
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "type": "message",
  "usage": { "input_tokens": 22, "output_tokens": 430 }
}

```

`usage`にインプットとアウトプットのトークンが入ってますねー。

見た感じ、OpenAIのAPIを使っていた方ならサラッと使い始められちゃいますね。


いい感じに使えているので、次はClaudeの目玉とも言える画像を試して見ます！

```python

import anthropic
import base64
import httpx

image_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image_media_type = "image/jpeg"
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")

message = anthropic.Anthropic().messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1024,
    system="write in Japanese",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image_media_type,
                        "data": image_data,
                    },
                }
            ],
        }
    ],
)
print(message)

```

ちなみにここで渡しているのは巨大なアリの画像です。
出力はこちらです。

```
この画像は、コンクリートの表面に立っている小さな黒いアリの写真です。
アリは細長い触覚と脚を伸ばして立ち上がっており、細部まではっきりと捉えられています。
背景はぼやけていて、アリにフォーカスが当てられています。
アリの体は光を反射しており、つやのある外骨格が見られます。
この写真は、小さな生き物の美しさと複雑さを捉えており、昆虫の世界を身近に感じさせてくれる1枚だと思います。
```

※見やすいように改行入れてます。

なかなか精度が高いですよね。結構面白いです。
お分かりかと思いますが、エンコードする必要がありますので利用される際は忘れずに〜！


## 料金やモデルの特徴について

気になる料金ですね。抜粋してまとめました。上が原文です。

|                         | Claude 3 Opus                              | Claude 3 Sonnet                                | Claude 3 Haiku                                   |
|:-----------------------:|:------------------------------------------:|:----------------------------------------------:|:------------------------------------------------:|
| Description             | Most powerful model for highly complex tasks | Ideal balance of intelligence and speed for enterprise workloads | Fastest and most compact model for near-instant responsiveness |
| Latest API model name   | claude-3-opus-20240229                      | claude-3-sonnet-20240229                        | claude-3-haiku-20240307                           |
| Comparative latency     | Moderately fast                            | Fast                                           | Fastest                                          |
| Max output              | 4096 tokens                                | 4096 tokens                                    | 4096 tokens                                      |
| Cost (Input / Output per MTok^) | $15.00 / $75.00                    | $3.00 / $15.00                                 | $0.25 / $1.25                                    |


|                         | Claude 3 Opus                              | Claude 3 Sonnet                                | Claude 3 Haiku                                   |
|:-----------------------:|:------------------------------------------:|:----------------------------------------------:|:------------------------------------------------:|
| 説明                      | 高度な複雑なタスクに最適な最も強力なモデル        | エンタープライズワークロードに最適なインテリジェンスとスピードのバランス | 即時応答性に優れた最速かつ最もコンパクトなモデル          |
| 最新APIモデル名           | claude-3-opus-20240229                      | claude-3-sonnet-20240229                        | claude-3-haiku-20240307                           |
| 比較レイテンシー          | やや速い                                    | 速い                                           | 最速                                             |
| 最大出力                  | 4096トークン                                | 4096トークン                                    | 4096トークン                                      |
| コスト (入力 / 出力あたりのMTok^) | $15.00 / $75.00                        | $3.00 / $15.00                                 | $0.25 / $1.25                                    |


この辺結構端折ってますので、公式のドキュメントを見ていただけると...

https://docs.anthropic.com/claude/docs/models-overview


## おまけ

シェルでもちょっと遊んでみる。
```bash
#!/bin/sh
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-3-opus-20240229",
    "max_tokens": 1024,
    "messages": [
        {"role": "user", "content": "Hello, Claude"}
    ]
}'
```

```json

{
  "id": "msgxxxxxx",
  "type": "message",
  "role": "assistant",
  "model": "claude-3-opus-20240229",
  "stop_sequence": null,
  "usage": { "input_tokens": 10, "output_tokens": 18 },
  "content": [
    {
      "type": "text",
      "text": "Hello! It's nice to meet you. How are you doing today?"
    }
  ],
  "stop_reason": "end_turn"
}

```

いい感じ！


# おわりに
というわけでClaude3のAPIで遊んでみました！
さわりの部分しか紹介してませんので、興味を持っていただけたらぜひ公式のリファレンスに目を通していただけるといいかと思います！

https://docs.anthropic.com/claude/docs/intro-to-claude

https://docs.anthropic.com/claude/reference/getting-started-with-the-api

ちなみにクックブックもあります。
一通り遊んだ後に目を通してみるととっても楽しめるのではないかと思います！

https://github.com/anthropics/anthropic-cookbook