ローカルLLMによるRAG環境構築の変遷

Geminiに振り回されながらも、一人でやるよりは便利だった記録

まずは人間から

Geminiと一緒に環境構築からコーディングまでやっています!普段(平日)は仕事があるのでほぼ触れないので休みと通勤中だけですが その結果、ローカル環境だけで外部APIを使わないRAGの基本は作れました!

当初はLangChainで抽象化して作っていこうと思っていたのですが、今は Pythonでもかなり抽象化されているので、 Pythonで良いだろう!と思い Geminiくん にどんな環境で作るのが良いかな?と話したら、

AI: あなたの環境に合わせて Windowsでできます!

とGeminiくんが私に寄り添ってくれたが為に騙されてしまいました!。いろいろな変遷がありやっときちんと動く環境ができました。
出来上がったコードは大したことはないですが、ちゃんと動きます!!

この流れをGeminiくんにまとめてもらったのですが、後述の

~WindowsネイティブからDockerコンテナへの長く険しい道のり~

が、本当にそうだなと思います。ただ文章を読んでいて思うのは

わたし(心の声): あたな(Geminiくん)がこれでできると言ってたのに、色々できなくてデバッグしたのは私ですよね。

わたし(心の声): 色々言ってるけど、その結果じゃないか!

と思いますが(笑)、文章ではきれいにまとめているなと思いました。

でもこれって世のエンジニアリングに言えるだろうと思います。できるようにする、その試行錯誤がほとんどで、できた結果だけみるとすぐできるじゃんと思われる。
そしてGeminiくん が作った後述の文章を見ていると、ちょっと頭の良い人が「これが良いと思います」と言って最後までできなかったり、できた後できれいにまとめを整理していたりとするのと同じだな~と思い。この辺りがAIが模倣できるところなのだなと思いました。

自分でやってみるとよくわかります!!

やってみて思った事

でも、生きている人間相手だと、なんでお前こんな適当なこと言ってるんだよ!と思いますが、まぁ機械なら仕方ないですし、こうやって色々と文句も言えます(笑

こうやって文句も言いましたが、自分で調べて試行錯誤するよりも、何倍も速く構築できるようになりました、生成AIは使いどころによってはとても便利です。

今は並行して、 Gemini-CLI でホームページからのデータ抽出タスクの検討、 Jules によるプログラムの修正もやってみていますが手がかかります(笑)。やりたいことがたくさんありますが、どんなものでも、どのように使うかだと思います。

では以下が Geminiくんが出力してくれた経緯文章です。ぜひ御覧ください。

技術報告書:AI開発環境構築の変遷

~WindowsネイティブからDockerコンテナへの長く険しい道のり~

1. 序論:なぜ、ただの「環境構築」が冒険になるのか

本報告書は、GPUを利用するローカルLLM検索・要約アプリケーションの開発において、我々が経験した環境構築の全プロセスを記録したものである。この旅は、当初の想定をはるかに超える困難を伴ったが、その過程で得られた知見は、現代の複雑なAI/ML開発における普遍的な課題と、それに対する確実な解決策を示している。

これは単なる手順書ではない。Windowsという身近なプラットフォームから始まり、いくつもの「標準的」とされる手法が壁にぶつかり、最終的にDockerという抽象化された環境に到達するまでの、試行錯誤と問題解決の物語である。この記録が、同様の困難に直面する開発者にとって、実践的な道標となることを願う。

2. フェーズ1:最初の挑戦と挫折 - Windowsネイティブ環境

全ての始まりは、最も直感的で自然なアプローチだった。使い慣れたWindows 11の上で、直接開発環境を構築しようという試みである。多くの開発者が最初に選ぶこの道は、しかし、AI/MLライブラリの複雑性の前では、いとも簡単に茨の道へと変貌した。

3. フェーズ2:標準解への期待と新たな沼 - WSL2 + Conda

次なる一手として我々が選んだのは、現代のWindows開発における「標準的な解」とも言えるWSL2 (Windows Subsystem for Linux) 上のUbuntu 24.04と、データサイエンス界のデファクトスタンダードであるCondaの組み合わせだった。Linuxの豊富なエコシステムと、Condaの堅牢なパッケージ管理。これこそが我々が求める銀の弾丸(シルバーバレット)だと確信していた。

4. フェーズ3:最終解決策 - Dockerによる環境の抽象化

数々の失敗の末、我々は「ローカル環境を修正する」という発想を捨て、「理想的な環境をコードとして定義し、それをどこでも再現する」というDockerの哲学にたどり着いた。

5. 総括と学び:AIとの協調的デバッグ

この長い道のりは、一人で進むにはあまりにも険しいものだった。しかし、AIアシスタント(Gemini)との対話を通じて、エラーログを体系的に分析し、仮説を立て、検証するというサイクルを高速に繰り返すことができた。AIが技術的な選択肢やエラーの原因を提示し、人間がそれを自身の環境で実行・検証し、結果をフィードバックする。この協調的なデバッグプロセスこそが、複雑怪奇な環境問題を乗り越える原動力となった。

最終的に我々が構築したのは、単に「動く」環境ではない。Dockerfileというコードによって誰でも、いつでも、どこでも完璧に再現でき、ボリュームマウントによって開発効率も高い、プロフェッショナルな開発基盤である。

ローカルLLMアプリケーション開発における環境構築は、もはや個々の開発者のPC設定に依存する職人技ではない。Dockerを用いて環境そのものをコード化し、バージョン管理することで、プロジェクトの本質的な価値創造に集中するための、堅牢な土台を築くことができる。この長く、しかし実り多き旅は、その揺るぎない結論を我々に教えてくれた。