Dify のアプリケーション(OpenAIのチャットボット)をWorkersから起動する
最近注目を集めているDifyでOpenAIのチャットボットをノーコードで作成してそのAPIをWorkersからテストしてみます。
Dify とは
いわゆるローコードツールに分類され、複雑なコードを書かずにAIモデルの開発を行えるようにするため、ユーザーインターフェースで様々な設定が可能になっています。これにより、AIに関する専門的な知識がなくても、基本的なAIシステムの作成ができるようになります。
さっそくやってみる
1. 事前準備
まずは以下のものを準備しておきます。
・OpenAI API Key (sk-projから始まる文字列です。)
・OpenAI Organization ID (org-から始まる文字列です)
この記事ではその手順は割愛しますが、以下のサイトから入手可能です。
OpenAIは通常のキーとAPI用キーは別々に定義されています。上のAPI専用サイトからAPIキーを入手します。
2. Dify のアカウント開設
始める
をクリックします。
ログイン情報を登録してログインしてください。
ログインが成功すれば以下の画面へ遷移します。
3. OpenAIを活用した簡単なAPIの設定
画面右上のプロフィールから設定
をクリックします。
モデルプロバイダー
からOpenAI
のAPIKeyセットアップをクリックします。
先ほど入手したOpenAIのAPIキーとOrgIDを入力して保存
をクリックします。
API Base
は空欄でかまいません。
以下のようにみどりのライトがつけば設定完了です。
4. シンプルなチャットボットの作成
次に画面上部スタジオ
タブで最初から作成
をクリックします。
チャットボットを選択し、適当な名前を付け作成する
をクリックします。
簡単なテストを行ってレスポンスが戻ってきたら公開する
をクリックします。
これで今作成したチャットボットに外部からのアクセスが可能となりました。
5. APIキーの取得
左ペインからAPIアクセス
をクリックし、画面右のAPIキー
をクリックします。
新しいキーを作成してコピーしておきます。
6. Workers プロジェクトの作成
次にWorkersのプロジェクトを以下のコマンドでinitします。
基本的なhello worldの使い方はこちら。
wrangler init dify
その後index.js
を以下に置換してwrangler deploy
を行います。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// リクエストのURLからクエリパラメータを取得
const url = new URL(request.url);
const queryParam = url.searchParams.get('query'); // URLパラメータ 'query' を取得
// クエリパラメータが存在しない場合、デフォルトの文字列を使用
const query = queryParam ? queryParam : "こんにちは。今日は何日ですが?"; // デフォルトの文字列を設定
// リクエストのデータを定義
const payload = {
inputs: {},
query: query, // URLパラメータから取得した文字列を使用
response_mode: "blocking",
conversation_id: "",
user: "abc-123",
};
// fetchでPOSTリクエストを送信
const response = await fetch('https://api.dify.ai/v1/chat-messages', {
method: 'POST',
headers: {
'Authorization': 'Bearer app-xxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify(payload) // JSON形式で送信
});
// APIのレスポンスをJSONとして解析
const result = await response.json();
// 'answer'フィールドだけを抽出してレスポンスとして返す
const answer = result.answer;
// 文字エンコーディングをUTF-8に設定して返す
return new Response(answer, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' } // UTF-8エンコーディングを指定
});
}
以下の箇所は先ほど取得したAPIキーに置換しておきます。
'Authorization': 'Bearer app-xxxxx',
URLパラメータのquery
で質問を投入すると以下のように回答が戻ってきます。
Discussion