Site Icon古老と生成AI
📅 2026-09-12

こんにちは。AI共創ブログのナビゲーターです。

B126で構築したクリーンな knowledge/ フォルダを、いよいよAIが検索・抽出できる形へと加工します。本日は本番アプリ(Lab_gr.py)へ組み込む前に、RAGの心臓部となる「抽出と検索の配管(rag_pipeline.py)」を単体でテスト構築しました。


✍️ 電脳古老のメモ: ベクトルDBに飛び込む前の「地固め」っちゅうわけやな。 世間の解説は、いっつも派手なVector Database(Pineconeやら Chromaやら)の話ばっかりするけどな、 actualに動いとるSaaSの現場で一番大事なんは、 「AIに余計なもんを食わせんように、食材を細かく刻んでから渡す」 ことなんや。 今回老生がやったんは、その「刻む作業(Chunking)」と「検索の配管(RAG pipeline)」を、DBなしのPythonだけで単体テストした話や。



🎬 【動画デモ】知識の切り分けと検索配管の最小実装

まずは、NotebookLMによって自動再構成された解説スライド動画をご覧ください。

🎥 Vibe Coding実践連載 第2部5話

🤖 AIナビゲーション:動画のポイント Markdownを「見出し単位(Chunk)」で分割し、キーワード検索とハルシネーション対策(Safety Policyへの明示的分岐)を実装した最小RAGパイプラインの動きを可視化。



1. なぜ「Chunk(チャンク)化」が必要なのか?

AIに資料を丸呑みさせないための第一歩が、文書を意味のある小さな塊(Chunk)に切り分ける作業です。


2. 最小RAGパイプラインの処理フロー(改修版)

今回実装した rag_pipeline.py は、複雑な外部ベクトルDB(Pineconeなど)を使わず、Python単体で完結する最小構成の検索配管です。

graph TD
    A[ユーザーの質問 Query] --> B{医療危険キーワード検知?}

    subgraph ナレッジ前処理
    D[knowledge/ フォルダ] --> E[Markdown読み込み]
    E --> F[YAMLヘッダー除去]
    F --> G[見出し ## 単位で分割]
    G --> H[(Chunk リスト)]
    end

    B -- Yes --> K[Safety PolicyのChunkへ強制分岐]
    B -- No --> I{キーワード類似度スコアリング}
    H --> I
    I --> M[スコア順にソート]

    K --> N[抽出完了]
    M --> N[抽出完了]

    N --> O{Chunkは0件か?}
    O -- Yes --> P[知らん!」回答拒否システム作動]
    O -- No --> Q[LLMのプロンプトへ注入PASS判定]

RAGの配管の動き

RAGの最小実装フロー


実装とテストのポイント

  1. Safety Policyへの明示的分岐: スコアの優遇ではなく、危険キーワード(「薬」「治療」など)を検知した時点で、通常検索をバイパスし強制的に安全方針を抽出します。

  2. 「知らん!」の具現化とPASS/FAIL判定: 未知の質問(「火星で飼う犬の専用フード」)に対し、無言で終了するのではなく「回答根拠がありません」と出力させます。これをPASS/FAIL判定付きの自動テストとして実装しました。

  3. 簡易検索としての限界: 本実装では空白区切りのキーワード検索を採用しています。「犬が嘔吐したので…」のような自然文検索への対応は、後続の高度化フェーズで扱います。



3. 実開発の罠:ディレクトリ階層のズレ

順調に見えた配管工事ですが、最初のテスト実行では「抽出されたChunk:0個」という結果に。 原因は、ナレッジフォルダを環境変数用の .streamlit/knowledge/ に配置してしまい、検索スクリプトの探査パス(lab_gr/knowledge/)とズレていたことでした。金庫(Secrets)と食材(ナレッジ)の置き場所を明確に分離し、パスを修正することで無事に配管が通りました。

✍️ 電脳古老のメモ: いきなり本番のStreamlitアプリ(UI)に組み込まず、まずは裏口で rag_pipeline.py ちゅう単体の配管だけを作ってテストする。これがVibe Codingで事故らんための鉄則や。 UI側のエラーなのか、検索配管の詰まりなのか分からんようになると、ドツボにハマるからな。 それにしても、ディレクトリのパス指定ミスはAI時代になっても変わらん「プログラマーあるある」やな。食材は金庫(.streamlit)から出して、ちゃんと厨房(直下)に並べんとな!


📻 【AIラジオ】音声で聴く「チャンク化と検索パイプラインの最小実装」

NotebookLMによって生成された、本記事の深掘り対話音声(Podcast)です。作業のお供にどうぞ。

🎧 AIラジオ(Vibe Coding実践連載 第2部第5話)

---

次回予告:

次回(B128)は、合否テストをPASSしたこの頑強な配管を、いよいよ本番のUIへ接続していきます!

(執筆協力:ChatGPT+Gemini+NotebookLM / 編集・監修:電脳古老)

📚 連載:Vibe Coding実践連載 第2部

💬 電脳古老&変AIへのコメント

記事の感想・質問・雑談をどうぞ(200文字くらいまで推奨)

まだコメントはありません。一番乗りで古老とAIに話しかけよう!

※入力した内容はAI(Gemini)に送信され、自動返信が生成されます。個人情報は入力しないでください。