序章
前編では、PDFからテキストを取り出して、Embeddingを作成し、ベクトルDB(Qdrant)に保存するところまで進めました。 ここまでできていれば、「関連する内容を探す」準備は整っています。 後編では、この検索結果をうまく使って質問に答える機能(RAG)を完成させていきます。LangChainは使わず、やさしい実装で一歩ずつ組み立てます。
RAG(Retrieval-Augmented Generation) 検索(Retrieval)で見つけた文脈をプロンプトに加えて(Augmented)、LLMに答えを作ってもらう(Generation)手法です。
完成イメージ
[質問] → (Embedding化)
↓
[Qdrantで検索] → 類似チャンク(文脈)
↓
(文脈をプロンプトへ)
↓
[LLMが回答生成]
↓
[回答] と [参照した文脈] を画面に表示
- 検索で見つけた「関連チャンク」をプロンプトに入れて、ChatGPTに答えてもらいます。
- 回答と一緒に参照した文脈(根拠)も表示して、納得感を大切にします。
この後編でできるようになること
- ✅ RAGの完成:PDFに基づいて質問に答えるアプリを仕上げる
- ✅ 根拠表示:回答と一緒に参照チャンクも見られるUI
- ✅ UIの改善:見やすく、使いやすい回答画面
- ✅ 共有対応(任意):Qdrant CloudでベクトルDBをクラウド化
事前準備(前編の確認)
- 次のライブラリが導入済み:
streamlit
,PyPDF2
,openai
,qdrant-client
,tiktoken
- 前編のアプリで、PDFアップロード → テキスト抽出 → チャンク分割 → Embedding作成 → Qdrant保存 ができる
- 「Ask My PDF(s)」で類似チャンクの検索が動く
- OpenAI APIキーを設定済み(サイドバーから入力)
この状態であれば、後編の実装にそのまま進めます。
目次(この後の流れ)
レッスン1(いまここ):序章と目次
- 前編の振り返り
- RAGの全体像
- 目標と進め方の確認
レッスン2:検索結果を“答え”につなぐ(最小実装)
- 類似チャンクをまとめてプロンプトを組み立てる
- ChatGPTを呼び出して回答を生成する
- まずは動く最小構成(MVP)を完成
レッスン3:UIを整える(回答+根拠の見やすさ)
- 回答表示の体裁を整える
- 参照チャンク(スコア付き)を折りたたみで表示
- 「分からないときは分からない」と伝えるプロンプト方針
レッスン4:精度のチューニング
top_k
など基本パラメータの考え方- PDFが大きい/薄い場合の扱い
- うまくいかないときのチェックリスト
レッスン5(応用):Qdrant Cloudで共有
- ローカルのQdrantからクラウドQdrantへ切り替え
- 環境変数でのAPIキー管理
- チームで同じ知識ベースを使う
レッスン6:まとめと次の一歩
- 実装の振り返り
- 会話履歴を生かした対話型QAへの拡張
- LangChain版との違いと使い分け
ミニ用語集(やさしい言い換え)
- Embedding:文章の意味を数字の並び(ベクトル)にしたもの
- ベクトルDB(Qdrant):似ている文章をすばやく見つけるための専用データベース
- チャンク:長い文章を扱いやすく分けた小さな断片
- RAG:検索した文脈を足がかりに、LLMが答えを作る方法
大切にする方針
- 無理に答えを作らない:不明なときは「分かりません」と返す
- 根拠を添える:回答と一緒に参照チャンクを表示
- 小さく作って試す:まずは最小構成で体験を完成させる
- 安全に運用:APIキーなどは環境変数で管理
次回予告(レッスン2)
既存の search_similar_chunks()
を活かしながら、
プロンプトの組み立て → ChatGPT呼び出し → 回答+参照表示 までをつなげます。
ここを越えると、「検索ツール」から「質問に答えるアプリ」へしっかりと形になります。