# ツールプラグインの導入と設定

Difyで**ツールプラグイン**を導入し、**チャットフロー**から外部APIや追加機能を呼び出すための設定手順をまとめます。

{% hint style="warning" %}
本手順は一般的なDifyの仕様に基づいています。バージョンによりUIの表記が異なる場合があります。
{% endhint %}

## 1. ビルトインツールの設定

### 1.1 Google Search（SerpAPI）設定例

### 手順A：SerpAPIアカウント準備

1. <https://serpapi.com/> にアクセス
2. アカウントを作成（無料プランあり）
3. ダッシュボードから**API Key**を取得

### 手順B：Dify側での設定

![](/files/3UG4noKpcFg4KXcH4RHY)

1. 左メニューから **「ツール」** を開く
2. 一覧（または検索）で **「Google Search」** を探す
3. **「認証」**（または設定/Configure）を開く
4. **SerpAPI Key** を入力
5. **保存**

### よくある注意点

* API Keyが未設定だと、ツール呼び出し時に失敗します（空の結果、認証エラーなど）。
* 環境（クラウド/セルフホスト、権限）により、表示文言が「ツール」「プラグイン」などに揺れる場合があります。

## 2. カスタムツールの作成

Difyのカスタムツールは、基本的に **OpenAPI（Swagger）形式**で定義します。

### 2.1 OpenAPI定義（例）

```yaml
openapi: 3.0.0
info:
title: My Custom API
version: 1.0.0
servers:
- url: https://api.example.com
paths:
  /search:
    get:
      operationId: searchProducts
      summary: 商品を検索する
      parameters:
        - name: query
          in: query
          required: true
          schema:
            type: string
          description: 検索キーワード
      responses:
        '200':
          description: 検索結果
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    name:
                      type: string
                    price:
                      type: number
```

### 2.2 カスタムツール登録手順

![](/files/34ho8kHKsSMODXgew6Ou)

1. 左メニュー **「ツール」→「カスタムツール」** を開く
2. **「カスタムツールを作成」** を選択
3. 基本情報（名称、説明など）を入力

   | 項目   | 入力内容                 |
   | ---- | -------------------- |
   | 名前   | ツールの識別名（英数字推奨）       |
   | 説明   | ツールの用途（LLMが参照）       |
   | スキーマ | OpenAPI仕様（YAML/JSON） |
4. OpenAPI仕様を貼り付け/アップロード
5. 認証が必要なら認証方式を設定

   | 認証タイプ        | 用途              |
   | ------------ | --------------- |
   | なし           | 認証不要のAPI        |
   | API Key      | ヘッダーまたはクエリでキー送信 |
   | Basic認証      | ユーザー名/パスワード     |
   | Bearer Token | OAuthトークン       |
6. 保存

### 2.3 認証設定（API Key例）

```markdown
認証タイプ: API Key
キー名: X-API-Key
キー位置: Header
キー値: （実際のAPIキー）
```

{% hint style="warning" %}
キーは漏洩しないよう権限・保管・ローテーションを設計してください。
{% endhint %}

## 3. チャットフローでのツール利用

### 3.1 ツールノードの追加

![](/files/dAKlJ2z1KhSYvJH98ybz)

### 手順

1. チャットフロー編集画面を開く
2. **「＋」→「ツール」** を選択
3. 使用するツール（ビルトイン/カスタム）を選択

### 3.2 パラメータ設定

![dify-docs-install-and-configure-tool-plugins\_dhkk\_flow\_tool\_settings.png](/files/7y7EtyMQ3BHYNNyYqAgP)

### 手順

1. ツールに渡す入力（クエリ、ID、本文など）を、フロー内の変数と接続します。
2. 出力は後続ノード（LLM、条件分岐、整形ノードなど）で利用します。

### 3.3 LLMによるツール自動選択

LLMノード側で、状況に応じてツールを選択・実行できるようにします。

### 手順

1. LLMノードを選択
2. **「ツール」** セクションを開く
3. 使用を許可するツールを選択
4. **「ツール呼び出しを許可」** をON

### ツール選択を制御する指示例（システムプロンプト）

```markdown
ユーザーが最新のニュースについて質問した場合のみ、Google Searchツールを使用してください。
ナレッジベースで回答できる質問にはツールを使用しないでください。
```

## 4. エラーハンドリング（失敗時設計）

### 4.1 IF/ELSEでの分岐例

* 条件例：`tool_output is empty`
  * True： 「申し訳ありません、情報を取得できませんでした」
  * False：通常処理へ

### 4.2 タイムアウト設定（目安）

* ビルトインツール：**10〜30秒**
* カスタムツール：API特性（平均応答、最大応答）に応じて調整

## 5. デジタルヒューマン向けベストプラクティス

### 5.1 応答速度の最適化

* ツール使用は必要最小限にする
* 並列実行できるツールは同時に実行
* キャッシュ可能な情報は事前取得
* タイムアウトは短め（例：5〜10秒）を検討

### 5.2 フォールバック設計

* ツール失敗時も会話を継続できる設計
* 「調べています」などの中間応答を用意
* エラー時の代替回答（次の質問誘導、別手段提示）を準備

> **Note**: デジタルヒューマンでは応答の自然さが重要です。ツール実行中の待ち時間が長いと、ユーザー体験が損なわれる可能性があります。

## 付録：ツールノードでよく使う設定項目

* **ツール名**：フロー内で識別しやすい名前
* **入力パラメータ**：ツールに渡す値（変数で指定）
* **タイムアウト**：外部APIの待ち時間上限
* **エラーハンドリング**：失敗時の挙動（スキップ、デフォルト値など）

Difyでツールプラグインを導入し、チャットフローで活用するための設定手順を解説します。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digitalhumans.jp/dify-guide/plugins/dify-docs-install-and-configure-tool-plugins.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
