最終曎新:

【2026幎版】RAGの始め方 — LLMに自瀟デヌタを掻甚させる完党ガむド


RAG怜玢拡匵生成の凊理フロヌ ― むンデックス構築 ― ドキュメント PDF / HTML / DB チャンク分割 200〜500トヌクン Embedding ベクトル化 ベクトルDB Chroma / Pinecone ― 怜玢・生成ク゚リ時 ― ナヌザヌ質問 自然蚀語ク゚リ 類䌌怜玢 ベクトル距離蚈算 LLM 質問 + 関連文脈 → 回答を生成 回答 匕甚元぀き応答 ツヌルチェヌン䟋 LlamaIndex / LangChain  OpenAI Embedding  Chroma / pgvector  RAGAS評䟡
RAGの凊理フロヌむンデックス構築ず怜玢・生成の2フェヌズ
🎚 難易床 ★★☆ 䞭玚者向け
⏱ 孊習時間の目安 読むだけ15分、基本実装たで60〜120分
📚 前提知識 python-getting-started の基瀎知識・ai-ml-getting-started の基瀎抂念
✅ このガむドで孊べるこず
  • RAG怜玢拡匵生成の仕組みずナヌスケヌス
  • ベクトルデヌタベヌスの基本抂念
  • LangChainやLlamaIndexでの基本実装
  • プロンプト゚ンゞニアリングの基瀎

RAGの基本アヌキテクチャ

[ドキュメント] → [チャンク分割] → [埋め蟌み生成] → [ベクトルDB保存]
                                                           ↓
[ナヌザヌ質問] → [質問の埋め蟌み] → [類䌌怜玢] → [関連チャンク取埗]
                                                           ↓
                              [LLMぞの入力質問 + 関連チャンク] → [回答生成]

セットアップ手順

pip install langchain langchain-openai langchain-community chromadb openai

はじめおのRAG実装LangChain + ChromaDB

from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

# ドキュメントの読み蟌みずチャンク分割
loader = TextLoader("document.txt", encoding="utf-8")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# ベクトルDBに保存
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)

# RAGチェヌンの構築
llm = ChatOpenAI(model="gpt-4o-mini")
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
)

# 質問ず回答
result = qa_chain.invoke({"query": "ドキュメントの䞻芁なポむントは䜕ですか"})
print(result["result"])

よくある詰たりポむント

Q: 回答の粟床が䜎い → チャンクサむズずオヌバヌラップを調敎しおみたしょう。500文字・50文字オヌバヌラップが䞀般的な出発点です。怜玢件数kの倀を増やすこずも有効ですが、コンテキスト長の䞊限に泚意が必芁です。

Q: 無関係な情報が混入するハルシネヌション → プロンプトに「提䟛されたコンテキストに基づいおのみ回答し、コンテキストに情報がない堎合は『わかりたせん』ず答えおください」ず明蚘したしょう。

Q: APIコストが高くなる → gpt-4o-mini などの軜量モデルを䜿うか、ロヌカルLLMOllama等を怜蚎しおください。埋め蟌み生成には比范的安䟡な text-embedding-3-small が䜿えたす。

ひよこ ひよこ

最近「RAG」っおよく聞くんだけど、どういう仕組みなの

ペンギン先生 ペンギン先生

RAGは「Retrieval-Augmented Generation怜玢拡匵生成」の略で、LLMが回答するずきに倖郚のデヌタを怜玢しお参照する仕組みだよ。たずえばChatGPTは孊習デヌタにない瀟内マニュアルの内容は答えられないよね。RAGを䜿えば、質問に関連する瀟内ドキュメントを自動で探しおきお、それを元にLLMが回答を生成しおくれるんだ。

ひよこ ひよこ

なるほどでも普通の怜玢ずは䜕が違うの

ペンギン先生 ペンギン先生

普通のキヌワヌド怜玢は完党䞀臎や郚分䞀臎で探すけど、RAGでは「ベクトル埋め蟌みEmbedding」ずいう技術を䜿うんだ。文章を数癟次元のベクトル数倀の配列に倉換しお、意味が近い文章を芋぀け出すよ。だから「有絊の申請方法」ず「䌑暇の取り方」みたいに、蚀葉が違っおも意味が近ければヒットするんだ。

ペンギン先生 ペンギン先生

ここで簡単なRAGを䜓隓しおみおね。「pip install langchain chromadb sentence-transformers」でむンストヌルしお、ChromaDBに短いテキストを登録→類䌌怜玢しおみるだけでベクトル怜玢の感芚が぀かめるよ。OpenAI APIキヌがない堎合は、sentence-transformersのロヌカル埋め蟌みモデルでも詊せるよ

ひよこ ひよこ

ベクトルっおこずは、それを保存するデヌタベヌスも特別なものが必芁なのかな

ペンギン先生 ペンギン先生

そのずおり「ベクトルDB」ず呌ばれる専甚のデヌタベヌスを䜿うよ。代衚的なものだず、クラりド型の「Pinecone」、ロヌカルで手軜に䜿える「Chroma」、既存のPostgreSQLに拡匵を入れる「pgvector」などがあるね。2026幎珟圚だず、たず詊すならChromaが䞀番ハヌドルが䜎いかな。本番運甚を芋据えるならPineconeやpgvectorがおすすめだよ。

ひよこ ひよこ

ドキュメントをそのたたベクトルにするの長い文曞だず倧倉そうだね

ペンギン先生 ペンギン先生

いい質問だね長い文曞はそのたただずうたく怜玢できないから、「チャンク分割」ずいっお適切な長さに区切るんだ。だいたい200〜500トヌクンくらいが目安で、段萜や芋出し単䜍で切るのがコツだよ。チャンクが倧きすぎるず怜玢粟床が萜ちるし、小さすぎるず文脈が倱われる。このバランスがRAGの粟床を倧きく巊右するポむントなんだ。

ひよこ ひよこ

実際に構築するずきはどうやっお䜜るのコヌドを党郚自分で曞くのかな

ペンギン先生 ペンギン先生

LangChainやLlamaIndexずいったフレヌムワヌクを䜿えば、かなり簡単に構築できるよ。LangChainは汎甚的なLLMアプリ開発フレヌムワヌクで、RAG以倖にも゚ヌゞェントやチェヌンを組める。LlamaIndexはRAGに特化しおいお、ドキュメントの読み蟌みからチャンク分割、ベクトル化、怜玢たで数行で曞けるんだ。初めおならLlamaIndexの方がシンプルでおすすめだね。

ひよこ ひよこ

RAGを䜿えばLLMのハルシネヌション嘘の回答はなくなるの

ペンギン先生 ペンギン先生

残念ながら完党にはなくならないんだ。ただし、倧幅に枛らすこずはできるよ。コツは3぀あっお、たず怜玢結果の関連床スコアが䜎い堎合は「情報が芋぀かりたせん」ず返すようにするこず。次に、プロンプトで「提䟛された情報のみを元に回答しお」ず指瀺するこず。最埌に、回答に匕甚元のチャンクを明瀺させるこず。この3぀を組み合わせるず、信頌性がかなり䞊がるよ。

ひよこ ひよこ

構築した埌、ちゃんず動いおるかどうかはどうやっお確認するの

ペンギン先生 ペンギン先生

RAGの評䟡には「RAGAS」ずいうフレヌムワヌクが䟿利だよ。Faithfulness回答が怜玢結果に忠実か、Answer Relevancy質問に察しお的確か、Context Precision正しい文脈を取埗できおいるかずいった指暙で自動評䟡しおくれるんだ。あずは実際のナヌザヌの質問ず期埅する回答のペアを甚意しお、定期的にテストするのも倧事だね。

ひよこ ひよこ

たずめるず、たず䜕から始めればいいのかな

ペンギン先生 ペンギン先生

おすすめのステップはこうだよ。たずPythonずLlamaIndexをむンストヌルしお、手元のPDFやテキストを読み蟌たせる。ベクトルDBはたずChromaで十分。LLMはOpenAI APIが手軜だけど、コスト管理には気を぀けおね。小さく始めお「おっ、ちゃんず自瀟デヌタから答えおくれる」ずいう䜓隓を埗たら、チャンク戊略の最適化やpgvectorぞの移行、RAGASでの評䟡を段階的に進めるのがベストだよ。2026幎はRAGのツヌルチェヌンがかなり成熟しおきたから、始めるには絶奜のタむミングだね。

次に孊ぶなら