DifyでNotionのノートをAIアシスタントに
Notionのナレッジベースをアプリ基盤のDifyにつなぎ、質問に答えられる対話アプリを学習させます。ノートをライブラリに眠らせたままにしないための方法です。
このページの内容
#ライブラリに眠ったノートは、使えるとは限らない
Notionは個人のナレッジベースとして優れていますし、人と一緒に原稿を直すのにも向いています。ページは柔軟で、拡張機能も豊富で、長年蓄えてきたものを多くの人がそこに入れています。
ただ、デフォルトではその内容は静的です。使うには、自分で検索し、ページを開いて、必要な一文に行き当たるまで読まなければなりません。ライブラリが大きくなるほど、それは「アシスタント」というより、「自分で自分の検索をしている」ように感じられます。
私はずっと、私のNotionを読んだことのあるアシスタントがほしいと思っていました。ライブラリの中身の復習を手伝ってくれて、執事のように話を続けられて、さらには私に代わって他人の質問に答えてくれるようなものです。
#Difyで作る
DifyはオープンソースのLLMOpsプラットフォームです。ChatGPTやClaudeのようなモデルは、あなたが提供したテキストから学習することがすでにできます。足りないことが多いのは、モデルそのものではなく、Notionのページをモデルが使えるコンテキストに変える仕組みなのです。
Difyを使わない場合、LangChainを自分で組み立てることになるでしょう。分割、ベクトル化、検索、会話メモリなど、すべての部分を自分で管理しなければなりません。Difyは、データセット、学習、プロンプト、チャットアプリを一つのインターフェースにまとめてくれます。
#五つのステップで完了
流れは長くありません。
- Difyにログインする
- データセットを新規作成する
- Notionを同期する
- 学習を開始する
- アプリを作成し、このデータセットを接続する
#1. Difyにログインする
dify.aiを開き、GitHubまたはGoogleでログインします。GitHubを使うなら、ついでにlanggenius/difyにスターを付けてください。このオープンソースプロジェクトの役に立ちます。
#2. データセットを新規作成する
上部バーのDatasetsをクリックし、続けてCreate Datasetをクリックします。
#3. Notionを接続する
Sync from Notionを選び、Connectをクリックします。
ブラウザがNotionのログインページに移ります。ログイン後、Difyが求めている権限を確認し、Select pagesをクリックします。
同期したいページにチェックを入れ、Allow accessをクリックします。
#4. 学習を開始する
モデルに学習させたいページを指定し、次へ進みます。
分割方法はAutomaticを選びました。インデックスの品質はHigh Qualityを選び、Save & Processをクリックします。学習には少し時間がかかります。コーヒーを一杯飲むくらいの時間なので、ずっと見つめている必要はありません。
#5. アプリを作成する
データセットは勝手にしゃべってはくれません。コンソールに戻り、Create new APPをクリックして、Chat Appをそのまま使います。
Prompt Eng.を開き、contextに先ほど作成したNotionのデータセットを接続します。
プリセットのプロンプトを書いておく価値があります。ノートが主にトラブルシューティングの内容なら、次のように書けます。
私のNotionワークスペースのITの専門家として、コンピュータ、ネットワーク、これらのノート、そしてセキュリティの知識を組み合わせて問題を解決してください。
また、訪問者が何を質問できるかわかるように、ウェルカムメッセージも設定しています。音声認識をオンにすることもでき、話しかけて質問するときに便利です。
右上のPublishをクリックします。Overviewにある公開リンクが、対話の入り口になります。
#APIで自分のプロジェクトにつなぐ
Dify上のアプリにはすべてAPIが付いています。モデルと検索はDifyに残し、フロントエンドはメッセージを送るだけです。Backend-as-a-Serviceのような一層として機能します。
OverviewでAPI Referenceを開き、このアプリのインターフェース仕様書として扱います。
#キーを発行する
アプリ専用のAPIシークレットを別途作成してください。すでにクライアントのコードに漏れてしまっている鍵を、再び使ってはいけません。
#セッションIDを取得する
まずインターフェース上で一往復チャットし、その後Logs & Ann.でセッションIDを確認します。
#リクエストを送る
ドキュメントにサンプルがあります。キーを自分のものに差し替えてください。最初のリクエストではconversation_idを空のままにしておけます。レスポンスでIDが返ってきたら、次の往復でそれを入力します。
curl --location --request POST 'https://api.dify.ai/v1/chat-messages' \
--header 'Authorization: Bearer ENTER-YOUR-SECRET-KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"inputs": {},
"query": "eh",
"response_mode": "streaming",
"conversation_id": "",
"user": "abc-123"
}'
うまくいけば、ストリーミングでレスポンスが返ってきます。
同じ会話では、返ってきたconversation_idを次のリクエストに引き継ぎます。完全な記録はLogsページに残っています。
#Notionとの同期を保つ
ページを編集したら、ときどきDifyで同期してください。そうすることで、アシスタントは新しい内容を学習します。
#最後に残るもの
本当に残るのは「NotionにAIのラッパーをかぶせたもの」ではありません。更新できるデータセット、編集できるプロンプト、そして既存のプロジェクトから呼び出せるAPIです。Difyは、LangChainを手作業で組み立てる部分だけを省いてくれるのです。