
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はこちらの論文で紹介されているアイデアです。

<フローの見方>
nodeは状態(state)を変化させる
edgeは次にどのnodeを呼ぶか選択する
フローの途中で以下のようなフィードバックが挟まれていることがわかります。
参照したドキュメントが質問に関連しているか?
生成した回答がドキュメントの内容と一致するか?
生成した回答が質問に対して有効か?
CRAG(Corrective RAG)
こちらの論文で紹介されているアイデアです。

Self-RAGと同様に途中にフィードバックを挟み、回答を生成するかWeb参照を行うか判断しています。
参照したドキュメントが質問に関連しているか?
所感
Self-Reflective RAGは、RACの精度向上に非常に有効なアプローチだと感じました。例えばLangChainを使わずに、OpenAI Assistants APIを利用すればより簡単にRAGを実装できますが、その場合フローの制御は行えません。
より高度な課題にうまく回答させるにはRAGフローの設計が重要になってくるので、フローを自由に記述できるのはLangChain(LangGraph)の大きな強みだと思います。
Header Photo by Unsplash David Clode