アルゴリズムRAG修正
algorithm RAG LangChain automation
前の記事からの続きです。
FAISS削除とNumPy計算の導入
前の記事でLangChainのFAISSを活用したRAGシステムを構築したと書きましたが、勉強も兼ねて中身を見ているうちに、FAISSを使う理由がなかったことに気づきました。 この規模では単純なNumPy計算で類似度検索を行うほうが効率的だったため、変更することにしました。
まず、FAISSの役割をNumPyが同じように実行できるのか、という疑問がありました。そこで小さな実験を1つ行いました。
実験: FAISS vs NumPy 類似度検索速度比較
もちろんFAISSは速いのですが、下の結果を見ると差は0.005秒程度で、まったく問題にならない水準です。そのため、あえてFAISSを使う必要はないと判断しました。
性能比較結果(Top-5検索)
| 方法 | 所要時間 | 速度順位 |
|---|---|---|
| FAISS | 0.002095 秒 | 1位 |
| NumPy (Pure Python) | 0.007358 秒 | 2位 |
| Scikit-learn (Brute Force) | 0.023916 秒 | 3位 |
詳細結果
[A] FAISS
- 所要時間: 0.002095 秒
- インデックス:
[0, 160, 2260, 1256, 307] - 距離値 (L2):
[0.0, 0.364, 0.397, 0.413, 0.415]
[B] Scikit-learn (Brute Force)
- 所要時間: 0.023916 秒
- インデックス:
[0, 160, 2260, 1256, 307] - 距離値 (L2):
[0.0, 0.603, 0.630, 0.643, 0.644]
[C] NumPy (Pure Python)
- 所要時間: 0.007358 秒
- インデックス:
[0, 160, 2260, 1256, 307] - 距離値 (Squared L2):
[0.0, 0.364, 0.397, 0.413, 0.415]
GitHub Actions時間短縮
ワークフロー実行時間
ほぼ1分近く短縮されたため、良い選択だったと思います。
Before

After

おわりに
残りの作業は、前の記事で話した次の4つに加えて、使いながら修正していくことです。
- 初期環境変数設定なしで使えるようにする。
- 他の人も使える形で構築する。
- 構築したLeetCode問題を成長する木の形で可視化する。問題を解くと木が成長し、解いた問題は光る葉になり、難易度ごとに別の色で表現する。
- グラフネットワーク可視化。
Algorithm Bot 5 / 6
댓글