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

無料レッスン

公開された重みとモデルのライセンス

このレッスンのあとで: モデルのライセンスを読み、何ができるかを言える。

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

公開されていても、自由に使えるとは限らない

重みが公開されているとは、モデルの数のファイルをダウンロードできるということです。何をしてもよいという意味ではありません。使い方は、ライセンスが決めます。

商用で使ってはいけないモデルの上に事業を作ると、やめるよう言われることがあります。先に条項を読む手間は、10 分ほどです。

このレッスンのゴール

メモ

モデルのライセンスを読み、何ができるかを言える。

キーワード

ことばいみ
重みモデルが学んだ数
ライセンス使うための決まり
条項ライセンスの中の一つの決まり
帰属表示作った人の名前を示すこと
利用の上限利用者の数などの上限

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

ライセンスは、してよいことを決める

モデルの重みにはライセンスがあり、それを動かすコードには別のライセンスがあることもあります。両方を読みます。

一つ一つの決まりが条項です。よく見る問いは五つです。商用で使えるか。利用の上限はあるか。禁止された用途は何か。改変してよいか、改変を共有する必要はあるか。帰属表示は要るか。

確かめる条項と、やさしい言い方

条項尋ねること
商用これでお金を稼いでよいか
利用の上限利用者数などの上限はあるか
禁止された用途自分の用途が載っていないか
改変変えてよいか、変えたら共有するのか
帰属表示作った人を示す必要はあるか

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

使い方を、すべての条項に照らす

自分の使い方を書き出します。商用か、利用者は何人か、用途は何か、モデルを改変するか、改変を共有するか。それから、条項を一つずつ照らします。

一つでも通らなければ「不可」です。すべて通っても帰属表示が要るなら、「条件つきで可」です。

よくある間違い

注意

「公開サイトにあるモデルは、何に使ってもよい」と考えがちです。ダウンロードしやすいことは、決まりを何も語りません。作り始める前に、自分の使い方に関わる条項を読みます。このレッスンは練習で、法的な助言ではありません。

モデル用の補助を書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// 応答に含まれるトークン数。なければ null。' 'function count(data, name) {' '  return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.js"

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

モデル用の補助を書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' '  } catch (error) {' '    console.log(\"記録済みサンプル: モデルが答えませんでした (\" + error.message + \")。\");' '    return { text: sample, inTokens: null, outTokens: null, recorded: true };' '  }' '}' 'module.exports = { ask };' >> model.js"

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

ライセンスを調べるスクリプトを書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const licences = [' '  { name: \"ライセンス A\", commercial: true, maxUsers: 1000, banned: [\"軍事利用\"], attribution: true, modify: true, share: false },' '  { name: \"ライセンス B\", commercial: false, maxUsers: Infinity, banned: [], attribution: false, modify: true, share: true },' '];' 'const use = { commercial: true, users: 500, purpose: \"学習支援\", modifies: true, shares: false };' 'function problems(l, u) {' '  const found = [];' '  if (u.commercial && l.commercial === false) found.push(\"商用利用は不可\");' '  if (u.users > l.maxUsers) found.push(\"利用者数が上限を超えている\");' > licence.js"

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

ライセンスを調べるスクリプトを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  if (l.banned.includes(u.purpose)) found.push(\"禁止された用途: \" + u.purpose);' '  if (u.modifies && l.modify === false) found.push(\"改変は不可\");' '  if (u.modifies && l.share && u.shares === false) found.push(\"改変は共有が必要\");' '  return found;' '}' >> licence.js"

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

ライセンスを調べるスクリプトを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function verdict(l, u) {' '  const found = problems(l, u);' '  if (found.length > 0) return \"不可\";' '  return l.attribution ? \"条件つきで可\" : \"可\";' '}' >> licence.js"

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

ライセンスを調べるスクリプトを書く(4)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"使い方: 商用、利用者 500 人、学習支援、改変あり、改変は非公開\");' '  for (const l of licences) console.log(l.name + \": \" + verdict(l, use) + \" | \" + problems(l, use).join(\"; \"));' '  const q = \"モデルの重みを使う前に、ライセンスを読むべき理由を、短い一文で書いてください。\";' '  const sample = \"ライセンスは重みで何をしてよいかを定めていて、条項を破ると使う権利を失うことがあるからです。\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"返事: \" + reply.text);' '}' 'main();' >> licence.js"

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

使い方をライセンスに照らす

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

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

ここのライセンスは架空のもの

ライセンス A とライセンス B は、練習のために作った架空のものです。本物のライセンスではなく、どの本物のモデルについても何も語りません。

スクリプトは、教えたことしかしません。本物のライセンスは丁寧に読む必要があり、本当に迷ったら、詳しい人に尋ねます。

出力の例

行示していること
ライセンス A: 条件つきで可 | すべての条項を通るが、帰属表示が要る
ライセンス B: 不可 | 商用利用は不可; 改変は共有が必要二つの条項が通らない
返事: ...モデルの一文。言葉は毎回違う

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

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

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