1
1

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を使ってMacBookでRAGを試してみた

Posted at

はじめに

今更ながらDifyを使ってRAGを試してみたので、その時のメモです。
全てローカルで動かしたかったので、手持ちのMacBook Proで動くものを作ります。ローカルでLLMを動かすためにollamaを使います。

目的

  • Difyを使ってMacBook Proで動くChatbotを作る。
  • こちらの官公庁のQ Aデータを読み込み、類似の質問とその回答を表示する。
  • 回答する際に、ソースのリンク等を表示する。

環境

  • MacBook Pro
    • プロセッサ:1.4 GHz クアッドコアIntel Core i5
    • メモリ:16 GB
  • Dify: commit 42b02b3 (バージョン指定するのを忘れた)
  • ollama: ver. 0.3.12

RAGを試してみた

Difyとollamaの準備

ローカルでLLMを動かすためにollamaというツールを使う。
モデルはELYZA, Inc.が開発したLlama-3-ELYZA-JPを使用した。
Dify, ollama, モデルの準備はこちらの記事を参考に行った。
https://zenn.dev/michy/articles/1dfddbcf88c80e

ナレッジの準備

RAGで外部情報を取得するためにナレッジを作成する。
今回は官公庁のQAのデータを使用する。

データの準備

下記のサイトから"data.jsonl"をダウンロードする。
https://huggingface.co/datasets/matsuxr/JaGovFaqs-22k/tree/main
Difyで読み込むために、.jsonlファイルを.csvに変換する。

1つのファイルのサイズが15 MB以下でないとDifyで読み込めないので、ファイルサイズが大きい場合は適度に分割する。
今回のデータは22794個のQAが含まれており、全てを1つの.csvファイルにすると19.9 MBとなったため、2つのcsvファイル("data_0_10000.csv", "data_10001_22794.csv")に分割した。

.jsonlファイルから.csvファイルへの変換、ファイルの分割は下記のように行なった。

import pandas as pd

df = pd.read_json('data.jsonl', orient='records', lines=True)
df.to_json('data.json', orient='records', force_ascii=False, lines=True)

df = pd.read_json("data.json")
df = df.T

df.loc[0:10000, :].to_csv("data_0_10000.csv")
df.loc[10001:, :].to_csv("data_10001_22794.csv")

ナレッジの作成

「ナレッジ」をクリックする。
スクリーンショット 2024-10-14 14.34.44.png

「ナレッジを作成」をクリックする。
スクリーンショット 2024-10-14 14.36.48.png

「テキストファイルをインポート」を選択し、.csvファイルをドラッグ&ドロップする。
スクリーンショット 2024-10-14 14.38.48.png

チャンク設定「自動」、インデックスモード「経済的」を選択し、「保存して処理」をクリックする。
スクリーンショット 2024-10-14 14.31.27.png

ステータスが利用可能になるまで待つ(数十分かかる)。
ナレッジの名前を任意の名前に変更する。今回は"官公庁QA"とした。
スクリーンショット 2024-10-14 15.19.10.png

アプリの作成

「スタジオ」をクリックし、「最初から作成」をクリックする。
スクリーンショット 2024-10-14 15.09.07.png

アプリのタイプは、「チャットボット」を選択する。
オーケストレーション方法は「Chatflow」を選択する。
アプリの名前と説明を入力する。
スクリーンショット 2024-10-14 15.07.20.png

開始ブロックとLLMブロックの間に知識取得ブロックを追加する。
スクリーンショット 2024-10-14 15.16.44.png

知識取得ブロックに、先ほど作成したナレッジを追加する。

検索設定のRERANK設定はオフにする。

LLMブロックを下記のように設定する。モデルのパラメータはデフォルトのままにした。

動かしてみる

「プレビュー」をクリックするとパイプラインを試しに動かすことができる。 試しに以下のような質問をしてみると、3分ほどで回答が返ってきた。

引用のリンクをクリックすると、ナレッジの中から引用した箇所を表示してくれる。

右上の「公開する」をクリックするとアプリとして使用できるようになる。

アプリの画面はこんな感じ。
スクリーンショット 2024-10-14 17.46.58.png

おわりに

ノートPCでもRAGを試すことができました。もちろんオフラインで使えます。
今回は最もシンプルな方法でとりあえず動くものを作っただけなので、今後は設定などを調べて改修していきたいです。

参考記事

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?