はじめに
前回記事(NotebookLM編)の続編です!
NotebookLM は、
構築が容易という大きなメリットがある反面、拡張性が低いことがデメリットでした。
また個人アシスタントとしては使い勝手が良いですが、チームでの利用時にはやや不便さを感じます。
そこで今回は Dify を使用して、
- LLM / Embeddingモデル / Rerankerモデル を柔軟に変更しつつ、
- Webクローリングで知識の自動収集を行い、
- さらにはSlackボットとして機能する、チームでも使用可能な、
AIアシスタントを作ってみます。
なお難易度が上がりますので、中級者~上級者向けの内容となります。
アーキテクチャ
外部知識を活用する手法 Retrieval-Augmented Generation(RAG) を使った以下構成とします。
以下を組み合わせて実現します。
- Dify:LLMアプリ開発プラットフォーム
- Firecrawl:webクローリングサービス(Dify連携サポート済み)
- Ollama:LLM / Text Embedding プロバイダ(Dify連携サポート済み)
- Xinference:Text Embedding / Reranker プロバイダ(Dify側で連携サポート済み)
- Dify Bot:Slack↔Dify接続
※ Dify は クラウド版Freeプラン だと制限が多かったため、オンプレでホストします。
OS:Windows 11 Pro
CPU:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz 3.70 GHz
GPU:NVIDIA GeForce RTX 3060
RAM:64GB
※ PC本体代 / 電気代 / 通信費 以外 の費用が発生しない構成を目指しました。
手順
ほぼ既存記事に沿って実施しただけなので、参照記事だけ列挙して詳細は割愛します。
Dify Bot だけ、日本語の情報が少なかったので詳細を記載します(といっても大したことないです)。
1.準備
1. (Windowsの場合) WSL2を設定します
2.Dockerをインストールします
2.アプリ構築 on Dify
1.Ollama で LLM / Text Embedding を設定します
2.Xinference で Text Embedding / Reranker を設定します
3.Firecrawl を設定して Knowledge を準備します
必ずクローリング先のサイト規約を確認してください。
クローリング/スクレイピングを禁止しているサイトもあります。
4.Dify で チャットボット(Chatflow)を作成します
「知識取得」は以下のように設定しました、マルチパスリトリーバルを使用します。
「LLM」は以下のように設定しました、前段「知識取得」の result
を渡し忘れないように注意します。
5.デバッグとプレビューで動作確認します
外部知識を活用して回答してくれていそうです。
3.Dify↔Slack連携
1.Dify Bot で Slack連携を設定します
Dify と Dify bot が接続できるように、以下のように設定変更してDockerコンテナを起動します。
DEBUG=debug
MODE=chat # chat or completion
DIFY_API_BASE_URL=http://host.docker.internal/v1
# slack discord feishu/lark
ADAPTER=slack
# Dify
DIFY_API_BASE_URL=http://host.docker.internal/v1
DIFY_API_KEY=app-xxxxxxxxxxxxxxxxxxxxxxxx
# Slack
SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
SLACK_APP_TOKEN=xapp-x-xxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Discord
DISCORD_TOKEN=MTExMjAyMTMxOxxxxxxxxxxxxx.GkPR5t.xIrYZxxxxxxxxxxxxxBN1jqkxxxxxxxxxxxxx
DISCORD_ID=1112021318955708487
version: '3'
services:
bot:
image: pinkbanana/bot:latest
env_file:
- ./.env
extra_hosts:
- "host.docker.internal:host-gateway"
Dify APIキーやSlack APIトークンの取得などの設定方法は以下が参考になると思います。
使用例
実際に使ってみるとこのような感じです。
今回はローカルで動く軽量なLLMを選択したため、回答性能にはやや課題が残ります。
ただ、DifyはChatGPTやClaudeとも連携ができるので、モデルを差し替えることでさらなる性能向上が期待できると思います。Geminiの無料枠なら費用も増加せず性能が引き上げられるかもしれません。
おわりに
Dify は LLM / Embedding / Reranker / Knowledge の 組み合わせ自由度が高いので、
状況に合わせたAIアシスタントが作成可能と思います。
またSlackと連携することでチーム内展開も容易になります。
「Autowareのパラメータについて知りたい」「どんなモジュールがあるのか教えてほしい」「こんな問題に直面しているんだけどどうしたらいいの?」「サンプルコード書いてほしい」などなど、開発中の疑問に答えてくれるAIアシスタントがチーム内に居てくれたら… とっても心強いですよね。
自動運転AIチャレンジ2024 の予選も残りわずか!
AIアシスタントの力を借りながら、最後まで楽しんで走り切りたいです!
つづく
この記事は、AI文章校正ツール「ちゅらいと」で校正されています。