MAGAZINE

キャリテク!マガジン

  • TOP
  • キャリテク!マガジン
  • 【おうちSEになろう!】地域の季節の行事を収集するAIワークフローを構築する【最終回】(池澤あやか氏 連載)
コラム

【おうちSEになろう!】地域の季節の行事を収集するAIワークフローを構築する【最終回】(池澤あやか氏 連載)

こんにちは、池澤です。

みなさんは季節の行事をちゃんと行っていますか?
ひなまつり、お花見、こどもの日、七夕、お盆―――。
日本にはたくさんの季節の行事があります。

私は子なし時代を引きずっており、
「気づいたらクリスマスが終わっていた…」
「気づいたらハロウィンが終わっていた…」
「気づいたら節分が終わっていた…」
そんな毎日を送っています。

親は怠惰でダメダメでも、子どもには季節の行事を楽しんでほしい。でもダメな親だから忘れちゃう。どうしようか。

そうだ、自動でその地域で開催される季節のイベントを収集しよう!

どうやって自動で季節のイベントを収集するか

今回は、以下の図のようなしくみで季節のイベントを収集します。

この先2ヶ月の季節の行事をリストアップする

まずは gpt-4o-mini を活用して、これから2ヶ月間に行われる季節の行事の名称とその日付をリストアップします。「ひなまつり、3月3日」「お花見、3月下旬 〜 4月上旬」などといった具合にリストアップします。

なぜ「2ヶ月先」までの行事を対象にするのかというと、イベントの準備やスケジュール調整を事前に行えるようにするためです。

関連する地域のイベントを調べる

次に、リストアップした季節の行事に関連するイベントが、自分の住んでいる地域周辺で開催されていないか調べます。

この調査には Perplexity を使用します。Perplexity は、AI を活用した検索ツールで、一般的な検索エンジンと比べて効率的に情報を収集できるのが特徴です。

通常の検索エンジンでは、検索結果の上位に関係のない記事が表示されたり、詳細な情報を得るために複数のページを開く必要があったりします。
しかし、Perplexity なら、AI が複数の情報ソースを横断的に収集し、要点を整理して提示してくれるため、効率的に調査を進められます。また、情報ソースも明示されるので、信頼性を確認しながら活用できるのもメリットです。

このツールを活用し、地域で開催されるイベント情報を効率的に収集します。

Discord でお知らせする

関連イベントを調べたあとは、その情報を 家族チャット(Discord) に投稿して共有します。

Discord のようなチャットに情報を投げておくと、リアルタイムでの家族間の情報共有がしやすく、過去のメッセージを後から確認できるため、イベント情報のストックにも向いています。

このワークフローを整えることで、「気づいたらイベントが終わっていた……」というまぬけな事態を防ぎます。

Dify でワークフローを実装する

このワークフローを Dify を使って実装していきます。

Dify は、ローコードでAIワークフローを構築できるプラットフォームです。

プログラミングの知識がなくても、視覚的なインターフェースを使ってAI のプロンプト設計やデータの処理、外部サービスとの連携を実装できます。特に、AI の活用を自動化したい場合に便利なツールです。

Dify にはチャットボット、エージェント、ワークフローという主要な機能があります。

  • チャットボット: ユーザーと対話するAIを構築できる機能
  • エージェント: 外部 API やデータソースを活用しながら、より高度な処理を実行できる機能
  • ワークフロー: 複数の処理を順番に実行し、自動化する機能

今回は、AI で生成した情報を加工したり、再度 AI で調査したり、最終的に Discord でお知らせするというワークフローを組みたいので、Dify のワークフロー機能を活用して実装します。

この先2ヶ月の季節の行事をリストアップする

まず、現在の時間を取得します。Dify には公式で提供されている「現在の時間を取得する」ブロックがあるので、それを活用します。

取得した時間をもとに、GPT-4o-mini に対してこの先2ヶ月の季節の行事をリストアップするように依頼します。AI に指示を出す際には、プロンプトで具体的な出力フォーマットを指定しておくと、後の処理が楽になります。

以下のようなプロンプトを設定しました

```
ユーザーから与えられる日時以降、二ヶ月間で開催される日本の行事を以下の形式で出力してください。余計な文章を前後につける必要はありません。
 
出力例
- 行事名: ひな祭り(桃の節句)
- 日付: 3月3日
 
- 行事名: ホワイトデー
- 日付: 3月14日
```

次のブロックで、GPT-4o-mini の出力を解析し、行事名(event_names) と日付(event_dates) に格納します

さらに、次の検索処理で扱いやすいように、辞書型の変数にデータを整理します。Python のコードブロックを使って、行事名と日付に加え、後で検索時に利用する地域情報(area) を追加しました。

area(地域) は変更しやすいように、別のブロックで設定できるようにしています。
今回は「東京都」としていますが、もうすこし詳細に「東京都〇〇区」「〇〇周辺」などのように設定したほうが、精度が出る気がします。

関連する地域のイベントを調べる

次に、リストアップした行事に関連する 地域のイベント情報を取得します。

Dify のイテレーションブロックを使用します。このブロックは、プログラミングの for 文のように、配列の要素を一つずつ取り出して処理を行えます。

まず、辞書型の変数から 行事名(name)、日付(date)、地域(area)を単独の変数にそれぞれ格納し、Perplexity ブロックに渡します。

なぜ辞書型のまま渡さずに、一度個別の変数に格納するのかというと、Perplexity ブロック内では辞書型のデータに直接アクセスできないためです(もしかすると方法があるかもしれませんが、今回はこの方法を採用しました)。

次に、Perplexity ブロックを設定します。プロンプトは以下のように設定しました。

```
今年{area}で開催される{name}のイベントを教えて。
```

Perplexity は API 経由でアクセスするため、公式サイトから API キーを取得しておく必要があります。

Discord でお知らせする

関連するイベント情報を取得したら、Discord に自動投稿します。

投稿する際には、Jinja2 を使ってメッセージのフォーマットを整えます。

テンプレートは以下のように記述しました。

```jinja2
まもなく{{ date }}は{{ name }}なので、{{ area }}で開催される{{ name }}のイベントについて調べました。
 
{{ text[0].content }}
 
引用:
{% for citation in text[0].citations %}
- [{{ loop.index0 + 1 }}]: {{ citation }}
{% endfor %}
```

このテンプレートを使うことで、以下のような形で Discord に投稿されます。

Dify には Discord に投稿するための専用ブロックも用意されているので、API 連携の手間なくスムーズに実装できます。

なお、最初は全イベントの情報をまとめて1回で投稿する設計にしていたのですが、Discord のメッセージ文字数制限に引っかかってしまいました。そのため、現在は各行事ごとに投稿する方式に変更しています。

以上で、ワークフローが完成しました。

Dify を活用して、AI で行事をリストアップし、関連イベントを調査し、Discord で通知するというワークフローを構築しました。

この仕組みを使えば、毎回手作業で検索する手間が省け、家族とスムーズにイベント情報を共有できるようになります。Dify のワークフロー機能はノーコード・ローコードで柔軟に組み合わせられるため、用途に応じたカスタマイズも可能です。

Dify のワークフローを定期実行する

Dify のワークフローは完成しましたが、これを月に一度などのペースで定期実行する必要があります。

Dify では、ワークフローを API として公開できるため、cron を使って自分のサーバーから定期的に実行することも可能です。しかし、今回は手軽にスケジュール実行を試してみました。

ういうとき、少し前までは IFTTT や Zapire を使っていたのですが、どちらも Webhook が有料化してしまったので、pipedream という新しいアプリケーションを使って設定をしました。

ふたつめの Webhook の設定では、Headers に「Authorization」「Bearer <Difyで取得したAPI key>」も設定してくださいね。

これで定期実行の設定が終了しました!祝、自動化!

「おうちSEになろう!」最終回!ありがとうございました!

これでキャリテク!マガジン内で連載させていただいていた「おうちSEになろう!」ですが、今回で最終回になります。

これまでの連載はいかがでしたでしょうか。

Google カレンダーと連携するおうちチャットで動く Bot をつくったり、Raspberry Pi で玄関のデジタルお知らせボードをつくったり、AI を活用して効率的に情報収集したり、いろいろとおうちを便利にしてきました。

「おうちを、より便利に。ハイテクに。」

おうちSE 活動はわたしのライフワークで、この連載では「プログラミング」に特化してお届けしてきましたが、本来はIT ツールの導入・運用や、家事の省エネ・自動化などにも取り組んでいます。

私も4月から育休から復帰予定で、今よりもちょっと忙しくなりそうな予感がしますが、ライフワークであるおうちSE 活動は細々と続けていきたいと思います。 また発信する機会があれば、その際はどうぞよろしくお願いします!池澤でした!

AltXからのお知らせ

池澤あやか氏のコラムはいかがでしたでしょうか?

当社のIT未経験者向け育成研修「キャリテク!」を趣味でパソコンを活用している方にもぜひ知っていただきたく、池澤あやか氏に「おうちSE」のコラムを執筆いただきました。
当社の「キャリテク!」はITエンジニア未経験の方でも2~3ヶ月間の研修を通してゼロからITエンジニアとしてのキャリアをスタート出来るようにサポートする入社時研修です。

「キャリテク!」については個別説明会を実施しています。

少しでも興味がある方は、まずは以下の個別説明会でざっくばらんにお話しましょう!
https://www.altx.co.jp/careetec/seminar/tokyo/

関連記事

facebook シェアシェア
LINE シェアシェア