Claude 3をTypeScriptで動かしてみる(Stream対応)
はじめに
2024/03/04にAnthropic社からClaude 3というGPT-4を超えるらしいモデルが発表されました。
APIも公開されています。
また、PythonとTypeScriptのSDKも公開されています。
こちらはTypeScriptのSDKです。
今回はとりあえず、TypeScriptで動くところまでやってみたいと思います。
準備
Anthropicのアカウントを作成し、APIキーを発行してください。
手順は下記の記事が参考になります。
開発
SDKのインストール
まずは、SDKをインストールします。
$ npm install --save @anthropic-ai/sdk
APIキーをセット
次にAnthropicのAPIキーを環境変数に設定します。
下記のsk-xxxxxxxxxxxx
となっているところは自分のAPIキーに書き換えて下さい。
$ export ANTHROPIC_API_KEY=sk-xxxxxxxxxxxx
Claude 3にリクエスト
いよいよ、Claude 3に話しかけます。
今回の場合、「こんにちは」と話しかけています。
下記のコードを使ってください。
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に対応してみましょう。
下記のコードを使ってください。
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もシンプルにかけて良いですね。
補足
今回、性能については触れませんでしたが、私は下記の記事が参考になりました。
また、AWSやGCP上で使用することもできるようです。
Discussion