🐧

Difyで記事収集〜LLMで要約〜Notion DBに保存するワークフローを作ってみた

2025/01/19に公開

はじめに

みなさん、LLMとかMLの情報収集どうしてますか?

SNSとか論文とか色々なソースがありますが、LLM周辺の技術進歩は凄まじく、もはや愚直に追っていくのは無理ゲーだなと感じてます。

そこで、いい感じに情報を収集して要約してNotion DBに格納してくれるものがあった良いな〜と思い、サクッとDifyでできないかなとワークフローを構築して検証してみたので、その内容を共有したいと思います。

前提

前提として、書き込み先のNotion DBの準備とNotion Integrationの追加を行っておいてください。

Notion DBの準備

下記のようなNotion DBを作成しておきます。
タイトルはなんでも良いですが、Property名とPropertyの種類は下記の通りに合わせてください。

Property名 種類
Title タイトル
Url URL
Summary テキスト

データベースのURLのうち、個人アカウントだとnotion.so以降、ワークスペース内のアカウントだとworkspace以降の文字列がデータベースIDです。(?v=xxxは含まない)

  • 個人アカウント: https://www.notion.so/<ここがデータベースID>/?v=xxx
  • ワークスペース内のアカウント: https://www.notion.so/workspace_name/<ここがデータベースID>?v=xxx

データベースIDは、後ほどNotion APIを使用するためにDify上の環境変数として設定するのでメモしておいてください。

Notion Integrationの準備

Notion Integrationの設定方法は以下の記事が参考になるかと思います。
https://zenn.dev/kou_pg_0131/articles/notion-api-usage
https://zenn.dev/yu_9/articles/3145f964a58996

発行される「Internal Integration Token」は後ほどNotion APIを使用するためにDify上の環境変数として設定するのでメモしておいてください。

ワークフローの構築

ワークフローのDSLは以下で公開しています。これをDSLをインポートした前提で説明を進めます。
ワークフローを実行するには後述の環境変数の設定が必要です。
https://gist.github.com/chikupen2896/be87d4c8e25f1dc4061bc82a78672030

ちなみに、今回のワークフローはテンプレートの「Web Content Search and Summarization Workflow」をベースにして作成しています。

ワークフローの全体像は以下になります。

ワークフローの処理概要としては以下のようになります。

  1. 収集したいトピックを入力
  2. トピックに関連する情報を検索
  3. 2の情報の中からURLを抽出
  4. 3で抽出したURLごとに内容の要約を実施
  5. Notion DBにAPI経由でページを追加

収集したいトピックとして「LLM」を指定してワークフローを実行すると、以下のようにNotion DBにページが追加されます。

下記ではワークフローを動かすための環境変数の設定や、要点の解説をします。

環境変数の設定

環境変数はRunボタンの左にある「ENV」のボタンから設定できます。(下図の赤枠部分)

DSLからimportした状態ではSecretにしている値は空のままになっているので、「Notion Integrationの追加」で取得した値を「Value」にセットしてください。(秘匿情報なのでSecretのままにしておきましょう)

NOTION_DATABASE_ID

NOTION_INTEGRATION_SECRET_KEY

記事中からのURLの抽出について

正規表現を使用して検索結果からURLを抽出してます。
この処理は元々「Web Content Search and Summarization Workflow」テンプレートに含まれていたのですが、差分としては、抽出したURLが重複することが結構あったので、URLの重複排除を追加しています。

タイトルの抽出

JINA READERの結果からタイトルを抽出し、Notion DBに送信する処理に渡すために、タイトルを抽出するコードブロックを追加しています。

Notion DBへ結果の追加

Notion DBへの値の追加「HTTP Request」ブロックで行っています。

  • HTTPメソッド: POST
  • APIエンドポイント: https://api.notion.com/v1/pages
  • Headers: 環境変数で設定したNOTION_VERSION(2022-06-28)を指定

認証方法については「Authorization API Key」で確認することができます。(下図赤枠部分)

今回は以下のような設定にしており、API Keyとして環境変数で設定したNOTION_INTEGRATION_SECRET_KEYを指定しています。

BODYはJSON形式で、以下のようにしています。(url: itemの部分で警告が出てますが、ちゃんと動きます)

なお、Notion APIに関しては、下記のページが参考になるかと思います。

https://developers.notion.com/docs/getting-started
https://zenn.dev/kou_pg_0131/articles/notion-api-usage

終わりに

いかがでしたでしょうか。Difyを使うことでワークフローの構築はサクッとできましたが、まだまだ改善の余地はあるなと感じています。
例として、今後は以下のような改善を考えています。

  • すでにNotionに登録済みのURLは対象から除く
  • 検索対象を拡大する、検索プロンプト改善
  • 記事を概要にする際のプロンプトの改善
  • 記事の重要度をつけてもらって、読む際の優先度の助けにする
  • 同じような記事の内容は、まとめてもらう
  • 外部から定期実行する
  • 実行結果をSlackに通知

ある程度形になってきたら再度ブログにしたいと思います。

Discussion