個人利用が可能になってたことに今さら気がついた Anthropic／Claude の API を試す： Tool use (function calling)

## はじめに
以前は規約的に個人利用が不可だった「[Anthropic／Claude の API](https://support.anthropic.com/ja/collections/5370014-claude-api)」が、個人利用可能になっていたことに今さら気がついたので、API を使う下準備から API を試してみるまでの流れをやってみました。

![222025-01-07_00-41-43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/050b56db-b124-fdf9-8c53-2edaedb35101.jpeg)

### 個人での利用について
ざっくり調べて見た感じだと、2024年の 10月ごろに API の個人利用が可能になったみたいでした。

以下は、現在の API利用に関する公式のヘルプセンターでの記載です。

●Anthropic APIを個人利用に使用できますか？ | Anthropicヘルプセンター
　https://support.anthropic.com/ja/articles/8987200-anthropic-api%E3%82%92%E5%80%8B%E4%BA%BA%E5%88%A9%E7%94%A8%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B

![2025-01-06_21-20-48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9a50e174-08f4-4ed8-6046-7a8a15783c91.jpeg)

### 課金
API利用のための手続きを進め、APIキー発行までを終えた後にお試し用に少しだけ課金をしました。

とりあえずは最低限の支払い額になっている 5ドルにて。

![2025-01-06_14-13-09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3e6e5620-d578-9d99-7c25-0fbfb8ea8f7f.jpeg)

## 実際に試してみる
### モデルの情報
以下の公式の情報から、モデルの情報を確認してみます。

●Claudeの紹介 - Anthropic
　https://docs.anthropic.com/ja/docs/intro-to-claude

とりあえず API が試せれば良いので、適当に「Claude 3.5 Haiku（ `claude-3-5-haiku-20241022` ）」を選んでみます。

### 2つのお試し
ここから SDK を使ったお試しを 2つやっていきます。

#### 公式の SDK について
下準備として、以下の公式のユーザーガイドを見つつ利用する SDK を選びます。

●初期設定 - Anthropic
　https://docs.anthropic.com/ja/docs/initial-setup

このページでは「Python（3.7+）」と「TypeScript（4.5+）」の SDK の 2つが記載されていました。

![2025-01-06_21-27-37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/db01ead7-b5bd-8751-9000-b57b2e7f8177.jpeg)

今回は個人的な好みで以下を利用します。

●@anthropic-ai/sdk - npm
　https://www.npmjs.com/package/@anthropic-ai/sdk

#### 簡単なお試し
それでは実際に試していきます。

パッケージのインストールと、環境変数を使った APIキーの設定を行います（※ 自分が試している環境は Mac です）。

```zsh
npm install @anthropic-ai/sdk
export ANTHROPIC_API_KEY=【自分のAPIキー】
```

あとは公式サンプルを少しだけ書きかえた以下を実行してみました。

```javascript
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic();

const msg = await anthropic.messages.create({
model: "claude-3-5-haiku-20241022",
max_tokens: 1000,
temperature: 0,
system: "簡潔な回答をしてください",
messages: [
    {
    "role": "user",
    "content": [
        {
        "type": "text",
        "text": "あなたは誰？"
        }
    ]
    }
]
});
console.log(msg.content[0].text);
```

上記を実行したところ、以下のレスポンスを得られました。

![2025-01-06_21-35-48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ade87b99-8411-cbb6-50a9-b066e3b75e72.jpeg)

### SDK を使ったお試し： その2
先ほどの環境（パッケージ・APIキーが準備されたもの）を使い、お試し 2つ目をやっていきます。

具体的には「[Tool use (function calling)](https://docs.anthropic.com/ja/docs/build-with-claude/tool-use)」を試してみます。

レスポンスとして指定する内容は、以下の記事を書いた時にやったものと似た内容にしてみました。

●Google Gen AI SDK（Python版）を試す： Gemini 2.0 Flash ＋ JSON出力（structured output） - Qiita
 https://qiita.com/youtoy/items/d48576c2b6eba684add5

![2025-01-07_00-39-23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/11bc3d7c-479c-31a7-a15b-0273a90dd46e.jpeg)

#### 実装内容と試した結果
今回用に実装した内容は以下のとおりです。

コメントアウトしている `inputText` については、1回目のお試し・2回目のお試しのそれぞれで使った内容を残す意味で書いています。

```javascript
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic();

const inputText = "四国4県について答えて";
// const inputText = "東北地方について答えて";

const msg = await anthropic.messages.create({
  model: "claude-3-5-haiku-20241022",
  max_tokens: 1000,
  tools: [
    {
      name: "get_city",
      description: "日本の都道府県の県庁所在地を返して",
      input_schema: {
        type: "object",
        properties: {
          prefectures: {
            type: "array",
            items: {
              type: "object",
              properties: {
                prefecture: {
                  type: "string",
                  description: "都道府県名",
                },
                city: {
                  type: "string",
                  description: "県庁所在地",
                },
              },
              required: ["prefecture", "city"],
            },
          },
        },
        required: ["prefectures"],
      },
    },
  ],
  messages: [
    {
      role: "user",
      content: inputText,
    },
  ],
});
console.log(msg.content);

console.log(JSON.stringify(msg.content[1].input, null, 2));
```

上記を実際に試した結果を見ていきます。

以下は「四国4県について答えて」と聞いた結果です。

![2025-01-07_00-15-11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bcbf93e2-fadf-2e41-dc8a-e5ff511d8db4.jpeg)

次に掲載している内容は「東北地方について答えて」と聞いた場合の、以下のほうの出力結果です。
`console.log(JSON.stringify(msg.content[1].input, null, 2));` 

東北6県に関する回答が得られたことが確認できました。

![2025-01-07_00-16-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/557db84c-e795-2853-a36d-e575dc4f3343.jpeg)