Dify入門ガイド:API拡張って何?チュートリアルを通じて学んでみよう

こんにちは、サイオステクノロジーの遠藤です。

今回はDifyの機能の一つである「API拡張」についてどんな機能なのかとそのチュートリアルを行って実際の使い方を確認していきます。

では早速始めていきましょう!

API拡張って何?

API拡張に関する公式ドキュメント : API 拡張

DifyのAPI拡張という機能は外部のAPIをシステムプロンプト内で呼び出してシステムプロンプトに埋め込むことができる「外部データツール」として使用したり、端末ユーザーの入力内容とLLM(大規模言語モデル)の出力内容を審査することができる「コンテンツモデレーション」機能を利用することができる機能です。

特に「外部データツール」機能はDifyとしても押しの機能なようで、この機能を利用することで自前の検索能力や内部ナレッジベースなどの外部データをLLMのコンテキストとして使用できるようになります。「外部データツール」を使用することで、クラウドにデータセットをアップロードするのと比べて、プライベートデータセキュリティの確保、カスタム検索、リアルタイムデータの取得などの面で顕著な利点があります。

API拡張を使用するために満たす必要のある仕様

API拡張では外部のAPIをDifyの中で呼び出せる機能ということで、使用するAPIはDifyが定める仕様を満たしている必要があります。以下がAPI拡張で使用するAPIに求められる仕様です。

APIの仕様

このAPI拡張で使用するAPIは以下の仕様を満たす必要があります。

呼び出し方

POST {Your-API-Endpoint}

リクエストヘッダー

ヘッダー説明
Content-Typeapplication/jsonリクエスト内容はJSON形式です。
AuthorizationBearer {api_key}APIキーはトークン形式で送信されます。api_keyを解析し、提供されたAPIキーと一致するか確認してください。

リクエストボディ

{
    "point":  string, //  エクステンションポイント、異なるモジュールは複数のエクステンションポイントを含む可能性があります
    "params": {
        ...  // 各モジュールのエクステンションポイントに渡すパラメータ
    }
}

APIレスポンス

{    ...  // APIレスポンスの内容、異なるエクステンションポイントのレスポンスは各モジュールの仕様に従います}

外部データツールで使用可能なAPIのデプロイを行い、Dify上で触ってみる

DifyではAPI拡張の仕様に沿ったAPIをデプロイするチュートリアルがあり、今回はまずこちらのチュートリアルに沿ってCloudflare Workersを使用してAPIのデプロイを行ってみます。その後APIをDify上で外部データツールとして扱うまでを試して見ましょう。ちなみに、デプロイされるAPIの内容としてはブレイキング・バッドの名言とその名言を言ったキャラクターが返されるというものになっているようです。

このチュートリアルではnpmが必要となりますので、Node.jsの環境が必要となります。

Tips

Cloudflare Workers は、Cloudflare が提供する サーバーレスコンピューティングプラットフォーム です。分散ネットワーク上で JavaScript / TypeScript / WebAssembly コードを実行でき、グローバルに高速なレスポンスを提供できます。安価 & 無料プランがあり、無料プランでは 1日10万リクエスト まで利用可能。

1.API拡張の仕様に沿ったアプリケーションをデプロイするためにご自身のターミナルでGithubからアプリケーションをクローンします。

git clone <https://github.com/crazywoola/dify-extension-workers.git>

クローン元 : https://github.com/crazywoola/dify-extensions-worker

2.dify-extention-workersに移動し、wrangler.tomlをwrangler.toml.exampleから作成します。

cd dify-extention-workers
cp wrangler.toml.example wrangler.toml

3.bearerトークン用のランダムなトークンを作成します。こちらのトークンですが、Difyアプリケーションでも必要となるものですので、メモしておいてください。

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1 | sort | uniq

4.「3.」で作成した文字列を「2.」で指定されているwrangler.tomlのTOKENに設定します。

name = "dify-extension-example"
compatibility_date = "2023-01-01"

[vars]
TOKEN = "<作成したトークン>"

5.npm installを実行し、必要なパッケージのダウンロードを行います。

npm install

6.npm run deployを実行し、cloudflareにdeployを行います。

npm run deploy

7.ブラウザに移動するので、cloudflareに登録します。私はGoogleアカウントを利用して登録を行いました。

8.ブラウザでAllow Waranger to make changes to your Cloutflare account で「Allow」を選択する。初回実行時、次の手順が表示されるまで少し時間がかかったのでご注意。

9.コンソールでサブドメインを設定する。設定後、yesと回答する

What would you like your workers.dev subdomain to be? It will be accessible at https://<subdomain>.workers.dev … <サブドメインを設定> 

10.https://dify-extension-example.<サブドメイン名>.workers.dev にアプリがデプロイされる。 https://dash.cloudflare.com/ からデプロイされたことが確認出来ます。 こちらもデプロイ処理が走っており、saas上からはデプロイが確認出来ている状況でAPIを叩いても何も返ってこない時間が5分ほどあったので、その場合には場合は少し待ってみてください。

11.Difyに移動し、最初からアプリを作成を選択し、「チャットボット」を作成します。

12.右上のユーザーアイコンをクリックし、「設定」をクリックします

13.API拡張のタブをクリックし、API拡張機能を追加を選択します

14.先ほどデプロイしたアプリケーションに関する情報を入れていきます。名前はdify内で使用する識別子なので何でも良いです。APIエンドポイントは先程Cloudflareで作成したAPIパスの末尾に/endpointを追加したものを設定してください。APIキーは手順「3.」で作成したbearerトークンを入れてください。APIエンドポイントやAPIキーが正しくない場合、Not FoundやUnauthorizedが出ますのでご注意ください。

15.ここまで出来たら、チャットアプリに戻り、「変数」の「APIベースの変数」を選択します。

16.名前と変数名に「breaking_bad_quotes」を設定しAPI拡張機能として先ほど追加したBreakingBadQuotesを選択します。

17.最後にシステムプロンプトを設定します。{{breaking_bad_quotes}}をシステムプロンプトの中に設定すると、作成したAPIをシステムプロンプト内で呼び出して、そのデータを使うことができます。

18.チャットを送ってみると、しっかり条件通りにブレイキング・バッド関係のことを聞いたときのみAPIの内容を利用して回答を生成してくれていることが確認できます。

19.プロンプトログを確認してみると、しっかりAPIの内容がシステムプロンプトに含まれていることが確認できました!

まとめ

今回はDifyのAPI拡張についてその機能とチュートリアルを通じて具体的な使い方を確認しました。API拡張を利用することで、地域に基づいて外部の天気情報を取得してそのデータを元に回答したりみたいなことが行えるようになるので、提供できるソリューションを広げることが出来そうです。今回はチュートリアルを試すまででしたが、API拡張を使用した良さそうなアプリケーションが出来たらまたブログで公開しますので、目を通していただければと思います!

ではまた~

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です