「Difyソースコードリーディング #5 - ナレッジベース・RAGの実装を読み解く」を開催しました #もくもくDify

ジェネラティブエージェンツの大嶋です。

もくもくDifyで「Difyソースコードリーディング #5 - ナレッジベース・RAGの実装を読み解く」というイベントを開催しました。

dify-mokumoku.connpass.com

アーカイブ動画はこちらです。

youtube.com

Difyのソースコードは以下です。

github.com

今回も 戸塚さん と一緒に話しながらコードを読んでいきました!

今回のポイント

DifyのRAGの実装の概要

DifyではRAG関係の重要なコードは api/core/rag ディレクトリに置かれているようでした。

api/core/rag以下のディレクトリの概要は、以下のようになっていました。

  • cleaner ... 前処理
  • data_post_processor ... 後処理(リランクとリオーダーの呼び出し)
  • datasource ... Weaviateなどのベクトルデータベースのインテグレーション
  • docstore ... RDBにデータを読み書きする機能
  • extractor ... CSV、PDF、PPTXなどのファイルからのテキストの抽出
  • index_processor ... インデクシングの処理
  • models ... Document型の定義
  • rerank ... リランクの実装
  • retrieval ... Retrievalの処理
  • splitter ... チャンク化の処理

IndexingRunner

Difyのナレッジベースの機能でインデクシングを実行したときは、indexing_runner.py のIndexingRunnerクラスが使われるようでした。

IndexingRunnerからextractorやdatasourceなどが呼び出されて処理が進むようです。

インデクシングの際の処理の流れを把握したい場合は、IndexingRunnerクラスがヒントになりそうです。

ファイルからのテキスト抽出処理

extract_processor.py には、以下のように拡張子に応じてテキストの抽出処理を切り替えるよう実装されていました。

                    if file_extension in {".xlsx", ".xls"}:
                        extractor = ExcelExtractor(file_path)
                    elif file_extension == ".pdf":
                        extractor = PdfExtractor(file_path)

このあたりを改造すると、PDFやPPTXといったファイルからのテキスト抽出処理を変えてみるといったこともできそうです。

次回のご案内

次回は「DSLYAMLファイルの扱いを読み解く」というテーマです。 ご興味ある方はぜひ気軽にご参加ください!

dify-mokumoku.connpass.com

また、水曜日にもDifyの活用についてのもくもく会があります。 こちらもご興味ある方はぜひ気軽にご参加ください!

dify-mokumoku.connpass.com