DifyのPerplexity Searchを使う

以下の続編です。

https://qiita.com/inakano_ojisan/items/5a020d612ce48f8cc234

Dify v0.7.3で、Perplexity Searchという新たなツールが追加されました。

https://github.com/langgenius/dify/pull/7861

[前の記事](https://qiita.com/inakano_ojisan/items/5a020d612ce48f8cc234
)で説明した「モデルプロバイダー」としての使い方とは異なり、Perplexity Searchは「ツール」として使います。
そのため、Perplexityの応答を処理するために、さらにもう1つのLLMが必要になるように思えます。
有料のGPT-4o-mini APIなどとの組み合わせなどでも良いですが、ここでは、無課金でローカルLLMとの組み合わせで進めます。

## 大まかな手順
```mermaid
flowchart TD
    A[PerplexityツールにAPIキーを登録] --> B[ワークフローを作成]
    B --> C[Test Runでデバッグ]
    C --> D[リリース]
```

## APIキーの登録
まずは、ツールから、PerplexityのAPIキーを登録していきます。

「ツール」を押します。
![スクリーンショット 2024-09-04 16.37.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/f8191e9a-eacb-00d3-b96f-c9b0ef8f2f42.png)

「Perplexity」を押します。
![スクリーンショット 2024-09-04 16.37.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/fd3f1bc5-fa1b-fd90-b52b-1006a0aad92f.png)

「認証する」を押します。
![スクリーンショット 2024-09-04 16.38.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/7c4cb9fb-ed42-ed09-e08c-2024abcf5595.png)

APIキーを入力してから、「保存」を押します。
![スクリーンショット 2024-09-04 16.39.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/3a3e4707-cd8a-34db-7357-9965b65466ca.png)

認証済みとなったら完了です。
![スクリーンショット 2024-09-04 16.40.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/420326d5-98f6-cf6f-933f-015f53936ba2.png)

## 作り方

Perplexity Searchツールは、以下で使用できる様です。
- チャットフロー
- エージェント
- ワークフロー

上記をどのように使い分けるかは調べていません。
が、チャットフローとエージェントは、（私の作り方が悪いのか）上手くいかないケースがありました。
なので、ここではワークフローだけで説明します。

## ワークフローで使う

スタジオに行きます。
![スクリーンショット 2024-09-04 16.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/527794f6-0bb9-95d6-b0e9-232caf3d0b10.png)

「最初から作成」を押します。
![スクリーンショット 2024-09-04 16.42.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/efa37533-0bbb-6ffb-7bac-fa3a54179bd3.png)

「ワークフロー」を選択し、適当な名前を付けて、「作成する」を押します。
![スクリーンショット 2024-09-04 16.50.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/6ab7ebf5-3158-299f-b24b-369cb464aa94.png)

開始ブロックの次のブロックに、ツールから、Perplexity Searchを選びます。
![スクリーンショット 2024-09-04 16.53.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/708298cf-3a47-f0c9-c8bf-b9e71795863d.png)

Perplexity Searchのブロックが追加されますが、まだ入力変数がありません。
なので、まずは「開始ブロック」を押します。
![スクリーンショット 2024-09-04 16.56.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/009900fb-99a1-e89b-ccce-3f43aeafc23a.png)

入力フィールドにある「＋」を押します。
![スクリーンショット 2024-09-04 16.58.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/100c9c5c-f4b3-971f-248d-0e3fc021faf9.png)

入力フィールドを追加が表示されます。
「段落」を押して、変数名に「query」、ラベル名に「Perplexityへの質問」、最大長は好きな長さにして、保存を押します。
![スクリーンショット 2024-09-04 17.02.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/05ffc890-489b-9153-0027-83511f6be9f3.png)

Perplexity Searchのブロックを再度押して、「/」を入力します。
開始ブロックの「query」が押せる状態になってますので、押します。
![スクリーンショット 2024-09-04 17.03.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/a7c97d5f-71e4-c73e-afa8-4930eb9eccbc.png)

次にモデルを選びます。大きなモデルほど精度は良くなりますが、応答速度が遅く、APIコストも上昇します。
ひとまず中間のLargeを選びました。
![スクリーンショット 2024-09-04 17.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/68815977-9962-8a5f-3dad-0ed154af7f34.png)

一番下にある「次のブロックを選択」を押します。
![スクリーンショット 2024-09-04 17.07.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/860aa6aa-0a1c-305b-4a9f-7a233a788fa6.png)

「LLM」を押します。
![スクリーンショット 2024-09-04 17.08.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/95803272-bc41-26c0-c771-43984545223d.png)

Perplexity Searchの出力を処理するLLMを選びます。
ここではローカルで動かしているOllamaで動作するLLMにしました。
![スクリーンショット 2024-09-04 20.10.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/d5dbb1b3-4805-85a4-e09a-2afa41da0cf8.png)

ここで選んだAya 23というLLMは、Cohereの研究機関が主導して開発しているマルチリンガル（多言語対応）のオープンモデルです。

https://cohere.com/research/aya

Aya 23は、日本語を含む23もの言語に対応しています：
アラビア語、中国語（簡体字および繁体字）、チェコ語、オランダ語、英語、フランス語、ドイツ語、ギリシャ語、ヘブライ語、ヒンディー語、インドネシア語、イタリア語、日本語、韓国語、ペルシャ語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、スペイン語、トルコ語、ウクライナ語、ベトナム語
Aya 23は、Ollamaで簡単に導入できます。

https://ollama.com/library/aya

話を戻して、ローカルLLMのシステムプロンプトを入力します。
Perplexityへの質問と回答をローカルLLMに与えて、よしなに回答を作ってもらいます。
![スクリーンショット 2024-09-04 17.30.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/d57b65dd-02c3-4834-3d74-1917f3a711ef.png)
```:SYSTEM
与えられ内容にもとづいて日本語の回答を生成する。

### 質問 ###
（ここには開始ブロックの変数queryを入れる）

### 回答 ###
（ここにはPerplexity Searchブロックの変数textを入れる）
```

「次のブロックを選択」を押します。
![スクリーンショット 2024-09-04 17.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/de0dd11d-4263-a4c6-5fec-85c7ef929fcc.png)

「終了」ブロックを選びます。
![スクリーンショット 2024-09-04 17.22.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/5202c31e-00cd-8d8d-e6ce-1d29e9b0438c.png)

出力変数の「＋」を押します。
![スクリーンショット 2024-09-05 5.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/035a8aed-faf1-0dd7-e344-f768c93257c0.png)

LLMブロックの変数textを指定します。
![スクリーンショット 2024-09-05 5.48.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/95f16d7f-65f9-9f70-1faf-71ddf54f87fb.png)

以上でワークフローの作成は完了です。

## 動作確認
全体のフローは以下のような感じになります。
![スクリーンショット 2024-09-04 17.55.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/540f1afd-483c-d714-c7fb-43fb53d98057.png)

上にある再生ボタンを押すと、Test Runが開きます。
![スクリーンショット 2024-09-04 17.56.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/ba04b9f0-a56b-8b2f-530a-3570fa83919a.png)

試しに、現在開催中のパリ・パラリンピックの状況を聞いてみます。
ちなみに今日は2024年9月4日です。
![スクリーンショット 2024-09-04 17.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/316ef4c3-63ed-1725-ef4c-e55cb7ae9716.png)

それらしい回答が戻りました。
![スクリーンショット 2024-09-04 17.38.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/51ccae8c-248c-9c50-7af0-efad931ce1a1.png)

## リリース
うまく動いたら、リリースしてみましょう。
右上の「公開する」を押して、「アプリを実行」を押します。
![スクリーンショット 2024-09-04 17.50.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/701a8a56-9b9e-de65-5890-d7d4e1aff3ff.png)

別の質問を入力して実行します。
![スクリーンショット 2024-09-04 17.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/d9628228-c8d3-7a4e-c671-e20ecb5cfe13.png)

うまく動いたら成功です。
普段新聞などで見かける首相動静とは一味違い、自然な文章になっています。
LLMを介したせいですね。

## まとめ
最近は毎週のようにDifyはバージョンアップされており、機能の幅がどんどん広がっています。

無課金のローカルLLMと、（Proの無料期間が終わるまで）Perplexity APIの組み合わせで、何か面白いものが作れそうです。

https://www.linemo.jp/service/perplexity-ai/

## 参考資料
公式の使い方は以下になります。

https://docs.dify.ai/guides/tools/tool-configuration/perplexity