LoginSignup
0
0

はじめに

今回は練習がてらDifyでCRAGのフローを組んでみました。
CRAGのフローをLangChainブログの簡略化版ではなく、論文で提示されている版を組むとなかなか大変です。
みなさんも一度これを読んでCRAGの構築実践してみましょう!
これができたらDify中級者なんじゃないでしょうか?
では始めます。

CRAGとは


(Referenced by https://arxiv.org/pdf/2401.15884.pdf)

プロセスとしては、

  1. 持っているドキュメントに検索しに行く

  2. 検索したドキュメントから取得した内容が、関連しているか、してないかを判定する。

  3. 知識をより洗練する。

    • 取得した内容が関連していない → 文脈を補足するためにウェブベースの文書検索を実行する。そのために質問をWeb検索用に最適化+Webで検索して知識を補強!
    • 取得した内容が関連している → 取得してきたドキュメントを分割して、各分割に対して評価して無関係なものは除去!
    • 取得した内容が関連してるか微妙 → 知識の洗練とWebでの情報取得の両方を行う。
  4. 回答を生成する。

    • 取得した内容が関連していない → 質問Webで検索して知識で回答を生成
    • 取得した内容が関連している →  質問洗練した知識で回答を生成
    • 取得した内容が関連してるか微妙 → 質問Webで検索して知識洗練した知識で回答を生成

簡単にいうと、
RAGに指定した文書に関連する内容があったら、知識を洗練する!なかったらWeb検索しに行けばいいんやん、関連してるかわからんやったらどっちもやろ!
ってことです。

具体的には以下のブログを見てみてください。︎(私が書いた記事で恐縮です。)
https://zenn.dev/yamada_quantum/articles/ab41b431581eba

全体像

ではDifyで構築するとの全体像は以下です。
上記に記載したCRAGの図のようなknowledge refineはDifyで現状難しそうなのでLLMにRefineさせるようにしています。
image.png

では各モジュールを見ていきましょう。

知識の取得から分類まで

まず知識の取得から分類までの全体像です。
image.png

知識取得してから、質問分類できるように文字列にします。
そして検索がいい感じかをCorrect, Incorrect, Ambiguousの3つに分類します。

image.png

Correctの場合

Correctの全体像は以下です。
image.png

具体的な内容は以下です。
image.png

Incorrectの場合

Incorrectの全体像は以下です。
image.png

具体的な内容は以下です。
image.png

Ambiguousの場合

Ambiguousの全体像は以下です。
image.png

具体的な内容は以下です。
image.png

ここまでできたら終了です。

プロンプト

では実際に使用しているプロンプトを記載します。

KnowledgeRefineのプロンプト

Please organize your information so that you can properly answer the questions.

{{#context#}}

質問変換のプロンプト

You are generating questions that is well optimized for retrieval. \n 
    Look at the input and try to reason about the underlying sematic intent / meaning. \n 
    Here is the initial question:
    \n ------- \n
    {{#sys.query#}}
    \n ------- \n
    Formulate an improved question: 

回答生成のプロンプト

Please answer the following questions according to the instructions on the following information.
{{#context#}}
    Question: {{#sys.query#}}

Ambiguousの場合はコンテキストにtavilyの出力も入れておきましょう。

最後に

CRAGのDifyでの構築はいかがでしたでしょうか?
今回は少し長めのフロー組んでみました。みなさんのDifyの練習になれば嬉しいです。

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