Claude3(クロード3)とは?
Claude3はOpenAIの元メンバーによって設立されたAnthropic(アンソロピック)が開発し、2024/3/4に発表された新しい生成AIです。ベンチマークテストではOpenAIの「GPT-4」、Googleの「Gemini Ultra」よりも高い性能を示していると言われています。また日本語の扱いがChatGPTよりも自然だという話もあります。
Claude3には下記の3つのモデルがあり、モデルごとに性能と利用時に必要なコストが異なります。(下記はClaude3に生成して貰った説明です。)
後述するコードで実験していただきたいのですが、一番まともな日本語が返ってくるのはOpusです。松竹梅と3段階作るあたりが飲食店のランチメニューのようで上手な誘導だと思います。
モデル |
説明 |
入力コスト |
出力コスト |
Opus |
Opusは最も大きなモデルで、幅広い知識と高い言語生成能力を持っています。 |
$15 |
$75 |
Sonnet |
Sonnetはミドルサイズのモデルで、Opusよりもコンパクトですが、十分な性能を持っています。 |
$3 |
$15 |
Haiku |
Haikuは最小サイズのモデルで、軽量で高速に動作します。 |
$0.25 |
$1.25 |
ネットにないコードをどうやって作ってるの?
現状LotusScriptのサンプルコードはネットにそんなにありません(一時期よりさらに少なくなっている)。最新の技術に関するものであればなおさらです。
じゃぁ、どうやって作るか?ですが、私の場合は「Python or TypeScript(JavaScript)→VBA→LotusScript」の順に移植を行って、最終的にLotusScriptにしています。現在はPythonとTypeScriptの全盛期なので、生成AIメーカーのリファレンスガイド含め、サンプルコードはPython、TypeScriptのどちらかです。まずは自分で動かしてみないとどの程度使えるのか?わからないので、メーカー提供のPythonコードを実行してみます。その後、部分的に生成AIを使ったり、自分で理解を深めて書き換えたりしてVBA版を作り、そこからLotusScriptに移植します。
なぜ、生成AIに依頼してPythonからLotusScriptを作らないのか?と言うと、生成AIも学習データがあってこそ正解に近いデータを生成できるので、学習データの少ないLotusScriptでは正解ソースを生成できないことが多いからです。
【Pythonコードと実行結果】
前準備:アカウント登録とAPIキー発行
まずはアカウント登録をAPIキー発行を行います。
「https://www.anthropic.com/api」に行き、「Get starded now」ボタンからアカウントを登録する。
アカウントが登録できたら、Dashboardページから「Get API Keys」ボタンをクリックする。
「Create Key」ボタンをクリックする。
APIキーに名前をつける。(用途や部署などAPIと利用者が紐付くような名前が良いかと思います。)
APIキーが発行されたら、「Copy Key」ボタンでクリップボードにAPIキーをコピーし、メモ帳など何らかの方法で保存しておく。
発行されたAPIキーは一覧画面で確認することができる。(この画面でAPIキーの再コピーはできませんので、手前の画面でコピーしたものを必ず別ファイルに保存して下さい。)
前準備:利用金額のチャージ
左ナビゲーションで「Plans & Building」を選択し、「Select Plan」ボタンをクリックする。(下にある「Claim」ボタンで無料の5ドル枠が使えるという話だったのですが、うまく動かなかったのでクレジットカードからチャージを行いました。)
「Build」プランを選択し、「Continue」ボタンをクリックする。
用途、国情報などを入力し、「Continue」ボタンをクリックする。
カード情報、住所などを入力し、「Continue」ボタンをクリックする。(インボイス番号(適格事業者番号)の入力欄がありますが、無視して大丈夫です。)
チャージ金額とオートチャージするかを入力し、「Purchase Credits」ボタンをクリックする。
チャージした金額と、残り金額が表示される。
Workbenchページを使えば、WebページからClaude3を呼び出すことができる。(このページから利用した場合もチャージ金額が利用されます。)
基本の問合せ
APIキーが取得できたので、サンプルコードで問合せを行ってみます。
【Pythonコード(参考)】
# standard lib(install不要)
# third party lib(install必要)
import anthropic
# original lib
def main():
client = anthropic.Anthropic(
api_key="(取得したAPIKEY)",
)
message = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
temperature=0.0,
system="Respond only in Yoda-speak.",
messages=[
{"role": "user", "content": "おはようございます"}
]
)
print(message.content)
if __name__ == "__main__":
main()
Pythonコードから見える注意点は、「import anthropic」でライブラリを読み込んでいるため、HTTPリクエスト送信時のURLやヘッダー情報がライブラリに隠蔽されている点です。
このあたりは仕方がないのでAPIリファレンスを参照します。
https://docs.anthropic.com/claude/reference/getting-started-with-the-api
【HTTPヘッダー】
項目 |
値 |
意味 |
Content-Type |
application/json |
POSTするデータの形式 |
anthropic-version |
2023-06-01 |
今のところこの日付で固定、今後増える可能性? |
x-api-key |
(取得したAPIキー) |
API認証キー |
【問合せJSONフォーマット】
Pythonコードから下記のようなJSONが必要なことがわかります。
{
model : "claude-3-opus-20240229",
max_tokens : 1024,
temperature : 0.0,
system : "Respond only in Yoda-speak.",
messages: [
{
"role": "user",
"content": "おはようございます"
}
]
}
パラメータを解説すると下記のようになります。
項目 |
値 |
必須 |
意味 |
model |
claude-3-opus-20240229 |
○ |
使用するモデル名 |
max_tokens |
1024 |
○ |
回答される文字列の長さ |
temperature |
0.0 |
- |
情報の精度、0.0が最も高い(多数決が多い) |
system |
(任意) |
- |
システムの人格、役割、語尾などの指定 |
messages |
(任意) |
○ |
POSTする中身 |
【LotusScriptコード】
前回ChatGPTを呼び出した時と同じようにAPIを呼び出してみます。
Sub Click(Source As Button)
'---------- ---------- ---------- ---------- ----------
'Claude3 サンプルコード実行
'
'---------- ---------- ---------- ---------- ----------
Const APIURL = "https://api.anthropic.com/v1/messages"
Const APIKEY = "(取得したAPIKEY)"
Const MODEL = "claude-3-opus-20240229"
Const MAX_TOKENS = 1024
'クラス・変数宣言
Dim vXml As Variant 'XMLオブジェクト
Dim sRequest As String '入力した質問
Dim sBodyJson As String '送信するJSON文字列
'質問内容
sRequest = "おはようございます"
'Postリクエストを実行し、結果を取得
Set vXml = CreateObject("MSXML2.XMLHTTP")
vXml.Open "POST", APIURL, False
vXml.setRequestHeader "Content-Type", "application/json"
vXml.setRequestHeader "x-api-key", APIKEY
vXml.setRequestHeader "anthropic-version", "2023-06-01"
sBodyJson = |{"model":"| & MODEL & |","max_tokens": | & MAX_TOKENS & |, "temperature":0.0, "system":"Respond only in Yoda-speak.","messages":[|_
&| {"role":"user", "content":"| & sRequest & |"} |_
&|] }|
vXml.send sBodyJson
'エラーレスポンスチェック
If vXml.Status <> 200 Then
Msgbox vXml.responseText , 16 , "Error : " & Cstr(vXml.Status)
Exit Sub
End If
'レスポンス表示
Msgbox vXml.responseText
End Sub
【実行結果】
次回予告
次回はNotesフィールドに書き込まれた値を問い合わせてみます。