第14回 アルゴリズム概論
2026.07.09
ブラウザの使い分けについて
これまでと同じく、 Chrome の 「通常モード」 と 「シークレットモード」 を 同時に開いて、 用途で使い分けます。
Dify / AI Studio
今日の 作業はこっち
Google Meet (この講義)
Meet入室は こっち
企画書の提出期限 -- 7/13(月)23:59
Gemini APIキーの取得
Google が作ったAIモデルです。APIキーを取得すると、DifyからGeminiを呼び出して使えるようになります。
1. Google AI Studioを開き左下の鍵アイコンを選ぶ
2.「APIキーを作成」ボタンを押す
3. 上の指示の通りに入力
4.プロジェクト名を設定して「プロジェクトを作成」ボタンを押す
5. API Keyのコピーをする
この後、コピーしたキーをDifyに貼ります!
ナレッジはAIが回答をする際に参照するデータのことです。
ただ資料を置くだけではなく、 AIが必要な部分を探しやすい形 にしておくことが大切です。
ナレッジを使うことで、AIの回答内容をある程度コントロールすることができます。(AIが都度アドリブで回答するようなことを極力防ぐ)
AIは質問が来るたびに毎回ナレッジ全体を最初から最後まで読むわけではありません。
makeCopyって何?
ナレッジの中から
関係ありそうな部分を探す
見つかった部分だけを使って回答する
だから、ナレッジは「あとから探しやすい形」で作っておく必要があります。
第8回の資料を、そのまま1つの文章で流し込んだナレッジです。
例えばmakeCopyの質問をしても、ナレッジ上でmakeCopyの説明が、フォルダの話や日付の話と同じ1つのかたまりに埋まっています。検索で取れる断片に関係ない情報が混ざり、回答がぼんやりします。
同じ資料を、Q&A形式に整えたナレッジです。
makeCopy()とは?と聞かれた場合、学生の質問文とほぼ同じ形の文がナレッジ側にあるので、検索がピンポイントで当たります。
第8回の講義内容をが使いやすいナレッジに整える
ここからは、自分でナレッジを作ります。
第8回のスライドを材料にして、AIが必要な部分を探しやすい形に整えていき、最終課題で活かせるようにしていきましょう!
第8回の講義内容を、AIが使いやすいナレッジに整える
ここからは、自分でナレッジを作ります。
第8回のスライドを材料にして、AIが必要な情報を探しやすい形に整えていきます。
ナレッジを作る前に、まず誰のどんな困りごとを助けるのかを決めます。
困りごとが決まると、Botの役割やQ&Aの方向性が決めやすくなります。
困りごとが見えたら、その困りごとに合うBotの役割を決めます。
用語の意味があいまい
GASの用語の意味や使いどころを思い出せて、丁寧に解説してくれるBot
Botの役割が決まったら、どんな質問が来そうかを考えます。
GASの用語の意味や使いどころを思い出せて、丁寧に解説してくれるBot
makeCopy() って何?解説して!
困りごととBotの役割が決まっていると、質問の幅が広がりすぎません。どんどん質問のバリエーションを考えていきましょう!
質問を想像できたら、その質問に答えられるQ&Aナレッジを作っていきます。
## Q: makeCopy() は何をするメソッドですか?
A: ファイルを複製するメソッドです。
file.makeCopy() と書くと、元のファイルのコピーが作られます。
例:
const file = DriveApp.getFileById('ファイルID');
file.makeCopy();
関連する道具: file.makeCopy()
Q: ファイルをコピーして名前を変えるには、どう書きますか?
A: まず元ファイルを取得し、makeCopy() でコピーを作ります。
そのコピーを変数に入れて、setName() で名前を変更します。
例:
const file = DriveApp.getFileById('ファイルID');
const copy = file.makeCopy();
copy.setName('新しいファイル名');
関連する道具: getFileById(), makeCopy(), setName()
ここまでできたら、作成したナレッジをDIfyにアップロードしてみましょう!
4-1. データソース「テキストファイル」を選択
4-2. 教材ファイルをアップロード
4-3.インデックス方法「経済的」を選択
4-4.検索設定のトップK「5」に!
4-5. 埋め込みが完了すればOK!
ナレッジを選択し、該当ドキュメントを選ぶとナレッジの中身がどうなっているかを確認することができます。
ナレッジの作り方次第で、中身はだいぶ変わります。
ここまでで、用語の意味を思い出すナレッジを作りました。
第8回の資料を見ながら、操作の手順を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()
.md ファイルにするmakeCopy() と setName() の組み合わせ
getFileById()、getFolderById()、moveTo() の組み合わせ
new Date() と Utilities.formatDate() の組み合わせ
取得 → 複製 → 名前変更 → 移動の流れ
質問の種類によって、答え方を分けます
決まった値と一致するかで分ける。
例:Level 1 / Level 2
文章の内容を見て分ける。
例:用語の質問 / 手順の質問
以下の3つの分類を、質問分類器内のそれぞれのクラスに入れてみましょう!
「makeCopy()って何?」
「moveTo()は何をする?」
用語の意味ナレッジを参照する
「バックアップを作るには?」
「コピーして名前を変えるには?」
手順・組み合わせナレッジを参照する
感想
雑談
ナレッジを使わず別ルートへ
質問分類器には、どういう基準で質問を分類するかの基準・定義を書きます。
用語の意味
用語の意味や役割を聞く質問
GASのメソッドや道具の意味・役割を知りたい質問。
例:makeCopy()って何? / moveTo()は何をする?
ファイル操作の手順や、複数のメソッドの組み合わせ方を知りたい質問。
例:バックアップを作るには? / コピーして名前を変えるには?
GASの用語や操作手順に当てはまらない質問・感想・雑談。
例:この授業、楽しかったです
ブロックを繋げてみましょう!今回LLMに埋め込むプロンプトは別途お渡しします!
質問を入力して、期待したルートに進むか確認します。
| 入力する質問 | 期待するルート | 使うナレッジ |
|---|---|---|
| makeCopy() は何をするメソッドですか? | 用語の意味 | 用語の意味ナレッジ |
| バックアップを自動で取るにはどう作りますか? | 手順について | 手順・組み合わせ方ナレッジ |
| この授業、楽しかったです | それ以外 | 使わない |
分類がずれたら、クラス定義を具体的に書き直します。
Botに「今クイズ中かどうか」を覚えさせる仕組み
これまでのBotは、質問に答えるFAQ型でした。ここからは、 Botが問題を出して答え合わせをしてくれる「クイズモード」を足します。
「クイズを出して」で出題が始まり、答えると採点してくれる。これを作ります。
Difyのbotは、やりとりごとに記憶がリセットされます。
次のターンではさっき何を出題したかを覚えていないので、採点できません。
クイズの答え「ファイルをコピーする」を質問分類器に通すと「用語の質問かな?」と誤解して、採点ではなく用語の説明を返してしまいます。
完成イメージを、次の7ステップで組みます。1ステップで1ブロックずつつないでいきます。
まず、Botが覚えておくための入れ物(会話変数)を2つ作ります。
今クイズ中かどうかのスイッチ(true / false)
型:真偽値(Boolean)/デフォルト値:false
直前に出した問題文を覚えておく
型:文字列(String)/デフォルト値:空(空欄)
フローの一番はじめにIfブロックを置き、quiz_mode が true かどうかで処理内容を分けていきます!。この門番があることで、クイズの答えが分類器に誤解されるのを防げます。
クイズ中 → クイズの回答として処理(採点)へ
通常 → 質問分類器へ
共通ワークで作った3クラスの分類器に、4つ目のクラス「クイズ希望」を足します。 これがクイズ出題用の入口になり、出題用LLMへ続きます。
クイズ形式で問題を出してほしい、力試しをしたいという希望。
例:クイズを出して / 問題を出して / テストしたい
「クイズ希望」ルートの先に出題LLMを1つつなぎます。
このLLMの目的:ナレッジをもとにクイズを1問作ること
(分類器のルート)
問題を1問作る
「makeCopy() は何をするメソッド?」
※出題LLMのプロンプトは別途お渡しします。
出題LLMの後ろに、変数代入ブロックを1つつなぎます。ここで会話変数に2つ書き込みます。
これでクイズモードに入ります
「今クイズ中」という印をつける
次のターンの採点で使う
2で追加したIfブロックの別ルートとして、採点ルートを作るために、
ここに採点LLMを1つつなぎます。last_question とナレッジの答えを見て、ユーザーの回答を採点します。
ファイルをコピーする
ナレッジの答えと比べて採点
採点LLMのプロンプトは別途お渡しします。
採点LLMの後ろに、変数代入ブロックを1つつなぎます。quiz_mode を false に戻し、
last_question をクリアします。これで通常モードに戻り、クイズは1問で完結します
通常モードに戻す
出した問題を消す
組み上がったら、次の3つを入力して、期待どおりに動くか確認します。
| 入力する言葉 | 期待する動き |
|---|---|
| クイズを出して | 問題が1問出る(クイズモードに入る) |
| (問題への答え)ファイルをコピーする | 採点され、通常モードに戻る |
| もう一度「クイズを出して」 | 次の問題が1問出る |
| makeCopy() は何をするメソッド? | (クイズ中でなければ)いつものFAQで答える |
「◯◯.yml」というファイルがダウンロードされると思います。
「◯◯.md」というファイルが提出対象のファイルになります。
最終盤を改めて企画書として提出してください。これはNotionページでOKです。
これは次のページ以降で。
残り時間で、最終課題の企画設計をNotionに書き始めましょう。
Botの姿は、次の3つの問いへの答えの組み合わせで決まります。順番に答えを決めていきましょう。
答えが変われば、ナレッジに入れる中身も、フィードバックの言葉づかいも変わります。人と同じ答えになるはずがない問いです。
Notionに書いた設計内容を見せて、チューターさんに確認してもらいましょう。