💬

DifyのMicrosoft AI Searchカスタムツールをちょっと便利にした

に公開

はじめに

Dify work with Microsoft AI SearchでMicrosot AI Searchのカスタムツールのデモが公開されてこれはいいなと思って使ってみました。

これはこれでうまくAI Searchと連携してRAGができそうなんだけど、このツールだとgetの検索結果全文を返してくるので結果次第では文字列多すぎてLLM側のトークン制限にひっかかったりして実用的じゃなかったので、もうちょいマシな感じにしてみました。

具体的にはPOSTメソッドに変更してリクエストボディselecttopを使えるようにして情報量を絞り込めるようにしました

カスタムツールのJSON

{
  "openapi": "3.0.0",
  "info": {
    "title": "Azure Cognitive Search Integration",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://[AI_SEARCH_SERVICE_NAME].search.windows.net"
    }
  ],
  "paths": {
    "/indexes/[INDEX_NAME]/docs/search": {
      "post": {
        "operationId": "postExampleSearchResults",
        "parameters": [
          {
            "name": "api-version",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "example": "2024-11-01-preview"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InputData"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "@odata.context": { "type": "string" },
                    "value": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "@search.score": { "type": "number" },
                          "ID": { "type": "string" },
                          "Sample": { "type": "string" },
                          "Question": { "type": "string" },
                          "Answer": { "type": "string" },
                          "Category1": { "type": "string" },
                          "Category2": { "type": "string" },
                          "UM": { "type": "string" },
                          "ServiceMenu": { "type": "string" },
                          "AzureSearch_DocumentKey": { "type": "string" },
                          "metadata_storage_name": { "type": "string" },
                          "metadata_storage_path": { "type": "string" }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "InputData": {
        "properties": {
          "search": {
            "type": "string",
            "title": "Search"
          },
          "select": {
            "type": "string",
            "title": "Select"
          },
          "top": {
            "type": "number",
            "title": "Select"
          }
        },
        "type": "object",
        "required": [
          "search",
          "select"
        ],
        "title": "InputData"
      }
    }
  }
}

カスタムツールの作り方

上部のメニューから ツールカスタムカスタムツールを作成する を選択します

上記のスキーマを入力します。[AI_SEARCH_SERVICE_NAME][INDEX_NAME]は適宜読み替えてください。

下段の認証方法で認証タイプAPIキーカスタム
キーapi-key、値Microsoft AI Searchの管理者キーを入力して保存します。

利用可能なツール中のテストボタンをクリックします

パラメータを入力してテストボタンをクリックするとテスト結果が返ってきます。このサンプルではAI Searchのインデックスをビルトインのhotels-sample-indexにしました。

テスト結果が正常であればカスタムツールを保存して完成です。

使ってみる

作成したカスタムツールを追加して以下のように設定します。api-versionselecttop等のパラメータは用途に応じて変更してください。

LLMのプロンプトを工夫すればこのようにMicrosoft AI Searchのインデックスを使って簡単にRAGを使うことができます。

おわりに

DifyのナレッジベースでMicrosoft AI Searchを使うことができれば多様なデータをインデックス化できるので便利です。うまく組み合わせれば実用的な業務用エージェントが作れるかもしれないのでいろいろ応用してみようと思います。

Discussion