DifyでとあるWebページをスクレイピングして、ナレッジに登録してみます。
ワークフローは次の手順で登録されるようにします。
- Web Scraperで記事を取得
- 取得した記事(テキスト)をナレッジに登録しやすい形に変換
- APIでナレッジに登録
ワークフローにブロックを設置
以下のように開始、Web Scraper、コード、HTTPリクエスト、終了の順にブロックを並べます。
Web Scraperで記事を取得
Web Scraperブロック一つにつき、1ページ分の記事しか取得することはできないようです。
特定のURLを載せてしまうと、そのサイトに迷惑をかけてしまう可能性があるので、スクリーンショットでは黒塗りにしてありますが、URLを入力してください。
「WHETHER TO GENERATE SUMMARY」は、スクレイピングしたWebページの内容を要約するかどうかを決定するための機能です。この機能を有効にすると、Difyは現在のワークスペースのデフォルトモデルを使用して、長いテキストを要約してくれます。
取得した記事(テキスト)をナレッジに登録しやすい形に変換
本記事ではJavaScriptで変換処理を実装します。デフォルトではPythonとなっていると思うので、JavaScriptに変更しましょう。もちろんPythonで同様な処理を書くこともできます。
第一引数にWeb Scraperで取得した記事がセットされるようにします。
function main({arg1}) {
return {
"result": arg1.split("\n").join()
}
}
出力変数はデフォルトのまま、result
のみ指定します。
APIでナレッジに登録
ナレッジの格納先を先に作っておきます。
空のナレッジを作成する
ナレッジの画面で、空のナレッジを作成します。
dataset_idを取得
空のナレッジを開き、URLに含まれるdataset_idをコピーしておきます。スクリーンショットの「f59a1〜」となっている部分がdataset_idです。
APIキーを発行
Difyのワークフローの左側メニューからAPIアクセス
を選択します。
右上のAPIキーボタンからAPIを発行します。
「APIシークレットキー」という名称でAPIキーのモーダルが表示されるので、「新しいシークレットキーを作成」ボタンを押してAPIキーを作成してください。
ワークフローの画面に戻り、HTTPリクエストにて、「認証なし」と書いてあるボタンを押します。
認証タイプをAPIキー、Bearerにして、先に作成したAPIキーをペーストし、保存します。
APIでナレッジを登録するAPIは、datasets/{dataset_id}/document/create_by_text
なので、スクショのようにAPIを記入します。
この後実行しますが、実行時にホスト名がlocalhost
や127.0.0.1
ではリクエストに失敗することがあります。その場合はPCのIPアドレスに変更してみてください。
ヘッダーはContent-Type: application/json
にします。
ボディはraw text
を選択し、{"name": "text","text": "</>コード/{x}result","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}
としましょう。
実行
公開ボタンから公開し、開始のブロックを選択して、実行ボタンを押して実行してみましょう。
空のナレッジにtext.txtというファイルができていれば成功です。
もし、ファイルができていなかった場合は、実行結果のトレース等を開くなどして、どこに問題があるのか調べてみましょう。
終わりに
とても簡単にワークフローでWebページをスクレイピングする実装ができました。Webのスクレイピング以外にも多くの機能を提供してくれているので、是非いろんな機能を試してください。