syllabus について
syllabusは、講師や学生向けに、シラバスから補足読書リストをDOCXで作成するスキルです。Consensusで各コース分野の査読済み論文を検索し、受講者のレベルに合わせた要約と討論の問いをまとめます。
主な機能
- 01ファイル、テキスト、画像のシラバス解析
- 02コースのトピックをセクションに分類
- 03Consensusで新しい論文を検索
- 04要約と討論の問いを作成
- 05DOCX読書リストの生成
活用シーン
- 01新学期の授業用読書資料の準備
- 02シラバスの各トピックに関する新しい論文の調査
- 03受講者のレベルに合った討論資料の作成
MCP 対応
Consensus MCP接続を使って論文を検索し、結果は現在のセッションでのツール呼び出しから得たものに限定します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alirezarezvani/ claude-skills --skill syllabusインストール後、Claude Code で/syllabusを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/applied_domain_weaving.mdaudience_calibration.mdbundled_script_pattern.mdscripts/citation_tracker.pydiscussion_question_validator.pygenerate_reading_list.jstopic_grouper.py詳細
シラバス — 授業の補足資料リスト
移植性: Consensus MCP への接続、
docxパッケージを含む Node.js、シラバスのファイルを読み取る機能が必要です。Claude Code CLI ではそのまま動作します。Consensus MCP + Code Execution + ファイルのアップロードを利用する Claude.ai でも、このワークフローに対応しています。
授業のシラバスを持つ教員または学生向けに、授業の各セクションに対応した査読済みの最新論文を含む、専門的な補足資料リストを .docx 形式で作成します。
アーキテクチャパターン:バンドルされたスクリプト
このスキルでは、300 行を超えるレイアウトコードをインラインに記述する代わりに、DOCX の生成にバンドルされた JavaScript ヘルパースクリプトを使用します。
- DOCX 生成ロジックは再利用可能で、複雑です
- 関心事をより適切に分離できます:スキル=オーケストレーション+インテリジェンス、スクリプト=機械的なドキュメントの組み立て
- トークン効率が向上します:スキルは実行のたびにレイアウトを再導出しません
- 保守やバージョン管理が容易になります
バンドルされたスクリプトは scripts/generate_reading_list.js にあります。スキルがパイプラインをオーケストレーションし、JSON 入力を使ってスクリプトを呼び出します。
エージェントの整合性ルール(Research-Pack 規約)
PR #657 の監査に基づき、文言を固定しています。
- Consensus が返した情報のみを使用してください。 すべての論文タイトル、著者、ジャーナル、年、URL は、このセッションのツール呼び出しから取得する必要があります。トレーニングデータ由来の知識に基づく論文には
[Not from Consensus — model knowledge]のラベルを付け、除外します。 - 次に進む前に確認してください。 検索は、応答を受け取り、内容を確認するまで完了ではありません。
- 3 つの件数を記録してください。 送信したクエリ数/取得した論文数/引用した論文数。監査サマリーに明記します。
- 不足は埋めずに明示してください。 論文が 1 件で、結果が限られている旨の注記があるセクションのほうが、捏造で水増しされたセクションより望ましいです。
フェーズ 0:質問による確認(選択必須の質問 3 つ)
Q1(最初の質問)— シラバスの入力
シラバスを指定してください — 1 つ選択してください:
- ファイルパス(PDF、DOCX、テキスト)— 読み込みます
- 貼り付けた内容 — 以下に貼り付けてください
- 印刷されたシラバスの画像 — 画像を添付してください
質問する理由: 形式ごとに異なる読み取り方法(PDF/DOCX パーサー/画像認識)が必要です。最初に選択しておくことで、無駄な試行を防げます。
選択必須です。シラバスがない状態では開始しません。
Q2(Q1 に応じて質問)— 授業の対象者
授業の対象者 — 1 つ選択してください:
- 学部(入門レベル)
- 学部(上級/高学年)
- 大学院(修士/博士課程初期)
- 大学院(博士課程/上級)
- 専門職/継続教育
- 混合
質問する理由: 対象者によって、要約で使う専門用語のレベルや、ディスカッションの質問の複雑さが決まります。学部生向けの要約では各用語を定義し、大学院生向けでは技術的な知識を前提とします。学部生向けのディスカッションの質問では分析力を、大学院生向けでは批評と発展の力を試します。
標準設定については references/audience_calibration.md を参照してください。
Q3(Q1 に応じて質問)— 年の範囲
論文の対象年 — 1 つ選択してください:
- 直近 1 年(最新の論文のみ)
- 直近 2 年(デフォルト — 最新の論文+前年の背景情報)
- 直近 5 年(より幅広く、最近の基礎的な研究も含む)
質問する理由: 読書リストはすぐに古くなります。1 年で絞り込むと最新の内容になり、5 年で絞り込むと、すでに標準となっている最近の基礎的な研究も見つかります。Consensus 検索ごとに
year_minパラメーターを設定します。
デフォルト(直近 2 年)のある選択必須の質問です。
停止条件: フェーズ 1 の開始前に質問できるのは最大 3 つです。フェーズ 2 後に行うグループ分けと確認は、それ自体が質問による確認の機会となります。
フェーズ 1:シラバスを解析する
Q1 で選択された入力形式に応じて処理します。
- PDF:PDF リーダーを使用し、テキストを抽出します
- DOCX:pandoc または DOCX パーサーを使用し、テキストを抽出します
- テキスト/貼り付けた内容:そのまま読み取ります
- 画像:画像認識を使用し、テキストを抽出します
抽出したテキストから、以下を取得します。
- 授業名+教員名+学期
- トピックのリスト(講義タイトル、週ごとの構成など)
- 学習成果(明記されている場合。ない場合は説明から 3〜5 件を推定)
推定した学習成果には、DOCX 内で [inferred] のラベルを付けます。
フェーズ 2:トピックをグループ分けし、ユーザーに確認する
topic_grouper.py でグループ化する
scripts/topic_grouper.py を使って、関連するトピックを6〜12のセクションにまとめます。ヒューリスティック:密接に関連するトピックは統合し、複数分野にまたがるトピックは独立したセクションにします。
グループ化の確認チェックポイント(選択必須)
グループ化した後、次を提示します。
提案するセクション:[項目数を含むリスト]。次から1つ選んでください:
- 「問題ありません — このセクション構成で進めてください」
- 「セクション [X] と [Y] を統合する」
- 「セクション [X] を2つに分割する」
- 「[トピック] のセクションを追加する」
- 「セクション [X] を削除する」
確認する理由: グループ化によって検索の割り当てが決まります。グループ化が不適切だと、検索予算を不適切なクラスターに費やすことになります。検索で Consensus の呼び出しを消費する前に、進路を修正できる最後の手軽な機会です。
ユーザーが明示的に選択するまで、フェーズ3を開始しないでください。
フェーズ3:セクションごとに Consensus を検索する
順番に実行し、1秒あたり1件とします。セクションごとに1〜2件のクエリを使います。
応用分野との組み合わせ(重要)
トピックだけを検索するのではなく、トピック+応用分野を検索します。
| ❌ 一般的な検索 | ✅ 応用分野を組み合わせた検索 |
|---|---|
| 「enzyme kinetics」 | 「enzyme kinetics food processing applications」 |
| 「machine learning」 | 「machine learning clinical decision support」 |
| 「thermodynamics」 | 「thermodynamics renewable energy systems」 |
| 「social network analysis」 | 「social network analysis public health interventions」 |
これにより、論文の関連性が大幅に高まります。基準については、references/applied_domain_weaving.md を参照してください。
セクションごとのパターン
For each section:
1. Construct query: "{topic-keywords} {applied-domain-angle}" + year_min from Q3
2. Submit to Consensus (sequential, 1 q/sec gap enforced by citation_tracker)
3. Receive results
4. (If thin) submit one fallback query without applied-domain angle
5. Select 1-3 papers per section (15-25 total across all sections)
選定の優先順位
- 関連性 — 論文がセクションのトピックを直接扱っている
- レビュー論文/メタ分析 — 分野を総括している
- 被引用数 — 確立された研究である
- 応用分野との関連性 — コースの分野(例:工学と理論)に結び付いている
フェーズ4:要約とディスカッションの質問を作成する
要約の作成
論文ごとに:
- 平易な言葉を使います(Q2で確認した対象者に合わせます)
- 2〜3文にします
- 学部生向けの場合は専門用語を定義し、大学院生向けの場合は専門用語を理解している前提で書きます
品質基準
| ✅ 良い要約 | ❌ 悪い要約 |
|---|---|
| 「このレビューでは、地中海食、北欧食、ベジタリアン食など、さまざまな食事法によって血液中を循環する脂肪分子の種類がどのように変化するかを整理し、心疾患のリスクへの影響を示しています。」 | 「この論文では、食事介入におけるリピドミックプロファイルと心代謝への影響をレビューしています。」 |
ディスカッションの質問の作成
論文ごとに:
- Bloom の高次思考(応用/分析/評価)を促します
- 特定のコース学習成果に結び付けます
- 単なる想起ではなく、議論を促します
| ✅ 良い質問 | ❌ 悪い質問 |
|---|---|
| 「食事中の脂肪の質によってリポタンパク質のリピドームが変化するなら、不飽和脂肪を飽和脂肪より推奨する食事指針の生化学的根拠について、どのようなことが示唆されますか?」 | 「著者らは何を発見しましたか?」(単なる想起) |
scripts/discussion_question_validator.py を使って、想起だけを求める質問を検出します。
フェーズ5:同梱スクリプトで .docx を生成する
node scripts/generate_reading_list.js \
--input /tmp/syllabus_data.json \
--output /path/to/reading_list_<course>_<date>.docx
このスクリプトは、次のスキーマに従った JSON を受け取ります。
{
"courseTitle": "string",
"courseSubtitle": "string",
"generatedDate": "string",
"yearRange": "string",
"introText": "string",
"learningOutcomes": ["string", ...],
"sections": [
{
"heading": "string",
"papers": [
{
"title": "string",
"authors": "string",
"journal": "string",
"year": number,
"url": "string",
"summary": "string",
"question": "string"
}
]
}
],
"auditLog": {
"totalQueriesSent": number,
"totalPapersReceived": number,
"totalPapersCited": number,
"toolConstraints": "string",
"searchDetails": [
{
"section": "string",
"query": "string",
"papersReturned": number,
"papersSelected": number,
"status": "string"
}
],
"failures": []
}
}
このスクリプトは、次の処理を行います。
docxパッケージの読み込みにおける、複数の場所を使ったフォールバック- タイトルページ、Consensus へのリンクを含む導入部、学習成果のボックス、セクションごとに番号を付けた論文
- 完全な Consensus URL を使う
ExternalHyperlink(省略しません) - リストには Unicode の箇条書きではなく
LevelFormat.BULLETを使用 - 生成メタデータを含むフッター
- 入力の検証(必須フィールドがない場合は、適切にエラーを処理)
同梱スクリプトを使う理由(インラインではなく)については、references/bundled_script_pattern.md を参照してください。
フェーズ6:納品する
- ファイルパス
- チャットで監査概要を提示:「{file} を保存しました。{N} セクション × {M} 論文/{K} 件を引用。プランの種類:{tier}。」
- 検証:
python3 -c "import zipfile,sys; zipfile.ZipFile(sys.argv[1]).testzip()" <docx>で zip の整合性を確認します(出力がなければ正常です)。次に、必須セクションが含まれていることを確認します
ツール
| スクリプト | 役割 |
|---|---|
scripts/citation_tracker.py | Consensus の3カウント監査と、~/.syllabus_sessions/<session>.json における1秒間隔の逐次処理 |
scripts/topic_grouper.py | 抽出したトピックを6~12のセクションにヒューリスティックにグループ化 |
scripts/discussion_question_validator.py | Bloom の高次思考に関する品質チェック。想起のみを求める質問にフラグを付けます |
scripts/generate_reading_list.js | 同梱の Node.js DOCX 生成スクリプト — JSON 入力 → .docx 出力 |
参考資料
references/applied_domain_weaving.md— 検索品質の基本原則(7件以上のソース)references/audience_calibration.md— 学部生向けと大学院生向けの要約における専門用語(7件以上のソース)references/bundled_script_pattern.md— インラインではなく同梱する理由(7件以上のソース)
エラー処理
| 失敗 | 動作 |
|---|---|
| Consensus のレート制限に到達 | 3秒待って1回再試行し、ログに記録します |
| 検索結果がセクションで0件 | セクションに「結果が限られています — 手動での補足を検討してください」と記載します |
| 3回連続で失敗 | 停止し、ユーザーに通知して、ここまでに収集した内容を共有します |
docx パッケージがインストールされていない | スクリプトが npm install を試みます。それでも失敗する場合は、明確なメッセージを表示して終了します |
| DOCX の検証に失敗 | XML を展開して問題をログに記録し、ユーザーに再試行を依頼します |
| 対応していない形式のシラバス | 対応形式を一覧表示し、ユーザーに変換を依頼します |
| 学習成果を抽出できない | コースの説明から3~5件を推定し、文書内で推定であることを明記します |
避けるべきアンチパターン
- Consensus の呼び出しを並列化する(レート制限)
- 応用分野の観点なしにトピックを検索する(関連性が低い)
- Consensus の結果が少ない場合に、架空の項目でセクションを水増しする
- 一般的すぎるディスカッションの質問(「著者は何を発見しましたか?」)
- コースの対象レベルに合わない、専門用語の多い要約
- グループ化して確認する手順を省略する(検索が無駄になります)
- ハイパーリンク内の Consensus URL を途中で切り詰める
- docx 生成用の JavaScript を300行、スキル本体にインラインで記述する(同梱スクリプトを使用してください)
バージョン: 1.0.0
ソース仕様: megaprompts/10-syllabus-megaprompt.md(メンテナー向けのローカルドラフト仕様 — gitignore 対象のため、公開リポジトリには含まれていません)
ビルドパターン: Path B(直接変換)。同梱 JavaScript DOCX 生成スクリプトのバリアント。