はじめに
Difyのワークフローにはあらかじめ「GoogleSearch」と「Google Search API」が用意されているのですが、GoogleSearchのほうの無料枠は月100件、Google Search API は最初の100件だけとのこと。Googleが用意しているCustom Search API であれば1日100件まで利用可能なので、これを組み込むことができないか試してみました。
参考ページ:Qiita|Custom Search APIを使ってGoogle検索結果を取得する@zak_y
前提条件
- Google アカウント
- Google Cloud Platform のプロジェクト作成
Google Cloud Platformにアクセスしてプロジェクトを新規作成できます。 - Dify の設定が完了して使える状態になっている
まだの方はDifyではじめてのRAGを先にごかくにんください。
事前準備
Custom Search API を使用するには、設定が必要です。
参考ページをもとに、各設定を行いました。
-
APIKEYの作成・取得
GCP-API認証情報の画面より取得
-
Custom Search API の有効化
Custom Search APIのページで有効化します。 -
Custom Search Engine のコード取得
プログラム可能な検索エンジンから検索エンジンを追加します。導線がわかりにくかったです。
このときに、検索エンジンIDを取得しておきます。
Difyでワークフローを作成
次のようなワークフローを作りました。
- 開始で検索したい内容を入力してもらいます。
- LLM キーワード生成で、検索語を作成します。
- HTTPリクエストで、CustomSearchAPIの設定を行います。
- 検索結果をそのままLLM回答生成に渡し、回答を生成します。
- 終了ブロックで結果を出力します。
HTTPリクエストの設定
- {key}には準備したAPIKEY
- {cx}にはCustom Search Engineの検索エンジンIDを入力
- {q}は「/」を押して前工程のLLMの出力が入るようにする
- {siteSearch}は、特定のサイトのみ検索する場合に入力
LLM キーワード生成の設定
例えば次のようにします。{{#...#}}部分はスラッシュ「/」を押下して入力します。
あなたはGoogle検索のための検索語ジェネレーターです。[入力内容]をもとにGoogle検索をするための検索キーワードを出力します。
検索キーワードは多いとヒットしないため、[入力内容]から重要なキーワードを抽出して作成します。
出力は「」や""は使わず、キーワードをスペース区切りで並べます。
[入力内容]:{{#開始.input#}}
LLM 回答生成の設定
例えば次のようにします。{{#...#}}部分はスラッシュ「/」を押下して入力します。
あなたは顧客や社員のサポートを行う優秀なオペレーターです。
[検索結果]をもとに[問い合わせ内容]に対する回答を行います。
回答は[検索結果]をもとに回答します。引用元を確認できるよう、[検索結果]のURLへのリンクもすべて引用元として回答の後に出力してください。
[問い合わせ内容]:{{#開始.input#}}
[検索結果]:以下の内容
{{#HTTPリクエスト.body#}}
ワークフローの完成
各ブロックのデータが連携するようになったかと思います。終了ノードにもLLM回答生成の出力結果を出力するようにして、出来上がりです。
できあがり
{siteSearch} の設定はなしにして、「Difyのチャットフローについて教えて」として試してみました。
まとめ
DifyのGoogle検索の実装をGoogleのCustom Search APIに変更することができました。
1日100件までというのが、Dify標準のAPIに比べてかなり安価なので、基本はこちらを使っていくのがよいかと思いました。
今回はsiteSearchなしで試しましたが、実際には自社のオフィシャルサイトのみを検索対象として、社外からの問い合わせ対応を行うような仕組みづくりが考えられるかと思います。
また、社内向けには社内の情報検索と組み合わせて使っていくことになるかと思います。
ぜひ活用してください!