Anthropic ClaudeのGo言語用SDKを公開しました

Anthropic ClaudeのGo言語用SDKを公開しました

author potpro(ぼとぷろ)
2024/03/14

Anthropic ClaudeのGo言語用SDKを公開しました

Claude 3 Opus

image

https://www.anthropic.com/claude

みなさん、もうClaude 3は使われましたか?使いましたよね?

Anthropicが生成AIモデル"Claude 3"を発表、"Opus"モデルとその人間に近い能力へ注目集まる

OpenAI の元メンバーによって設立されたアメリカの人工知能スタートアップ企業Anthropicが開発していて、OpenAI GPT-4よりも性能が良いと噂されているLLMこと、Claude 3 opus。

でもまあ噂だけなんでしょう?

と自分も最初は思ったのですが、話を聞いていると凄いらしい。

ということで自分も使ってみたのですが、本当にGPT-4よりも上です。断言できますね。

Claude 3 Opusとの会話

これは前の記事で作ったうちの子ちゃんと通話できるアプリUchinoko Studioを、GPT-4 TurboからClaude3 Opusに変えてテストしてもらった時のログの一部分です。プロンプトはそのまま流用してます。

前の記事について: クリスマスなのでかわいいAIと音声通話できるWebアプリを作ったけど最高過ぎるかもしれない

image

GPT-4と比較すると創作能力や人間で言う所の想像力に優れているという感じ。GPT-4は頭はいいけどちょっと外れたようなこと、つまりわかりやすく言うと無茶ぶりには対応できていない感じがしていました。

しかし、Claude 3はそれにくらいついてきます。こちらが意味不明なことを言うとGPT-4も混乱して意味不明なことを返してきますが、Claude 3 opusはちゃんと理解して「何を言ってるかわからない」みたいなことを返してきます。

また、記憶力もいい。ログを見てると自分がAIと言う設定を守っていたり、流れに沿っていたりと、明らかに文章に破綻が少ないです。ノリツッコミしてるし。GPT-4よりもあざとかったです。

プロンプトもGPT-4より忠実に守ってきます。GPT-4は「キャラ設定を考えて」みたいなことに対して、プロンプトを変えても大体似たり寄ったりの設定を出してきたりしますが、Claude3は本当に人間が考えているかのような発想力を見せることもあり・・・

GPT-4はまだ人間の想像力を越してないという感じですが、Claude 3 opusは正直人間と大差ないかもしれないと思えてしまいました。シンギュラリティはもうそこかも・・・。

ただ、OpenAIも当然これに追従してくるでしょうし、多くのビックテックもこぞってLLMを開発しています。

数か月後にはまた勢力図が変わってる可能性すらあります。はるかに進化しているかもしれませんし、AI業界は怖いですね・・・。

claude-sdk-go

と、Claude 3がすごいという話はたくさんの記事で話されていると思うので、余談はここまでにして、本題です。

Claude(Anthropic)もAPIを提供していて、シンプルだけど割としっかりとしたドキュメントが存在します。開発者としてはありがたいですね。

Client SDKも存在しています。しかし、今のところはPythonTypeScriptだけの提供で、他にはまだ無いようです。

githubを探りましたが、Go言語用のSDKはまだほぼ無い感じでした。

厳密には一つあったんですが、どうやら古いタイプのAPIにしか対応していないようでして、OpenAIのAPIと似た形式で使用できる新しいAPIの、Messages APIには対応して無さそうでした。

ということで、さくっと作ってライブラリとして公開してみました。

image

potproject/claude-sdk-go

基本的に、Go言語のOpenAI APIライブラリで人気のあるsashabaranov/go-openaiと似た設計にしているので、Exampleを見てもらえればすんなり使えると思います。

使い方

特に特殊な部分はありません。普通に使う分にはこんな感じ。誰でも使えるかと思います。 例は環境変数からAPI_KEYを取得しています。

package main

import (
    "context"
    "fmt"
    "os"

    claude "github.com/potproject/claude-sdk-go"
)

func main() {
    apiKey := os.Getenv("API_KEY")
    c := claude.NewClient(apiKey)
    m := claude.RequestBodyMessages{
        Model:     "claude-3-opus-20240229",
        MaxTokens: 64,
        Messages: []claude.RequestBodyMessagesMessages{
            {
                Role:    claude.MessagesRoleUser,
                Content: "Hello, world!",
            },
        },
    }
    ctx := context.Background()
    res, err := c.CreateMessages(ctx, m)
    if err != nil {
        panic(err)
    }
    fmt.Println(res.Content[0].Text)
    // Hello! How can I assist you today?
}

ストリーミング(http SSE)を使うときはこんなコードとなります。stream.Recv()で部分テキストが渡されます。

package main

import (
    "context"
    "errors"
    "fmt"
    "io"
    "os"

    claude "github.com/potproject/claude-sdk-go"
)

func main() {
    apiKey := os.Getenv("API_KEY")
    c := claude.NewClient(apiKey)
    m := claude.RequestBodyMessages{
        Model:     "claude-3-opus-20240229",
        MaxTokens: 64,
        Messages: []claude.RequestBodyMessagesMessages{
            {
                Role:    claude.MessagesRoleUser,
                Content: "Hello, world!",
            },
        },
    }
    ctx := context.Background()
    stream, err := c.CreateMessagesStream(ctx, m)
    if err != nil {
        panic(err)
    }
    defer stream.Close()
    for {
        res, err := stream.Recv()
        if errors.Is(err, io.EOF) {
            break
        }
        if err != nil {
            panic(err)
        }
        fmt.Printf("%s", res.Content[0].Text)
    }
    fmt.Println()
    // Hello! How can I assist you today?
}

SDKについて

ほぼ公式のPythonやTypescript SDKと同じ感じで使えると思います。

後はまあ、http.Clientを渡せたり、TypeImageSourceLoadFile関数で画像ファイルを渡せたり、APIで取得できるデータは全て取得できるはずです。今のところ/v1/messagesに関してはフルサポートできているはず。

APIについて

お得情報として、Claude3 Opusがどんな感じかを試してみたい人にもこのAPIで試してみるのも良いです。

というのも、ChatGPTのような形式で使える一般向けの画面は現在、有料版は月20ドルの課金形態で提供されており、Opusは有料版でしか使えません。ちょっと使ってみたいのに20ドル課金は少しハードルが高いと思います。

しかし、Claude3 APIは従量課金でかつ、最初に5ドルの無料クレジットが付与されるので、無料でClaude3 Opusをお試しできるんですよね。カード登録も無く電話番号さえあればOK。

なので、Goで動かしたい方は是非お使いください。とはいっても非公式なので、TypeScriptやPythonが使える方は公式の方がいい気はしますが・・・。

ちなみに今はみんな殺到しているからか、Streaming Message APIの場合overloadedのエラーが結構出てきます。根気よくトライしましょう。

以上、後はもうコードも全部AIが書いてくれる時代は迫っていると思います。そうなると自分は失業かもですが・・・。