mcpField
T
technology-selection

technology-selection

github.com/dotnet开发5.8k3.6k 次安装1 天前更新
代码仓库

关于 technology-selection

technology-selection 是一项 .NET 技能,根据任务选择 AI 和机器学习技术,并在需要编写代码时提供实施约束。它区分表格机器学习、LLM、Agent、RAG 和模型推理等场景,也会将仅需计划的请求与实现任务分开处理。

主要功能

  1. 01按任务选择技术的决策树
  2. 02.NET AI 库分层指导
  3. 03针对不同方案的实施约束
  4. 04安全配置与依赖注入指导
  5. 05区分计划与代码实现流程

适用场景

  1. 01为机器学习任务选择 .NET 方案
  2. 02规划 LLM、Agent 或 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 与机器学习

先选对技术,然后只交付任务要求的内容。如果任务要求制定计划、进行比较或设计架构(或明确说“不要编写代码”),就按要求完成——不要擅自搭建项目、构建或运行代码。

步骤 1:判断任务类型(决策树)

说明适用的分支及原因,然后选择对应的技术。

任务类型技术原因
结构化/表格数据:分类、回归、聚类、异常检测、推荐ML.NET(Microsoft.ML)结果确定(固定种子)、不依赖云、专为此类任务打造
自然语言理解、生成、摘要、推理(单次提示词 → 响应,不使用工具)通过 Microsoft.Extensions.AI 使用 LLM(IChatClient)提供语言能力,无需编排
Agent 式任务:多步骤工具/函数调用、Agent 循环、多 Agent基于 Microsoft.Extensions.AI 使用 Microsoft Agent Framework(Microsoft.Agents.AI)需要编排、工具分派和迭代控制;IChatClient 不具备这些能力
GitHub Copilot 扩展/自定义开发工作流 AgentGitHub Copilot SDK(GitHub.Copilot.SDK)与 Copilot Agent 运行时集成
在生产环境中运行预训练/自定义模型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解析、分块、生成嵌入并执行 upsert
同时需要结构化预测和自然语言推理混合方案:ML.NET 评分 + LLM 推理层ML.NET 具有可复现性;LLM 可补充解释

**重要规则:**对于 ML.NET 能妥善处理的任务(表格分类、回归、聚类),不要使用 LLM——LLM 处理这些任务速度更慢、成本更高,结果也不确定。

步骤 1b:选择库层

层库适用场景
抽象层Microsoft.Extensions.AI(MEAI)始终作为基础层。对于提示词-响应和简单、有界的函数调用,直接使用 IChatClient。
提供程序 SDKAzure.AI.OpenAI / OpenAI / Azure.AI.Inference / OllamaSharp通过 AddChatClient 接入 MEAI 后使用的具体提供程序。
编排层Microsoft.Agents.AI(预发行版)多步骤工具使用、持久化 Agent 循环和多 Agent 工作流。
CopilotGitHub.Copilot.SDK仅用于构建 Copilot 平台扩展。

规则:从 MEAI 开始;通过 AddChatClient 将提供程序置于其后(不要在业务逻辑中直接调用提供程序);对于多步骤或持久化 Agent 工作流,使用 Microsoft.Agents.AI,而不是手动编写 Agent 循环;不要在同一工作流中混用原始 HttpClient 对 OpenAI 的调用和 MEAI。不要使用 Accord.NET(已归档)。对于新项目,优先使用 MEAI 和 Agent Framework;只有在必须使用现有 Semantic Kernel 功能或投资时才例外。通过 DI 注册 AI/ML 服务;从 user-secrets / env / 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-… 密钥;根据架构校验非确定性输出,并提供回退方案。
  • Agentic (Agent Framework)——使用 Microsoft.Agents.AI 和 IChatClient 进行编排(绝不手写循环);设置 MaximumIterations 和令牌/成本上限;使用清晰的架构定义每个工具(AIFunctionFactory.Create);记录每个步骤(绝不记录原始敏感内容)。
  • RAG / embeddings——使用语义分块(而非固定大小);使用 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 重试
将 API 密钥提交到 appsettings.json使用 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使用单一抽象层;依赖 IChatClient
在 ASP.NET Core 中将 PredictionEngine 设为单例使用 PredictionEnginePool<TIn,TOut>(非线程安全)
使用 RAG,但不进行分块或相关性筛选采用语义分块 + 最低相似度分数
在 .NET 中从头构建自定义神经网络通过 ONNX Runtime 使用预训练模型,或调用 LLM API

评论

支持 Markdown