1K Views
August 04, 26
スライド概要
本イベントは、原則毎週火曜日20:00から松尾・岩澤研究室 LLMコミュニティが主催するLLMに関する輪読会 & 実装のオンラインイベントです。
【アーカイブはこちら】
https://youtu.be/bxy_fJ7qct0?si=ySpcm0AYADRgFPiy
【イベント概要】
対象: 普段から論文を読んでいる/普段からLLMの実装を行なっている方々
レベル: ★★★★☆ (Expert)
発表者: 井伊篤彦(異業種データサイエンス研究会®︎代表)
タイトル: 『動いて中身も見えるRAGを作って触ろう 〜 LangChainで基本RAGアプリ開発 〜』
発表カテゴリ: やや実践寄り(ハンズオンやコード解説が多め)
イベント内容:5回シリーズ「RAGの仕組みを理解して改善し続けよう〜 LangChain Family × GradioによるRAGアプリ開発 〜」の1回目です。今回は、基本的なRAGアプリのコードを動かし演習を行うなかで、「RAGの本質」を理解していただくことが本ハンズオンセミナーの狙いです。
扱う論文:ハンズオンのためなし
【松尾研LLMコミュニティについて】
松尾研LLMコミュニティは、「大規模言語モデルについて知って学べるオンライン空間」として、東京大学松尾・岩澤研究室が運営するコミュニティです。現在、学生を中心とした16,000名以上が、原則無償で参加しています。
※ 現在、松尾研LLMコミュニティへの新規参加申込み受付を停止しております。
ーーー
【松尾研大規模言語モデル講座開講のお知らせ】
昨年大好評だった松尾研大規模言語モデル講座を今年も完全オンラインにて開講いたします! 今年は内容をグレードアップし、大規模言語モデル1,2,3の3段階構成でお送りすることになりました。 生成AIの基盤技術である大規模言語モデル(LLM)の原理からアーキテクチャーまで取り扱う実践的な講義となっております。座学のみならず演習を通して、手を動かしながら技術を深く理解し、幅広いトピックを網羅します。
詳細は以下のURLからご覧ください! 大規模言語モデル1:https://x.gd/Dy8yg
※事前に受講申込が必須 ※参加対象者やその他条件がございますので、必ずHPをご確認下さい。
東京大学松尾・研究室が運営する「松尾研LLMコミュニティ」でのイベント資料などを公開します。 ◾️ 松尾研LLMコミュニティとは 松尾研LLMコミュニティは、「大規模言語モデルについて知って学べるオンライン空間」として、東京大学松尾・岩澤研究室が運営するコミュニティです。 現在、学生を中心とした10,000名以上が、原則無償で参加しています。 また、本コミュニティでは様々なイベント等を定期的に開催しております。 是非下記のリンクより参加申し込みをお待ちしております。 ◾️ 松尾研LLMコミュニティの各種リンク ・今後のイベント開催情報/参加申込;https://tr.ee/7d_W4DsImD ・松尾研LLMコミュニティ参加フォーム;https://tr.ee/RyDfuRzS55 ・過去イベントアーカイブ;https://tr.ee/wqdbFJJZ25
(5回シリーズ)RAGの仕組みを理解して改善し続けよう 〜 LangChain Family × GradioによるRAGアプリ開発 〜 第1回:動いて中身も見える RAGを作って触ろう 〜 LangChainで基本RAGアプリ開発 〜 2026/3/24異業種データサイエンス研 究会 ® 代表井伊 篤彦
井伊篤彦 Who am I? 1963年(昭 38年)生まれ。 和 京都大学工学部修士課程(合成化学専攻)終了。大学院で量子化学を副専攻。 前職は一部上場大手日用品製造メーカー研究所。社内で各種製品開発を行うかた わらコンピューターケミストリーを手掛け、化学分子 3D表示ソフト等をC言語を用い て開発。 その後、海外駐在やグローバルな商品開発マネージャーを経て、2017年 (53歳)からAI及びxR (VR, AR, MR) を用いた新規プロジェクトをゼロから立ち上げ 率いた。AIプロジェクトでは、自ら機械学習モデルを開発した。 2019年に FBコミュニティ「異業種データサイエンス研究会 16個のFBコミュニティ を運営してい ®」を立ち上げる。現在 る。 プログラミングスクールで AIプログラミングの指導 をする傍ら、 年間数十回のデータサイエンス・ AI関連の セミナーを実施 している。
ハンズオン用コード(zipファイル) ※その他に HuggingFace のアクセストークンが必要です。 参考: https://qiita.com/so9_Monodzukuri_AI/items/388e9b546ecb2ecfc420 https://drive.google.com/file/d/1E81Od1NOWsMBiAk_XPUOTOch9dPi vOn9/view?usp=drive_link
RAGの仕組みを理解して改善し続けよう LangChain Family × Gradio で作る「作る → 測る → 改善 → 鍛える → 自律化」5回シリーズ 1回目 作る 動いて中身も見える RAGアプリ ・Retriever / Prompt / LLM ・ログ run_id)保存 ・Gradioで体験 ( 2回目 測る Ragas × LangSmith ・検索と生成を分解 ・Faithfulness / Relevance ・悪い例を追跡 3回目 4回目 5回目 鍛える 自律化 chunk & prompt 戦略 / Adv. RAG Embedding比較 & LLM RAG最適化 LangGraph / Agentic RAG 改善する ・chunk_size / overlap ・当たりチャンク探索 ・改善の再現性 ・Embedding設計 ・FTで生成品質向上 ・評価結果を再利用 ・検索 / 推論 / 生成 ・ループで精度改善 ・運用に近い形へ シリーズの狙い: RAGアプリをベースに「作る → 測る → 改善 → モデル側も鍛える → 自律化」 の流れを体験し、継続的な改善サイクルを理解 する。
いきなりですが、RAG(Retrieval-Augmented Generation)を自分の言葉で表現してみてください。
いきなりですが、RAG(Retrieval-Augmented Generation)を自分の言葉で表現してみてください。 Wikipedia(英語版)RAGの定義(和訳) 検索拡張生成(RAG: Retrieval-Augmented Generation)は、大規模言語モデル( LLM)が外部データ ソースから新しい情報を取得 し、それを取り込むことを可能にする技術です。RAGでは、LLMはまず指定さ れた一連の文書を参照 し、その後ユーザーの質問に応答します。これらの文書は、LLMが事前に学習した既 存のトレーニングデータの情報を補完 します。 これにより、 LLMはトレーニングデータには含まれていない、特定分野に特化した情報や最新の情報を活用 できるようになります。例えば、LLMを基盤としたチャットボットが社内の内部データにアクセスしたり、 信頼できる情報源に基づいて回答を生成したりすることが可能になります。
この5回の連続セミナーでやること ● 我々はRAGを単に頭で「理解」するのだけでなく、 「いじって検証」します ● 正しさを覚えるのではなく、RAGの「挙動を観察」します ● 理論だけで終わらせません。実装して、コードを改変して、挙動を確かめます ● うまく動いた理由を考えます、うまくいかなかった理由も考えます ● その中で、RAGの「性質」を一緒に明らかにしていきましょう それを踏まえて、次に「 RAGの本質」に関する私の考えを紹介します。
RAGの基本フロー Embedding ベクトル DB 生データ 検索 Embedding Retriever コンテキスト 回答 質問 図参照: https://www.techfirm.co.jp/blog/vector-database https://g-gen.co.jp/useful/General-tech/llm-ai/ https://blog-ja.allganize.ai/allganize_rag-1/ システム プロンプ ト
RAGの基本フローと要素技術の関係 Embedding ベクトル DB RAG = 検索強化 x ICL x CoT 検索強化 とも解釈できる 検索 生データ Embedding コンテキスト Retriever In-Context L 回答 質問 図参照: https://www.techfirm.co.jp/blog/vector-database https://g-gen.co.jp/useful/General-tech/llm-ai/ https://blog-ja.allganize.ai/allganize_rag-1/ システム プロンプ ト Chain of T
RAGの本質は検索強化ではなく「制約付き生成の設計」 第1回に学んでいただきたい点 ● ● LLMは与えられた情報の範囲( 制約)内でしか推論できない その制約とは、 LLMが「参照できる世界」を決めること ○ 何を渡すか = コンテキスト ○ どう振る舞わせるか = システムプロンプト ● Retrieverはコンテキスト制御装置 ● RAGの改善の本質は ○ 単に検索精度の向上ではなく ○ LLMに「何を渡すか」と「どう振る舞わせるか」を設計すること = 制約付き生成を設計する問題である
RAGの基本フロー Embedding RAGの性能は、単一要素 ベクトル DB の最適化ではなく、要素間 の協調設計で決まる 検索 生データ Embedding 何を渡すか Retriever コンテキスト コンテキスト制御装置 回答 質問 図参照: https://www.techfirm.co.jp/blog/vector-database https://g-gen.co.jp/useful/General-tech/llm-ai/ https://blog-ja.allganize.ai/allganize_rag-1/ どう振る 舞わせる か システム プロンプ ト 制約付き 生成
RAGの基本フローと各回の関係 Embedding ベクトルDB RAGの性能は、単一要素 の最適化ではなく、要素間 の協調設計で決まる 第 3回:チャンク戦 略 検索 生データ 第4回:Emb.比較 Embedding 何を渡すか コンテキスト Retriever 第 4回:LLM FT コンテキスト制御装置 第3回:Adv. RAG 質問 図参照: https://www.techfirm.co.jp/blog/vector-database https://g-gen.co.jp/useful/General-tech/llm-ai/ https://blog-ja.allganize.ai/allganize_rag-1/ どう振る 舞わせるか 制約付き 生成 第 3回:プロンプト戦 略 回答 第 2回:評 価
RAGの仕組みを理解して改善し続けよう LangChain Family × Gradio で作る「作る → 測る → 改善 → 鍛える → 自律化」5回シリーズ 1回目 作る 動いて中身も見える RAGアプリ ・Retriever / Prompt / LLM ・ログ run_id)保存 ・Gradioで体験 ( 2回目 測る Ragas × LangSmith ・検索と生成を分解 ・Faithfulness / Relevance ・悪い例を追跡 3回目 4回目 5回目 鍛える 自律化 chunk & prompt 戦略 / Adv. RAG Embedding比較 & LLM RAG最適化 LangGraph / Agentic RAG 改善する ・chunk_size / overlap ・当たりチャンク探索 ・改善の再現性 ・Embedding設計 ・FTで生成品質向上 ・評価結果を再利用 ・検索 / 推論 / 生成 ・ループで精度改善 ・運用に近い形へ シリーズの狙い: RAGアプリをベースに「作る → 測る → 改善 → モデル側も鍛える → 自律化」 の流れを体験し、継続的な改善サイクルを理解 する。
ハンズオンコード 実行/演習
RAGのテスト問題 質問 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰ですか? 正解 早見沙織 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達也が「ミスター・シ ルバー」と呼ばれるのに対し、どのように呼ばれていますか? ミスター・トーラス 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは以下の3人のうち誰で しょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 柴田美月 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」は誰の魔法ですか? カーラ・シュミットとウィリアム・ マクロード 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を教えて。 身長177cm、体重67kg
基本RAGの結果(2025年セミナー結果) 基本RAGでは十分性能が 出せなかった 商用LLM API 質問 GPT-3.5-turbo GPT-4o-mini GPT-4o 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰です か? 〇 〇 〇 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達 也が「ミスター・シルバー」と呼ばれるのに対し、どのように呼 ばれていますか? ハルシネーション 不正解 〇 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは 以下の3人のうち誰でしょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 ハルシネーション ハルシネーション 〇 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」 は誰の魔法ですか? ハルシネーション 不正解 不正解 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を 教えて。 不正解 不正解 不正解
Hybrid Search 結果(2025年セミナー結果) 最強LLM x 最強RAGの組 み合わせで全問正解 商用LLM API 質問 GPT-3.5-turbo GPT-4o-mini GPT-4o 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰です か? 不可 〇 〇 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達 也が「ミスター・シルバー」と呼ばれるのに対し、どのように呼 ばれていますか? 不可 〇 〇 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは 以下の3人のうち誰でしょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 不可 ハルシネーション 〇 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」 は誰の魔法ですか? 不可 不正解 〇 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を 教えて。 不可 〇 〇
基本RAGのテスト結果 unsloth/Qwen3-8B-4bit量子化 ※chunk_size / chunk_overlap / query_num prompt_simple 300/50/5 ※ prompt_detail 300/50/5 ※ prompt_detail 〇 〇 〇 文脈には該当する情報 は含まれていません。 〇 〇 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは以下の3人のうち 誰でしょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 文脈には該当する情報 は含まれていません。 司波深雪 〇 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」は誰 の魔法ですか? ウィリアム・マクロード の魔法です。 〇 〇 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を教えて。 〇 〇 〇 質問 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰ですか? 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達也が「ミ スター・シルバー」と呼ばれるのに対し、どのように呼ばれていますか? 400/50/7 ※
演習:①と②を実行して、prompt の効果を確認しよう。 ※chunk_size / chunk_overlap / query_num prompt_simple 300/50/5 ※ prompt_detail 300/50/5 ※ prompt_detail 〇 〇 〇 文脈には該当する情報 は含まれていません。 〇 〇 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは以下の3人のうち 誰でしょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 文脈には該当する情報 は含まれていません。 司波深雪 〇 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」は誰 の魔法ですか? ウィリアム・マクロード の魔法です。 〇 〇 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を教えて。 〇 〇 〇 質問 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰ですか? ① 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達也が「ミ スター・シルバー」と呼ばれるのに対し、どのように呼ばれていますか? ② 400/50/7 ※
Prompt の比較
prompt_simple
prompt_simple =
ChatPromptTemplate.from_template('''\以下
の文脈だけを踏まえて日本語で質問に回答して
ください。
文脈に質問に関する情報がないときには「文脈
には該当する情報は含まれていません。
」と回答
してください。
文脈: """
{context}
"""
質問: {question}
''')
prompt_simple は、
回答条件だけを最小限
に指示
prompt_detail
# 共通 system prompt(グローバル変数)
prompt_detail =
ChatPromptTemplate.from_template(r'''\
あなたはRAGアシスタントです。以下の文脈だけを根拠に、
日本語で質問に答えてください。
文脈に書かれていないことは推測しないでください。
ルール:
- 回答は文脈から直接言えることだけを書く。
- 文脈にない固有名詞・数値・具体例を勝手に追加しない。
- 根拠は文脈からそのまま1〜2件抜粋する。
- 同じ根拠を重複して出さない。
- 根拠が見つからない場合だけ「文脈には該当する情報は含
まれていません。」と答える。
- 文脈に矛盾があり断定できない場合だけ「文脈の根拠だけ
では断定できません。」と答える。
質問の読み取りルール:
-「〜以外」「〜を除いて」「〜の他に」がある場合は、その語
を回答から除外する。
- 個数指定(1つ、2つ、3つなど)がある場合は、その数に合
わせる。
- 同じ条件に一致する候補が複数ある場合は、1つに決めつけ
ず、条件に合うものをすべて答える。
列挙・表・一覧のルール:
- まず質問が指している対象カテゴリ・対象行・対象ブロッ
クを特定する。
- 回答は、その対象ブロックの中に書かれている情報だけを使
う。
- 別カテゴリ、別段落、別説明ブロックの候補を混ぜない。
- 対象ブロックの中で、同じ条件に一致する候補が複数ある場
合は漏らさず拾う。
- 表の中で語が改行やセル分割で分かれていても、同じ項目
としてつながる場合はまとめて読む。
答え方:
1. 質問が何を対象にしているかを特定する。
2. 文脈の中から、その対象に対応する1つの列挙・表・説明
ブロックを選ぶ。
3. そのブロックの中だけから候補を拾う。
4. 除外条件や個数指定を反映する。
5. 候補が複数あれば、条件に合うものをすべて答える。
文脈:
"""
{context}
"""
質問:
{question}
出力形式:
- 根拠:
(抜粋1)
(抜粋2)
- 回答:
(最終回答)
''')
prompt_detail は、候補
収集 → 条件照合 → 回答
確定の流れを指示する
CoT (Chain of
Thought) 構造を取って
いる
演習:③を実行して、prompt + chunk戦略の効果を確認しよう。 ※chunk_size / chunk_overlap / query_num prompt_simple 300/50/5 ※ prompt_detail 300/50/5 ※ prompt_detail 〇 〇 〇 文脈には該当する情報 は含まれていません。 〇 〇 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは以下の3人のうち 誰でしょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 文脈には該当する情報 は含まれていません。 司波深雪 〇 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」は誰 の魔法ですか? ウィリアム・マクロード の魔法です。 〇 〇 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を教えて。 〇 〇 〇 質問 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰ですか? 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達也が「ミ スター・シルバー」と呼ばれるのに対し、どのように呼ばれていますか? ③ 400/50/7 ※
基本RAGのテスト結果 unsloth/Qwen3-8B-4bit量子化 質問 「魔法科高校の劣等生」のキャラクター司波深雪の声優は誰ですか? 「魔法科高校の劣等生」のキャラクター牛山欣治は社内で司波達也が「ミ スター・シルバー」と呼ばれるのに対し、どのように呼ばれていますか? 量産機のザクでも 「魔法科高校の劣等生」の中で「水晶眼」を持つキャラクターは以下の3人のうち 誰でしょうか? 1. 司波深雪 2. 千葉エリカ 3. 柴田美月 最高性能のガンダム と対等に戦える! 「魔法科高校の劣等生」に出てくる戦略級魔法「オゾンサークル」は誰 の魔法ですか? 「魔法科高校の劣等生」のキャラクター九重八雲の身長と体重を教えて。 ※chunk_size / chunk_overlap / query_num prompt_simple 300/50/5 ※ prompt_detail 300/50/5 ※ prompt_detail 〇 〇 〇 文脈には該当する情報 第3回:プロンプト戦略 は含まれていません。 〇 第3回:プロンプト戦略 文脈には該当する情報 は含まれていません。 〇 〇 第3回:チャンク戦略 司波深雪 ウィリアム・マクロード の魔法です。 第3回:プロンプト戦略 400/50/7 ※ 〇 〇 〇 〇 〇
単体の LLMで比較すると、4B や 8Bの量子化モデルは ChatGPTやGeminiのような巨大モデルには敵いません。 しかし RAGを使いこなすと、特定の用途では 大型 LLMに 迫る性能を出せる可能性があります。つまり RAGは、LLM の性能ブースター とも言える仕組み。
そして・・・2回目以降は、テキストファ イルだけでなく PDF、ワード、エクセル、PPTファイ ルも読み込めるアプリと LLM as judgeを用いた自動評価アプリ を 「いじって」もらいます!
2回目以降のハンズオンで実行するアプリ群 ZIPファイル 3回目:一括RAG回答アプリ ● Chunk 戦略 選択 ● Prompt 戦略 選択 ● アドバンス RAG 選択 機能実装 CSVファイル 2回目:混在ファイル形式対応 回答ログ一括自動評価アプリ ● ルールベース評価 ● Ragas LLM as judge 評価 ● LangSmith trace 機能実装
APPENDIX
Unsloth:LLM / VLM 高速・省メモリ化 ライブラリ https://github.com/unslothai/unsloth 特徴 ● 高速推論・低メモリ( 4bit / 8bit 量子化対応) :推論約2倍、メモリ使用量約 70%削減 ● LoRA / QLoRA による効率的学習 ● Hugging Face / LangChain と互換 対応モデル モデル Hugging VRA Unsloth VRAM 削 長いコンテキ M 速度 減 スト 2x >75% 13 倍長い 1x 2x >70% 12 倍長い 1x Face + ● LLaMA系・Mistral・Qwen・Mixtral・ Vision-Language Models 等 主な用途 ● 手元GPUでの大規模モデル実行 ● 省メモリ本番推論 ● ドメイン特化モデルの短期学習 Llama 3.3 (70B) Llama 3.1 (8B) 80 GB 80 GB ベンチマーク: FA2* * FA2: Flash Attention 2 https://qiita.com/yonaka15/items/b1f3b3133614a063c5c5
Chroma DB は何をしているのか? APPENDIX ベクトルを保存し、意味が近い文書チャンクを返す保管庫 Chroma DB は 文書チャンクとそのベクトルを保持する ベクトル DB。 質問も Embedding し近いベクトルを高速検索する。 返すのは 答えではなくLLM に渡す 関連文脈候補。 チャンク化 → Embedding → 保存 → 類似検索 セミナーコードでは、 build_vector_index() 関数内で collection.add(...) を用いて文書チャンクと埋め込みベクトルを登 録。検索時には embed_query() 関数で質問文をベクトル化し、そ の結果を使って collection.query(...) を実行。 RAGでの Chroma DB の仕事 = 「意味が近い文書片を、 素早く取り出せる形で保持すること」
RAGの仕組みを理解して改善し続けよう 〜 LangChain Family × GradioによるRAGアプリ開発 〜 第1回:動いて中身も見える RAGを作って触ろう 〜 LangChainで基本RAGアプリ開発 〜 第2回: RAGを測るモノサシを作ろう 〜 Ragas × LangSmithでRAG評価アプリ開発 〜 第3回: RAGを最適化しよう 〜 チャンクとプロンプトの戦略+アドバンス RAGアプリ開発 〜 第4回: RAGの頭脳を鍛えよう 〜 Embeddingモデル選定とLLMファインチューニング 〜 第5回:進化系 RAGに挑戦 〜 LangGraphでAgentic RAG開発 〜