【Jinba Flow】日程調整のための空きスロットを書き起こすツールを作ってみた
今回は「日程調整のための空きスロットを書き起こす」ワークフローを紹介します。
1. はじめに
みなさんもミーティングなどの日程調整をする際に「空き時間の候補をお送りします。」と言ってカレンダーと睨めっこしながら日程を書き出した経験はありませんか?unknown node今回は地味に大変なこの作業を一括で行えるAIエージェントを作成していきたいと思います!
今回のエージェント作成にあたって、unknown nodeというチャットからワークフローを作成できるプラットフォームを使用します。このプラットフォームではプログラミングやワークフローについて詳しくない、触れたことがない!という方でも簡単にエージェント作成までできるようになります!
目次
- 1. はじめに
- 2. Jinbaとは?
- 3. 今回のツールのコンセプト
- 4. 実際にやってみた①(Jinba Flowでのワークフロー作成)
- 4-2. 改良してみた
- 4-3. 各フローの解説
- 5. 実際にやってみた②(Jinba Appの導入)
- 6. 直面した課題と解決方法
- 7. まとめ
- 7-2. 今回のフロー
すべて表示
2. Jinbaとは?
弊社ではJinba FlowとJinba Appという2つのツールを展開しています。
Jinba Flowは、簡単な指示やノーコード操作で、データ変換、分析、AI活用、外部サービスとの連携など、日々の業務を自動化できるワークフロー作成ツールです。unknown nodeJinbaとSlackやGmail、Googleスプレッドシートなどのツールを連携することで、「人がやっていた面倒な作業」をスマートに置き換える仕組みを作ることが可能です。
Jinba Appは、Jinba Flowで作成したフローを呼び出したり、チャットベースで簡単に外部のサービスを実行したりできます。unknown node入力データに応じて自動でフォームを生成し入力UIを提供することも可能です。
Jinba Flowはフロー作成に特化し、Jinba Appは実際の使用に特化しています。
unknown node
3. 今回のツールのコンセプト
「Googleカレンダーに予定されている自分の予定からミーティングを行える空きスロットを確認してテキスト化する。」今回はこの機能を持ったエージェントを作成していきたいと思います。unknown nodeunknown node最終的には「今週の月曜から金曜で1時間のスロット9時から18時の間で探せ」というテキストを入れるだけで、googleカレンダーを参照し空き時間を以下のような形で出力してくれるワークフローを作成します。

完成したフローのアウトプット
4. 実際にやってみた①(Jinba Flowでのワークフロー作成)
まず初めにunknown nodeにアクセスします、まだ登録してない方は登録しましょう。unknown node最初の画面でテキストボックスにunknown nodeunknown node「カレンダーの情報から、空き時間をLLMで考え、ミーティングの候補時間をメール文ぽく出力するワークフローを作る。inputはtext文で「今週の月曜から金曜で1時間のスロットを9時から18時の間で探せ」のようなものを受け取る。inputの指示に従って、googleカレンダーから必要な情報を取得し、その情報を元にLLMで空き時間をメール文として使える形で出力」unknown nodeunknown nodeと打ってエンターを押します。

Jinba Flowの最初の画面
初回はgoogleのAPIの取得を求められます。unknown node以下の方法で設定します。

チャット欄にこのようなボタンが出るので押しましょう

使用するアカウントを選択します

筆者環境ではすでにアクセスしていることになっていますがunknown nodeここでアクセスを求められる内容にチェックをつけ、続行しましょう

この画像が出ると完了です
情報を渡して実行ボタンを押すと、出力された文章がカレンダーの内容をまったく反映していませんでした。

予定のカレンダー

最初に完成したフローの出力 カレンダーとマッチしていないことがわかる
文章を見てみると、そもそも指定した日ですらないことがわかります。unknown nodeこれはLLMが現在日時を知ることができないという特性によるエラーなので「最初の段階で現在の日時を取得し、空いている時間を網羅的に挙げてください」unknown nodeと追加の指示を出してみます。

右下の変更を受け入れるを押して再度実行してみます。unknown nodeすると以下のように煩雑でパッと見ではわからない提案のされ方をしていることがわかりました。

とても見にくいアウトプット
そこで今回筆者は下記のような形式でのアウトプットが欲しかったのでunknown node「候補日はMM月DD日(曜日)XX:XX-XX:XX,XX:XX-XX:XXというような形で挙げてください。」unknown nodeとまた指示を出してみます。unknown nodeこの指示を出すことで、上記のような煩雑なアウトプットではなく、指定した形で出してくれるようになります。皆さんお好みの形を指示してみてください!

変更を受け入れ実行してみるとカレンダーとマッチしていません。unknown node先ほどの現在日時を確認するコードを入れることでLLMは正しい時間を把握して、正しい出力ができると思ったのですが、うまく行っていないようです。
6章で詳細に説明しますが、トラブルシューティングの方法として、各フローの内容をChatGPTなど外部のAIに聞く方法がフロー作成の上では重要です。
フローの最初(get_current_datetime)のpythonの部分のコードをChatGPTに入れてどうすれば思うように動くか確認してみました。unknown node色々と確認しましたがタイムゾーンが統一されていないことでLLMやカレンダーが意図しない挙動をしてしまっているようなので、最終的に「タイムゾーンを最初から東京にして」と指示を出すことで完璧な出力を行えるようになりました。
4-2. 改良してみた
今回作ったフローでは1時間の枠しか確保することができないので、これを調整するためにunknown node「「今週の○曜日から○曜日でX時間のスロットをX時からXX時の間で探せ」という動的な使い方に対応するように全体を変更したい」unknown nodeと左下のチャット欄に打ち込んでみます。unknown nodeすると以下のように自由に動かせるように適応してくれました。

確認してみましょう、一番上のmeeting_requestというフローの中を「今週の水曜から金曜で30分のスロットを13時から16時の間で探せ」と書き換えました。

meeting_requestの入力設定を変更
しっかりと指示に対応した時間を調節してくれます。unknown nodeさらに「開始時間を0分と30分からのものだけになるようにして」unknown nodeのようにチャットに打ってみるとミーティングの開始時間を0分と30分のみにするように指示することもできます。unknown nodeこのように動的な部分はユーザーの皆さんのお好みで調節することができます。
4-3. 各フローの解説
フローが完成すると、上記のように各ステップが並びます。それぞれの役割を理解しておくと、エラー対応や別のフロー作成にも応用しやすくなります。

unknown nodeunknown node①meeting_requestunknown nodeここにはこのフローにやって欲しいこと、指示文を入れます。unknown node今回は「今週水曜から土曜日の間で、10:00-22:00の間で2時間のミーティングを探したい」このように書きました。unknown nodeunknown node②parse_meeting_requestunknown nodeここではLLMが①で受け取った文章から必要なパラメータを抜き出し、Json形式に書き換えています。unknown node何曜日から何曜日なのか、時間は何時から何時の間なのか、何時間のミーティングなのかをこの後pythonに渡して問題ない形に変えてくれています。unknown nodeunknown node③get_current_datetimeunknown nodeここでは現在日時、時刻を確定させ、カレンダーAPIから情報を受け取りやすくするような形式に変更するpythonのコードになります。unknown nodeunknown node④get_calendar_eventsunknown nodegoogle カレンダーのAPIを利用して予定を確認します。unknown nodeここで今週どんな予定があるのか、ない時間はいつなのかのデータを受け取ります。unknown nodeunknown node⑤generate_comprehensive_scheduleunknown nodeこのコードは、カレンダー上の予定をもとに、unknown node今後の営業時間内で会議を入れられる時間帯を自動で探す処理です。unknown node30分刻みで候補スロットを作り、既存の予定と重なる時間を除外し、最終的に「全員が空いている最適な会議候補時間」を一覧として出力しています。unknown nodeunknown node⑥analyze_schedule_and_suggestunknown nodeこのプロンプトは、カレンダー上の「空いている最適スロット(optimized_slots)」をもとに、今週ミーティングを設定できる時間帯を日本時間で整理した提案メール文を生成するよう求めています。unknown nodeunknown node⑦meeting_proposal_outputunknown nodeこれが今まで作ってきたフローのアウトプット部分になります。押してみると右側に⑥で出力された内容が表示されています。
5. 実際にやってみた②(Jinba Appの導入)
続いてJinba Appにこのフローを導入していきます。unknown nodeJinba Appとはフローをエージェント化してわかりやすく扱ったり、他の人にもリンクだけでエージェントを共有できるアプリです。unknown node(注意: 共有した際はフローで認証したメールアドレスのカレンダーが参照されます。)

画像の右上、公開のボタンを押すとこのフローをMCPツールとして使用可能にするというスイッチボタンが出ます、これをオンにします。

そして左のパネルの雲マークを押し、接続というタブに移動します。unknown nodeそこでJinba Appに接続というボタンが出るので押してみましょう。

そこで名前に上記のようなものを入れてMCPを作成し、次にエージェントタブを押します。

そして右上のエージェントを追加を押して、「@このステップのツールを選択」を押して先ほど作ったフローを選択します。
そして上記のようにエージェントに指示を出して保存を押します。unknown nodeでは実際にエージェントを使ってみましょう!unknown nodeエージェントタブから先ほどつくったエージェントを押してエージェントを開始!

今回は以下の画面のように指示を出しました。unknown node成功し、以下のようなメール形式でのアウトプットを出してくれました。
先ほどのカレンダーを参照するとしっかりと空き時間にミーティングを入れてくれていることがわかります。

6. 直面した課題と解決方法
まず最初に、問題が発生したときに赤い「フロー修正」ボタンを連打するのは避けましょう。みなさんも普段ChatGPTなどに何かを聞き、思った答えを得られなかった時に追加で条件を与えて回し続けるとおかしくなると言ったことを経験したことがあるのではないでしょうか?unknown nodeunknown nodeJinbaでも同様のことが起きてしまうので、4-3でお伝えしたフローごとの内容を外部のAIに聞いてみるところから始めてみると良いと思います。
では以下は筆者が直面した問題と解決方法です。
- 繰り返しイベントがカレンダーにあるとおかしな出力をしてしまう。
- これはAPIで情報をLLMに受け渡す時に膨大な情報を渡されてLLMがおかしくなってしまうことがあることに起因します。
- 解決方法としては「get_calendar_events」のフローの下方にあるsingle eventsをオンにすることです。
unknown node
single eventsとは?
Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Default is false.
Jinba Flowより
訳すと「定期的な予定を展開して、単発の予定および定期予定の各インスタンスのみを返し、元の定期予定自体は返さないようにするかどうか。デフォルト値は false(展開しない)。」です。unknown nodeunknown nodeオフ(デフォルト)のままだと「毎週火曜10時の会議」といった定期ルールだけを渡すため、AIが各回の予定を正しく区別できずに混乱します。unknown nodeunknown nodeオンにすると、それを1回ずつの予定(10/28、11/4、11/11…)に分けて扱えるようになり、他の単発予定と同じように処理できるため、ミスが起きません。
unknown node
- 最終アウトプットがとても複雑な表示方法になってしまう。
- これはLLMに出して欲しい表示方法(例: MM/DD XX:XX-XX:XX, XX:XX)を指示してあげることで解決します、お好みの方法でアウトプットするように指示してあげましょう。
- 最初に作ってくれたフローだと2023年など変な時期を参照している。
- これはLLMが日時を正確に出力できないことに起因します、今回のフローの③のように現在時刻を取得して、今何月何日何時なのかを与えることで解決します。
- 何回やっても空き時間がずれてしまう。
- この問題は大体の場合タイムゾーンの指定をしていないことに起因することが多いです、
- 解決方法としてはしっかりとJST(Asia/Tokyo)であると最初に伝えてあげることです。
7. まとめ
いかがでしたか。unknown nodeJinba Flowを使う事で簡単に日程調整のためのエージェント作成をする事ができました!unknown nodeさらにJinba Appを使う事で周りの方の日程調整も簡単に進め、ミーティングの調整をより楽に行うことができるようになります。
今回は日程調整ツールを作成しましたが、他にもさまざまなエージェントを日本語の指示だけで簡単に作ることができます。unknown node使用していくうちに付随するツールやプログラムがどう動くかを学ぶことができ、うまく使うことでより高度で便利なツールを作成することができるようになります。
7-2. 今回のフロー
今回のフローはこちらのunknown nodeからアクセスできます、ぜひアクセスして使用してみてください!
Jinba Flowはこちらから
unknown node
ユーザー登録は無料で、登録後すぐにご利用いただけます。unknown node今回ご紹介したワークフローも、ユーザー登録完了後、すぐにお使いいただけます。
お問い合わせはこちら
企業での導入をご検討の方や、サービスの詳細説明をご希望の方、「このような業務の自動化は可能か?」といったご相談がございましたら、下記フォームよりお気軽にお問い合わせください。
また、機能追加などのご意見・ご要望もお待ちしております。
unknown node
unknown node