MENU

Difyプラグイン開発入門:Google検索ツールの作り方

当ページのリンクには広告が含まれています。

Difyの機能を拡張する「プラグイン」。その中でも最も基本的かつ強力なのが、外部APIなどを呼び出して機能を追加する「Tool(ツール)プラグイン」です。

この記事では、Difyのプラグイン開発環境の構築から、実際に「Google Searchツール」を開発し、デバッグ、パッケージ化するまでの全工程をステップバイステップで解説します。

目次

0.「Tool(ツール)プラグイン」とは

ツールとは、Chatflow / Workflow / Agent タイプのアプリケーションから呼び出すことができるサードパーティサービスを指し、Difyアプリケーションの能力を強化するための完全なAPI実装機能を提供します。例えば、アプリケーションにオンライン検索や画像生成などの追加機能を追加します。ツールプラグインの例この記事では、「ツールプラグイン」 とは、ツールプロバイダーファイル、機能コードなどの構造を含む完全なプロジェクトを指します。1つのツールプロバイダーには複数のツール(個々のツール内で提供される追加機能と理解できます)を含めることができ、構造は以下の通りです。

- ツールプロバイダー
    - Tool A
    - Tool B

ツールプラグインの構造

この記事では、Google Search を例に、ツールプラグインを迅速に開発する方法を紹介します。

1. 開発環境の準備

まずはプラグインを開発するための環境を整えましょう。

必要なツール

  • Python 3.12以上: プラグインはPythonで記述します。
  • Dify Plugin CLI: プラグインの開発、デバッグ、パッケージ化を行うための公式ツールです。

CLIツールのインストール

Dify Plugin CLI Releasesから、お使いのOSに合ったバイナリをダウンロードします。

# 実行権限の付与(macOS/Linuxの場合) 
chmod +x dify-plugin-darwin-arm64

バージョン確認
./dify-plugin-darwin-arm64 version

※使いやすくするために、ファイル名を dify に変更してパスの通ったディレクトリ(/usr/local/binなど)に移動することをお勧めします。

便宜上、このドキュメントでは以降、Dify プラグイン開発 CLI コマンドの例として ./dify を使用します。ご自身の実際の状況に合わせてコマンドを置き換えてください。

macOS のセキュリティ警告: macOS で初めて実行する際に「Apple は検証できません」または「開けません」と表示された場合は、「システム設定」→「プライバシーとセキュリティ」→「セキュリティ」セクションに移動し、関連するメッセージを見つけて「それでも開く」または「許可」をクリックしてください。

グローバルインストール(オプション): システムのどのパスからでも直接コマンドを実行できるようにしたい場合(例:./dify ではなく直接 dify と入力する)、名前変更後のファイルをシステムの PATH 環境変数に含まれるディレクトリ(例:/usr/local/bin (macOS/Linux))に移動するか、Windows の環境変数に追加します。

・ (macOS/Linux): 
sudo mv dify /usr/local/bin/
・設定完了後、ターミナルで直接 dify version と入力すると、バージョン番号が正常に出力されるはずです。

2. プラグインプロジェクトの作成

CLIを使ってプロジェクトの雛形を作成します。

dify plugin init

対話形式で以下のように設定します。

  • Plugin name: google-search(任意の名前)
  • Author: あなたの名前
  • Language: python
  • Plugin type: tool

作成されたディレクトリに移動し、Pythonの仮想環境を作成・有効化しておきましょう。

cd google-search 
python -m venv venv source venv/bin/activate 
# Windowsの場合は 
venv\Scripts\activate

3. ツールプロバイダーの設定

ツールの基本情報と、認証情報(APIキーなど)の入力欄を定義します。

provider/google.yaml(ファイル名は任意)を作成し、以下のように記述します。

identity: author: YourName name: google label: en_US: Google ja_JP: Google description: en_US: Google Search Tool ja_JP: Google検索ツール icon: icon.svg

APIキーの入力欄を定義
credentials_for_provider: serpapi_api_key: type: secret-input required: true label: en_US: SerpApi API Key ja_JP: SerpApi APIキー

tools:

tools/google_search.yaml # 次のステップで作成するファイル

4. ツールの定義と実装

具体的なツールの機能(検索機能)を定義し、Pythonコードで実装します。

YAML定義 (tools/google_search.yaml)

ツールの入力パラメータ(検索クエリ)などを定義します。

identity: name: google_search author: YourName label: en_US: Google Search ja_JP: Google検索

description: human: en_US: Search Google using SerpApi ja_JP: SerpApiを使用してGoogle検索を行います llm: A tool for performing a Google search.

parameters:

name: query type: string required: true label: en_US: Query ja_JP: 検索クエリ form: llm # LLMが自動的に入力するパラメータ

extra: python: source: tools/google_search.py

Python実装 (tools/google_search.py)

実際にSerpApiを呼び出すコードを書きます。

※事前に pip install requests を実行し、requirements.txt に追加してください。

from collections.abc import Generator from typing import Any import requests from dify_plugin import Tool from dify_plugin.entities.tool import ToolInvokeMessage

SERP_API_URL = "https://serpapi.com/search"

class GoogleSearchTool(Tool): def _invoke(self, tool_parameters: dict[str, Any]) -> Generator[ToolInvokeMessage]: # プロバイダー設定からAPIキーを取得 api_key = self.runtime.credentials["serpapi_api_key"] query = tool_parameters["query"]

    params = {
        "api_key": api_key,
        "q": query,
        "engine": "google"
    }

    try:
        response = requests.get(SERP_API_URL, params=params, timeout=10)
        response.raise_for_status()
        data = response.json()
        
        # 結果の整形(簡易版)
        results = []
        if "organic_results" in data:
            for item in data["organic_results"][:3]:
                results.append({
                    "title": item.get("title"),
                    "link": item.get("link"),
                    "snippet": item.get("snippet")
                })
        
        # JSON形式でDifyに返す
        yield self.create_json_message(results)

    except Exception as e:
        yield self.create_text_message(f"Error: {str(e)}")

5. デバッグとパッケージ化

リモートデバッグ

Difyの画面上で動作確認を行います。

  1. Difyの「プラグイン」画面からデバッグ用のキーとURLを取得します。
  2. プロジェクト内の .env ファイルにキー情報を設定します。
  3. python -m main を実行してローカルサーバーを立ち上げます。
  4. Dify画面上でプラグインが表示されるので、SerpApiのキーを入力して動作テストを行います。

パッケージ化

テストが完了したら、配布用のファイルを作成します。

dify plugin package ./

生成された .difypkg ファイルをDifyにアップロードすれば、他の環境でもこのツールが使えるようになります。

まとめ

DifyのToolプラグイン開発は、構成さえ理解すれば非常にシンプルです。「Pythonで書ける処理」なら何でもDifyのツールとして組み込めるため、社内システムのAPI連携や、特定の計算処理など、活用の幅は無限大です。

ぜひ独自のツールプラグインを作成して、Difyの可能性を広げてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次