以下の内容はhttps://cysec148.hatenablog.com/entry/2025/04/23/075524より取得しました。


第68回:ベクトルストア(Vector Store)でRAGを実装

Hello there, ('ω')ノ

📚 はじめに:RAGって何の略?

RAG(Retrieval-Augmented Generation)とは、
大規模言語モデル(LLM)の回答精度を高めるために、
検索(Retrieval)と生成(Generation)を組み合わせるアプローチです。

RAG = 検索で知識を補って → LLMで自然文を生成する

従来のLLMは、トレーニング済みの知識に依存していたため、

  • 📅 古い情報しか知らない(2023年以降のニュースに弱い)
  • 📄 自社資料・ナレッジには対応していない
  • 🤔 事実でない情報(ハルシネーション)を出すことがある

…という課題がありました。

それを解決するのが、ベクトル検索 × LLMのRAG構成です。


🔎 1. ベクトルストアとは?(ざっくり)


✅ テキストを「意味のベクトル」で管理するデータベース

通常の検索(キーワード一致)とは異なり、
ベクトルストアは 「意味的に近い文章」を探す ことができます。

📐 処理イメージ:

文章 → ベクトル化(Embedding) → ベクトルDBに登録
ユーザーの質問 → ベクトル化 → 意味が近い文を検索 → LLMに渡す

🧩 ベクトルストアの代表的ライブラリ

ライブラリ名 特徴
FAISS Facebook製。高速・ローカル実行向け
Chroma Python製。LangChainとの統合が簡単
Pinecone クラウド型。高性能・スケーラブル
Weaviate クラウド&オンプレ両対応。メタデータ検索が強力

🛠️ 2. RAG構成の流れ(シンプル図解)


graph LR
A[ユーザーの質問] --> B[ベクトル化]
B --> C[ベクトルストアで検索]
C --> D[関連文書を取得]
D --> E[LLMに渡して回答生成]
  • LLMは「検索された情報+ユーザーの質問」をもとに自然文で回答
  • ベクトル検索が“社内ナレッジ”や“最新情報”の役割を担う

🧪 3. LangChainでのRAG構築(基本コード)


✅ 必要ライブラリ

pip install langchain chromadb tiktoken openai

✅ ステップ①:文書をベクトル化してChromaDBに登録

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import TextLoader

# 1. テキストを読み込む(例:社内マニュアル)
loader = TextLoader("company_guide.txt")
docs = loader.load()

# 2. ベクトル化(Embedding)
embedding = OpenAIEmbeddings()

# 3. ChromaDBに登録
db = Chroma.from_documents(docs, embedding, persist_directory="./rag_db")
db.persist()

✅ ステップ②:Retrieverとして検索してLLMに渡す

from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

# ベクトルDBからRetrieverを作成
retriever = db.as_retriever()

# RAG構成(Retriever + LLM)
llm = ChatOpenAI(model_name="gpt-3.5-turbo")
rag_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)

# 実行
query = "社内で副業は許可されていますか?"
result = rag_chain.run(query)

print(result)

💡 4. ベクトルストアの応用ポイント


工夫ポイント 内容
📄 分割サイズの調整 文章を分割する際、1チャンク=500字程度が推奨
🧠 Embeddingモデルの選定 OpenAI(精度高い) or InstructorEmbedding(日本語特化)など
🔍 検索件数(k)のチューニング retriever.search_kwargs={"k": 3} でヒット数を制御
🗃️ メタデータ活用 日付・カテゴリ・文書IDなどを持たせてフィルター検索も可能

📚 5. RAGでできること(業務別ユースケース)


業務分野 活用例
💬 カスタマーサポート 社内FAQやマニュアルをベースに、自然な回答を自動生成
📄 文書検索 複数ファイルから意味的に近い情報をピックアップ(例:契約書・規定集)
🏢 社内ナレッジ活用 人事・福利厚生・制度について、質問に対して「出典つきの答え」を返す
🎓 教育・研修 教材から関連情報を抜き出し、自動でまとめ・クイズ生成など

🛡️ 6. 注意点と対策


リスク 対応策
❌ ハルシネーション(嘘回答) 検索結果を必ずプロンプト内に明示し、「出典に基づいて回答」と明記
🧪 関係ない文書の混入 ベクトル化前に文章の質・構造を見直す。内容ごとに分割や分類を行う
🔓 セキュリティ・情報漏えい EmbeddingやベクトルDBの取り扱いにアクセス制限を設ける。社外公開データは除外する

🎁 まとめ:RAGは「LLMに最新知識を与える最強アーキテクチャ」

✅ ベクトルストアを活用することで、
 LLMの知識を“自分専用にカスタマイズ”できます!

✅ LangChain + Chroma なら、
 数行のコードで 検索付きの高性能QAシステム を構築可能。

✅ 業務への応用も多彩で、
 社内ヘルプボット・FAQ検索・文書要約などすぐ使えるAI化が実現できます!

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/04/23/075524より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14