全てのピースを組み立てよう!

これまでの三つの章で、企業レベルのAIを構築するための三つのコアコンポーネントを準備しました:

  1. 第一章:ChatGPTの脳 (質問を理解し回答を生成する役割)
  2. 第二章:Embeddingとベクトルデータベース (テキストを座標に変換し、精密な意味検索を提供)
  3. 第三章:ドキュメントスライサー (分厚いPDFを整然としたテキストブロックに分割)

今から、LangChainが最も誇るコア技術である**Chain(チェーン)**を使用します。 その名の通り、LangChainはこれら三つの無関係だったコンポーネントを、目に見えない鎖で「繋ぎ」ます。この生産ラインが動き始めた瞬間、あなた専属のRAG企業カスタマーサービスボットが誕生するのです!


弾丸を飛ばせ:RAGシステムの動作全景

このチェーンが組み上がった後、もし顧客が「スピードスター3000の保証期間はどれくらいですか?」と質問したら、この鎖は自動的に以下の四つのステップをトリガーします:

  1. ユーザー質問:「保証期間は?」
  2. 図書館検索(Retriever):鎖がこの質問を「ベクトルデータベース」に投げます。データベースは迅速に座標を計算し、3つの最も関連性の高い「メモ(ドキュメント断片)」を見つけ出します。
  3. 試験用紙整理(Prompt Template):鎖はこの3つのメモとユーザーの元の質問を、きれいな「試験用紙テンプレート」に詰め込み、AIに厳しく警告します:「メモだけを参考に回答しなさい!」
  4. 脳が回答(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スクリプトを書いてください:

  1. まずOpenAIのEmbeddingsとChatOpenAI大規模言語モデルをインポート。
  2. LangChainのChromaベクトルデータベース(from langchain_community.vectorstores import Chroma)を使用し、上記の2文をベクトル化してローカルメモリに保存(Chroma.from_texts)。
  3. データベースを検索器(Retriever)に変換。
  4. Prompt Templateを作成し、AIが提供されたcontextのみに基づいて回答するよう指示。
  5. LCEL構文(|記号)を使用してRetriever、Prompt、LLMとOutputParserをrag_chainとして連結。
  6. 最後に、このchainを使用して質問に回答:「マーキュリー冷蔵庫の保証は何年ですか?スピードスター扇風機は?」
  7. 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)**について探求します!

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!