LLM アプリケーションが簡単に作れるという話題の Dify 試してみた
こんにちは!アルダグラムでエンジニアをしている渡邊です!
最近 Dify の話題を目にする機会が増えてきたので、今さらではありますが触ってみました。 この記事では Dify の使い方について共有いたします!
Dify とは?
Dify とはオープンソースで公開されているプロジェクトで、LLM(大規模言語モデル)アプリケーションを開発するためのプラットフォームです。 Dify を使うことで開発者でない人でも生成 AI アプリケーションを構築することができます。
- GitHub
- ドキュメント
また Dify は以下の2通りの方法で使えます。
- クラウドサービスで使う
- https://dify.ai/ からアクセス可能
- 独自のサーバーにホスティングして使う
Dify で何ができる?
Dify を使うことで GUI をぽちぽちするだけで LLM のアプリケーションが作成できます。2024年7月時点では以下の4種類のアプリケーションが開発できます。
-
チャットボット
- LLM を利用した会話型アシスタント
-
テキストジェネレーター
- 物語の執筆、テキスト分類、翻訳などのテキスト生成タスクのためのアシスタント
-
エージェント
- タスク分解、推論、ツールの呼び出しを行う会話型インテリジェントアシスタント
-
ワークフロー
- 複数のプロセスを組み合わせた柔軟な LLM ワークフローを定義する
アプリケーションを作成するにあたって独自のデータを提供するナレッジという仕組みが提供されており、提供したデータをもとにチャットボットに回答させる、といったことができます。
また、作成したアプリケーションに対して API でアクセスすることも可能です。
チャットボットを作ってみる
実際に Dify を使ってチャットボットを作ってみたいと思います。
環境構築
Dify は Docker 上で動かすことができるので、以下の手順でローカルで動かしてみます。
- GitHub にアクセスして Dify のプロジェクトをクローンする
-
https://github.com/langgenius/dify#quick-start を参考に以下のコマンドを実行する
cd docker cp .env.example .env docker compose up -d
- 上記実行後、http://localhost/install にアクセスすると以下のような画面が表示されるので管理者アカウントの設定を行う
- 上記設定完了後、ログインを行う
ログインを行うと以下のような画面が表示されて準備は完了です。
モデルプロバイダーの設定
Dify でアプリケーションを作るにあたってモデルプロバイダーを設定する必要があります。OpenAI の GPT シリーズや Anthropic の Claude シリーズなどの主要なモデルプロバイダーをサポートしています。
上記の画面へは画面右上に表示されているユーザー名をクリックし、「設定」を選択すると表示されます。
Dify で使用する前に、モデルプロバイダーの公式 Web サイトから API キーを取得し、取得した API キーを Dify で設定します。
今回は OpenAI、Anthropic、Cohere の3つを登録しました。
チャットボットアプリの作成
先ほどのログイン後に表示された画面の左上にある「最初から作成」のボタンをタップすると、以下のような画面が表示されます。
この画面から前述の4種類のアプリケーションのいずれかを作成することができます。 ここではチャットボットアプリを作成してみます。 チャットボットではオーケストレーション方法という項目を指定することができ、Chatflow はより複雑なアプリを作成することができます。
まずは「基本」のチャットボットを作成してみます。 アプリ名に「基本のチャットボット」と入力して「作成する」ボタンを押します。 すると以下のような画面が表示されます。
画面の左側に以下の4つのメニューが表示されています。
- Orchestrate
- APIアクセス
- ログ&アナウンス
- 概要
それぞれの項目について見ていきます。
Orchestrate
「Orchestrate」ではアプリケーションを構築する設定を行います。
右上に「gpt-4」と表示されていますが、ここで前述のモデルプロバイダーで設定したモデルを選択することができます。
「手順」にはプロンプトを設定します。 「変数」は記載されている通りプロンプトに設定することができます。 「コンテキスト」には独自の知識を与えることができ、LLM はこの知識を参照して回答することができるようになります。
まずここでは以下のように設定しました。
- モデル: 「gpt-4o」
- 手順:「質問に {{{language}} で回答し、末尾に😀を付けてください。」
- 変数: 「language」
右側の「デバッグとプレビュー」で動作確認を行うことができます。 language に「日本語」と「英語」をそれぞれ入力して質問した結果が以下になります。
日本語 | 英語 |
---|---|
動作に問題がなければ画面右上の「公開する」ボタンを押すとアプリを更新することができます。
「アプリを実行」ボタンをタップすると、実際のアプリケーションとして動作確認することができます。
API アクセス
「APIアクセス」ではアプリケーションの API のドキュメントが表示されます。 API を使いたい場合はこちらが参考になります。
ログ&アナウンス
続いて画面左側の「ログ&アナウンス」というメニューです。 こちらでは「ログ」と「注釈」というタブがあります。
まず「ログ」ですが、ここではユーザーの会話履歴を閲覧することができます。
「注釈」はユーザーからの特定の質問に対して、チャットボットからの応答に注釈を付けることができます。 「注釈を追加」ボタンをタップし、例えば以下のように質問と回答を設定します。
追加したら「注釈の返信」を ON にします。
先ほどの「デバッグとプレビュー」の画面で先ほどと同じ質問をすると、以下のように回答が変わります。
概要
画面左側の「概要」というメニューではアプリケーションの URL や API のエンドポイントの他、メッセージ数、アクティブユーザー数、トークン使用量などの情報が表示されます。
ナレッジを設定してみる
ナレッジを登録することによって、登録した内容を LLM が参照して応答を返してくれるようになります。 ナレッジの登録は画面上部に表示されている「ナレッジ」メニューから行えます。
「知識を作成」をタップすると以下の画面が表示されます。
登録は以下の3つから行えます。
- テキストファイルからインポート
- Notionから同期
- ウェブサイトから同期
ここではウェブサイトから同期を試してみます。
ウェブサイトから同期するためには Firecrawl の API キーを設定する必要があります。 ここでは Firecrawl のページから API キーを取得して設定します。
対象のウェブサイトはここでは Dify のドキュメントのサイトを指定してみます。 「 https://docs.dify.ai/ 」を入力して「Run」ボタンをタップしてしばらくすると以下のように取得対象のページの一覧が表示されます。
画面下部に「次へ」ボタンがあるので、このボタンをタップして次に進みます。 続いて「テキストの前処理とクリーニング」という設定ページが表示されます。 ここでは以下のように設定して「保存して処理」ボタンをタップします。 これで Dify に関するナレッジが作成できました。
このナレッジを先ほどのチャットボットに設定してみます。 まずはナレッジを設定しない状態で動作確認してみます。 「Dify とは何ですか?」と質問すると「金融やテクノロジーに関する用語」という回答が返ってきました。
続いて先ほど作成したナレッジを登録してみます。 先ほどと同様の質問をすると Dify に関する回答が返ってきました。
Chatflow を使ったチャットボット
Chatflow を使うとより複雑なケースに対応したチャットボットを作成できます。 Chatflow を選択してチャットボットを作成してみます。
今回は以下のように設定してみました。
Chatflow ではブロックを作成しそれらを繋いでいくことでワークフローを作成します。 今回は「質問分類器」で「Dify に関する質問」か「それ以外の質問」かに応じて処理を分けています。 Dify の場合はナレッジを取得した上で LLM に回答させています。 各ブロックごとにモデルをそれぞれ設定できるので、より柔軟なチャットボットを作成することができます。
「デバッグとプレビュー」から実行すると、実行中のブロックが視覚的にわかります。
最後に
Dify を使うことによってサービスのお問い合わせのチャットボットなどがだいぶ簡単に作成できたりしそうですね。 Dify はかなり多機能のようで、今回紹介しなかった機能以外にも色々と機能がありそうです。(私は全て把握できてないです)
まだ Dify を触ったことがない方はぜひ試してみてはいかがでしょうか。
ちなみに Dify の商用利用に関しては一部制限があるようです。商用利用に関しては以下のサイトが参考になりました。
もっとアルダグラムエンジニア組織を知りたい人、ぜひ下記の情報をチェックしてみてください!
株式会社アルダグラムのTech Blogです。 世界中のノンデスクワーク業界における現場の生産性アップを実現する現場DXサービス「KANNA」を開発しています。 採用情報はこちら: herp.careers/v1/aldagram0508/
Discussion