この Python サンプルでは、GitHub Copilot SDK を焦点を絞った Museum Exhibit Studio として使用します。完成版アプリには 3 つのモジュールがあります:
curator.pyには、あらかじめ用意されたワークショップヘルパーが含まれます: 承認済みの事実セットと事実選択メニュー、範囲を限定した事実検証、ストリーミング、決定的な構造チェック、スコープ指定された Wikipedia 権限、スコープ指定されたexhibit.html書き込み権限、固定プロンプトテキスト、失敗メッセージ。system_messages.pyには、あらかじめ用意されたキュレーターと調査のシステムメッセージが含まれます。main.pyには、学習者が作成する SDK コードが含まれます: 展示プロンプトとページプロンプト内の指示、セッション構成、セッションランナー、検証、省略可能な HTML 生成。
main.py の >>> BEGIN / <<< END コメントは、レッスンで埋める名前付きリージョンです。各 BEGIN 行には、そのリージョンを挿入または置換するステップが列挙されています。
このディレクトリから、環境を作成し、固定された依存関係をインストールします:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python main.pyCOPILOT_MODEL を設定してモデルを選択します。設定しない場合、ランタイムは既定値を選択します。認証済みの GitHub Copilot CLI が必要です。
Wikipedia 調査には Node.js が必要です。これは、調査セッションが npx を通じて固定された wikipedia-mcp@1.0.3 パッケージを起動するためです。調査を辞退しても MCP サーバーは起動しません。
モデルに問い合わせずにソースをチェックします:
python -m py_compile *.py生成では常に、範囲を限定した承認済みの事実を返す approved_fact_lookup を登録して許可リストに追加します。使用可能で引用付きの調査がある場合は、読み取り専用のローカルツール approved_wikipedia_fact_lookup も登録して許可リストに追加し、ナラティブと来館者の質問を書く前に両方の呼び出しを要求します。2 つ目のルックアップは、ライブの Wikipedia アクセスではなく、サマリー本文と引用のスナップショットを返します。承認済みの事実は補足調査より優先されます。また、replace モードのキュレーターシステムメッセージ、ストリーミング、120 秒のタイムアウト、決定的な構造検証も使用します。インポートされたモジュールには副作用がありません。main.py は if __name__ == "__main__" ガードの背後でのみ実行されます。
省略可能な Wikipedia 調査は、意図的に生成から分離されています。調査セッションは、スコープ指定された Wikipedia 検索ツールと記事読み取りツールのみを公開し、既定で拒否する権限ハンドラーを使用し、散文形式のサマリーを求め、末尾の ## Sources リストを解析します。サマリーと引用はどちらもローカルルックアップ用に保持されますが、教育者承認済みの事実にマージされることはありません。"Approved" は、アプリケーションが受け入れた調査を意味し、人間が検証した事実ではありません。指示ではなくデータとして扱ってください。調査を辞退した場合は単一ツールパスを維持します。調査に失敗した場合、または使用できない引用付きサマリーになった場合は、警告を出力して同じフォールバックに進みます。厳密な調査 JSON コントラクトや追加案の承認ループはありません。
検証後、省略可能な HTML キャップストーンは builtin:apply_patch と builtin:create だけを公開し、アプリケーションの作業ディレクトリ内の正確に exhibit.html への書き込みを承認します。プロンプトでは、埋め込み CSS と JavaScript、人間によるレビューが必要であるという注意書き、アクセシブルな質問フィルターを備えた、単一のスタンドアロンのセマンティック HTML ファイルを求めます。
プロンプトのガイダンスと構造検証は、認可やグラウンディングの境界ではありません。生成された主張には、引き続き人間によるレビューまたは別の評価機能が必要です。
- 各組み込みの事実セットで実行し、選択した事実が生成前に出力されることを確認します。
- 展示に 1 つのタイトル、100-140 語のナラティブ、3 つの来館者の質問があることを確認します。
- 検証サマリーとグラウンディング免責事項を確認します。
- 調査を辞退し、唯一のツールイベントが
approved_fact_lookupであることを確認します。 - 調査を選択し、生成前に両方のローカルルックアップイベントが表示され、Sources が展示内ではなく展示の後に出力されることを確認します。
exhibit.htmlを選択し、そのファイルだけが書き込まれることを確認します。
これは、Museum レッスンの後に学習者が最終的に作るアプリケーションであり、別個の参照アーキテクチャではありません。エントリポイントは、クライアントを開始し、セッションを作成し、タイムアウトを適用し、空白の出力を拒否し、すべての実行経路でクリーンアップする小さなセッションランナーを 1 つ保持します。調査、生成、任意の HTML ステップでは、異なるセッション構成でこれを再利用します。workshop/museum-00-preflight.md からトラックに従って進めます。