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

無料レッスン

temperatureとトークン上限

このレッスンのあとで: モデルの呼び出しで、temperature、トークンの上限、停止テキストが何を変えるかを説明できる。

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

答えを変える三つの設定

temperature、トークンの上限、停止テキストは、呼び出しの設定のうち、答えを最も大きく変える三つです。どれもリクエスト本体の、メッセージの隣に書きます。

これらが大切なのは、初期値のままだと、データ処理にはばらつきが大きすぎたり、画面には長すぎたりするからです。知っていれば、意図して選べます。

この課のゴール

メモ

モデルの呼び出しで、temperature、トークンの上限、停止テキストが何を変えるかを説明できる。

キーワード

ことばいみれい
temperature答えのばらつきの大きさを決める設定0
トークンモデルが読み書きする小さな文字の断片
トークンの上限返答に使えるトークンの最大数max_tokens
停止テキストモデルがそこに達すると返答を終える文字列
終了の理由返答が終わった理由length

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

temperature はばらつきを決める

モデルは、次のトークンを、ありそうなトークンの一覧から選びます。temperature が低いと、ほとんどいつも一番ありそうなものを選びます。高いと、あまりありそうでないものも入ってきます。

正解が一つの仕事、たとえば文章から日付を取り出す仕事には、0 に近い低い値を選びます。アイデアや名前には、高めの値を選びます。

例:三つの仕事の temperature

仕事temperature理由
メールから注文番号を取り出す0正解は一つだけ
お客様の質問に答える0.7自然だが、極端ではない
店の名前を十個提案する1.2いろいろな案がほしい

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

二つの温度で三回ずつたずねる

コマンド
docker exec -w /home/node/project agent node -e 'const lab = require("./lab.js"); const question = [{ role: "user", content: "金魚の名前を一つ考えてください。一語で答えてください。" }]; const samples = { 0: ["ぶくぶく", "ぶくぶく", "ぶくぶく"], 1.2: ["ニモ", "しぶき船長", "ぶくぶく"] }; (async () => { for (const temperature of [0, 1.2]) { const found = []; let label = ""; for (let i = 0; i < 3; i++) { const got = await lab.ask({ max_tokens: 8, temperature: temperature, messages: question }, samples[temperature][i]); found.push(got.text.trim()); label = got.label; } console.log("temperature " + temperature + "(" + label + "):" + found.join(" | ")); } })();'

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

トークンの上限は厳しい天井

トークンは小さな文字の断片で、短い単語や、長い単語の一部であることが多いです。max_tokens は、モデルが書けるトークンの最大数です。そこに達すると、文の途中でも返答は止まります。

返答には終了の理由が付きます。stop は、モデルが書き終えたことを表します。length は、上限で切られたことを表します。

わざと返答を途中で切る

コマンド
docker exec -w /home/node/project agent node -e 'const lab = require("./lab.js"); const question = [{ role: "user", content: "APIとは何かを二文で説明してください。" }]; const sample = { short: "APIとは、プログラムが別のプログラムに", long: "APIとは、あるプログラムが別のプログラムに何かを頼むための決まりです。呼び出す側がリクエストを送り、返事を受け取ります。" }; (async () => { for (const limit of [12, 80]) { const got = await lab.ask({ max_tokens: limit, messages: question }, limit === 12 ? sample.short : sample.long); const why = got.data ? got.data.choices[0].finish_reason : (limit === 12 ? "length" : "stop"); console.log("max_tokens " + limit + "(" + got.label + ")、finish_reason " + why + ":"); console.log("  " + got.text.trim()); } })();'

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

よくある間違い

注意

max_tokens を小さくすれば、モデルが短く書くと考える人が多くいます。そうではありません。文の途中で切れるだけです。短い答えがほしいときは、指示で頼みます。上限は、予想より少し上に置く安全装置です。

停止テキストは返答を早く終える

停止テキストは、自分で選ぶ文字列です。モデルがそれを書こうとすると、代わりに返答が終わり、停止テキスト自体は返答に含まれません。

返答を一行や、リストの一項目に収めたいときに使います。多くのモデル API は、停止テキストを同時にいくつか指定できます。

リストを三番目の前で止める

コマンド
docker exec -w /home/node/project agent node -e 'const lab = require("./lab.js"); const question = [{ role: "user", content: "一から五までの数を漢字で、一行に一つ、1. 2. 3. のように番号を付けて書いてください。" }]; (async () => { const got = await lab.ask({ max_tokens: 60, stop: ["3."], messages: question }, "1. 一\n2. 二\n"); console.log("答え(" + got.label + "):" + JSON.stringify(got.text)); console.log("3. を含みますか。" + got.text.includes("3.")); })();'

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

さらに:自分の設定で試す

長さの Run で、質問を自分のものに変え、max_tokens を 5、30、200 で試します。そのたびに、終了の理由を書き留めてください。

そして、実際のプログラムにはどの値を書くかを言いましょう。上限が小さすぎるほうが、大きすぎるよりも損が大きい理由も言ってください。

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

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