Zapier Natural Language Actions (NLA) APIを試してみる
はじめに
LLM(大規模言語モデル)を扱う際のライブラリの筆頭であるLangChainには、日進月歩で様々なTool[1]テンプレートが追加されています。
Google Search、DuckDuckGo Search[2]、IFTTT WebHooksなどいろいろありますが、その仲間にZapier Natural Language Actions APIがあります。
Agentにおいて、LLMと外部AIの連携は、
と、APIごとにCustum Toolをコーディングしてスキーマに合うリクエストになるようにヘルプしてあげる必要があります。
一方、Zapier NLAを使うと間にある正規表現マッチ、コード変換をパスして自然言語での接続ができそうです。(たぶん)
つまり、Zapier NLAを使うことでLLMと外部APIが自然言語のまま連携でき、LangChainで実装したLLM AgentとGmailやGoogle Drive、その他のサービス間のIntegrationが捗りそうです。
ということで、まずZapier NLA単体から試してみました。
🐍TL;DR
下記を行います。
- Zapier Natural Language Actions (NLA) とは
- セットアップ(APIキーによる認証)
- 連携(Gmail, Toggl Track, ChatGPT)
- VSCodeで実行
参考文献
...完全に類似の先行記事がありましたので、そちらも参照してください。
Langchain連携も試されていますね。
ZennにZapier NLAの記事がなかったので、Zennコミュニティの目に触れれば、と屋上屋を架します。
(Zennはクラスメソッドのものなんですけどね。)
🌳環境
- Windows 11
- VSCode
- 拡張機能Thunder Client
- PostmanのようにHTTPリクエストを試す際に便利です。シンプルで使いやすい。
🪛セットアップ
Zapierのアカウント作成
もしまだであれば。
APIキーを取得
下記にアクセスすることで簡単に取得できます。
OAuth認証については本稿では触れません。
ドキュメントを開く
何事もドキュメントから。
おさえておくのはこのあたり。
- 自然言語をインターフェースにすることでユーザー、開発者、LLMに使いやすいAPI
- 必須フィールドはAI推論(AI guess)される。推論しないようにユーザー設定も可能。オプションフィールドもAI推論、ユーザー設定が選べる
- APIのスキーマを読まなくて済む。
- Hallucinationが許されないフィールドは事前設定が可能
- 与えるパラメーターは、連携先に関わらず自然言語による
instructions
のみ。
APIキーによる認証を確認(GET)
接続できるか検証するため、https://nla.zapier.com/api/v1/check/
を叩いてみます。
Thunder Clientを開きます。ピカチュウのしっぽのアイコンです。
Commitしようね。
認証はx-api-key
ヘッダ。
{
"success": true,
"email": "hoge@example.com",
"user_id": 12345678
}
アクションを設定
設定ページ(https://nla.zapier.com/get-started/) に戻り、"Manage Actions"を開きます。
📨Gmail
Gmail送信との連携
ポップアップが出てくるので、アクションを検索し、
"Add a new Action"
フィールド設定画面に推移します。
必須フィールドはAI guessになっていますが、To先だけは怖いので、自分のアドレスにしました。
"Enable Action"で設定完了です。
⏰時間管理アプリ:Toggl Track
もうひとつ、よく使っている時間管理アプリ、Toggl Trackも連携させてみます。(エントリの作成)
Toggl Trackとの連携
AIさんにGuessってもらいます。
セットアップは以上です。
Action IDを取得する(GET)
https://nla.zapier.com/api/v1/dynamic/exposed/
をGETで叩いてActionIDを取得します。
結果
{
"results": [
{
"id": "XXXXXXXXXXXXX",
"operation_id": "toggl_create_time_entry_1990805",
"description": "Toggl: Create Time Entry",
"params": {
"instructions": "str",
"Created_With": "str",
"Duration": "str",
"Start": "str",
"Workspace": "str"
}
},
{
"id": "XXXXXXXXXXXXX",
"operation_id": "gmail_send_email_3aee697",
"description": "Gmail: Send Email",
"params": {
"instructions": "str",
"Body": "str",
"Cc": "str",
"Subject": "str"
}
}
],
"configuration_link": "https://nla.zapier.com/demo/actions/"
}
Actionを実行する(POST)
下記のエンドポイントにid
をセットし、POSTします。
https://nla.zapier.com/api/v1/dynamic/exposed/<ACTION_ID>/execute/
📨Gmail
Gmailの実行
instructions
プロパティをもつJSONペイロードを設定します。
実行するとメールが届きます。
結果を見ると、input param
が自動設定されていることがわかります。
{
"id": "XXXXXXXXXXXXXXXXX",
"action_used": "Gmail: Send Email",
"input_params": {
"To": "hoge@example.com",
"Subject": "Good Night",
"Body": "Good Night"
},
"review_url": "https://nla.zapier.com/execution/01GZ89XDD9CMSMCCZZACP1JBFW/",
"result": null,
"additional_results": [],
"result_field_labels": {},
"status": "error",
"error": "Error during execution: The value in the \"To\" field is invalid.",
"assistant_hint": null
}
⏰Toggl Track
Toggl Trackの実行
こちらも同様にinstructions
をペイロードにPOSTします。
{
"instructions":"create an new Entry. Description is 'testing Zapier NLA'. Started an hour before. Project should not be specified."
}
エントリーが作成されました。
プロジェクトがno projectになりません。。
🗨️ChatGPT
最後にChatGPTとの連携も試してみます。
Togglと同様、APIキーを設定するだけ。
instructions
に聞きたいことを指定します。
{
"instructions":"Quote the most famous line from the poems of William Blake"
}
結果
{
"id": "xxxxxxxxxxxxxxx
"action_used": "ChatGPT: Conversation",
"input_params": {
"User_Message": "\"To see a world in a grain of sand, and a heaven in a wild flower\""
},
"review_url": "https://nla.zapier.com/execution/01GZ8262CERACPPKYTJCZTZPAZ/",
"result": {
"history[]content": "\"To see a world in a grain of sand, and a heaven in a wild flower\", This is a quote from the English poet William Blake, from his poem \"Auguries of Innocence.\" The line suggests that one can find beauty and meaning in the smallest and simplest of things, and that there is a connection and harmony between all things in the world, no matter how different they may seem.",
"response__role": "assistant",
"history_context__tokens_used": "34",
"request__role": "user",
"history_context__was_trimmed": "false",
"history_context__tokens_remaining": "3966",
"history[]role": "user, assistant"
},
"additional_results": [],
"result_field_labels": {
"request__role": "User Role",
"response__role": "Assistant Role"
},
"status": "success",
"error": null,
"assistant_hint": null
}
あれ...、ChatGPTヘの入力が
"To see a world in a grain of sand, and a heaven in a wild flower"
となって、instructions
から推論されたうえでの入力になっています。したがって回答も
To see a world in a grain of sand, and a heaven in a wild flower\", This is a quote from the English poet William Blake, from his poem \"Auguries of Innocence.\" The line suggests that one can find beauty and meaning in the smallest and simplest of things, and that there is a connection and harmony between all things in the world, no matter how different they may seem.
となっています。
つまり、User Message
がNLAでまず推論され、推論結果がChatGPTに投げ込まれる二段階になるようです。
別のinstructions
を試してみます。
{
"instructions":"Ask gpt about the largest Japanese piano competition"
}
日本で最大のピアノコンペティションについて聞いてみました。
結果
{
"id": "XXXXXXXXXXXXXXXXXXXXX",
"action_used": "ChatGPT: Conversation",
"input_params": {
"User_Message": "What is the largest Japanese piano competition?"
},
"review_url": "https://nla.zapier.com/execution/01GZ83C30TE71FTXZFT8G1D03A/",
"result": {
"history[]content": "What is the largest Japanese piano competition?, The largest Japanese piano competition is the Hamamatsu International Piano Competition. It is held in Hamamatsu city every three years and is one of the most prestigious and renowned piano competitions in the world.",
"response__role": "assistant",
"request__role": "user",
"history_context__was_trimmed": "false",
"history_context__tokens_used": "24",
"history_context__tokens_remaining": "3976",
"history[]role": "user, assistant"
},
"additional_results": [],
"result_field_labels": {
"request__role": "User Role",
"response__role": "Assistant Role"
},
"status": "success",
"error": null,
"assistant_hint": null
}
質問は、"What is the largest Japanese piano competition?"に少し推論されています。
回答は浜コンこと浜松国際ピアノコンクール。
ピティナさんじゃないってよ。
「世界でも最大規模のコンクール」(最大"規模")
いろいろいじってみましたが、NLAによる推論がどのように活用できるのか、適切なユースケースに思い至りませんでした。LangChainとの連携を考えるとあまり使わないかもしれません。
つまずいたところ
とくにないですが、TogglとのIntegrationで少しつまずきました。
- Actionの設定を更新するとAction IDが変わります。
- "Show all options" の中も確認。大事な項目がDo not include a value for this fieldになっていたりします。
おわりに
以上、Zapier NLAを用いてGmail, Toggl Track、ChatGPTで遊んでみました。
Zapier NLAによって、LLMの自然言語によるアウトプットをparseせず、そのままinstructions
という単一パラメーターに突っ込めば、あとはよしなに外部連携を捌いてくれます。
外部APIのスキーマを読んで、LLMの回答をフィールドにparseして、APIを叩くコードを書く手間を省けるので、いろいろな外部連携を試すのに便利そうです。
Web上にまだNLAのユースケースが多くは出ていないので、ぜひ試してみてください。
Discussion