1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成AIに関する記事を書こう!
Qiita Engineer Festa20242024年7月17日まで開催中!

Difyをrootlessで動かし、Notionと連携したチャットボットを作成する

Posted at

はじめに

ComfyUIのノードにキーロガーが含まれていたというタイトルを見て(記事の中身は見てない)、コンテナで提供されるアプリのサプライチェーン怖いよなーと思いつつ、ブラックボックスノードで実行されてしまう事は防ぎようがないんだけど、何でもかんでもrootで動かしちゃだめだよなぁ...と思い立ったので、今流行りのDifyをrootlessで動かしてみた。

Difyインストール

今回はAlmaLinux9のminimalをベースにインストール ※一般ユーザーで実施

# SELinuxオフ
sudo grubby --update-kernel ALL --args selinux=0
sudo reboot

# dnf update
sudo dnf update -y

# Dockerインストール
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# rootless実行設定
sudo dnf install -y iptables
sudo modprobe ip_tables
curl -fsSL https://get.docker.com/rootless | sh
sudo loginctl enable-linger $USER

# 特権ポート許可
sudo setcap cap_net_bind_service=ep $(which rootlesskit)
systemctl --user restart docker

# Gitインストール
sudo dnf install -y git

# 80ポート開放
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

# Difyインストール
cd
mkdir container
cd container
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d

Dify LLM設定

今回はLLMにGeminiを利用します。
また、今回私が構築したAlmaLinuxが192.168.56.113なので、http://192.168.56.113 へアクセスし、メールアドレス、パスワードを登録してログイン

設定ボタンを押下

今回はGeminiを利用しようと思います。モデルプロバイダーを押下し、Geminiのセットアップボタンを押下

「Get your API Key from Google」を押下し、Geminiにログインする

画面上部の「Gemini API」タブを押下し、「Google AI StudioでAPIキーを取得する」ボタンを押下する

「キー APIキーを作成」ボタンを押下する

「OK」ボタンを押下する

「キー 新しいプロジェクトでAPIキーを作成」ボタンを押下する

APIキーが作成されるので、表示し、値をコピーする

Difyに戻り、コピーしたAPIキーを貼り付け、「保存」ボタンを押下する

Geminiがセットアップされたことを確認する

Notion 連携シークレット取得

次に、Notion側でDifyからアクセスを許容する設定を行います。
また、NotionにはDifyというページにDifyの説明と本記事上部にあるインストール手順を乗せたページを用意しました。

https://www.notion.so/my-integrations にアクセスし、接続するためのシークレットキーを生成します。
「+ 新しいインテグレーション」ボタンを押下

任意の名前を入力し、「送信→」ボタンを押下

シークレットが作成されるので、表示し、値をコピー

ここで、一旦Difyを停止(docker compose down)し、docker-dompose.yamlのパラメタを修正 ※2カ所あるので、2ヵ所とも修正
修正後、docker compose up -dで起動

NOTION_INTEGRATION_TYPE: public
NOTION_INTERNAL_SECRET: you-internal-secret

NOTION_INTEGRATION_TYPE: internal
NOTION_INTERNAL_SECRET: コピーしたシークレット値

Difyナレッジ登録

Difyが参照するナレッジを登録します。
ナレッジから「知識を作成」ボタンを押下

「Notionから同期」を選択し、「接続する」ボタンを押下

「+ Add workspace」ボタンを押下
ところが、バグなのか何も起きません。何も起きませんが、ちゃんと動いている様子

元の画面に戻ると、Notionが登録されています。しかし、どのページも読み込まれていません。

Notion コネクタ設定

Notionのページに戻り、Difyに読み込ませたいページの設定から、接続先にシークレット作成時の名前を選択

「はい」ボタンを押下

Dify データソース同期

Difyに戻り、連携したNotionの歯車アイコンを押下

連携されているNotionの「Sync」メニューを押下

同期されたことを確認

元のページに戻ると、読み込まれたページが表示されているので、チェックして「次へ」ボタンを押下

「保存して処理」ボタンを押下

ページが読み込まれて100%になる事を確認する

Dify チャットボット作成

Difyのトップページに戻り、「テンプレートから作成」ボタンを押下

「Knowledge Retreival + Chatbot」の「+ このテンプレートを使用する」ボタンを押下

「作成」ボタンを押下

このような画面が表示される

「Knowledge Retreival」ブロックを選択し、「N-to-1リトリーバル」のシステム推論モデルをGeminiに変更する

知識の「+」を押下し、Notionから読み込んだナレッジを選択後「追加」ボタンを押下する

ナレッジが設定されていることを確認する

LLMブロックを選択し、モデルをGeminiに変更する

コンテキストに「result」を設定する。以上終了
※resultはナレッジからのアウトプット。これを設定しないとボットはナレッジを検索してくれない

動作確認

「デバッグとプレビュー」を押下し、チャット画面を表示する

「Difyとは何ですか?」と質問すると、Notionに記載したDifyの説明を表示してくれる

「Difyに必要なpkgをリストアップして」と言うと、Notionに記載されている手順から必要なpkgをリストアップしてくれる

あとは前段にSSLオフロードする機構を入れればいいかなと思います。

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?