Skip to main content

さまざまなタスクを使った AI モデルの比較

ワークフローに適した AI モデルを選ぶのに役立つサンプル プロンプト、回答、ガイダンスと共に、一般的な開発者タスクの実際の例を確認します。

概要

Copilot Chat でサポートされている各 AI モデルには、それぞれ異なる長所があります。 この記事では、どのモデルを使うかを判断できるように、一般的な開発者タスクの実際の例と、サンプル プロンプト、回答、特定のモデルが適している理由に関するガイダンスを提供します。

これらの例は、モデルの推論スタイル、回答の深さ、視覚的な入力を処理する能力がどのように異なるかを示しています。 これらを使って出力の品質を比較し、特定のワークフローに適したモデルを選びます。

サポートされているモデルの詳細な一覧と機能の比較については、「タスクに適した AI モデルの選択」を参照してください。

GPT-4o

GPT-4o は、速度、応答性、汎用推論を利用する一般的な開発タスクに最適な既定の選択肢です。 幅広い知識、高速な繰り返し、または基本的なコードの理解が必要なタスクに取り組んでいる場合は、GPT-4o が最適なモデルである可能性があります。

シナリオ例

Python サービスでアクセス制御のためのヘルパー関数を作成するシナリオを考えてみましょう。 あなたは、関数の目的を明確にするために docstring を追加したいと考えています。

編集者にドキュメントへのアクセス権を付与するヘルパー関数を次に示します。

def grant_editor_access(user_id, doc_id):
    access = AccessManager()
    access.assign_role(
        resource_type="document",
        resource_id=doc_id,
        role="editor",
        user_id=user_id
    )

プロンプトの例

Add a docstring to the function that explains what it does.

応答の例

Note

次の応答は例です。 Copilot Chat の応答は非決定的であるため、ここで示したものとは異なる応答が返される可能性があります。

def grant_editor_access(user_id, doc_id):
    """
    Grants editor access to a specific document for a given user.

    This function uses the AccessManager to assign the "editor" role
    to the specified user for the provided document ID.

    Args:
        user_id (str): The ID of the user to grant access to.
        doc_id (str): The ID of the document to which access is being granted.
    """
    access = AccessManager()
    access.assign_role(
        resource_type="document",
        resource_id=doc_id,
        role="editor",
        user_id=user_id
    )

GPT-4o が適している理由

  • この関数は短く、自己完結型であるため、docstring を迅速に生成するのに最適です。
  • GPT-4o には、パターンを認識し、明確かつ簡潔な説明を提供する機能があります。
  • このタスクには、深い推論や複雑なロジックは必要ありません。

o3-mini

OpenAI o3-mini は、待機時間とリソース使用量を低く抑えながらコーディング パフォーマンスを実現するように設計された、高速でコスト効率の高い推論モデルです。 o3-mini は、コーディング ベンチマークで o1 を上回り、回答時間は o1-mini と同等です。 Copilot は、OpenAI の "中程度" の推論作業を使うように構成されています。

シナリオ例

ソフトウェア ライセンス システムを扱うシナリオを考えてみましょう。 ユーザー レコードの一覧があり、それぞれが nameactivesignup_date などのフィールドを持つディクショナリとして格納されています。 あなたは、アクティブ ユーザーのみを検索し、サインアップ日順に並べて、最新のユーザーが最後に表示したいと考えています。

処理対象のユーザー一覧を次に示します。

users = [
    {"name": "Alice", "active": True, "signup_date": "2023-12-10"},
    {"name": "Bob", "active": False, "signup_date": "2023-11-05"},
    {"name": "Charlie", "active": True, "signup_date": "2024-01-15"}
]

プロンプトの例

Filter the list of users to only include active users, and sort them by signup_date.

応答の例

Note

次の応答は例です。 Copilot Chat の応答は非決定的であるため、ここで示したものとは異なる応答が返される可能性があります。

# Filter to only include active users
active_users = [user for user in users if user["active"]]

# Sort active users by signup_date
active_users_sorted = sorted(active_users, key=lambda user: user["signup_date"])

print(active_users_sorted)

o3-mini が適している理由

  • このタスクには単純なフィルター処理と並べ替えが含まれ、深い推論は必要ありません。
  • 回答が速いため、開発中の迅速なイテレーションに最適です。

Gemini 2.0 Flash

Gemini 2.0 Flash は画像入力をサポートしているため、開発者は、UI の検査、図の分析、レイアウトのデバッグなどのタスクに視覚的なコンテキストを取り入れることができます。 このため、Gemini 2.0 Flash は、画像ベースの入力が問題解決を促進するシナリオに特に役立ちます。たとえば、Copilot に依頼して、アクセシビリティの問題について UI スクリーンショットを分析したり、レイアウトの視覚的なバグを理解できるようにしたりします。

シナリオ例

ショッピング カート システムを設計しており、CartProductUserOrder 間の関係の概要を示す UML クラス ダイアグラムがあります。 あなたは、システムを最初から記述するのではなく、ダイアグラムの画像をアップロードして、Copilot にクラスの生成を依頼したいと考えています。

カート、製品、ユーザー、注文のクラスの詳細を示すショッピング カートの UML ダイアグラムのスクリーンショット。

プロンプトの例

Use this UML diagram to generate the classes for a shopping cart system.

応答の例

Note

次の応答は例です。 Copilot Chat の応答は非決定的であるため、ここで示したものとは異なる応答が返される可能性があります。

% data variables.product.prodname_copilot_short %} により、ダイアグラム内のクラスごとにクラス間の関係を含むクラスが生成されます。 Cart クラスに対して生成されたコード例を次に示します。

from cart_item import CartItem
from order import Order

class Cart:
    def __init__(self, cart_id, user_id):
        self.cart_id = cart_id
        self.user_id = user_id
        self.items = []

    def add_item(self, item):
        self.items.append(item)

    def remove_item(self, item):
        self.items = [i for i in self.items if i != item]

    def calculate_total(self):
        return sum(item.quantity * item.product.price for item in self.items)

    def place_order(self):
        # Implementation for placing an order
        return Order("", None, 0)

Gemini 2.0 Flash が適している理由

  • UML ダイアグラム、ワイヤーフレーム、フローチャートなどの視覚的な資産を解釈して、コードのスキャフォールディングを生成したり、アーキテクチャを提案したりできます。
  • UI レイアウトやフォーム デザインのスクリーンショットをレビューして生成する場合に役立ちます。

Claude 3.5 Sonnet

Claude 3.5 Sonnet は、ドキュメントの作成、言語固有の質問への回答、定型コードの生成など、日常的なコーディングのサポートに適しています。 タスクを過度に複雑にすることなく、役立つ直接的な回答を提供します。 コストに制約のある環境で作業している場合は、Claude 3.5 Sonnet を使うことをお勧めします。Claude 3.7 Sonnet と同じタスクの多くで安定したパフォーマンスを発揮しますが、リソース使用量は大幅に少なくなります。

シナリオ例

アプリケーションの単体テストと統合テストの両方を実装するシナリオを考えてみましょう。 あなたは、包括的であり、考え得る、または考えもしなかったあらゆるエッジ ケースをカバーしたテストにしたいと考えています。

シナリオの詳細なチュートリアルについては、「GitHub Copilot を使ってテストを記述する」を参照してください。

Claude 3.5 Sonnet が適している理由

  • テスト生成、定型スキャフォールディング、検証ロジックなどの日常的なコーディング タスクで優れたパフォーマンスを発揮します。
  • このタスクは複数ステップの推論に重点を置きますが、ロジックはそれほど深くないため、高度ではないモデルの信頼ゾーン内に収まります。

Claude 3.7 Sonnet

Claude 3.7 Sonnet は、ソフトウェア開発ライフサイクルで最初の設計からバグ修正、メンテナンス、最適化に至るまで、優れています。 コンポーネント間のコンテキストを理解することが重要な、複数ファイルのリファクタリングまたはアーキテクチャ計画に特に適しています。

シナリオ例

レガシ COBOL アプリケーションを Node.js 形式に書き直して最新化するシナリオを考えてみましょう。 このプロジェクトには、なじみのないソース コードを理解すること、言語間でロジックを変換すること、置換を繰り返し構築すること、テスト スイートを通じて正確性を確認することが含まれます。

シナリオの詳細なチュートリアルについては、「GitHub Copilot を使ってレガシ コードを最新化する」を参照してください。

Claude 3.7 Sonnet が適している理由

  • Claude 3.7 Sonnet は複雑なコンテキストを適切に処理するため、複数のファイルまたは言語にまたがるワークフローに適しています。
  • そのハイブリッド推論アーキテクチャにより、迅速な回答と、より深く段階的な問題解決を切り替えることができます。

参考資料