はじめに
AIエージェントを簡単に実現するならDifyを活用するとよいでしょう。
DifyはノーコードでワークフローなどのAIエージェントを作ることができるサービスです。
本記事では、Difyで簡単なワークフローを作り、さらにGAS(Google App Script)を使って定期自動実行させた例を紹介します。

Difyでワークフローを作る
1)メールアドレスを入力して実行すると、
2)生成AI関連のニュース記事をGoogleニュースで検索して
3)要約した結果をメール配信してくれる
ワークフローを作ります。

ワークフローの全体は下記の図の通りです。左から右に流れる単純なフローです。順を追ってみていきましょう。

開始の段階でユーザーのメールアドレスの入力を受け取ります。

入力はあらかじめ選択肢を入力して、ユーザーに選択させる動作にしました。そのほかにも自由入力させてもよいですし、CSVファイルからの読み込みなども可能のようです。

続いてGoogle news APIを使用して、Google newsの情報を取得します。Query(検索キーワード)には[generative AI](生成AI)を指定してみましたが、これに限らずどんなキーワードでも可能です。
このAPIではnewsのURLや概要が混ざったテキストデータを取得できます。

続いてLLMのブロックを使います。ここでは、APIで取得したテキストからURLの部分のみ取り出して出力させます。ここをプログラミングでやろうとすると多少頭を使って考える必要がありますがLLMなら「URLの部分のみ抜き出して出力して」とお願いすればよい塩梅にやってくれます。こういうラフな指示で動くのがLLMの良いところですね。

出力されたURLはWEB SCRAPERに渡します。WEB SCRAPERはいわゆるウェブスクレイピングを実行するブロックで、指定されたURLにアクセスしてWebサイトの情報(テキストなど)を取得してくれます。

WEB SCRAPERで取得したwebサイトの情報をLLMに渡して要約し、箇条書きにまとめてもらいます。

プロンプトは以下のものを使いました。

最後はEメールを送付する機能を使って、LLMが出力したテキストをメール送信します。メールの宛先は「開始」の時に入力させたユーザーのメールアドレスです。

今回のワークフローでは、終了処理はそのまま何もなく終了するのみです。

実際に実行すると下記のようにニュース要約が配信されます。箇条書き3点でという指示や改行の指示が反映されていないので修正が必要ですが、要約記事の配信機能としては完成したと言えるでしょう。

GASから自動実行させる
ここまででワークフローが完成しましたが、いちいちニュースを配信してもらうのに手動で操作するのは面倒ですよね。そのため、作成したワークフローを毎日自動的に実行させる仕組みを作ります。
ここではGAS(Google APP Script)を使って自動化をしました。
まずは先ほど作ったDifyのワークフローにAPIを設定して、GASから動くようにコーディングします。

作成したGASのスクリプトは以下のようなものです。
function callDifyApp() {
// DifyのAPIエンドポイントとAPIキー
const url = "https://api.dify.ai/v1/workflows/run"; // 例: DifyアプリのURL
const apiKey = "xxxxxxxxxxxxx"; // DifyのAPIキーをここに入力
const requestBody = {
inputs: {user_mail:"userのEメールアドレス"
},
user: "test_user_123" // 必須のuserパラメータ
};
const options = {
method: "post",
contentType: "application/json",
headers: {
Authorization: `Bearer ${apiKey}`
},
payload: JSON.stringify(requestBody)
};
try {
const response = UrlFetchApp.fetch(url, options);
const jsonResponse = JSON.parse(response.getContentText()); // JSONパース
Logger.log(jsonResponse); // 結果をログに出力
} catch (error) {
Logger.log("Error: " + error.message);
// エラーオブジェクトがresponseを持っている場合のみ内容をログ出力
if (error.response) {
Logger.log("Response: " + error.response.getContentText());
} else {
Logger.log("No response content available.");
}
}
}
これでGASからDifyのワークフローを実行できるようになりました。あとはGASを自動的に実行するように設定してあげればOKです。ここでは下記のように毎日午前5~6時に自動実行するようにしました。

このような感じで、Difyではワークフローをノーコードで作成することができます。Difyは非常に高機能なサービスなので工夫次第で様々な仕組みが作れるでしょう。
自動実行はGASを使いました。こちらはノーコードとはいかないですが、そこまで複雑ではないと思いますのでぜひチャレンジしてみてください!
参考記事
ワークフローの作成およびGASからの自動実行は下記の記事を参考にしました。丁寧な解説付きでわかりやすいよい記事です!
https://zenn.dev/zozotech/articles/87a3e318d61920
https://qiita.com/tregu148/items/2ca7c0cfa194c34c83c9