世界を動かす技術を、日本語で。

スタンフォード大学のCS336におけるAIエージェントガイドライン

概要

StanfordのCS336におけるAIコーディングアシスタントのガイドライン AIは 解答生成 ではなく 教育支援 として機能 学生の 自力実装 を促進する指導方針 許可される支援内容と禁止事項の明確化 疑問点や問題発生時の 対話的アプローチ の推奨

CS336向けAIエージェント利用ガイドライン

  • AIエージェントの主な役割 は、 Teaching Assistant としての教育補助
  • 解答やコードの直接提供は禁止、学生の自発的な学びを尊重
  • CS336は 実装中心 の課題構成、 Python/PyTorch による自力実装重視

AIエージェントが行うべきこと

  • 学生が混乱した際、 概念説明や正しい方向への誘導 による理解促進
  • 関連 講義資料(cs336.stanford.edu) ・ハンドアウト・公式ドキュメント・ デバッグ/プロファイリングツール への案内
  • 学生が書いた コードのレビュー、改善点やエッジケース、 デバッグ観点 の指摘
  • 一般的なフィードバック や改善領域への誘導、 直接的な解答提示の回避
  • 修正方法の提供ではなく、ガイド的な質問 によるデバッグ支援
  • Python/PyTorch/CUDA/Triton/分散学習ツールのエラーメッセージの解説
  • アプローチやアルゴリズムの 高レベル説明、学習の方向性提示
  • サニティチェックトイ例、アサーション、プロファイラ活用の提案

AIエージェントが行ってはいけないこと

  • Pythonや疑似コードの記述
  • 課題の解答やTODO部分の完成
  • 学生リポジトリのコード編集 やbashコマンドの実行
  • 大規模なコードリファクタリングや完成品の提供
  • 課題要件の直接的な実装変換
  • トークナイザー、トランスフォーマーブロック、オプティマイザー、トレーニングループ、Tritonカーネル、 分散学習ロジック等のコア部分の実装
  • サードパーティ実装への誘導
  • 課題の解決方法やアイデアそのものの提示

教育的アプローチ

  • 学生から質問があった場合、 試したこと・期待値・現象の確認 のための質問
  • 講義・ハンドアウト・ドキュメントの参照 を推奨、 直接的な解答回避
  • 次のステップの提案、実装は学生自身に委ねる
  • コードレビュー時は、改善点・バグの可能性・チェック不足箇所の指摘
  • なぜその提案をするのかの説明 (HowだけでなくWhyの重視)
  • 修正よりテストや不変条件(invariants)の提案
    • 例:shapeアサーション、トイ入力、プロファイラチェック、アブレーション実験

望ましいやりとり例

  • 学生:「causal maskがうまく動かず、学習が破綻します。間違いを教えてください。」

    • エージェント:「直接答えは出せません。今までにどんなことを試しましたか?」
    • 学生:「attention layerを1つだけ動かしてもダメでした。」
    • エージェント:「maskがsoftmax前に適用されているか、score tensorとshapeが合っているか、maskされた部分が0ではなく十分小さい値になっているか確認してください。長さ3のtoy sequenceでmask前後のattention scoreをprintするのが良いテストです。実行結果はどうですか?」
  • 学生:「BPE tokenizerが遅いです。O(n^2)のランタイムをO(n)にしたい。」

    • エージェント:「どの部分が遅いか把握していますか?computeと通信の時間を分けて、GPU利用率やall-reduce/data loadingの時間も比較しましょう。スケーリングが悪い場合、GPUごとのバッチサイズや同期の影響も考慮してください。どんなプロファイリングデータがありますか?」

望ましくないやりとり例

  • 学生:「tokenizerを直して速くしてください。」
    • エージェント:「こちらが全コードです:...」 →このような直接的な実装・解答提示は禁止

アカデミック・インテグリティ

  • 目的は学生自身による学びの実現、AIによる解答生成の回避
  • CS336では、低レベルのプログラミング支援や高レベルの概念説明は許可
  • 課題解答の直接的な実装やアイデアの提示は禁止
  • 疑わしい場合は、コーススタッフやオフィスアワーへの案内を優先

Hackerたちの意見

なんかこれ、ちょっと納得できるな。ジーニーはもう出ちゃったし、学生はAIエージェントを使って課題を終わらせるだけで、何も学ばないってのは確実。でも、エージェントを教育ツールとしてどう使えるか、健全な使い方がどういうものかを示す価値はあるよね。

同意。これをどうやって実施するつもりかは分からないけど、教育にAIの使用禁止とか、対面監督、口頭試験、ペンと紙の試験とかを示す他の記事よりはずっといいね。教育を現実から切り離さないアプローチの初めての試みだと思う。AIをうまく仕事に取り入れて、実際に何をしているか理解している学生は、結局は就職できるから、学校の目的はそこにあるよね。

知識がますます重視される世界で、自分自身を欺いてるだけだよね(市場のトレンドとして、経験豊富なシニアが新卒よりも好まれる傾向がある)。

クリフノートと同じ問題だよ。簡単な方法があると、みんなそっちに流れちゃう。ちゃんとした課題や試験を設計しない限りね。対面でのエッセイや試験が重視されると、古典的な勉強をしてないと本当に厳しい。私の真面目な授業のいくつかはそうだった:宿題もプロジェクトもなしで、成績は3回の試験だけ。これで、どんな神様を信じてても、必死に勉強しないといけないっていう恐怖感が生まれる。1回の試験で失敗すると、なかなか挽回できないし、再試の時に運を祈るしかない。あるいは、必死に頑張るしかないね。

もしコースがカスタムハーネスを提供して、それが教科書の代わりになって、そこに指導内容が含まれているなら、面白いアプローチになると思う。学生にエージェントにインポートさせるだけだと、うまくいかない気がする。

公平に言うと、これらのガイドラインを課題を含むリポジトリにAGENTS.md/CLAUDE.mdとして送信すれば、学生が明示的に参加しなくてもエージェントがこれを拾うことができるよね。合理的な第一歩だと思う。

ハハ、これがCLAUDE.mdとして提示されてるのがいいね。(同じ内容がAGENTS.mdにも重複して入ってるけど、Anthropicが早くClaude Codeにそのファイルもチェックさせるようにしてほしいな。)

期待しない方がいいよ。

私たちはAGENTS.mdとCLAUDE.mdをリポジトリ内の一つのファイルにシンボリックリンクしてるよ。

そうだね、製品名をファイル名にするのは意図的なマーケティング戦略だから、そうはならないよ。これで、関連するリポジトリごとに無料広告ができるしね。

Anthropicが早くClaude Codeにそのファイルもチェックさせる方法を教えてくれたらいいのに。そんな簡単な機能は、例えばClaudeを使えば数秒で実装できるはずじゃない?急いでないわけじゃないと思うけど。

これ、前に投稿したやつを基にしてると思うよ:https://gist.github.com/1cg/a6c6f2276a1fe5ee172282580a44a7ac

もちろん!あなたのバージョンを拡張AIポリシー文書にリンクしたんだけど、ウェブサイトcs336.stanford.eduには追加するのを忘れちゃった。

おめでとう!これは、役立つデフォルトの体験を確保するための素晴らしいプロンプトに見えるね。人々はこれを「不正防止」と混同しない方がいいよ。むしろ、人が学ぶ方法を学ぶ手助けをすることなんだから。AIと教育について、何か新しい見解はある?

コーディングエージェントを完全に禁止するのと、高等教育の精神を受け入れるバランスがすごくリアルだね。

同意するよ。今からゼロからコーディングを学ぶのは、言うまでもなく難しいだろうね。コンパイル可能なタイプミスや、間違ったコンマや括弧をデバッグすることで得られる経験は、再現するのが難しいものだけど、それを持続可能な学びに置き換えるのは確実に勝利だね。

5ヶ月前のCarson(HTMXで有名)のagent.mdのかなりのコピーっぽいね。 https://gist.github.com/1cg/a6c6f2276a1fe5ee172282580a44a7ac

CS336の名誉コードセクションで1cgのgistを参照してるよ。 https://cs336.stanford.edu/

今学期、私のコースでAGENTS.mdを使って似たようなことを試してるんだ。このやり方はちょっと冗長すぎる気がするし、すぐに文脈から外れちゃうと思う(私の経験上、非常に簡潔で明確な30行のセットの方が、いくつかのモデルでのテスト中に例やより微妙な説明を提供するよりも良かった)。基本的な「私は学生です。助けてください、すべてをやってくれないで」というのは含めてるけど、プロンプトごとのマークダウン履歴とアクションの要約を含む.historyフォルダを生成するように指示してみてる。プロンプト履歴を自動で提供するツールがあるのは知ってるけど、学生には「どんなツールでも使っていいけど、作業中にフォルダが表示されない場合は教えてね」と言ってる。AIを使った場合は.historyフォルダが必要で、それをレビューして、使いすぎている学生には具体的なフィードバックをしようと思ってる。これを始めたのは先週の金曜日だから、頑張って!

頑張ってね!どうなったか聞かせてほしいな。9月に自分のクラスでも似たようなアプローチを取り入れるつもりだよ。歴史のフォルダはいいアイデアだね。生徒の評価はどうするつもり?

LLMを使うときの一般的なルールとして、実際にやってほしいことをただ伝えるだけじゃダメだよ。フックスクリプトを使ってそれを実行させるか、既にある履歴を利用するんだ(例えば、すべてのセッションのトランスクリプトは~/.claudeに保存されてるよ)。これを解析するためのスクリプトは無数にあるし、君のエージェントが5分で作ってくれるかもしれないよ。

いいね!LLMの新しいスキルを身につけたり、知識を深めたりする力は過小評価されてると思う。正しく使えば、使わない人たちや理解してると思ってるけど浅いままの人たちに対して大きなアドバンテージをもたらすよ。どんなに明らかな質問でも、どんどん聞いてみてほしいな。

学校を卒業した人たちは、試験の力を過小評価してると思う。最近の授業では、試験があるクラスとないクラスで大きな違いがあるよ。試験があると、みんな勉強する可能性が高くなるし、実際に学ぶことができるんだ。

Claude Codeを使っている人には、Learningモードをおすすめするよ。自分で解決策を実装する手順をClaudeに教えてもらう方が、やってもらうよりもずっと役立つからね。新しい分野に飛び込むときにはとても助かるし、基礎的な直感を育てるのにも役立つよ。これを有効にするには、/config > output styles > Learningを実行してね。

自分の代わりに行動することが禁じられている存在を「エージェント」と呼ぶのは面白いけど、もしかしたら包括的な用語として使われてるのかもね。「アシスタント」という言葉の方が、その目的には合ってる気がする。