Dify × notion でAIエージェントを作る
notionのデータに基づいたDifyチャットボットをnotion上に埋め込めるらしい。
公開したURLを埋め込みするだけ。
notion AIを別途契約しなくてもDifyを使えば低コストでAIチャットを実現できる可能性がある。
また、うまく使えば複雑なフローも実現できるかも。
まずはクラウド版で作成してみた。

架空の事例で試してみる。
notion上でDifyの埋め込みができており、notion上の記載を参照できている。

この公式プラグインを使えばdify側からnotionのページの新規作成や更新ができる。
4/15リリースなのでつい最近発表されたようだ。
この画面からインストールする。

エージェントのToolの一つとしてNotionプラグインを渡す。

認証情報は以下のページから作成する。
「内部インテグレーションシークレット」の値をコピーして記載。

ローカル版ではnotionへのアクセス権限を個別に設定する必要がある。
ページ内の設定の「接続」から先ほど作成した認証情報を選ぶ。
そのページに属する子ページも自動で含まれる。
クラウド版では下記スクショ内で「アクティブな接続」に示されているように、一度何らかのタイミングで接続すれば「Dify」としてまとめて認証される。

RAG用のナレッジとして、Notion内の記事を参照できる。

クラウド版の無料プランだとだとナレッジにチャンク追加ができない。
ローカル版だとできた。

クラウド版・ローカル版共通で、ナレッジにnotionと連携してデータ取り込みをする際に、"Process rule pre_processing_rules is required" errorが出る。
- 初回の追加は問題ない
- 新しくファイルをナレッジに追加する際にエラーが出る。
issueを見るにdify側のバグ。
ローカル版で直そうと試みたが、すぐには直せなさそうなので断念。

そもそもローカル版でDify立ち上げるには以下の方法で実施。
ローカル版のDifyを立ち上げる
任意のディレクトリにgit cloneする。
docker desktopを立ち上げてから、cloneしたディレクトリ内でコマンドを実行する。
cd dify
cd docker
cp .env.example .env
docker compose up -d
立ち上がったら、以下のURLにアクセスする。
このような画面が立ち上がるので、アカウントを設定する。

今はRAG→ReAct型エージェントの順で接続しているが、Tool内にSearch Notionの機能があるのでRAG無くても良い可能性はある。
手元で試した感覚だと、少数しかサンプルデータを作成していなかったので、違いが出なかった。

そもそも「質問回答」と「notionの操作」を同一のエージェントにやらせようとしているのが間違いで、先にユーザーからの依頼がどちらの内容なのかを判別して分岐を入れた方が良いようにも思う。(未検証)
ReAct型エージェントのSearch Notionで良い。



<instructions>
あなたはマーケティングやプロモーションの企画相談に対応するアシスタントであり、さらにNotionの操作を行うことができるエージェントです。以下の手順に従ってタスクを遂行してください。
1. ユーザーの指示内容を分析し、以下のいずれかに分類してください:
- 質問への回答を求めている場合
- Notion上での操作を求めている場合
2. 質問への回答を求めている場合:
- ユーザーの質問に対して、コンテキストに応じた正確で簡潔な回答を提供してください。
- 必要に応じて、関連するマーケティングやプロモーションの知識を活用してください。
3. Notion上での操作を求めている場合:
- ユーザーの指示に基づいて、Notionの操作を行ってください。
- 操作内容には、ページの作成、更新、削除、またはその他の指定されたアクションが含まれる可能性があります。
- 操作を完了したら、ユーザーにその内容を簡潔に報告してください。
4. 出力にはXMLタグを含めないでください。回答は自然な文章形式で提供してください。
5. 必要に応じて、ユーザーの指示が曖昧な場合は、追加の情報を求めてください。
6. 常に丁寧でプロフェッショナルなトーンを維持してください。
</instructions>