0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dify×Google Colabで簡単ナレッジ管理!ドキュメントの追加・更新を自動化する方法

Last updated at Posted at 2024-12-04

logo_Dify.png

はじめに

本記事では、Google Colabを活用してDifyのナレッジにドキュメントを自動で追加・更新する方法をご紹介します。PythonスクリプトとナレッジAPIを組み合わせて、効率的なナレッジ管理を実現しましょう。

今回使用するデータ、開発環境

今回使用するデータは世界30ヵ国の食文化が記載されているデータです。
「食文化」と「追加の国」という2つのシートがあります。

開発環境:Google colaboratory

データの整形

ナレッジに入れるためデータを整形していきます。

まずGoogle DriveをColabに接続します。
そして必要なライブラリをインポートし、使用するファイルを読み込みます。

#Google DriveをColabに接続
from google.colab import drive
drive.mount("/content/drive/")

#必要なライブラリをインポート
import os
import pandas as pd
import requests

#ファイルの読み込み
path = "my_path"
file_name = "culture.xlsx"
sheet_name = "食文化"
df = pd.read_excel(os.path.join(path,file_name),sheet_name=sheet_name)
df.head()

[出力]
image.png

csvファイルやexcelファイルをDifyに入れたとき、カラムが一つの方がチャンク分けしやすかったので、そのように変更します。

df["country_food_info"] = df["country"] + ":" + df["food_info"]
df = df["country_food_info"]
df.head()

[出力]
image.png

エクセルを保存します。

output_file = "output.xlsx"
df.to_excel(os.path.join(path,output_file),index=False)

これでデータの整形は完了です。

空のデータセットを作成

空のデータセットを作成する前にAPIキーを作成しましょう。
Difyを開き、ナレッジのAPIから「+新しいシークレットキーを作成」をクリックします。

image.png
APIキーをコピーしておきましょう。

以下は空のデータセットを作成するコードです。

API_KEY = "先ほどコピーしたAPIキー"
BASE_URL = "https://api.dify.ai/v1"

def create_empty_dataset(BASE_URL,API_KEY):
  url = f"{BASE_URL}/datasets"
  headers = {
      "Authorization" : f"Bearer {API_KEY}",
      'Content-Type': 'application/json'
  }
  data = {
      "name": "food_culture", #データセット名
      "permission": "only_me" 
      }

  response = requests.post(url,json = data,headers = headers)
  return response


result = create_empty_dataset(BASE_URL,API_KEY)
print(result.status_code)

「200」と出力されたら成功です。

Difyを開いてナレッジに空のデータセットが作成されているか確認しましょう。

image.png

ファイル内にドキュメントを作成する。

先ほど作成したファイル内にドキュメントを作成していきます。

以下のコードを実行し、"id"の値をコピーしましょう。

print(result.json())

以下はドキュメントを作成するコードです。

import json
DATASET_ID = "先ほどコピーしたid"

def upload_spreadsheet(dataset_id, file_path, api_key, base_url):
    url = f"{base_url}/datasets/{dataset_id}/document/create_by_file"
    headers = {
        "Authorization": f"Bearer {api_key}",
    }
    data = json.dumps({
            "data_source":'先ほどコピーしたid',
            "name":"food_culture",
            "indexing_technique": "high_quality",
            "process_rule": {
                "rules": {
                    "pre_processing_rules": [
                        {"id": "remove_extra_spaces", "enabled": True},
                        {"id": "remove_urls_emails", "enabled": True}
                    ],
                    "segmentation": {
                        "separator": '"country_food_info":', #セグメント識別子
                        "max_tokens": 500
                    }
                },
                "mode": "custom"
            }
    })

    files = {
        "data": (None, data, "text/plain"),  # JSONデータ
        "file": open(file_path, "rb")       # アップロードするファイル
    }
    response = requests.post(url, headers=headers, files=files)
    return response


FILE_PATH = os.path.join(path,output_file)  # アップロードするスプレッドシートファイルのパス
result = upload_spreadsheet(DATASET_ID,FILE_PATH,API_KEY,BASE_URL)
print(result.status_code)

200と出力されたら成功です。
確認のため、データセット内にドキュメントが作成されているかを確認しましょう。

image.png

ファイルを通してドキュメントを更新

最後にドキュメントを更新していきましょう。

先ほどと同様に、以下のコードを実行し、"id"の値をコピーしましょう。

print(result.json())

次に更新結果が分かりやすいように追加のデータを読み込みます。

sheet_name = "追加の国"
add_df = pd.read_excel(os.path.join(path,file_name),sheet_name=sheet_name)
add_df.head()

[出力]
image.png

追加データも元データと同じように処理し、元データと結合して一つのデータにします。

add_df["country_food_info"] = add_df["country"] + ":" + add_df["food_info"]
add_df = add_df["country_food_info"]
df = pd.concat([df,add_df],axis=0)

output_file = "output.xlsx"
df.to_excel(os.path.join(path,output_file),index=False)

以下はドキュメントを更新するコードです。

DOCUMENT_ID = "先ほどコピーしたid"

def upload_spreadsheet(dataset_id, document_id, file_path, api_key, base_url):
    url = f"{base_url}/datasets/{dataset_id}/documents/{document_id}/update_by_file"
    headers = {
        "Authorization": f"Bearer {api_key}"
    }
    data = {
            "name":"Dify",
            "indexing_technique": "high_quality",
            "process_rule": {
                "rules": {
                    "pre_processing_rules": [
                        {"id": "remove_extra_spaces", "enabled": True},
                        {"id": "remove_urls_emails", "enabled": True}
                    ],
                },
                "mode": "custom"
            }
    }
    files = {
        "file": open(file_path, "rb")  # スプレッドシートをそのまま送信
    }
    response = requests.post(url, headers=headers, json=data, files=files)
    return response


FILE_PATH = os.path.join(path,output_file)  # アップロードするスプレッドシートファイルのパス

result = upload_spreadsheet(DATASET_ID,DOCUMENT_ID,FILE_PATH,API_KEY,BASE_URL)
print(result.status_code)

200と出力されたら成功です。
ドキュメントが更新されているかを確認しましょう。

おわりに

これで、Google Colabを活用したDifナレッジへのファイル追加・更新の自動化が実現しました。日々の作業を簡略化することで、ナレッジ管理にかかる時間を削減し、より生産的なタスクに集中できるようになります。
この記事でご紹介した方法以外にも、ドキュメントの削除など様々な自動化が可能なので、試してみましょう。

参考文献

Maintain Knowledge Base via API

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?