microsoft/generative-ai-for-beginners

⭐ 88,703 🍴 46,004 Jupyter Notebook📄 MIT License GitHubで見る →

主な特徴

  • 21の体系的なレッスンで構成された包括的なカリキュラム
  • PythonとTypeScriptの両方でのコード実装例
  • Azure OpenAI、OpenAI API、GitHub Model Catalog、Hugging Faceをサポート
  • 45以上の言語への自動翻訳によるグローバル対応
  • ビデオレッスン、インタラクティブなJupyterノートブック、実践的な課題を含む
  • 教育技術スタートアップのシナリオを通じた実践的な学習
  • GitHub CodespacesとDockerによる開発環境のサポート
  • 責任あるAI利用とセキュリティのベストプラクティスを強調

リポジトリ解析: microsoft/generative-ai-for-beginners

基本情報

  • リポジトリ名: microsoft/generative-ai-for-beginners
  • 主要言語: Jupyter Notebook
  • スター数: 88,703
  • フォーク数: 46,004
  • 最終更新: 2025年7月時点で活発に更新中
  • ライセンス: MIT License
  • トピックス: generative-ai, curriculum, education, llm, azure-openai, openai, github-models, responsible-ai, prompt-engineering

概要

一言で言うと

MicrosoftによるGenerative AI(生成AI)の基礎から応用までを学べる包括的な21レッスンの教育カリキュラムで、開発者がLLMを使用したアプリケーション構築に必要なすべてを提供。

詳細説明

このリポジトリは、Microsoft Cloud Advocatesによって作成された、Generative AIアプリケーションの構築に必要なすべてを教える21のレッスンで構成された教育コースです。「Learn」レッスンで概念を学び、「Build」レッスンで実践的なコード実装を行う構成となっており、初心者から中級者まで段階的に学習できます。PythonとTypeScriptの両方でコード例が提供され、Azure OpenAI Service、OpenAI API、GitHub Model Catalogなど複数のAIサービスプロバイダーに対応しています。45以上の言語に自動翻訳されており、グローバルな学習者コミュニティをサポートしています。

主な特徴

  • 21の体系的なレッスンで構成された包括的なカリキュラム
  • PythonとTypeScriptの両方でのコード実装例
  • Azure OpenAI、OpenAI API、GitHub Model Catalog、Hugging Faceをサポート
  • 45以上の言語への自動翻訳によるグローバル対応
  • ビデオレッスン、インタラクティブなJupyterノートブック、実践的な課題を含む
  • 教育技術スタートアップのシナリオを通じた実践的な学習
  • GitHub CodespacesとDockerによる開発環境のサポート
  • 責任あるAI利用とセキュリティのベストプラクティスを強調

使用方法

インストール

前提条件

  • Python 3.8以上(推奨)またはNode.js 16以上
  • GitHubアカウント(リポジトリをフォークするため)
  • Azure OpenAI Service、OpenAI API、またはGitHub Model Catalogへのアクセス
  • (オプション)Miniconda(Python環境管理用)
  • (オプション)Docker Desktop(ローカル開発環境用)

インストール手順

# 方法1: リポジトリをクローン
git clone https://github.com/microsoft/generative-ai-for-beginners
cd generative-ai-for-beginners

# Pythonの依存関係をインストール
pip install -r requirements.txt

# 方法2: GitHub Codespacesを使用(推奨)
# 1. GitHubでリポジトリをフォーク
# 2. "Code" > "Codespaces" > "Create codespace on main"を選択
# 3. 自動的に開発環境が構築される

# 方法3: Dev Containerを使用(ローカル)
# 1. Docker Desktopをインストール
# 2. VS Codeで"Reopen in Container"を選択

基本的な使い方

Hello World相当の例

# Azure OpenAIを使用した最小限のテキスト生成例
from openai import AzureOpenAI
import os
from dotenv import load_dotenv

load_dotenv()

client = AzureOpenAI(
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_key=os.environ['AZURE_OPENAI_API_KEY'],
    api_version="2024-02-01"
)

deployment = "gpt-35-turbo"
prompt = "Hello, AI! Tell me about yourself in one sentence."
messages = [{"role": "user", "content": prompt}]

completion = client.chat.completions.create(
    model=deployment,
    messages=messages
)

print(completion.choices[0].message.content)

実践的な使用例

# チャットアプリケーションの実装例
import os
from openai import AzureOpenAI
from dotenv import load_dotenv

load_dotenv()

client = AzureOpenAI(
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_key=os.environ['AZURE_OPENAI_API_KEY'],
    api_version="2024-02-01"
)

deployment = "gpt-35-turbo"

# システムプロンプトで振る舞いを定義
messages = [
    {"role": "system", "content": "You are a helpful AI teaching assistant specialized in explaining programming concepts."},
    {"role": "user", "content": "What is recursion in programming?"}
]

# 詳細なパラメータ設定
completion = client.chat.completions.create(
    model=deployment,
    messages=messages,
    temperature=0.7,  # 創造性のレベル
    max_tokens=150,   # 最大トークン数
    top_p=0.95,       # 核サンプリング
    frequency_penalty=0,
    presence_penalty=0,
    stop=None
)

print("Assistant:", completion.choices[0].message.content)

# 会話の継続
messages.append({"role": "assistant", "content": completion.choices[0].message.content})
messages.append({"role": "user", "content": "Can you give me a simple example in Python?"})

completion = client.chat.completions.create(
    model=deployment,
    messages=messages,
    temperature=0.3  # コード例では低い温度で確実性を高める
)

print("Assistant:", completion.choices[0].message.content)

高度な使い方

# Function Callingを使用した外部ツール統合の例
import json
from openai import AzureOpenAI

# 検索関数の定義
def search_courses(role, product=None, level=None):
    # 実際のデータベース検索ロジック
    courses = [
        {"title": "Python for Beginners", "role": "developer", "level": "beginner"},
        {"title": "Advanced AI with Azure", "role": "developer", "level": "advanced"}
    ]
    # フィルタリングロジック
    results = [c for c in courses if c["role"] == role]
    if level:
        results = [c for c in results if c["level"] == level]
    return json.dumps(results)

# Function定義
functions = [
    {
        "name": "search_courses",
        "description": "Retrieves courses from the search index based on the parameters provided",
        "parameters": {
            "type": "object",
            "properties": {
                "role": {
                    "type": "string",
                    "description": "The role of the learner (e.g., developer, data scientist)"
                },
                "product": {
                    "type": "string",
                    "description": "The product that the lesson is covering"
                },
                "level": {
                    "type": "string",
                    "description": "The level of experience (beginner, intermediate, advanced)"
                }
            },
            "required": ["role"]
        }
    }
]

# Function Callingを有効にしてリクエスト
messages = [{"role": "user", "content": "Find me some beginner developer courses"}]

response = client.chat.completions.create(
    model=deployment,
    messages=messages,
    functions=functions,
    function_call="auto"
)

# 関数呼び出しの処理
if response.choices[0].message.function_call:
    function_name = response.choices[0].message.function_call.name
    function_args = json.loads(response.choices[0].message.function_call.arguments)
    
    # 実際の関数を呼び出し
    if function_name == "search_courses":
        result = search_courses(**function_args)
        
        # 結果を会話に追加
        messages.append(response.choices[0].message)
        messages.append({
            "role": "function",
            "name": function_name,
            "content": result
        })
        
        # 最終的な応答を生成
        final_response = client.chat.completions.create(
            model=deployment,
            messages=messages
        )
        print(final_response.choices[0].message.content)

ドキュメント・リソース

公式ドキュメント

  • README.md: プロジェクト概要、セットアップ手順、学習パスの説明
  • 00-course-setup/SETUP.md: 詳細な環境セットアップガイド(各AIサービスの設定方法)
  • docs/: Docsifyを使用したWebドキュメント(サイドバーナビゲーション付き)
  • CONTRIBUTING.md: コントリビューション方法、CLA署名、翻訳ガイドライン
  • 各レッスンのREADME: 概念説明、学習目標、実装手順、課題

サンプル・デモ

  • 06-text-generation-apps/: テキスト生成アプリの完全な実装例
  • 07-building-chat-applications/: チャットボット構築の段階的な例
  • 08-building-search-applications/: ベクトル検索とRAGの実装
  • 09-building-image-applications/: DALL-E統合による画像生成
  • 11-integrating-with-function-calling/: 外部API統合のデモ
  • 17-ai-agents/: AutoGenフレームワークを使用したAIエージェント

チュートリアル・ガイド

  • ビデオチュートリアル(各レッスンの冒頭)
  • インタラクティブなJupyterノートブック
  • プレゼンテーション資料(PowerPoint/PDF形式)
  • スケッチノート(視覚的な学習ガイド)
  • 追加リソースへのリンク集

技術的詳細

アーキテクチャ

全体構造

教育カリキュラムとして設計されており、各レッスンが独立したモジュールとして機能。プログレッシブな難易度設定により、基礎から応用まで段階的に学習可能。マルチ言語・マルチプラットフォーム対応により、様々な開発環境で利用可能。

ディレクトリ構成

generative-ai-for-beginners/
├── 00-course-setup/          # コースセットアップと環境構築
├── 01-introduction-to-genai/ # 生成AI入門
│   ├── README.md            # レッスン内容
│   ├── translations/        # 多言語翻訳
│   └── images/              # 図解資料
├── 02-exploring-and-comparing-different-llms/
│   ├── python/              # Pythonコード例
│   │   ├── aoai-app.py     # Azure OpenAI
│   │   ├── oai-app.py      # OpenAI API
│   │   └── githubmodels.py # GitHub Models
│   └── typescript/          # TypeScript実装
├── ...(21レッスンまで続く)
├── docs/                    # Docsify用ドキュメント
├── images/                  # 共通画像リソース
├── presentations/           # プレゼンテーション資料
└── .github/workflows/       # CI/CDパイプライン

主要コンポーネント

  • レッスンモジュール: 各レッスンが独立した学習単位

    • 場所: /[番号]-[レッスン名]/
    • 依存: 前のレッスンの知識を前提とする場合あり
    • インターフェース: README.mdによる統一的な学習体験
  • コード実装: 言語別の実装例

    • 場所: /[レッスン]/python/, /[レッスン]/typescript/
    • 依存: requirements.txt, package.jsonで管理
    • インターフェース: 統一的なファイル命名規則(aoai-, oai-, githubmodels-)
  • ノートブック: インタラクティブな学習環境

    • 場所: /[レッスン]/*.ipynb
    • 依存: Jupyter環境
    • インターフェース: セル単位での実行と説明

技術スタック

コア技術

  • 言語:

    • Python 3.8+ (主要言語、データサイエンス向け機能を活用)
    • TypeScript/JavaScript (Node.js 16+、型安全性を重視)
    • .NET (別リポジトリで提供、C#開発者向け)
  • AIフレームワーク/SDK:

    • openai (4.103.0): OpenAI公式Python SDK
    • @azure/openai: Azure OpenAI TypeScript SDK
    • azure-ai-inference: Azure AI推論SDK
    • autogen: マルチエージェントシステム構築
  • 主要ライブラリ:

    • tiktoken: トークンカウント用
    • python-dotenv: 環境変数管理
    • pandas, numpy: データ処理
    • scikit-learn: 機械学習ユーティリティ
    • matplotlib: 可視化

開発・運用ツール

  • ビルドツール:

    • pip/requirements.txt (Python)
    • npm/package.json (Node.js)
    • Dev Containers (統合開発環境)
  • テスト: 明示的なテストフレームワークは使用せず、教育目的のためサンプルコードの動作確認に重点

  • CI/CD:

    • GitHub Actions による自動化
    • Markdown検証 (リンク切れ、パストラッキング)
    • 自動翻訳ワークフロー
    • Issue/PR管理の自動化
  • デプロイ:

    • GitHub Pages (ドキュメント)
    • GitHub Codespaces (クラウド開発環境)

設計パターン・手法

  • 環境変数パターン: .envファイルによる設定管理
  • リトライパターン: API呼び出しの信頼性向上
@retry(
    wait=wait_random_exponential(min=10, max=45),
    stop=stop_after_attempt(20),
    retry=retry_if_not_exception_type(openai.InvalidRequestError),
)
  • Factory パターン: 複数のAIプロバイダー対応
  • Chain of Responsibility: プロンプトエンジニアリングでの段階的処理

データフロー・処理フロー

  1. 基本的なテキスト生成フロー:

    • ユーザー入力 → プロンプト構築 → API呼び出し → レスポンス処理 → 出力
  2. RAG (Retrieval Augmented Generation) フロー:

    • ドキュメント分割 → エンベディング生成 → ベクトルDB保存
    • クエリ → 類似検索 → コンテキスト構築 → LLM呼び出し → 応答生成
  3. Function Calling フロー:

    • ユーザーリクエスト → 関数定義付きLLM呼び出し
    • → 関数識別 → 実関数実行 → 結果をLLMに返却 → 最終応答

API・インターフェース

公開API

Chat Completions API

  • 目的: テキスト生成とチャット応答
  • 使用例:
response = client.chat.completions.create(
    model="gpt-35-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ],
    temperature=0.7,
    max_tokens=150,
    top_p=0.95,
    frequency_penalty=0,
    presence_penalty=0,
    stop=None
)

Embeddings API

  • 目的: テキストのベクトル化
  • 使用例:
response = client.embeddings.create(
    input="Your text here",
    model="text-embedding-ada-002"
)
embedding = response.data[0].embedding

Image Generation API (DALL-E)

  • 目的: テキストから画像生成
  • 使用例:
response = client.images.generate(
    model="dall-e-3",
    prompt="A futuristic classroom with AI teachers",
    size="1024x1024",
    quality="standard",
    n=1
)
image_url = response.data[0].url

設定・カスタマイズ

設定ファイル

# .env ファイルの例
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_API_KEY=your-api-key
AZURE_OPENAI_DEPLOYMENT_NAME=gpt-35-turbo
AZURE_OPENAI_API_VERSION=2024-02-01

# OpenAI API使用時
OPENAI_API_KEY=sk-...

# GitHub Models使用時
GITHUB_TOKEN=ghp_...
MODEL_ENDPOINT=https://models.inference.ai.azure.com

拡張・プラグイン開発

Function Callingを使用した拡張機能の実装パターンが提供されており、外部システムとの統合が可能。AutoGenフレームワークを使用したマルチエージェントシステムの構築例も含まれる。

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • スレッドプールによる並行処理: 最大10スレッドでの並列API呼び出し
  • 指数バックオフによるリトライ: 10-45秒のランダム待機、最大20回試行
  • トークン最適化: tiktokenによる事前カウントでコスト削減

スケーラビリティ

  • API レート制限への対応(リトライロジック)
  • バッチ処理による効率化
  • 非同期処理パターンの実装例(TypeScript)

制限事項

  • API呼び出しのレート制限とトークン制限
  • モデルごとのコンテキストウィンドウサイズ
  • 画像生成APIの1日あたりの生成数制限
  • リアルタイムストリーミングは基本例には含まれない

評価・所感

技術的評価

強み

  • 包括的なカリキュラム設計により、体系的な学習が可能
  • 複数のAIサービスプロバイダーに対応し、ベンダーロックインを回避
  • 実践的なコード例により、即座に応用可能
  • 多言語対応により、グローバルな学習コミュニティを形成
  • MicrosoftのCloud Advocatesによる高品質なコンテンツ

改善の余地

  • テスト自動化の欠如(教育目的のため意図的か)
  • より高度なトピック(ファインチューニング、モデル最適化)の詳細な実装例
  • プロダクション環境向けのベストプラクティスの追加
  • パフォーマンスベンチマークやコスト最適化の具体例

向いている用途

  • 生成AI開発を始めたい開発者の学習
  • 企業の生成AI導入前の技術評価とPOC開発
  • 教育機関でのAIカリキュラムの基礎教材
  • ハッカソンやワークショップの教材
  • 生成AIアプリケーションのプロトタイプ開発

向いていない用途

  • 大規模プロダクション環境の実装参考(追加の考慮事項が必要)
  • 最先端の研究レベルのAI実装
  • 特定ドメインに特化した高度なファインチューニング
  • リアルタイムストリーミングが必須のアプリケーション

総評

microsoft/generative-ai-for-beginnersは、生成AI開発の教育リソースとして非常に優れた設計となっている。段階的な学習パス、実践的なコード例、複数言語・プラットフォーム対応により、幅広い開発者が生成AIアプリケーション開発を始めるための理想的な出発点となる。特に、責任あるAI利用やセキュリティへの配慮も含まれており、実務での応用を意識した内容となっている。一方で、プロダクション環境での大規模展開には追加の考慮事項が必要であり、このリポジトリで学んだ基礎を元に、より高度な実装パターンやパフォーマンス最適化を学ぶ必要がある。