mcpField
T
technology-selection

technology-selection

github.com/dotnet開発5.8k3.6k 回インストール1 日前に更新
リポジトリ

technology-selection について

technology-selectionは、タスクに応じたAI・機械学習技術の選定と、コード実装時の指針を示す.NET向けスキルです。表形式ML、LLM、エージェント、RAG、モデル推論などを区別し、計画のみの依頼ではコードを作成しません。

主な機能

  1. 01タスク別の技術選定ツリー
  2. 02.NET AIライブラリ層の案内
  3. 03方式ごとの実装ガードレール
  4. 04安全な設定と依存性注入の指針
  5. 05計画と実装の作業分け

活用シーン

  1. 01機械学習タスク向け.NET方式の選定
  2. 02LLM、エージェント、RAG構成の計画
  3. 03分野別の要件に沿ったAI機能の実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dotnet/skills --skill technology-selection

インストール後、Claude Code で/technology-selectionを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
agentic.md
classic-ml.md
copilot.md
llm.md
ollama.md
onnx.md
rag.md

詳細

.NET の AI と機械学習

まず適切なテクノロジーを選び、タスクで求められたことだけを実行してください。タスクで計画、比較、アーキテクチャが求められている場合(または「コードを書かないで」と指定されている場合)は、それだけを提示してください。指示されていないのに、スキャフォールディング、ビルド、コードの実行を行わないでください。

Step 1: タスクを分類する(判断ツリー)

該当する分岐とその理由を示し、対応するテクノロジーを選んでください。

タスクの種類テクノロジー理由
構造化データ/表形式データ:分類、回帰、クラスタリング、異常検知、レコメンデーションML.NET (Microsoft.ML)決定論的(固定シード)、クラウドへの依存なし、専用に設計されている
自然言語の理解、生成、要約、推論(単一のプロンプト → 応答、ツールなし)Microsoft.Extensions.AI 経由の LLM (IChatClient)言語処理能力があり、オーケストレーションが不要
エージェント型:複数ステップのツール/関数呼び出し、エージェントループ、マルチエージェントMicrosoft.Extensions.AI 上の Microsoft Agent Framework (Microsoft.Agents.AI)オーケストレーション、ツールのディスパッチ、反復制御が必要で、IChatClient には備わっていない
GitHub Copilot の拡張機能/カスタムの開発ワークフローエージェントGitHub Copilot SDK (GitHub.Copilot.SDK)Copilot エージェントランタイムと統合される
本番環境で事前学習済み/カスタムモデルを実行するONNX Runtime (Microsoft.ML.OnnxRuntime)ハードウェアアクセラレーションに対応し、形式に依存しない推論
ローカル/オフラインでの LLM 推論OllamaSharp (Ollama のモデル)プライバシーの保護、ネットワークから隔離された環境、コストの制約に対応
セマンティック検索、RAG、埋め込みの保存Microsoft.Extensions.VectorData.Abstractions(MEVD)+ プロバイダー(Azure AI Search、Milvus、MongoDB、pgvector、Pinecone、Qdrant、Redis、SQL)プロバイダーに依存しないベクトル検索
ドキュメントを取り込み、分割し、ベクトルストアに読み込むMicrosoft.Extensions.AI.DataIngestion(プレビュー)+ MEVD解析、分割、埋め込み、アップサートを実行
構造化データの予測と自然言語の推論の両方ハイブリッド:ML.NET によるスコアリング + LLM 推論レイヤーML.NET は再現性があり、LLM は説明を追加できる

重要なルール: ML.NET が適切に処理できるタスク(表形式データの分類、回帰、クラスタリング)に LLM を使わないでください。これらのタスクでは、LLM はより遅く、コストが高く、非決定的です。

Step 1b: ライブラリのレイヤーを選ぶ

レイヤーライブラリ使用する場面
抽象化Microsoft.Extensions.AI(MEAI)常に基盤として使用します。プロンプトと応答、および単純で範囲が限定された関数呼び出しには、IChatClient を直接使用します。
プロバイダー SDKAzure.AI.OpenAI / OpenAI / Azure.AI.Inference / OllamaSharpAddChatClient を介して MEAI の背後で動作する具体的なプロバイダーです。
オーケストレーションMicrosoft.Agents.AI(プレリリース)複数ステップのツール使用、永続化可能なエージェントループ、マルチエージェントのワークフローに使用します。
CopilotGitHub.Copilot.SDKCopilot プラットフォームの拡張機能を構築する場合にのみ使用します。

ルール:まず MEAI を使い、AddChatClient を介してプロバイダーをその背後に配置してください(ビジネスロジックからプロバイダーを直接呼び出さないでください)。複数ステップまたは永続化可能なエージェントのワークフローには、エージェントループを自作するのではなく Microsoft.Agents.AI を使ってください。同じワークフローで、生の HttpClient による OpenAI 呼び出しと MEAI を混在させないでください。Accord.NET(アーカイブ済み)は使用しないでください。新しいプロジェクトでは、既存の Semantic Kernel の機能や投資が必須要件でない限り、MEAI と Agent Framework を優先してください。AI/ML サービスは DI を介して登録し、シークレットは user-secrets/環境変数/Key Vault から読み込んでください。キーをハードコードしないでください。

ステップ 2:選択した分岐の必須事項を押さえ、次に深さを決めます

プランでも実装でも、すべての回答で選択した分岐のガードレールに対応する必要があります。

  • ML.NET — new MLContext(seed: …) を使用します(再現可能性)。TrainTestSplit を使用し、ホールドアウトセットで評価します。実際の指標(MicroAccuracy/MacroAccuracy/LogLoss、AUC/F1、または RMSE/R²)を報告します。PredictionEnginePool<TIn,TOut> を使って提供します(PredictionEngine のシングルトンは決して使用しません)。
  • LLM(MEAI) — AddChatClient 経由で登録した IChatClient に依存します(その背後にプロバイダーを配置します)。ChatOptions で Temperature と MaxOutputTokens を設定します。リトライ/タイムアウト(RetryingChatClient/Polly)を追加します。日付付きモデルを固定します。キーは user-secrets/env/Key Vault から読み込みます。sk-… キーをハードコードしてはいけません。非決定的な出力はスキーマに照らして検証し、フォールバックを用意します。
  • エージェント型(Agent Framework) — IChatClient 上で Microsoft.Agents.AI を使ってオーケストレーションします(独自実装のループは使いません)。MaximumIterations とトークン/コストの上限を設定します。各ツールには明確なスキーマを定義します(AIFunctionFactory.Create)。各ステップをログに記録します(機密情報を含む生のコンテンツは記録しません)。
  • RAG/埋め込み — セマンティックチャンク分割を行います(固定サイズではありません)。IEmbeddingGenerator を使用し、埋め込みをキャッシュします(クエリごとに再埋め込みしません)。Microsoft.Extensions.VectorData.Abstractions(MEVD)とユーザーが指定したプロバイダー(例:pgvector)を使って保存/クエリします。類似度の最小スコアでフィルタリングします。各回答のソース帰属情報を保持します。ユーザーが指定した UI/ストレージを尊重し、実在する NuGet パッケージのみを使用します。

次に、深さを決めます。

  • プラン/比較/アーキテクチャのみ(または「コードを書かないでください」)の場合:上記の必須事項を使い、このファイルだけを参照して回答します。リファレンスを開かないでください。ここに記載された分岐の必須事項だけで、選定やプランの作成には十分です。RAG のプランでは、チャット、取り込み/チャンク分割、埋め込み、ベクトルストレージ、ソース帰属情報、および指定された UI/ストレージを扱います。
  • 実装コードを作成する場合:パッケージと実装ガイダンスについて、該当するリファレンスを読みます(選択した分岐のみを読みます。Hybrid の場合は Classic ML.NET と LLM の両方を読みます)。

検証

  • 選定が判断ツリーに従っている — ML.NET で対応できるタスクに LLM を使っていない
  • 要求された内容のみを作成している(プランのみの依頼にはコードではなくプランを提示する)
  • AI/ML サービスは DI 経由で登録し、設定には IOptions<T> を使い、キーは安全なソースから取得している
  • 分岐のガードレール(ステップ 2 の必須事項と、実装時はリファレンスの内容)を満たしている
  • 実装後、ビルドし、既存のテストを実行する

拒否すべきアンチパターン

アンチパターン代替案
表形式データの分類に LLM を使うML.NET を使います。高速で、低コストかつ決定論的です
再試行やタイムアウトなしで LLM を呼び出すRetryingChatClient または Polly の再試行を追加します
コミット済みの appsettings.json に API キーを記載するuser-secrets / env / Key Vault
Accord.NET を使う、または要件がないのに Semantic Kernel をデフォルトで選ぶML.NET。新規開発では MEAI + Microsoft.Agents.AI を優先します
IChatClient を使った手書きの複数ステップのツールループMicrosoft.Agents.AI(MaximumIterations、ツールのディスパッチ)
単一のプロンプト→応答に Agent Framework を使うIChatClient を直接使います
MEAI と併用して、ビジネスロジックで生の HttpClient / OpenAI SDK を使う抽象化レイヤーは1つにします。IChatClient に依存します
ASP.NET Core で PredictionEngine をシングルトンにするPredictionEnginePool<TIn,TOut>(スレッドセーフではありません)
チャンク分割や関連性フィルタリングなしで RAG を使うセマンティックチャンク分割 + 類似度の最低スコア
.NET でニューラルネットワークをゼロから自作するONNX Runtime または LLM API を介して事前学習済みモデルを使います

コメント