找回密码
 立即注册
首页 业界区 业界 从 MCP 到 Agent Skills,AI Ready 的 .NET 10 正当时 ...

从 MCP 到 Agent Skills,AI Ready 的 .NET 10 正当时

顶豌 2 小时前
使用 .NET File-Based Apps 编写高效 Agent Skills 脚本指南

前言

AI 工具生态正在经历一场深刻的变革。从 Anthropic 推出的 Model Context Protocol (MCP) 到最新发布的 Agent Skills,我们见证了 AI 能力扩展方式的演进:MCP 为 AI 提供了访问外部数据和工具的标准化接口,而 Agent Skills 则更进一步,专注于将人类的专业知识和工作流程封装为 AI 可理解、可执行的格式。
Agent Skills (https://agentskills.io) 中可以包含可执行脚本(位于 scripts/ 目录),官方规范支持 Python、Bash、JavaScript 等语言。而 .NET 10 引入的 File-Based Apps 特性为这些脚本的编写提供了一个强大的新选择:单个 .cs 文件即可作为完整应用运行,内联依赖声明,支持跨平台部署和 Native AOT 编译。
本文将带你了解 Agent Skills 的规范,以及如何使用 .NET File-Based Apps 编写高效、可靠的 Skill 脚本。你会发现,.NET 为 Agent Skills 的脚本开发提供了类型安全、高性能和优秀跨平台支持的独特优势。
一、什么是 Agent Skills?

1.png

1.1 核心概念

Agent Skills 是一种轻量级、开放的格式,用于扩展 AI Agent 的能力和专业知识。本质上,一个 Skill 就是一个包含 SKILL.md 文件的文件夹
该文件包含:

  • 元数据:name 和 description(最少必需)
  • 指令:告诉 Agent 如何执行特定任务的 Markdown 文档
  • 可选资源:脚本、模板、参考文档等
Skills 的核心价值在于:

  • 专业知识封装:将特定领域的程序化知识(procedural knowledge)和公司/团队/用户特定的上下文打包
  • 按需加载:Agent 启动时只加载 Skill 的 name 和 description,任务匹配时才加载完整指令
  • 可执行能力:可以包含脚本、工具,扩展 Agent 的实际操作能力
  • 版本化管理:Skills 就是文件,易于编辑、版本控制和分享
1.2 Agent Skills 能做什么?

根据官方文档,Agent Skills 的主要应用场景包括:
领域专长(Domain Expertise)

将专业知识打包为可复用的指令:

  • 法律审查流程:标准化的合同审查检查清单和审批流程
  • 数据分析管道:统一的数据清洗、转换、可视化工作流
  • 代码审查规范:团队的编码标准、安全检查、性能优化指南
  • 医疗诊断协议:基于症状的诊断路径和治疗建议流程
新能力(New Capabilities)

赋予 Agent 原本不具备的操作能力:

  • 创建演示文稿:根据内容自动生成 PPT/Keynote
  • 构建 MCP 服务器:生成 Model Context Protocol 服务器代码
  • 分析数据集:执行统计分析、生成可视化图表
  • 处理 PDF 文档:拆分、合并、提取文本、填写表单
可重复工作流(Repeatable Workflows)

将多步骤任务转化为一致且可审计的流程:

  • CI/CD 流水线:标准化的构建、测试、部署步骤
  • 客户入职流程:账户创建、权限配置、培训材料发送
  • 月度报告生成:数据收集、分析、报告编写、分发
  • 代码重构任务:识别问题、建议改进、执行修改、验证测试
跨工具互操作(Interoperability)

一次编写,多处使用:

  • GitHub Copilot 中辅助编码
  • Cursor 中进行项目重构
  • Claude 中进行文档写作
  • Goose 中执行自动化任务
这种标准化使得组织知识可以在不同工具间无缝流转。
1.3 谁在支持 Agent Skills?

目前已有多个主流 AI 开发工具支持该标准:
2.png

二、Agent Skills 规范解读

2.1 基本目录结构

一个最简单的 Skill 只需要包含 SKILL.md 文件:
  1. skill-name/
  2. └── SKILL.md          # 必需
复制代码
可选的支持目录:
  1. skill-name/
  2. ├── SKILL.md          # 必需:技能描述和使用说明
  3. ├── scripts/          # 可选:可执行脚本
  4. │   └── tool.py
  5. ├── references/       # 可选:详细参考文档
  6. │   └── REFERENCE.md
  7. └── assets/          # 可选:静态资源
  8.     └── template.json
复制代码
2.2 SKILL.md 格式规范

SKILL.md 文件包含两部分:YAML frontmatterMarkdown 正文
Frontmatter 必需字段
  1. ---
  2. name: skill-name
  3. description: 描述技能功能和使用场景的文字,应包含帮助 Agent 识别相关任务的关键词
  4. ---
复制代码
name 字段规则

  • 长度:1-64 字符
  • 字符:仅允许小写字母、数字和连字符 (a-z, -)
  • 不能以连字符开头或结尾
  • 不能包含连续的连字符 (--)
  • 必须与父目录名完全一致
description 字段规则

  • 长度:1-1024 字符
  • 应说明技能的功能和使用时机
  • 包含关键词帮助 Agent 识别适用场景
可选字段
  1. ---
  2. name: pdf-processing
  3. description: Extract text from PDFs and merge multiple documents
  4. license: MIT
  5. compatibility: Requires Python 3.8+ and poppler-utils
  6. metadata:
  7.   author: your-org
  8.   version: "1.0.0"
  9. ---
复制代码
2.3 渐进式信息披露

Agent Skills 采用渐进式加载策略来优化 token 使用:
<ol>元数据阶段 (~100 tokens):启动时加载所有 Skills 的 name 和 description
指令阶段 (= 3 ? args[2] : null;// 验证文件if (!File.Exists(pdfPath)){    AnsiConsole.MarkupLine($"[red]错误: 文件不存在: {pdfPath}[/]");    return 1;}// 创建输出目录Directory.CreateDirectory(outputDir);// ==================== 拆分 PDF ====================try{    using var inputDocument = PdfReader.Open(pdfPath, PdfDocumentOpenMode.Import);    var totalPages = inputDocument.PageCount;        // 解析页面范围    int startPage = 1, endPage = totalPages;    if (!string.IsNullOrEmpty(pageRange))    {        var parts = pageRange.Split('-');        if (parts.Length == 2 &&             int.TryParse(parts[0], out startPage) &&             int.TryParse(parts[1], out endPage))        {            startPage = Math.Max(1, Math.Min(startPage, totalPages));            endPage = Math.Max(startPage, Math.Min(endPage, totalPages));        }    }    var baseName = Path.GetFileNameWithoutExtension(pdfPath);        await AnsiConsole.Progress()        .StartAsync(async ctx =>        {            var task = ctx.AddTask("拆分 PDF 页面", maxValue: endPage - startPage + 1);            for (int i = startPage; i     {        var task = ctx.AddTask("处理中", maxValue: totalItems);        foreach (var item in items)        {            // 处理逻辑            task.Increment(1);        }    });[/code]5.2 依赖管理

选择稳定的包版本
  1. #:package PdfSharpCore@1.3.65
  2. #:package Spectre.Console@0.49.1
复制代码
最小化依赖

只引入必需的包,减少潜在的兼容性问题。
5.3 文档编写

Description 关键词策略

在 description 中包含:

  • 动作关键词:split, extract, convert, merge
  • 领域关键词:PDF, document, pages
  • 场景关键词:when you need to divide, when working with
  1. // 入门:10 行代码的简单工具
  2. #!/usr/bin/env dotnet
  3. if (args.Length == 0) { Console.WriteLine("Hello, Agent!"); return; }
  4. Console.WriteLine($"Processing: {args[0]}");
  5. // 进阶:添加依赖和错误处理
  6. #:package Newtonsoft.Json@13.0.3
  7. using Newtonsoft.Json;
  8. try { /* 处理逻辑 */ }
  9. catch (Exception ex) { Console.Error.WriteLine(ex.Message); return 1; }
  10. // 生产:发布为高性能可执行文件
  11. #:property PublishAot=true
  12. // 一行命令:dotnet publish -r win-x64
复制代码
提供清晰的示例

在 SKILL.md 正文中提供:

  • 常见用例的示例
  • 不同参数组合的效果
  • 预期的输出格式
5.4 跨平台兼容性

路径处理
  1. my-skill/
  2. ├── tool.py          # Agent 需要读取
  3. ├── requirements.txt # Agent 需要读取
  4. └── README.md        # Agent 需要读取
复制代码
编码处理
  1. my-skill/
  2. └── scripts/
  3.     └── tool.cs      # 依赖、逻辑、配置全在这里
复制代码
六、进阶话题

6.1 支持多个相关工具

可以在一个 Skill 中包含多个相关脚本:
  1. // 编译时就能发现错误,而不是运行时崩溃
  2. string pdfPath = args[0];  // Agent 知道这是字符串
  3. int pageCount = GetPageCount(pdfPath);  // Agent 知道返回值是整数
  4. // Python 中相同的错误可能运行时才暴露
  5. # pdf_path = args[0]  # 类型不明确
  6. # page_count = get_page_count(pdf_path)  # 返回值类型不明确
复制代码
在 SKILL.md 中说明每个工具的用途和使用场景。
6.2 使用 References 目录

对于复杂的 Skill,将详细文档分离:
  1. # Python 脚本启动
  2. $ time python tool.py input.pdf
  3. real    0m0.234s  # 需要加载解释器
  4. # .NET File-Based App 启动
  5. $ time dotnet tool.cs input.pdf
  6. real    0m0.089s  # JIT 编译
  7. # Native AOT 编译后
  8. $ time ./tool input.pdf
  9. real    0m0.012s  # 接近原生 C++ 性能
复制代码
在 SKILL.md 中引用:
  1. mkdir -p split-pdf/scripts
  2. cd split-pdf
复制代码
6.3 Native AOT 优化

对于性能敏感的工具,启用 Native AOT:
  1. ---
  2. name: split-pdf
  3. description: Split PDF files into separate single-page documents or extract specific page ranges. Use when you need to divide a PDF into multiple files, extract particular pages, or process PDF pages individually. Works with multi-page PDF documents.
  4. license: MIT
  5. ---
  6. # Split PDF
  7. 将 PDF 文件拆分为多个单页文件或提取指定页面范围。
  8. ## 使用场景
  9. - 将多页 PDF 拆分为独立的单页文件
  10. - 提取 PDF 的特定页面范围
  11. - 需要单独处理 PDF 各个页面时
  12. ## 使用方法
  13. 使用 `scripts/split-pdf.cs` 脚本进行 PDF 拆分:
  14. ### 拆分所有页面
  15. ```bash
  16. dotnet scripts/split-pdf.cs input.pdf output-dir/
复制代码
发布时使用:
  1. # 拆分第 1-5 页
  2. dotnet scripts/split-pdf.cs input.pdf output-dir/ 1-5
复制代码
Native AOT 优势

  • 极快的启动时间
  • 较小的内存占用
  • 无需安装 .NET 运行时
  • 单个可执行文件
6.4 团队协作

将 Skills 放入版本控制:
  1. # Windows
  2. dotnet publish scripts/split-pdf.cs -r win-x64 -o ./bin
  3. # Linux
  4. dotnet publish scripts/split-pdf.cs -r linux-x64 -o ./bin
复制代码
在团队 README 中说明:

  • 如何安装 Skills
  • 如何贡献新 Skills
  • 编码规范和测试要求
七、意义与展望

7.1 对开发者的价值

Agent Skills 为开发者带来三大核心价值:
能力复用:一次编写,在 Copilot、Cursor、Claude 等多个 Agent 产品中使用,还可跨团队共享或通过 GitHub 公开发布。
知识沉淀:将团队最佳实践固化为版本化的 Skills,如代码审查规范、部署流程、数据分析模板等,确保工作流程的一致性。
提升效率:通过明确的指导让 Agent 更准确地执行复杂任务,减少试错和修正,提供一致的输出质量。
7.2 .NET File-Based Apps 的机遇

File-Based Apps 为 .NET 带来了新的应用场景:
降低门槛:从复杂的项目结构到单文件脚本,让 Python、Node.js 开发者也能轻松尝试 .NET。
AI 协作优势:强类型系统帮助 AI 更准确理解代码、即时编译反馈加速修正、丰富的 API 文档提升 AI 可读性。
性能差异化:Native AOT 编译在批量任务中的性能优势(启动快 90%+),不仅提升用户体验,也降低云端成本。
生态拓展:.NET 开发者可以将企业实践打包为 Skills,在 AI Agent 生态中展现 .NET 价值,同时 .NET 的实践经验也能反哺 Agent Skills 标准演进。
7.3 未来展望

Agent Skills 生态正在快速发展,可以期待:

  • Skills 市场:类似 npm 的包管理器和分发平台
  • 工具链集成:IDE 内置 Agent Skills 模板和验证工具
  • 应用拓展:从个人工具到企业知识库、教育培训、行业解决方案
.NET File-Based Apps 在这个生态中的定位清晰:作为 Agent Skills 脚本的强类型、高性能选择,为开发者提供从原型到生产的无缝体验。
八、总结

通过本文的探索,我们看到 .NET File-Based Apps 作为 Agent Skills 脚本语言的独特价值:单文件自包含、强类型安全、Native AOT 高性能,完美匹配 Agent Skills 规范对脚本的要求。
核心收获

本文从 Agent Skills 规范入手,通过 split-pdf 实战案例,展示了如何用 .NET File-Based Apps 编写高质量的 Skill 脚本,并探讨了其在 AI 时代的应用机遇。
开始行动

对于 .NET 开发者:用熟悉的 C# 为 Agent Skills 编写脚本,将专业知识封装为可复用的 Skills,在 AI 时代发挥 .NET 的价值。
对于其他技术栈开发者:.NET File-Based Apps 和 Python 一样简洁,但提供了类型安全和 Native AOT 性能。值得尝试:winget install Microsoft.DotNet.SDK.10 然后创建你的第一个 .cs 脚本。
下一步:动手实现你的第一个 Agent Skill,将专业知识转化为可复用的能力,在 AI 时代发挥更大价值。
参考资源


  • Agent Skills 官方网站
  • Agent Skills 规范
  • Agent Skills GitHub
  • .NET File-Based Apps 文档
  • anthropics/skills
3.png
关注我的公众号『向 AI 而行』,我们微信不见不散。
阅罢此文,如果您觉得本文不错并有所收获,请【打赏】或【推荐】,也可【评论】留下您的问题或建议与我交流。你的支持是我不断创作和分享的不竭动力!
            作者:『圣杰』        出处:http://www.cnblogs.com/sheng-jie/        本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册