【Dify】Agentを試す
概要
Difyでエージェントを使って簡単なアプリを作成します
Agent
エージェントについての説明は以下です
エージェント・アシスタントは、大規模言語モデル (LLM) の推論機能を活用できます。
独立して目標を設定し、複雑なタスクを簡素化し、ツールを操作し、プロセスを改良して、自律的にタスクを完了します。
私の理解では、標準対応できない以下ようなの機能をLLMに追加するようなイメージです
- Web検索などのツールを利用
- 回答の内省(繰り返し質問する)
- 事前に定義したプランに沿って行動させる
自前で実装しようと思うと、プロンプトを作るのが難しく思った通りに動いてくれないことが多いです(経験談)
作ったもの
arXivのSubjectがCSの最新の論文を要約して、論文内で登場する主要なキーワードについてwikipediaで検索してくれるアプリを作ってみました
作り方
1. アプリの作成
Difyにログイン後、[アプリを作成する] -> [最初から作成]をクリック
アプリのタイプをエージェントにします
適当な名前を付けて[作成する]をクリックします
画面が遷移し設定画面が表示されます
今回、モデルはgpt3.5-turboを利用します
※ command-rではツールが動かず、commandではツール動くか日本語非対応っぽい
2. ツールの定義
早速ツールを追加します
画面下部のツールの[+]追加をクリックします
利用可能なツールの一覧が表示されるため、必要なものを追加していきます
今回は、WikipediaとArXivとwebscraperの3つを追加します
GoogleSearchを使いたかったけど、認証が必要なので今回は使わない方向にしました
3. プロンプト
続いて、プロンプトを設定します
プロンプト内で、ユーザが定義したarxiv_idを利用したいため、先に変数[+]追加で定義をします
オプション(空を許可する)を有効にします
手順は以下のようにしました、ツールの使い方と手順を定義します。
ツール: arxiv_searchを利用して論文を検索します。 wikipedia_searchを利用して単語の詳細を検索します。 webscraperを利用してWebページから情報を取得します。 ワークフロー: 以下の手順に従って情報の取得と表示を行います。 手順: 1. ユーザーがarxiv_id ({{arxiv_id}}) をすでに持っている場合は、次のステップに進んでください。 そうでない場合は、'webscraper'を利用して、以下のURLからarXivのIDと論文名を取得し、一覧を表示します。 https://arxiv.org/list/cs/recent?skip=0&show=25 2. 'arxiv_search'を利用して、指定されたarXiv IDで論文を検索します。 3. 論文の中で登場する主要な単語について、'wikipedia_search'を利用して詳細情報を繰り返し検索します。 4. ステップ2と3の結果をマークダウン形式でまとめ、以下の内容を含めて回答します: 1. タイトル 2.概要(約200文字) 3. 詳細(約500文字) 4. 主要なキーワードとそれに関連するWikipediaの検索結果の要約 制約: - すべての回答は日本語で提供してください。
{{変数}}でプロンプト内に変数を展開します
ここはかなり改善の余地がありそうです
4. 機能の追加
会話開始時と回答受け取り時にフォローをするための機能を追加します
画面下部にある[機能を追加]をクリックします
機能を追加が表示されるので、以下2つを有効化します
1. 会話の開始
2. フォローアップ
有効化後、チャットの強化に追加された会話開始を編集します
最新の論文を簡単に聞けるようにしました
5. 動作確認
さっそく動作確認をします
画面右側のデバッグとプレビューで、[最新の論文]をクリックします。
すると、最新の論文のID一覧を提示してくれます
確認したいIDを指定すると、内容について要約してくれます。
質問によっては挙動が変わるようで、一気通貫で要約してくれたり、安定していないといった課題もあります。。。
また、arxiv_idがユーザーインプットとして定義されている場合、webscraperをスキップしたいんですが、うまくいかず。。
プロンプトの書き方で回避できないかなと思いつつも解決できなかった。。
ツールの一覧
Difyが標準で提供しているツールは、ツールのタブで確認することができます
現時点(2024/5/12)で39個のツールが提供されていました
カスタムツールも定義できるため、拡張性も高いです。
REST APIをたたくサービスならツール化可能? なようです
感想
ChatBotとRAGに引き続きAgentも作成してみました
やはり簡単に作れるなーといった印象ですが、
Agentは少し難易度が上がり、思った通りに動かしきれなかったです。。
Agentを自由自在に作りワークフローと組み合わせて、いろいろなことを効率化していきたいな。
おわり