LoginSignup
0
0
生成AIに関する記事を書こう!
Qiita Engineer Festa20242024年7月17日まで開催中!

[Dify]自動でベクターDBに保存する用のワークフローを作成してみた

Posted at

はじめに

例えば、DifyでURLを要約させたら、URLの内容やその要約内容を自動でベクターDBにデータを入れたいと思ったことはありませんか?
LangChainなどを使ったコードベースで実施するのは簡単ですが、Difyだとやり方わからないなどあると思います。
今回は自動でベクターDBにデータを入れるようなワークフローを作成したいと思います。

全体像

まず全体像からです。
流れとしては、

  1. 空のナレッジを作成→ナレッジのIDを抜き出し→ナレッジIDに対してデータを保存
  2. またはすでにナレッジがある場合は、IDを見つけ出してそのナレッジIDにデータを保存します。
    image.png

※ナレッジ操作のAPIは以下から確認できます。
image.png

空のナレッジを作成

まずは空のナレッジを作成します。
認証からAPIキーの設定を忘れないようにしてください。
URLやAPIキーはナレッジ操作のAPI画面から取得できます。
image.png

次に場合分け

空のナレッジが作成できた場合はステータスコードが200で返ってきます。
すでに作られている場合は409で返却されます。
今回は面倒なので200とそれ以外で場合分けするようにします。
image.png

空のナレッジをできたら?

作成できたら以下のようなレスポンスが返却されるのでidを取り出しましょう。

{
  "id": "",
  "name": "name",
  "description": null,
  ....
}

コードは以下です。

import json

def main(arg1: str) -> dict:
   
   decoded_json = json.loads(arg1)
   id = decoded_json["id"]
   return {
        "result": id,
    }

image.png

すでにナレッジがあったら?

すでにナレッジがあった場合はそのナレッジに対して保存処理をするようにします。
そのためにidを取得しますので、一旦ナレッジを呼び出して名前で全探索します。

image.png

コードは以下です。

import json

def main(body: str,name:str) -> dict:
   
    decoded_json = json.loads(body)
    
    for item in decoded_json["data"]:
        if item["name"] == name:
            result=item["id"]
            return {
                "result": result,
            }
   

    return {
        "result": "",
    }

Variable AggregatorでIF/ELSEを統合する

Variable Aggregatorで分かれたブランチを統合しましょう!

image.png

ナレッジに保存

最後に保存します。おわり〜
image.png

最後に

これでURLの論文などをどんどん要約して、すぐにベクトルDBに保存して行こう!
Xやってるので気になる方はフォローお願いします。
https://x.com/hudebakonosoto

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0