GitHubリポジトリはこちら
https://github.com/sheltie-fusafusa/dojin-rag-2
RAG検索したが、うまくいかなかった話
以前も同じようなシステムを作りましたが、残念ながら失敗しました・・・
原因は、システム的な限界と、RAG検索作成ノウハウの不足があると考えています
システム的な限界
RAG検索を動作させる環境が「MacBookPro 2019」という、AIシステムを動作させることを考えるとものすごく非力なマシンで動かそうとしました
このPC上でDockerを使ってGo、Python、Redis、ollama、chromaDBなどが動作するため、一つ一つのシステムに割り当てられるリソースが限定されます
特にメモリ16GBではパラメータ数の多いモデルは利用できないため、結果的に精度の良くない小型モデルを利用し、エンベッティング、検索ともに十分な変換ができないという問題がありました
ノウハウ不足
RAG検索は「検索した結果をLLMに渡し、回答を生成する技術」なので、核になるのは「ユーザーが望んだ検索結果を、データストアから取得する」部分になると考えています
今回、データストアにchromaDBを使用し、ユーザーの検索結果をベクトルに変換、chromaDBに対して検索を行うことで(意味的な)距離が近い回答を取得し、LLMにて最終的な回答を作成するというアーキテクチャにしました
ただ、最初の「chromaDBから意味的に近い回答を取得する」部分がうまく言っておらず、テストデータの距離がすべて近いものとして出力されていました
これは「エンベッティング」「chromaDBに対しての検索手法」の知識が無く、なんとなくで作成してしまったことで、結果的に意味のない検索システムが出来上がってしまいました
当然、意味のないデータをLLMに渡したところで、意味のない回答が生成されるだけなので、結果使えないシステムとなりました
ローカルLLMの有用性と限界
今回はローカルLLMとして以下のモデルを利用しています
HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive
このモデルはRTX5070Ti VRAM16GBの環境で60tokens / secの速度が出るため、かなり実用的に利用できるLLMだと思っています
VSCodeにOpenCodeを設定し、プロバイダとして上記モデルを読み込んだllama.cppサーバーを指定してコーディングさせました
フロントサイド、サーバーサイドともに「動作するもの」はできましたが、やはり一発成功となならず、完成報告を受けて実際に動かしてみたら「Docker buildに失敗」「チャットを送るとエラー」「回答が出力されない」など、多くの問題が発生しました
そのため、動かしつつ問題点は随時修正させることで、一旦動くものはできました
ただ、使えるか?というと、残念ながら使えないものができてしまいました
ローカルLLMはしばらく運用していましたが、やはり大手企業が展開するサブスクモデルレベルのクオリティを求めた場合、現状は困難と判断し、先日GeminiのAI Proプランを契約しました(お試しで3か月720円で利用できるため)
以上です
ということで、RAG検索を作成したお話でした
結果失敗に終わりましたが、今まで「なんかいい感じに検索してくれる仕組み」となんとなく思っていましたが、実際に作ってみるとデータ設計、データ検索手法が最も大事だということがわかりました
もし次回RAG検索を作成することがあれば、データ設計/検索周りに特に力を入れて開発を行いたいと思います