💥

Claude 3をTypeScriptで動かしてみる(Stream対応)

2024/03/06に公開

はじめに

2024/03/04にAnthropic社からClaude 3というGPT-4を超えるらしいモデルが発表されました。

https://www.anthropic.com/news/claude-3-family

APIも公開されています。
https://www.anthropic.com/api

また、PythonとTypeScriptのSDKも公開されています。
こちらはTypeScriptのSDKです。
https://github.com/anthropics/anthropic-sdk-typescript

今回はとりあえず、TypeScriptで動くところまでやってみたいと思います。

準備

Anthropicのアカウントを作成し、APIキーを発行してください。
手順は下記の記事が参考になります。
https://qiita.com/moritalous/items/8266f0c4bea6514713f7

開発

SDKのインストール

まずは、SDKをインストールします。

$ npm install --save @anthropic-ai/sdk

APIキーをセット

次にAnthropicのAPIキーを環境変数に設定します。
下記のsk-xxxxxxxxxxxxとなっているところは自分のAPIキーに書き換えて下さい。

$ export ANTHROPIC_API_KEY=sk-xxxxxxxxxxxx

Claude 3にリクエスト

いよいよ、Claude 3に話しかけます。
今回の場合、「こんにちは」と話しかけています。
下記のコードを使ってください。

main.ts
import Anthropic from "@anthropic-ai/sdk"

const anthropic = new Anthropic({
  apiKey: process.env["ANTHROPIC_API_KEY"]
})

async function main() {
  const msg = await anthropic.messages.create({
    model: "claude-3-opus-20240229",
    max_tokens: 1000,
    temperature: 0,
    messages: [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "こんにちは"
          }
        ]
      }
    ]
  });
  console.log(msg)
}

main()

claude-3-opus-20240229 というのはClaude 3 Opusというモデルを示しています。Claude 3ファミリーの中でも一番ハイエンドなモデルです。他にもClaude 3 Sonnet、Claude 3 Haikuというモデルもあります。

結果は下記のようになります。

{
  id: 'msg_xxxxxxxxxxxxxxxxxxxxxxx',
  type: 'message',
  role: 'assistant',
  content: [
    {
      type: 'text',
      text: 'こんにちは!私はChatbotのアシスタントです。どのようなことでお手伝いできますでしょうか?会話を楽しんだり、質問にお答えしたり、タスクのお手伝いをさせていただきます。お気軽にお話しください。'
    }
  ],
  model: 'claude-3-opus-20240229',
  stop_reason: 'end_turn',
  stop_sequence: null,
  usage: { input_tokens: 12, output_tokens: 89 }
}

簡単ですね。

ちなみに、2024/03/06現在、下記のようなエラーが発生することがあります。

InternalServerError: 529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}

リクエストが集中してしまっているのかもしれません。
私の場合、再度実行すると問題なく動きました。

Claude 3にリクエスト (Stream版)

次にStreamに対応してみましょう。

下記のコードを使ってください。

stream.ts
import Anthropic from '@anthropic-ai/sdk'

const client = new Anthropic({
  apiKey: process.env["ANTHROPIC_API_KEY"]
})

async function main() {
  const stream = client.messages.stream({
    messages: [{role: 'user', content: "こんにちは" }],
    model: 'claude-3-opus-20240229',
    max_tokens: 1024,
  }).on('text', (text) => {
    console.log(text)
  })
  const message = await stream.finalMessage()
  console.log(message)
}

main()

結果は下記のようになります。

こ
ん
に
ち
は
!
私
は
(中略)
に
お
聞
か
せ
ください
。
{
  id: 'msg_xxxxxxxxxxxxxxxxxxxx',
  type: 'message',
  role: 'assistant',
  content: [
    {
      type: 'text',
      text: 'こんにちは!私はChatbotのアシスタントです。どんなことでもお手伝いできればと思います。今日はどのようなご用件でしょうか?お気軽にお聞かせください。'
    }
  ],
  model: 'claude-3-opus-20240229',
  stop_reason: 'end_turn',
  stop_sequence: null,
  usage: { input_tokens: 12, output_tokens: 1 }
}

Streamもシンプルにかけて良いですね。

補足

今回、性能については触れませんでしたが、私は下記の記事が参考になりました。
https://qiita.com/tatsuki-tsuchiyama/items/21a77f764ea3a07ab901

また、AWSやGCP上で使用することもできるようです。

https://aws.amazon.com/jp/blogs/news/unlocking-innovation-aws-and-anthropic-push-the-boundaries-of-generative-ai-together/

https://cloud.google.com/blog/products/ai-machine-learning/announcing-anthropics-claude-3-models-in-google-cloud-vertex-ai/?hl=en

ボイスアップラボ

Discussion