Notes開発者のためのXPagesデザインレシピ

簡単でCoolなXPagesアプリケーションを作るための情報を発信していきます

Notesクライアント 生成AI

話題のClaude3をNotesクライアントから使ってみる(前編)

Claude3(クロード3)とは?

 Claude3はOpenAIの元メンバーによって設立されたAnthropic(アンソロピック)が開発し、2024/3/4に発表された新しい生成AIです。ベンチマークテストではOpenAIの「GPT-4」、Googleの「Gemini Ultra」よりも高い性能を示していると言われています。また日本語の扱いがChatGPTよりも自然だという話もあります。

 Claude3には下記の3つのモデルがあり、モデルごとに性能と利用時に必要なコストが異なります。(下記はClaude3に生成して貰った説明です。)
 後述するコードで実験していただきたいのですが、一番まともな日本語が返ってくるのはOpusです。松竹梅と3段階作るあたりが飲食店のランチメニューのようで上手な誘導だと思います。

モデル

説明

入力コスト
(100万Token)

出力コスト
(100万Token)

Opus
(オーパス)

Opusは最も大きなモデルで、幅広い知識と高い言語生成能力を持っています。
【メリット】
多様な話題に対応でき、複雑な課題にも取り組めます。創造性の高い出力が可能です。
【デメリット】
モデルが大きいため、計算リソースを多く必要とします。時にハロー現象が起こる可能性があります。

$15

$75

Sonnet
(ソネット)

Sonnetはミドルサイズのモデルで、Opusよりもコンパクトですが、十分な性能を持っています。
【メリット】
Opusほど計算リソースを必要としないため、リソース制約下でも使用可能です。一般的な用途には十分な性能があります。
【デメリット】
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

使用するモデル名
2024/04/05時点で使えるモデル名は下記の3つ
claude-3-opus-20240229
claude-3-sonnet-20240229
claude-3-haiku-20240307

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フィールドに書き込まれた値を問い合わせてみます。