講義復習Botの
土台を作ろう

第14回 アルゴリズム概論

2026.07.09

はじめに

ブラウザの使い分けについて

準備

Chrome 2つの使い分け

これまでと同じく、 Chrome の 「通常モード」「シークレットモード」 を 同時に開いて、 用途で使い分けます。

通常のChrome

Dify / AI Studio

今日の 作業はこっち

シークレットモード

Google Meet (この講義)

Meet入室は こっち

最終課題について

全体像

最終課題までの流れ

7/9(木)
本日・講義(最終課題に必要な要素をやります!)
7/13(月)
企画書の提出
7/16(木)
1on1相談 + 最終課題実装の時間
7/30(木)
最終提出物の提出
最終課題

最終課題のお題

Difyを使って、これまでの講義の内容を
質問・復習したり、繰り返し学ぶためのサポートをしてくれる
Botの仕組みを作ってください。
最終課題

提出物

  1. DifyアプリのDSLエクスポート(今までの課題でやっていること)
  2. ナレッジファイル一式(自作したもの。後ほど確認方法をお伝えします)
  3. Botの公開URL(後ほど確認方法をお伝えします)
  4. AIとのやり取りスレッドの共有URL
  5. (その他、自主的にアピールしたいものがあれば)
最終課題

企画書に含める内容

  1. どういう形式で学べるBotなのか(例:クイズ形式? FAQとして回答?)
  2. 学べる内容は?(例:◯◯をするためのコードは?と聞いたら答えてくれる?)
  3. 学べる範囲は?(例:GASなのか、Difyなのか、JavaScriptから含めて全部なのか)
  4. 上に書いた各選定をした理由
  5. あなたの作るBotの特徴・メリットは何なのか

企画書の提出期限 -- 7/13(月)23:59

最終課題

提出物で見るポイント

  • 動くかどうか -- そのままです
  • 学習体験の質 -- Botを使う人にとって、優れた学習体験になっているか
  • 目的達成の論理 -- なぜあなたが提案した体験が、提唱された目的を達成できるのか
  • 企画との一致 -- 企画書に書いた設計と、実際に作ったBotが整合性が取れているか
  • プロンプトの言語化の質 -- 講義で学んだ「工程の丁寧な言語化」が、プロンプトやカテゴリ定義に反映されているか

最終課題のための保険施策

Gemini APIキーの取得

準備

Geminiとは

Google が作ったAIモデルです。APIキーを取得すると、DifyからGeminiを呼び出して使えるようになります。

準備

APIキーの発行手順

1. Google AI Studioを開き左下の鍵アイコンを選ぶ

2.「APIキーを作成」ボタンを押す

準備

APIキーの発行手順

3. 上の指示の通りに入力

4.プロジェクト名を設定して「プロジェクトを作成」ボタンを押す

準備

APIキーの発行手順

5. API Keyのコピーをする

この後、コピーしたキーをDifyに貼ります!

準備

DifyへのGemini登録手順

!スクリーンショットを入れる:Difyのモデルプロバイダー設定画面
  1. Difyの右上メニューから「設定」を開きます
  2. 「モデルプロバイダー」を選びます
  3. 「Google」を探してAPIキーを貼り付けます
  4. モデルは Gemini 2.5 Flash-Lite を選びます

改めて・ナレッジとは何か

復習

ナレッジとは?

ナレッジはAIが回答をする際に参照するデータのことです。

ただ資料を置くだけではなく、 AIが必要な部分を探しやすい形 にしておくことが大切です。

ナレッジを使うことで、AIの回答内容をある程度コントロールすることができます。(AIが都度アドリブで回答するようなことを極力防ぐ)

原理

AIがナレッジの中の情報を探すとき

AIは質問が来るたびに毎回ナレッジ全体を最初から最後まで読むわけではありません。

質問

makeCopyって何?

検索

ナレッジの中から
関係ありそうな部分を探す

回答

見つかった部分だけを使って回答する

AIに渡るのは、ナレッジ全体ではなく、検索で見つかった関係ある部分です。

だから、ナレッジは「あとから探しやすい形」で作っておく必要があります。

原理

「後から探しやすい形」とは?

デモ

デモ1 — 散らかったナレッジの場合

第8回の資料を、そのまま1つの文章で流し込んだナレッジです。

例えばmakeCopyの質問をしても、ナレッジ上でmakeCopyの説明が、フォルダの話や日付の話と同じ1つのかたまりに埋まっています。検索で取れる断片に関係ない情報が混ざり、回答がぼんやりします。

デモ

デモ2 — 整えたナレッジの場合

同じ資料を、Q&A形式に整えたナレッジです。

makeCopy()とは?と聞かれた場合、学生の質問文とほぼ同じ形の文がナレッジ側にあるので、検索がピンポイントで当たります。

コツ

ナレッジを整えるコツの一例(Q&A方式)

自分でナレッジを作ってみよう

第8回の講義内容をが使いやすいナレッジに整える

作業

作るもの

ここからは、自分でナレッジを作ります。

作るのは、 第8回「GASでのファイル操作」を思い出すためのBotで使うナレッジです。

第8回のスライドを材料にして、AIが必要な部分を探しやすい形に整えていき、最終課題で活かせるようにしていきましょう!

自分でナレッジを作ってみよう

第8回の講義内容を、AIが使いやすいナレッジに整える

作業

作るもの

ここからは、自分でナレッジを作ります。

作るのは、
第8回「GASでのファイル操作」を復習するBotで使うナレッジです。

第8回のスライドを材料にして、AIが必要な情報を探しやすい形に整えていきます。

考え方

ナレッジを整える流れ

考え方

1. 困りごとを決める

ナレッジを作る前に、まず誰のどんな困りごとを助けるのかを決めます。

  • 色々なメソッド(関数)が出てきたのは覚えてるけど、どれが何なのかあいまい...
  • 自分でもう1回バックアップの手順を再現したいけど、手順があやふや...
  • 「new Date()」「Utilities.formatDate()」が日付関連の話であるのはなんとなく覚えてるけど、使い方覚えられない...

困りごとが決まると、Botの役割やQ&Aの方向性が決めやすくなります。

考え方

2. Botの役割を決める

困りごとが見えたら、その困りごとに合うBotの役割を決めます。

困りごと

用語の意味があいまい

Botの役割

GASの用語の意味や使いどころを思い出せて、丁寧に解説してくれるBot

今回は、第8回で出てきたGASのメソッドを思い出すBotとしてナレッジを作ってみましょう!
考え方

3. 質問を想像する

Botの役割が決まったら、どんな質問が来そうかを考えます。

Botの役割

GASの用語の意味や使いどころを思い出せて、丁寧に解説してくれるBot

聞かれそうな質問

makeCopy() って何?解説して!

困りごととBotの役割が決まっていると、質問の幅が広がりすぎません。どんどん質問のバリエーションを考えていきましょう!

作業

4. Q&Aでナレッジを書く

質問を想像できたら、その質問に答えられるQ&Aナレッジを作っていきます。


## Q: makeCopy() は何をするメソッドですか?
A: ファイルを複製するメソッドです。
file.makeCopy() と書くと、元のファイルのコピーが作られます。

例:
const file = DriveApp.getFileById('ファイルID');
file.makeCopy();

関連する道具: file.makeCopy()
作業

Q&Aの他事例 — 手順を知る

Q: ファイルをコピーして名前を変えるには、どう書きますか?
A: まず元ファイルを取得し、makeCopy() でコピーを作ります。
そのコピーを変数に入れて、setName() で名前を変更します。

例:
const file = DriveApp.getFileById('ファイルID');
const copy = file.makeCopy();
copy.setName('新しいファイル名');

関連する道具: getFileById(), makeCopy(), setName()
作業

Difyへナレッジをアップロード

ここまでできたら、作成したナレッジをDIfyにアップロードしてみましょう!

4-1. データソース「テキストファイル」を選択

4-2. 教材ファイルをアップロード

4-3.インデックス方法「経済的」を選択

4-4.検索設定のトップK「5」に!

4-5. 埋め込みが完了すればOK!

テスト

ナレッジの中身を確認する

ナレッジを選択し、該当ドキュメントを選ぶとナレッジの中身がどうなっているかを確認することができます。

テスト

ナレッジの中身を確認する

ナレッジの作り方次第で、中身はだいぶ変わります。

演習

もう1つ、別のナレッジを作る

ここまでで、用語の意味を思い出すナレッジを作りました。

次は、用語の組み合わせ方を思い出すナレッジを作ります。

第8回の資料を見ながら、操作の手順をQ&A形式にしてみましょう。

演習

今回作るナレッジ

困りごと
用語の意味はなんとなく分かるけれど、どの順番で組み合わせればいいか分からない。
Botの役割
GASでファイル操作をするときの、手順や組み合わせ方を思い出させる。
演習

たとえば、こんなQ&A

Q: ファイルを別フォルダに移動するには、どういう順番で書きますか?
A: まず移動したいファイルを getFileById() で取得します。
    次に、移動先フォルダを getFolderById() で取得します。
    最後に file.moveTo(folder) でファイルを移動します。

例:
const file = DriveApp.getFileById('ファイルID');
const folder = DriveApp.getFolderById('フォルダID');
file.moveTo(folder);

関連する道具: getFileById(), getFolderById(), moveTo()
演習

作業内容

  1. 第8回の資料を見て、操作の流れが必要な場面を選ぶ
  2. その場面で来そうな質問を考える
  3. 手順が分かるQ&Aを3つ以上書く
  4. .md ファイルにする
  5. Difyにアップロードして、チャンクの分かれ方を確認する
目標は、手順や組み合わせ方を思い出せるナレッジを作ることです。
ヒント

Q&Aにしやすい部分

コピーして名前を変える

makeCopy() と setName() の組み合わせ

別フォルダへ移動する

getFileById()、getFolderById()、moveTo() の組み合わせ

日付入りの名前を作る

new Date() と Utilities.formatDate() の組み合わせ

バックアップを作る

取得 → 複製 → 名前変更 → 移動の流れ

質問分類器を使ってみよう

質問の種類によって、答え方を分けます

新機能

質問分類器とは

比較

Ifブロックとの違い

Ifブロック

決まった値と一致するかで分ける。

例:Level 1 / Level 2

質問分類器

文章の内容を見て分ける。

例:用語の質問 / 手順の質問

選択肢ではなく、自由に書かれた質問を分類できます。
作業

質問分類器の組み方

  1. チャットフローに質問分類器を追加します
  2. 3つの「クラス」を作ります
  3. 「クラス」に分類パターンの定義を書きます
分類器は、質問を読んで
どのナレッジを使うかを決める入口になります。
設計

今回の3つの分類

以下の3つの分類を、質問分類器内のそれぞれのクラスに入れてみましょう!

用語の意味

「makeCopy()って何?」
「moveTo()は何をする?」

用語の意味ナレッジを参照する

操作のやり方

「バックアップを作るには?」
「コピーして名前を変えるには?」

手順・組み合わせナレッジを参照する

それ以外

感想
雑談

ナレッジを使わず別ルートへ

設計

クラス定義とは

質問分類器には、どういう基準で質問を分類するかの基準・定義を書きます。

カテゴリ名

用語の意味

定義

用語の意味や役割を聞く質問

設計

曖昧だと分類がブレる

設計

今回のクラス定義例

用語の意味を聞く質問

GASのメソッドや道具の意味・役割を知りたい質問。

例:makeCopy()って何? / moveTo()は何をする?

操作のやり方を聞く質問

ファイル操作の手順や、複数のメソッドの組み合わせ方を知りたい質問。

例:バックアップを作るには? / コピーして名前を変えるには?

それ以外

GASの用語や操作手順に当てはまらない質問・感想・雑談。

例:この授業、楽しかったです

作業

完成イメージ

ブロックを繋げてみましょう!今回LLMに埋め込むプロンプトは別途お渡しします!

テスト

分類のテスト

質問を入力して、期待したルートに進むか確認します。

入力する質問 期待するルート 使うナレッジ
makeCopy() は何をするメソッドですか? 用語の意味 用語の意味ナレッジ
バックアップを自動で取るにはどう作りますか? 手順について 手順・組み合わせ方ナレッジ
この授業、楽しかったです それ以外 使わない
テストでは、回答文だけでなく、どのルートに進んだかを確認します。

分類がずれたら、クラス定義を具体的に書き直します。

会話変数とクイズモード

Botに「今クイズ中かどうか」を覚えさせる仕組み

復習

会話変数とは

復習

会話変数でできること

全体像

FAQに「クイズモード」を足す

これまでのBotは、質問に答えるFAQ型でした。ここからは、 Botが問題を出して答え合わせをしてくれる「クイズモード」を足します。

クイズを出して
【問題】makeCopy() は何をするメソッドですか?
ファイルをコピーする
正解! makeCopy() は、ファイルを複製するメソッドです。

「クイズを出して」で出題が始まり、答えると採点してくれる。これを作ります。

つまずき

Botの構造を修正する理由

1 — Botは前の問題を忘れる

Difyのbotは、やりとりごとに記憶がリセットされます。
次のターンではさっき何を出題したかを覚えていないので、採点できません。

2 — クイズの答えを分類器が誤解する

クイズの答え「ファイルをコピーする」を質問分類器に通すと「用語の質問かな?」と誤解して、採点ではなく用語の説明を返してしまいます。

手順

クイズモードの組み立て手順

完成イメージを、次の7ステップで組みます。1ステップで1ブロックずつつないでいきます。

  1. 会話変数を2つ用意する(quiz_mode / last_question)
  2. 入口にIfブロックを置く(quiz_mode で分ける)
  3. 分類器に「クイズ希望」クラスを足す
  4. 「クイズ希望」に出題LLMをつなぐ
  5. その後ろに変数代入ブロックをつなぐ(quiz_mode = true / 問題を保存)
  6. quiz_mode が true の側に採点LLMをつなぐ
  7. その後ろに変数代入ブロックをつなぐ(quiz_mode = false に戻す)
ステップ1

会話変数を2つ用意する

まず、Botが覚えておくための入れ物(会話変数)を2つ作ります。

quiz_mode

今クイズ中かどうかのスイッチ(true / false)

型:真偽値(Boolean)/デフォルト値:false

last_question

直前に出した問題文を覚えておく

型:文字列(String)/デフォルト値:空(空欄)

ステップ2

ワークフローの入口にIfブロックを追加

フローの一番はじめにIfブロックを置き、quiz_mode が true かどうかで処理内容を分けていきます!。この門番があることで、クイズの答えが分類器に誤解されるのを防げます。

true のとき

クイズ中 → クイズの回答として処理(採点)へ

false のとき

通常 → 質問分類器

ステップ3

分類器に「クイズ希望」クラスを足す

共通ワークで作った3クラスの分類器に、4つ目のクラス「クイズ希望」を足します。 これがクイズ出題用の入口になり、出題用LLMへ続きます。

クイズで学びたい(新しく追加)

クイズ形式で問題を出してほしい、力試しをしたいという希望。

例:クイズを出して / 問題を出して / テストしたい

ステップ4

「クイズ希望」に出題LLMをつなぐ

「クイズ希望」ルートの先に出題LLMを1つつなぎます。
このLLMの目的:ナレッジをもとにクイズを1問作ること

クイズ希望

(分類器のルート)

出題LLM

問題を1問作る
「makeCopy() は何をするメソッド?」

※出題LLMのプロンプトは別途お渡しします。

ステップ5

出題LLMの後ろに、変数代入ブロックをつなぐ

出題LLMの後ろに、変数代入ブロックを1つつなぎます。ここで会話変数に2つ書き込みます。

これでクイズモードに入ります

quiz_mode = true

「今クイズ中」という印をつける

last_question = 出した問題文

次のターンの採点で使う

ステップ6

ステップ2のifブロックに採点LLMをつなぐ

2で追加したIfブロックの別ルートとして、採点ルートを作るために、 ここに採点LLMを1つつなぎます。last_question とナレッジの答えを見て、ユーザーの回答を採点します。

ユーザーの回答

ファイルをコピーする

採点LLM

ナレッジの答えと比べて採点

採点LLMのプロンプトは別途お渡しします。

ステップ7

採点LLMの後ろに、変数代入ブロックをつなぐ

採点LLMの後ろに、変数代入ブロックを1つつなぎます。quiz_mode を false に戻しlast_question をクリアします。これで通常モードに戻り、クイズは1問で完結します Document

quiz_mode = false

通常モードに戻す

last_question = クリア

出した問題を消す

テスト

動作テスト

組み上がったら、次の3つを入力して、期待どおりに動くか確認します。

入力する言葉 期待する動き
クイズを出して 問題が1問出る(クイズモードに入る)
(問題への答え)ファイルをコピーする 採点され、通常モードに戻る
もう一度「クイズを出して」 次の問題が1問出る
makeCopy() は何をするメソッド? (クイズ中でなければ)いつものFAQで答える
うまくいかないときは、quiz_mode が true / false に切り替わっているかを確認しましょう!

最終課題の提出内容について

最終課題

提出物

  1. DifyアプリのDSLエクスポート(今までの課題でやっていること)
  2. 作成したナレッジファイル一式(markdownという形式のファイルで作成)
  3. 企画書
  4. AIとのやり取りスレッドの共有URL
  5. (その他、自主的にアピールしたいものがあれば)
提出方法

1. Difyアプリのエクスポートについて

  1. アプリ一覧ページから最終課題用のアプリの右上にある「...」(3本点)をクリック
  2. 「DSLをエクスポート」を選択し、ダウンロード

「◯◯.yml」というファイルがダウンロードされると思います。

提出方法

2. ナレッジファイル一式を揃える

  1. 「◯◯.md」という名前で新しいファイルを作成する
  2. 1のファイルにナレッジとして登録する中身を埋める
  3. 2で中身を埋めたファイルをDifyに登録

「◯◯.md」というファイルが提出対象のファイルになります。

提出方法

3. 企画書

最終盤を改めて企画書として提出してください。これはNotionページでOKです。

提出方法

4. AIとのやり取りスレッドの共有URL

これは次のページ以降で。

共有URLの提出について

Google AI Studioの場合

共有URLの提出について

ChatGPTの場合

最終課題のコツ

最終課題の企画を考えよう

設計

Let's 最終課題の企画!

残り時間で、最終課題の企画設計をNotionに書き始めましょう。

今日取り組むこと
  1. 扱いたい範囲を選ぶ
  2. その範囲の資料からナレッジを整え始める
  3. 学習体験の構想を書く(対象者 / 形式 / 分類カテゴリ / 固定部分とLLM担当の分担)
設計

設計を決める3つの問い

Botの姿は、次の3つの問いへの答えの組み合わせで決まります。順番に答えを決めていきましょう。

  • 誰のためのBotか -- その人は、いつ、何に困って開くのか
  • どの範囲を扱うか -- その人の困りごとに答えるには、どの回の内容が要るのか
  • どんな学習体験にするか -- その人にとって、どんな練習のさせ方・答え方が合うのか

答えが変われば、ナレッジに入れる中身も、フィードバックの言葉づかいも変わります。人と同じ答えになるはずがない問いです。

相談

チューターさんへの相談

Notionに書いた設計内容を見せて、チューターさんに確認してもらいましょう。

  • 対象者がはっきりしているか
  • 範囲が広すぎないか
  • 分類カテゴリの定義で判定できるか
  • ブロックとLLMの役割分担が決まっているか

提出について

提出

今回の提出物

  • 最終課題の企画書のみ(NotionページでOK)

以上!
おつかれさまでした!