全てのピースを組み立てよう!
これまでの三つの章で、企業レベルのAIを構築するための三つのコアコンポーネントを準備しました:
- 第一章:ChatGPTの脳 (質問を理解し回答を生成する役割)
- 第二章:Embeddingとベクトルデータベース (テキストを座標に変換し、精密な意味検索を提供)
- 第三章:ドキュメントスライサー (分厚いPDFを整然としたテキストブロックに分割)
今から、LangChainが最も誇るコア技術である**Chain(チェーン)**を使用します。 その名の通り、LangChainはこれら三つの無関係だったコンポーネントを、目に見えない鎖で「繋ぎ」ます。この生産ラインが動き始めた瞬間、あなた専属のRAG企業カスタマーサービスボットが誕生するのです!
弾丸を飛ばせ:RAGシステムの動作全景
このチェーンが組み上がった後、もし顧客が「スピードスター3000の保証期間はどれくらいですか?」と質問したら、この鎖は自動的に以下の四つのステップをトリガーします:
- ユーザー質問:「保証期間は?」
- 図書館検索(Retriever):鎖がこの質問を「ベクトルデータベース」に投げます。データベースは迅速に座標を計算し、3つの最も関連性の高い「メモ(ドキュメント断片)」を見つけ出します。
- 試験用紙整理(Prompt Template):鎖はこの3つのメモとユーザーの元の質問を、きれいな「試験用紙テンプレート」に詰め込み、AIに厳しく警告します:「メモだけを参考に回答しなさい!」
- 脳が回答(LLM):ChatGPTは試験用紙を受け取り、メモを見て回答します:「この扇風機の保証期間は10年です!」最後に答えを顧客に表示します。
LangChainでは、これら4つのステップをつなぐ文法を**LCEL(LangChain Expression Language)**と呼びます。これは非常にクールな記号|(パイプ記号)を使用し、「前の出力を後のマシンに渡す」ことを表します。
Vibe Prompt実戦:究極の融合スクリプト
今からAIに、完全で実行可能なRAGスクリプトを書いてもらいます。初心者が自分のコンピュータで直接実行できるように、軽量なオープンソースデータベースChromaを使用します。これはクラウドアカウントの登録を必要としません。
【究極RAGチェーン組み合わせPrompt】 PythonとLangChainを使用して簡単なRAGテストシステムを開発しています。 手元に会社の製品に関する「ダミーデータ文字列」があります:
docs = ["スピードスター3000型扇風機、超強力な風力と静音性が特徴、モーターは独自の10年保証付き。", "マーキュリーブランドのスマート冷蔵庫、AI温度制御機能搭載、本体保証1年。"]以下のフローで完全なPythonスクリプトを書いてください:
- まずOpenAIのEmbeddingsとChatOpenAI大規模言語モデルをインポート。
- LangChainの
Chromaベクトルデータベース(from langchain_community.vectorstores import Chroma)を使用し、上記の2文をベクトル化してローカルメモリに保存(Chroma.from_texts)。- データベースを検索器(Retriever)に変換。
- Prompt Templateを作成し、AIが提供されたcontextのみに基づいて回答するよう指示。
- LCEL構文(
|記号)を使用してRetriever、Prompt、LLMとOutputParserをrag_chainとして連結。- 最後に、このchainを使用して質問に回答:「マーキュリー冷蔵庫の保証は何年ですか?スピードスター扇風機は?」
- LangChainを全く学んだことがない人でも各ステップを理解できるよう、詳細な日本語コメントを追加。
AIが生成したRAG究極パッケージ:
import os
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# API Keyを準備(実戦では.envを使用)
os.environ["OPENAI_API_KEY"] = "sk-あなたのパスワード"
def build_rag_system():
# ==========================================
# ステップ1:ベクトルデータベース(図書館)を作成
# ==========================================
docs = [
"スピードスター3000型扇風機、超強力な風力と静音性が特徴、モーターは独自の10年保証付き。",
"マーキュリーブランドのスマート冷蔵庫、AI温度制御機能搭載、本体保証1年。"
]
print("会社の機密文書をChromaベクトルデータベースに保存中...")
# テキストをOpenAIのEmbeddingで座標に変換し、Chromaメモリデータベースに保存
vectorstore = Chroma.from_texts(texts=docs, embedding=OpenAIEmbeddings())
# データベースを「検索器(Retriever)」に設定、質問がある度に最も関連性の高い2つのメモを探す
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
# ==========================================
# ステップ2:試験用紙テンプレート(Prompt Template)を設計
# ==========================================
# AIにメモだけを見て回答するよう厳しく警告
template = """
あなたはプロのカスタマーサービス担当者です。以下の参考資料「だけ」を基に質問に答えてください。
資料に答えが見つからない場合、「わかりません」と正直に答え、決して自分で答えを作らないでください。
【参考資料(メモ)】:
{context}
【顧客の質問】:
{question}
【あなたのプロフェッショナルな回答】:
"""
custom_prompt = PromptTemplate.from_template(template)
# ==========================================
# ステップ3:ChatGPTの脳と出力フィルター��準備
# ==========================================
# temperature=0はAIに冷静沈着で、創造性を発揮せずに回答させる
llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0)
output_parser = StrOutputParser() # 最終的なテキスト回答のみを抽出
# ==========================================
# ステップ4:LCELの魔法!全てを「繋ぐ」(The Chain)
# ==========================================
# このチェーンのロジック:
# 1. ユーザーの質問を取得し、retrieverに渡してcontext(メモ)を取得
# 2. メモと質問をcustom_prompt試験用紙に詰め込む
# 3. 試験用紙をChatGPTの脳(llm)に渡す
# 4. 脳が考え出した答えを純粋なテキストにフィルタリング(output_parser)
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| custom_prompt
| llm
| output_parser
)
# ==========================================
# ステップ5:実戦テスト開始!
# ==========================================
question = "マーキュリー冷蔵庫の保証は何年ですか?スピードスター扇風機は?"
print(f"\n🙋♂️ 顧客の質問:{question}")
print("🤖 AIカスタマーサービスが内部文書を参照中...\n")
# invoke()を呼び出すと、この鎖が瞬時に上記4ステップを実行!
answer = rag_chain.invoke(question)
print(f"✅ AI回答:\n{answer}")
# システムを実行
build_rag_system()
ターミナルに以下のように表示されたら:
✅ AI回答:マーキュリーブランドのスマート冷蔵庫の本体保証は1年です。スピードスター3000型扇風機のモーターは独自の10年保証が付いています。
おめでとうございます!!あなたは価値数万円の企業レベルのAIカスタマーサービスのプロトタイプを作成することに成功しました! これはでたらめを言わず、データベース内の機密メモを完璧に見つけ出し、非常にプロフェッショナルな口調で顧客の質問に答えました。
実際のビジネス世界では、docsを前章でPyPDFLoaderを使ってスライスした数千の断片(Chunks)に置き換えるだけで、このシステムは会社の全ての規程制度に答えられる「スーパー知識ベース」に早変わりします。
最終章では、RAGシステムの最後のピースであり、より人間らしくする鍵となる**記憶力(Memory)と思考エージェント(Agents)**について探求します!