FileMakerでChatGPT APIを呼び出す方法
はじめに
先日(2023年3月1日)、ChatGPTのAPIであるgpt-3.5-turbo
が発表され、話題となっています。従来のモデルより価格が10分の1くらい安くなり、使いやすくなりました。筆者が業務で使っているFileMakerにも簡単に組み込むことができたので、使い方をご紹介します。なお、この記事を書いている3月15日にはGPT-4が発表されました。日本語でもGPT-3.5の英語版より賢いそうなので、APIが提供されるのが楽しみです。
サンプルアプリのダウンロード
GitHubにサンプルアプリを載せました。ダウンロードしてご利用ください。
サンプルアプリの初期画面
サンプルアプリの使い方
APIキーの設定
次のURLにアクセスしてOpenAIのAPIキーを生成しましょう。OpenAIのアカウントがない場合は登録してください。現在はクレジットカード不要で登録でき、最大で18ドル、90日までの試用枠がもらえるようです。
(2023年3月24日追記)試用枠はもうもらえなくなったようです。You exceeded your current quota, please check your plan and billing details.
というエラーが出たらアップグレードしてください。
APIキーを生成したらFileMakerサンプルアプリの設定ボタンをクリックして、APIキーを設定してください。
APIキーの設定
ChatGPT APIの呼び出し
APIキーを設定したら、とりあえず動かしてみましょう。事前にプロンプトをいくつか用意してみたので、興味のあるものを選択してください。
プロンプト一覧
例えば、「システム管理者への問い合わせ」を選んで、「BYOD誓約書の雛形をください」と頼むと、次のように出力してくれます。
「システム管理者への問い合わせ」の例
「レシピ提案」を選んで食材を入力すると、その食材を使用したレシピを提案してくれます。
「レシピ提案」の例
プロンプトの設定
「プロンプト編集」をクリックするとプロンプトの追加や変更ができます。
プロンプトの編集画面
既存のプロンプトを編集したり、追加したりして、どんな出力が得られるか試してみてください。
サンプルアプリの解説
ここからはサンプルアプリの実装について解説していきます。OpenAIのAPIはとても素直な形式なので、実装はシンプルです。公式ドキュメントに載っているサンプルコードをベースに、「システム管理者への問い合わせ」の例をcurlコマンドで記述すると次のようになります。
curl https://api.openai.com/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"content":"あなたはシステム管理者です。\r次の質問に日本語で答えてください。","role":"system"},{"content":"BYOD誓約書の雛形をください","role":"user"}]
}'
これをFileMakerスクリプトで実装すると次のようになります。
API呼び出しスクリプト
汎用性を持たせるために少し長くなっていますが、単純にcurlコマンドと同じ処理をするだけなら20行目の「URLから挿入」だけで可能です。
送信するJSONデータは次のような形式になっています。
{
"model": "gpt-3.5-turbo",
"messages": [
{
"content": "事前に設定したプロンプト。例)あなたはシステム管理者です。次の質問に日本語で答えてください。",
"role": "system"
},
{
"content": "ユーザーが入力した内容。例)BYOD誓約書の雛形をください",
"role": "user"
}
]
}
サンプルアプリでは2段階に分けてJSONを組み立てています。1段階目は13行目の「メッセージの組み立て」で、次のようにJSONSetElement
を駆使してJSONを生成しています。
JSONSetElement ( $messages ;
[ "[0].role" ; "system" ; JSONString ];
[ "[0].content" ; Prompt::prompt ; JSONString ];
[ "[1].role" ; "user" ; JSONString ];
[ "[1].content" ; FileMakerGPT::input_text ; JSONString ]
)
2段階目は17行目で、実装は次のとおりです。
JSONSetElement ( $json ;
[ "model" ; $model ; JSONString ];
[ "messages" ; $messages ; JSONRaw ]
)
このようにして組み立てたJSONを20行目の「URLから挿入」に渡しています。「cURLオプションの指定」が重要なポイントです。
"-H \"Content-Type: application/json\"
-H \"Authorization: Bearer " & $api_key & "\"
-d @$json"
このように-d @$json
と記述すると$json
変数に格納したJSONデータを送信できます。cURLオプションにJSONデータをベタ書きするとエラーになることがあるので、必ず変数に格納して利用しましょう。
まとめ
FileMakerでChatGPT APIを呼び出す方法をご紹介しました。生成AIの進歩はとても速くて追いかけるが大変ですが、プロダクトに組み込むだけならとても簡単です。活用してみてはいかがでしょうか。
賢い黒猫のキャラクターを作って会話を楽しむこともできる(かわいい)
Discussion
こちらのサンプルをダウンロードして使わせていただいております。
楽しいです!ありがとうございます!
感想ありがとうございます!
こんばんは、とても使いやすいですね、どうもありがとうございます。
本家のような長い答えをつづきを表示するようにしたいのですが、どのようにすればいよいでしょうか?
続きボタンを押すと新しいレコードに続きが書かれるようなスクリプトです。
教えていただけますか?
コメントとバッジをいただきありがとうございます!
サンプルアプリにチャットモードを追加してみました。
こちらからダウンロードし直してみてください。
途中の履歴を反映させる仕組みは単純で、それまでのやり取りをすべて
messages
に格納するだけです。ChatGPTの回答はrole
をassistant
に設定します。こちらも参考にしてください。FileMakerで実装するのは少し面倒ですが、今回はポータルを用いてみました。チャットモードに切り替えてデバッガで追いかけていただくと、変数
$messages
にそれまでのやり取りがすべて格納されているのがわかると思います。過去の履歴をすべて送るので、やり取りが増えるにつれてリクエストのサイズが肥大化していきます。実際に業務アプリに組み込む場合は、リクエストサイズを抑える工夫が必要になるのでご注意ください。
早速のバージョンアップとご返信ありがとうございます。
使いやすいですね!
チャットモードにもプロンプトをかましたいのですが、それも可能ですか?出来ればお願いしたいです。
$messegeにpronptの追加でいけるかとおもい、関数に入れたら怒られて、+だと、変な回答が出て、&だと返答がありませんでした。
>過去の履歴を全て送るとのことですが、新規レコードの場合は大丈夫そうなのですが、その認識であっていますか?
早速試していただき、ありがとうございます。
チャットモードでプロンプトを設定したい場合は、下図のように「履歴を保持したChatGPT APIの呼び出し」スクリプトに2行追加してみてください。
14行目と15行目の値はそれぞれ次のとおりです。
途中でプロンプトを変更されると整合性が取れなくなるので、サンプルアプリではあえて外しています。
チャットの1行目をプロンプトにすれば同じことですし。
確かに
$message
に追加すればよいのですが、JSONの配列として追加する必要があるので、単純に文字列を結合しただけではうまくいきません。詳しくは下記のドキュメントを参考にしてください。はい、その認識であっています。
JSONも勉強します。
どうもありがとうございます!
使わせて頂きました。ありがとうございます。
とても扱いやすく、ファイルメーカーの書き方も勉強になりました。
あと、トークンの計算機能などあると嬉しいです。
意外といくら請求くるのか不安で。。。
コメントとバッジありがとうございます!
APIの利用料金はこちらで確認できますよ。
外部に公開したりしなければ、料金はほとんどかからないはずです。
こちらでAPI利用料の上限を設定できるので、ご心配なら設定してみてはいかがでしょう。
ありがたく使わせて頂いていたのですが、最近動かなくなりました。
もう一度ダウンロードしてAPI設定したのですがやはり動きません。
outputに出力されません。
原因分かりますでしょうか?
OpenAIの仕様は変わっていないので、APIキーの問題ではないでしょうか。
下記URLなどから、ご自身のアカウントの状況を確認してみてください。
ありがとうございます。
APIキーを発行し直しても動かないみたいです。
チャットモードに書き込んでスクリプトデバッガで40行まで来た状態でデータビューアにchatGPTからの回答が返ってこない状態です。
試しにAPIキーを間違えた状態にすると「認証に失敗しました」というエラーが返ってきます。
chatGPTが有料アカウントなのは原因になりますか?
よろしくお願いいたします。
もし、単発モードでは正常に動いて、チャットモードだけで発生しているなら、リクエストが肥大化しているのかもしれませんね。
チャットモードでは会話の履歴をすべて送信するので、会話が進むとOpenAIのリクエストサイズ上限に達してエラーになります。
その場合は新規レコードを作成して、最初からチャットを始めれば動くはずです。
無限にチャットをしてもエラーにならないようにする方法はいくつか存在します。
時間があったら記事を書くかもしれません。
お返事ありがとうございます。
新規チャットでも単発モードでも同じ状態でchatGPTの返信が返ってこない状況です。
お手隙の時に見ていただけると嬉しいです。
よろしくお願いいたします。
単発モードでもエラーになるなら、APIの無料利用分が失効しているのかもしれません。
私のAPIキーでは正常に動作しています。
ChatGPT PlusとOpenAIのAPIは別系統なので、ChatGPTを有料版にしていても、APIは無料版を使用している可能性があります。
確かめるには、こちらにアクセスしてみてください。
「Billing overview」の次の行に「Free trial」と表示されていたら無料の試用期間中で、「Pay as you go」と表示されていたら有料版を利用中です。
ありがとうございます。
Free trialになっていたのですが、支払い情報を入力してAPIを取得し直したら直りました。
お騒がせいたしました。
ありがたく継続して使用しておりました。
最近プロンプトを2個以上だと、うまく実行してくれないようです。
何か、表記の仕方などCHAT GPT側での変更などありましたでしょうか。
ちなみに、APIで接続しないで通常のブラウザで実行するとプロンプトが反映されます。
こちらがプロンプトです。
以下の条件を実行して下さい。
①などの特殊文字や機種依存文字があれば削除してください。
改行部分に
と改行を挿入してください。
こちらがうまく動作しませんでした。
プロンプトを試してみましたが、問題なく動作しました。
おそらくAPIキーが失効しているのではないでしょうか。
上のコメントを参考に、確認してみてください。
お返事ありがとうございます。
APIキーが失効はしていないみたいで大丈夫でした。
ちなみにこちらのプロンプトの内容を教えて頂けないでしょうか。
プロンプトはtakaloveneさんのものをコピペしただけです。
お返事遅くなってすいません。
プロンプトは、同じものを入力しても流動的にようでした。
色々、工夫してみたいと思います。
ちなみに、モデルはGPT4など指定可能なのでしょうか。
モデルの指定方法はどんなルールがあるんでしょうか。
指定可能なモデルはこちらをご覧ください。
ご回答ありがとうございました!
試してみたいと思います。