クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

検索拡張生成を使わない場面

このレッスンのあとで: 検索が不向きな道具である場面を言える。

60分のレッスンコマンド3件AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

1ページの規則に検索エンジン

検索拡張生成は、費用のかかる道具で、ときには不向きです。文書の分割と、ベクトルと、答えを逃しうる検索を足すからです。

自転車クラブに、1ページの規則があります。学生が、それだけのために、検索の仕組みを丸ごと作ります。ページはプロンプトに入ったはずで、いまは検索のほうが失敗しうる部分です。

このレッスンのゴール

メモ

検索が不向きな道具である場面を言える。

キーワード

ことばいみれい
コンテキストウィンドウモデルが一度に読める最大の量
トークンモデルが数える、文章の小さな単位約1文字
予算使うと決めたトークンの上限
ライブデータ数分ごとに変わる事実
検索質問に答える断片を見つけること

学生が入力するセルは、このプレビューでは空白です。

検索は習慣でなく、取引

検索のおかげで、モデルは、1つのプロンプトに入る量より多い文章を使えます。それが利点です。

代わりに、手間とリスクが増えます。分割し、ベクトルを作り、検索を調整しなければなりません。検索は、間違った断片や、何も返さないことがあり、そのとき答えは間違った文章から作られます。省けるなら省きます。

小さな文書はそのまま入る

モデルが一度に読める量には限りがあり、これをコンテキストウィンドウと呼びます。量はトークンで数えます。日本語では、1文字がおよそ1トークンです。これは目安で、正確な数ではありません。

コンテキストに使うトークンの予算を決めます。文書全体が予算より小さければ、全部入れます。探すものがないので、逃すものもありません。

例: 6つの場面と、選ぶ4つの方法

場面方法理由
1ページの規則そのままプロンプトへ入るので、探す必要がない
4万文字のハンドブック検索大きすぎるので、必要な断片を見つける
本17冊の延滞料の合計コードで計算モデルは計算を間違えることがある
次のバスの遅れその場で取得毎分変わるので、保存すると古くなる
めったに尋ねられない3ページの規程そのままプロンプトへ入るし、余分な費用は小さい
大学のイントラネット、数千ページ検索どのプロンプトにも入らない

学生が入力するセルは、このプレビューでは空白です。

文書を予算と比べる

次のスクリプトは、自転車クラブの規則を持ち、文字数を数えます。目安でトークンに直し、予算3000と比べます。

4万文字のハンドブックも、数だけを使って同じ判定をし、そのあと規則のプロンプト全体を作ります。モデルは呼びません。

予算のスクリプトを書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const rules = \"出発は朝9時、古い水車小屋の前です。全員ヘルメットをかぶります。1つの班は、最大12人と班長1人です。班長は速さを決め、曲がり角ごとに待ちます。日没後に終わる走行では、ライトが必要です。会費は年に2000円です。体験の参加は2回まで無料です。氷や強い雨の日は中止し、班長が朝7時までに全員へ知らせます。誰も置いていきません。転んだときは、その日のうちに班長へ伝えます。\";' '// 目安: 日本語では、1文字がおよそ1トークンです。かなり粗い目安です。' 'function tokensFor(letters) { return letters; }' 'const BUDGET = 3000;' > whole.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

予算のスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const documents = [' '  { name: \"自転車クラブの規則\", letters: Array.from(rules).length },' '  { name: \"図書館のハンドブック\", letters: 40000 },' '];' 'documents.forEach(function (one) {' '  const need = tokensFor(one.letters);' '  const verdict = need <= BUDGET ? \"そのまま入る\" : \"検索が必要\";' '  console.log(one.name + \": \" + one.letters + \"文字、約\" + need + \"トークン、\" + verdict);' '});' 'const prompt = \"クラブの規則だけを使って答えてください。\n\n\" + rules + \"\n\n質問: 1つの班は、最大何人ですか。\";' 'console.log(\"プロンプト全体は\", prompt.length, \"文字です。検索は要りません。\");' >> whole.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

実行して判定を読む

コマンド
docker exec -w /home/node/project agent node whole.js

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

表示される内容

行意味
自転車クラブの規則: 184文字、約184トークン、そのまま入る予算よりずっと小さい
図書館のハンドブック: 40000文字、約40000トークン、検索が必要予算よりずっと大きい
プロンプト全体は 226 文字です。検索は要りません。そのまま送れる小ささ

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

検索は、文書をプロンプトに入れるより、いつもよい、と考える人が多くいます。文書が入るなら、検索は答えを逃しうる手順を足すだけです。かっこよく聞こえるからではなく、必要なときに使います。

このラボとソースについて: AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。