Difyで記事収集〜LLMで要約〜Notion DBに保存するワークフローを作ってみた
はじめに
みなさん、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の設定方法は以下の記事が参考になるかと思います。
発行される「Internal Integration Token」は後ほどNotion APIを使用するためにDify上の環境変数として設定するのでメモしておいてください。
ワークフローの構築
ワークフローのDSLは以下で公開しています。これをDSLをインポートした前提で説明を進めます。
ワークフローを実行するには後述の環境変数の設定が必要です。
ちなみに、今回のワークフローはテンプレートの「Web Content Search and Summarization Workflow」をベースにして作成しています。
ワークフローの全体像は以下になります。
ワークフローの処理概要としては以下のようになります。
- 収集したいトピックを入力
- トピックに関連する情報を検索
- 2の情報の中からURLを抽出
- 3で抽出したURLごとに内容の要約を実施
- 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に関しては、下記のページが参考になるかと思います。
終わりに
いかがでしたでしょうか。Difyを使うことでワークフローの構築はサクッとできましたが、まだまだ改善の余地はあるなと感じています。
例として、今後は以下のような改善を考えています。
- すでにNotionに登録済みのURLは対象から除く
- 検索対象を拡大する、検索プロンプト改善
- 記事を概要にする際のプロンプトの改善
- 記事の重要度をつけてもらって、読む際の優先度の助けにする
- 同じような記事の内容は、まとめてもらう
- 外部から定期実行する
- 実行結果をSlackに通知
ある程度形になってきたら再度ブログにしたいと思います。
Discussion