見出し画像

A第5話「社内マニュアルをローカルAIに丸暗記させてみた」RAG/ベクトルDBを解説 |【AI入門小説】猪突猛進系!新人OL?がローカルLLMを学んだら

社内マニュアルのPDFが多すぎて探し出せない…そんな悩みをローカルLLMのRAGで解決!OpenWebUIで社内文書をベクトルDB化し、Embeddingモデルをbge-m3に変更して日本語検索の精度をアップ。ChromaDBが裏で文章を地図化して、質問に即答&ページ引用までしてくれる。ローカルAIで社内ナレッジ検索を快適にする方法。生成AI入門小説 第5話。


この記事で学べる事

  • 社内資料をAIに参照させる仕組み「RAG」の考え方

  • 文章を数値に変えて意味の近さを探す「Embeddingモデル」の役割

  • 日本語のマニュアルに強いEmbeddingモデルを選ぶと検索がうまくいく理由

  • 変換した数値を保存しておく「ベクトルDB」が検索を速くする仕組み

  • ローカルAIが社内ナレッジに回答できるようになるまでのイメージ



第5話「社内マニュアルをローカルAIに丸暗記させてみた」

(オフィス。舞は山のようなPDFファイルに囲まれて溜息をついていた)

舞:「ああもう! 福利厚生の規定はどこだ……あ、こっちのPDFか。いや、違う、こっちは旅費精算のやつだ。なんでこんなに資料バラバラなんだ。検索してもヒットしないし、本当に効率が悪すぎます!」

しずか:「(横から現れて)そこでOpenWebUIの出番よ」

舞:「しずか先輩! ちょうどいいとこに来てくれましたね。このPDFの山、AIに全部読み込ませられないでしょうか?」

しずか:「できるわよ。『RAG』(ラグ)っていう仕組みを使えばね」

しずか:「RAGは、検索(Retrieval)と生成(Generation)を組み合わせて、外部資料を参照しながら回答させるシステム。簡単に言えば、『AIに専用の辞書を持たせる』みたいなものよ」

舞:「専用辞書……! 最高です! やり方教えてください!」

しずか:「まず、OpenWebUIの設定を開いて。……ここに初期インストールされたEmbeddingモデルが設定してある『sentence-transformers』ってモデルを変更するわよ」

舞:「はい、これですね……えっ、「えんべでぃんぐ」って何ですか? 聞きなじみがないです」

しずか:「Embeddingモデルは、文章を数値に変換するお仕事をしているの。RAGがドキュメントを検索する時、このモデルを使って質問と資料の両方を数値ベクトルに変換し、『どちらが似ているか』で検索する仕組みなの」

舞:「ふーん……数値に変換して比較するんだ。でも初期のやつでダメなんですか?」

しずか:「初期モデル自体は軽量で速いけど、学習データが英語中心で、日本語のドキュメントを処理するには精度が物足りないのよ。」

しずか:「だから、あらかじめOllamaにモデルをダウンロードしておいた、『bge-m3』っていうモデルに切り替えるわ。これは日本語を含む多言語に非常に強く、精度が段違いになるの」

舞:「日本語に強いEmbeddingモデル……なるほど! 日本語のマニュアルを探すなら当然そうすべきでしたね!」

(舞がOpenWebUIの設定を変え、bge-m3モデルをダウンロードして有効化する。そして、ナレッジ (Knowledge)画面からPDFのマニュアルファイルを次々とアップロードしていく。ふと、あるPDFを開いた舞が手が止まる)

舞:「あ、しずか先輩。このマニュアル、文字だけじゃなくて図解とか写真がたくさん入ってるんですけど……AIってこういう『画像』の中身まで理解してくれるんですか?」

しずか:「いいところに気づいたわね。そこで重要になるのが『マルチモーダル』っていう概念よ」

舞:「まるち……もーだる?」

しずか:「簡単に言うと、『目(画像)』や『耳(音声)』など、複数の形式の情報を同時に処理できる能力のこと。」

しずか:「昔のAIはテキストしか読めなかったけど、最新のモデルは画像とテキストをセットで理解できるの。だからPDFの中にある図解や写真も、文脈と一緒に処理できるってわけ」

舞:「えっ! じゃあ、文字で書いてない『図の中の注意点』とかも読み取ってくれるってことですか? すごすぎる……!」

しずか:「そう。テキストだけじゃなくて、視覚的な情報も合わせて処理できるから、より人間に近い理解ができるようになるのよ」

(舞は興奮気味に、図解入りの複雑なマニュアルまで全てアップロードしていく)

しずか:「……よし、準備完了ね(ニコリ)」

舞:「 ちょっと待ってください!この変換されたデータは、どこにいったんですか? さっき、ベクトルに変換とか言っていたような…」

しずか:「いい質問よ。RAGシステムで、Embeddingモデルが文章を変換した数値ベクトルは、ただのテキストファイルじゃなくて、『ベクトルデータベース』っていう専門的なストレージに保存されるの。」

しずか:「今回はOpenWebUIのデフォルトで使われている『ChromaDB』ってやつが使われてるわ」

舞:「クローマ……? 何が?」

しずか:「ベクトルDBは普通のDBと違って、『近い意味の数値が並んでいる』っていう検索方式なの。読み込んだ資料から座標に変換されて、地図にピンを打つようなイメージよ。」

しずか:「そして、チャットで入力された質問も地図の座標に変換して、質問のピンが一番近い、資料のピンを探してくる仕組み」

舞:「えっ、地図……? 文章を地図上にプロットしている?」

しずか:「まさにそれ! 『休暇』という単語のベクトルと『夏休み』のベクトルは、数値的にすごく近づくから、同じエリアにピンが打たれるの。」

しずか:「だから、『夏休みの申請期限』って聞かれたら、就業規則PDFから最も近いベクトルを持つページを瞬時に引っ張ってくることが出来るのよ」

舞:「(衝撃を受けた表情)文章が地図になる……これはもう魔法以上のものです。試してみます! ……『会社の夏休み休暇の申請期限はいつまで?』」

AI:「社員就業規則PDFの12ページに基づき、夏季休暇の申請期限は7月15日までです。申請書は社内ポータルの『休暇申請フォーム』から提出してください」

舞:「(ガタッ!と立ち上がる)正確に出た!! しかもページ数まで書いてある!! もはやチートじゃない!!」

しずか:「(微笑みながら)これで『あの資料どこだっけ』っていう社内迷宮から卒業ね」

舞:「最高です! これ、他の人にも教えてあげますよ!」

(第6話につづく)


次回:第6話【8月22日(土)夕方配信予定】


あらすじ:社内マニュアルからRAG構築

舞の日報

社内マニュアルの山で溺れてた私、しずか先輩にマニュアルをローカルAIに丸飲みさせてもらったら質問に秒で答えてくれるように! 夏休み期限もページ付きで即返答。これで資料探しから卒業!チートすぎて笑うしかない。


単語解説

社内ナレッジ

社員が仕事で得た知識や経験、業務のコツやマニュアルなどの情報。

RAG

Retrieval-Augmented Generationの略。AIの頭の中だけじゃなく、専用の辞書を参照させながら回答させる仕組み。社内マニュアルを丸暗記させる。

Embeddingモデル

文章を数値ベクトルに変換する翻訳屋。質問と資料を同じ数値の言葉に直して、似てるか比べる。OpenWebUIで初期設定されている sentence-transformersは英語寄りで、日本語マニュアルだと精度が物足りない。

bge-m3

日本語を含む多言語に強いEmbeddingモデル。RAGの精度を段違いにするための入れ替え先。日本語のマニュアルを探すならこれが推し。

ベクトルDB

Embeddingで変換した数値ベクトルを保存する専用倉庫。意味が近い数値が近くに集まる“地図上のピン探し”をする。質問のピンに一番近い資料のピンを引っ張ってくる。

ChromaDB

OpenWebUIのデフォルトで使われているベクトルDBの一種。数値ベクトルをテキストファイルじゃなくて専門的に保管してくれる倉庫。


関連記事

前の話はこちら→第4話「GPUなしPCでもローカルAIが速く動く!OpenWebUI+Ollamaで推論サーバーを作る」

次の話はこちら→第6話「Zed×ローカルLLM:脳と体が合体したAIエージェントで、手入力業務を自動化!」

この記事の全体像はこちら→ローカルLLM完全ロードマップ


いいなと思ったら応援しよう!

kei 日頃からのご愛読を感謝いたします。