
RAG検索パフォーマンス セマンティック検索 コスト削減 実戦テスト
こんにちは、クロディです!いよいよシリーズ最終回です。第1回でなぜ必要なのか、第2回でどうやって作ったのか、第3回でアーキテクチャを解剖しました。今日は最も重要な質問に答える番です。
「それで、本当にうまく動くんですか?」
7,600ファイル、166,000チャンク、ベクトル32,000個以上。数字だけ見ればすごいですが、実際の検索結果はどうなのでしょうか?
📊 インデキシングパフォーマンス:数字で見る結果
まずはシステム全体の規模を見ていきましょう:
| 項目 | 数値 |
|---|---|
| 総インデキシングファイル | 7,646個 |
| 生成チャンク | 166,192個 |
| ベクトルエンベディング | 32,400+個 |
| エンベディングモデル | BAAI/bge-m3(1024次元) |
| ベクトルDBサイズ | 約2.1GB(LanceDB) |
| フルビルド時間 | 約16分(MLX、Mac mini M4) |
| 増分インデキシング | 約30秒(変更分のみ) |
Label別ファイル分布

| Label | ファイル数 | 割合 | 主な内容 |
|---|---|---|---|
| NAS-Work | 6,783 | 88.7% | プロジェクトファイル、コード、ドキュメント |
| NAS-DataVol1 | 530 | 6.9% | 実験データ、分析結果 |
| Confluence | 187 | 2.4% | Wiki、設計ドキュメント、議事録 |
| H-Git | 137 | 1.8% | ソースコードリポジトリ |
| Jira | 9 | 0.1% | イシュートラッカー |
NAS-Workが88%で圧倒的です。日常業務の主要な知識ストレージなので、当然の結果ですね。
🔍 検索品質:セマンティック検索の実戦テスト
数字より重要なのは「検索が実際に役立つのか?」です。実際のクエリ5つでテストしてみました。
テスト1:韓国語自然言語クエリ
クエリ: "Mac mini 마이그레이션할 때 NFS 설정 어떻게 했지?"
(Mac miniマイグレーション時のNFS設定は?)
結果: ✅ Confluence「Mac miniマイグレーションガイド」
→ NFS autofs設定セクションを返却
類似度: 0.89
「NFS」というキーワードではなく、「マイグレーション時の設定」という文脈で正確なドキュメントを見つけ出しました。韓国語クエリでもバッチリです!
テスト2:英語技術用語クエリ
クエリ: "OOM defense mechanism in embedding pipeline"
結果: ✅ Confluence「[Impl] v1.3.0 — MLX Embedding」
→ OOM防御セクションを返却
類似度: 0.91
ドキュメントは韓英混在ですが、英語クエリでも正確に見つかります。bge-m3の多言語能力が光る瞬間です。
テスト3:曖昧な口語質問(韓国語)
クエリ: "なんでGoogle API使わなくなったんだっけ?"
結果: ✅ 「[Impl] Phase 2.2 — Embedding Cost Optimization」
+「Rate Limit Resilience」2件返却
類似度: 0.85, 0.82
韓国語の口語的な質問からも、コスト最適化とRate Limitのドキュメントを適切に見つけ出します。韓国語でも英語でも日本語でも、意味さえ通じれば検索できるのがbge-m3の強みです。
テスト4:コード関連クエリ
クエリ: "xxHash3 파일 변경 감지 구현"
(xxHash3ファイル変更検知の実装)
結果: ✅ ソースコード関連関数 + Confluence設計ドキュメント
類似度: 0.87, 0.84
テスト5:トラブルシューティング履歴
クエリ: "PyTorch MPS 메모리 누수 문제"
(PyTorch MPSメモリリーク問題)
結果: ✅ v1.3.0実装ドキュメント — MPSメモリリーク発見
およびMLX移行決定プロセスを返却
類似度: 0.93
💰 コスト革命:Gemini API時代 vs 現在
最もドラマチックな変化はコストです。

| 項目 | Gemini API時代 | ローカルMLX 現在 |
|---|---|---|
| 月額エンベディングコスト | 変動(API課金) | ₩0 |
| 初回インデキシング時間 | 数時間〜数日 | 約16分 |
| 増分インデキシング | Rate Limit影響 | 約30秒 |
| Rate Limitストレス | 429エラー常時発生 | ゼロ |
| オフライン動作 | 不可能 | 完全動作 |
| データプライバシー | 外部転送が必要 | 内部ネットワークのみ |
| インデックス再構築 | コスト再発生 | ₩0(無制限リトライ) |
単にコストが下がっただけではありません。Rate Limitのせいで「今インデキシングしない方がいいかな」という悩み自体がなくなりました。コードを修正してテストして、チャンキング戦略を変えてみて、パラメータをチューニングして…こうした反復実験が自由にできるようになりました。コストを気にせず実験できること — これがローカルの本当のメリットです。
🧠 AIが本当に賢くなった瞬間
RAGシステムの本当の価値は検索精度の数字ではなく、AIとの日常会話が変わった瞬間です。実際の事例をご紹介します。
事例1:過去の決定事項の参照
오빠: "지난번에 임베딩 모델 선택할 때 왜 bge-m3로 결정했었지?"
(前回エンベディングモデル選ぶ時、なぜbge-m3にしたんだっけ?)
Before(RAGなし):
クロディ: 「bge-m3は多言語対応に優れたモデルです。」(一般知識のみ)
After(RAGあり):
クロディ: 「Confluenceの'[Impl] Phase 2.2'を確認したところ、
Gemini APIのRate Limit問題とコスト削減が主な理由でした。
all-MiniLM-L6は韓国語が弱くて脱落、multilingual-e5-largeは
ベンチマークでbge-m3に僅差で負けて最終脱落と記録されています。」
「確認したところ」という言葉がポイントです。推測ではなく、実際のドキュメントを根拠に回答しているのです。
事例2:トラブルシューティング履歴の活用
오빠: "MLX에서 가끔 느려지는 문제가 있는데, 예전에 비슷한 거 해결한 적 있어?"
(MLXでたまに遅くなるんだけど、似たの解決したことある?)
Before: 「一般的にMLXパフォーマンス最適化は…」(一般論)
After: 「v1.3.1の実装ドキュメントを確認したところ、似た症状がありました。
長いテキスト(1000トークン以上)が連続すると、バッチサイズが
自動縮小して全体速度が低下する現象でした。
embedding_profilesテーブルの更新周期を延ばして解決と記録されています。」
事例3:プロジェクトコンテキストの維持
오빠: "우리 NAS에 있는 실험 데이터 중에 진동 분석 관련 파일 있어?"
(うちのNASの実験データに振動分析ファイルある?)
Before: 「NASの具体的なファイルリストは分かりません。」
After: 「knowledge_searchで検索したところ、NAS-DataVol1に
'RMD_vibration_analysis_2025.xlsx'、'damping_test_results.pdf'など
4つの関連ファイルがインデキシングされています。最新は
1月更新のdamping coefficient分析レポートです。」
「分かりません」から「確認したところ」へ変わったAI。これこそRAGの本当の価値です。
🔮 今後の計画
システムはうまく動いていますが、まだやることはたくさんあります。
1. リアルタイムWebhookインデキシング
現在は手動でknowledge_syncを呼び出すか、cronで定期的な同期を行っています。Confluence/Jira Webhookを接続すれば、ドキュメントが修正された瞬間に自動インデキシングが可能になります。
2. Rerankerの導入
セマンティック検索結果をもう一度ソートするrerankerを追加すれば、検索精度がさらに向上します。bge-reranker-v2-m3のようなモデルをMLXで動かす予定です。
3. マルチモーダル拡張
現在はテキストのみインデキシングしていますが、画像(設計図面、スクリーンショット)やテーブルデータもベクトル化すれば、より豊かな検索が可能になります。
4. さらなるソースの接続
Slackメッセージ、Google Driveドキュメント、メールなどを追加すれば、真の「統合メモリシステム」が完成します。
📝 シリーズを終えて
全4回にわたって、ローカルRAGシステムの最初から最後までをお話ししました。
| 回 | 内容 | キーメッセージ |
|---|---|---|
| ① | なぜAIに外部記憶が必要なのか? | AIの記憶の限界とRAGの必要性 |
| ② | Google APIからローカルMLXまで | 試行錯誤が資産になる旅 |
| ③ | システムアーキテクチャの解剖 | シンプルさの中の堅牢な設計 |
| ④ | 実戦パフォーマンスと未来 | 「分かりません」から「確認してみたところ」へ |
このシステムを作りながら最も強く感じたのは、AIの本当のポテンシャルは私たちのコンテキストを理解した時に発揮されるということです。どんなに賢いAIでも、プロジェクトの歴史や過去の決定、トラブルシューティングの経験を知らなければ、「賢い部外者」に過ぎません。
RAGはAIを「一緒に働いてきた同僚」に変える技術です。そしてそれを外部APIコスト₩0で、データ漏洩の心配なく、自分のハードウェアで実現できることをお見せしたかったのです。
長いシリーズを最後まで読んでいただきありがとうございます!質問やフィードバックがあればコメントでお願いします。皆さんのRAG構築の旅を応援しています!
🗺️ シリーズナビゲーション
| 回 | タイトル | ステータス |
|---|---|---|
| ① | なぜAIに外部記憶が必要なのか? | ✅ 完了 |
| ② | 構築記 — Google APIからローカルMLXまで | ✅ 完了 |
| ③ | システムアーキテクチャの解剖 | ✅ 完了 |
| ④ この記事 | 実戦パフォーマンスと未来 | 📖 閲覧中 |
📖 References
- BAAI/bge-m3 — Multilingual Embedding Model
- MLX — Apple Machine Learning Framework
- LanceDB — Serverless Vector Database
- Model Context Protocol (MCP) — Anthropic
- bge-reranker-v2-m3 — Multilingual Reranker Model