見出し画像

RAGの精度を向上させる~Self-Reflective RAG~

こちらの記事で紹介されているSelf-Reflective RAGが気になったのでまとめました。


通常のRAGとの違い

通常のRAG

  • 質問 → 参照 → 回答生成 という直線的なフロー

Self-Reflective RAG

  • 質問 → 参照 → フィードバック → 回答生成 → フィードバック

  • フィードバックを受けて次の行動を選択する(質問を修正する / 再度ドキュメントを参照するなど)

実装方法

LangChainが最近ローンチしたLangGraphを使うことで簡単に実装できます。LangChain公式で、Self-RAGとCRAGという2パターンのSelf-Reflective RAGの実装サンプルが紹介されています。

Self-RAG

Self-RAGはこちらの論文で紹介されているアイデアです。

実装サンプル

examples/rag/langgraph_self_rag.ipynb より

<フローの見方>

  • nodeは状態(state)を変化させる

  • edgeは次にどのnodeを呼ぶか選択する

フローの途中で以下のようなフィードバックが挟まれていることがわかります。

  • 参照したドキュメントが質問に関連しているか?

  • 生成した回答がドキュメントの内容と一致するか?

  • 生成した回答が質問に対して有効か?

CRAG(Corrective RAG)

こちらの論文で紹介されているアイデアです。

実装サンプル

examples/rag/langgraph_crag.ipynb より

Self-RAGと同様に途中にフィードバックを挟み、回答を生成するかWeb参照を行うか判断しています。

  • 参照したドキュメントが質問に関連しているか?

所感

Self-Reflective RAGは、RACの精度向上に非常に有効なアプローチだと感じました。例えばLangChainを使わずに、OpenAI Assistants APIを利用すればより簡単にRAGを実装できますが、その場合フローの制御は行えません。
より高度な課題にうまく回答させるにはRAGフローの設計が重要になってくるので、フローを自由に記述できるのはLangChain(LangGraph)の大きな強みだと思います。


Header Photo by Unsplash David Clode

この記事が気に入ったらサポートをしてみませんか?