RAGを作ろう(プログラミング経験なしの新人
みなさまRAG作っていますか?????
RAG(Retrieval-Augmented Generation)→和訳で検索_拡張_生成これは登録した資料の本文含む全文をいい感じに検索して知りたいことを引っ張り出してくれる技術になります。頑張ればPDFもエクセルもパワポもまとめて全部検索できちゃう(すごい)
企業のナレッジから決算資料まで、作っては溜まる一方の資料が一つのフォーマットで活用できるのでとても便利になる……はずです。
なんとなくRAGの有用性を書いたところでプログラム初心者がRAG構築を目指して悪戦苦闘している様子をつらつらと書き連ねていきたいと思います。
現在、3回作り直しました。徐々に高機能ライブラリを導入したので、コードのコアが変わり作り直しとなりました。イメージは個人ハンドメイドから工作機械を用いた製品クラスに精度アップした……はずです。
第1弾からざっくり内容をば書いていきましょう。
全部簡単なライブラリと関数で機能を実装時代(初代)(高機能ライブラリ?何それ????)この時は、LangChain?LlamaIndex?状態でした。また、生成と検索をごっちゃにして考えていたので中身はスパゲティに……
LangChain導入時代(2代目)YouTubeで初めて高機能ライブラリを知り、検索調査を開始。LangChainやLlamaIndexを知り全体的に精度アップ。PDFやエクセルの処理などを追加したが、後述のdoclingは使用してない。複数のライブラリを組み合わせて多段処理を行い精度出してました。
docling導入時代(3代目の現在)doclingは知っていたが敷居の高さを勝手に感じ触ってなかった。エクセル、PDF、CSV、 html……複数のファイル処理が見えてきたので重い腰を上げてdoclingに着手。意外と簡単で精度上がりそう(未定)
みたいな変遷を得ました。ここからは便利なライブラリの紹介と、こだわった部分を何点か上げます。
ライブラリdoclingLangChainこの二つはコードの機能的にコアになります。なるはやで実装おすすめです。
埋め込みモデルbge-m3セキュリティの観点(会社都合とも)でローカルLLM使用のなかで、最も精度出せたのかbge-m3。古め重めですが自分の用途ではこれが鉄板。embeddinggemmaは期待してたのだけどイマイチ……
PCスペック問題PCメモリが8GBなので軽量化必須ベクトルを量子化する事で精度は若干落ちるが処理速度向上。体感ほぼ変化なし
これ以外はこだわっている箇所は無いです。個人の都合いい方の流れでお願いします。
個人開発でも似たものを作り直しましたが、 notebookLMのクイズ程度は全問正解できました。何か良いベンチマークをご存知の方がいらっしゃいましたら教えてください。
目指せ、機関システムの基礎ロジック構築!!!お目汚し失礼しました。
Discussion