高清宁 发表于 2026-3-11 19:10:00

MAF快速入门(19)给Agent Skill添加脚本执行能力

大家好,我是Edison。
最近我一直在跟着圣杰的《.NET+AI智能体开发进阶》课程学习MAF开发多智能体工作流,我强烈推荐你也上车跟我一起出发!
上一篇,我们初步学习了Agent Skill的基本概念以及在MAF中实现了一个Agent Skill的案例。本篇,我们来了解下Agent Skill如何集成脚本执行能力。
1 Agent Skill中的执行脚本

根据上一篇我们知道,Agent Skill就是大模型随时翻阅的说明文档,它还可以包含一些资源文件,而脚本就是其中的一种重要资源。
skill/
├── SKILL.md    # 必需:指令 + 元数据
├── scripts/    # 可选:可执行代码
├── references/ # 可选:文档资料
└── assets/   # 可选:模板、资源文件scripts子目录

这些脚本会被放在其所属skill目录下的scripts子目录下,不管它是BASH脚本,PowerShell脚本,又或者是Python/C#代码,只要是Agent所在客户/服务端能够执行的都可以。
总结,Skills不仅让Agent知道处理规则(SKILL.md + references),还能让Agent直接上手处理(scripts)。
工具 vs 技能

工具(Tool)是一种能力,而技能(Skill)是一种知识。比如,自己开发一个PowerShellTools,给模型提供一些run shell的能力,我们通过注册到 ChatOptions.Tools 完成加载。
又如,自己定义一个系统运维Skill,给模型提供一些系统运维的知识,我们通过注册到AIContextProviders完成加载。
知识指导行为,而非工具限定行为。
2 快速开始:MAF中集成Shell执行能力

假设我们有这样一个需求:某企业开发了一个IT助手Agent,它运行在每个员工的笔记本电脑上,可以回答用户关于系统方面的一些问题并加以分析给出建议。
例如,很多员工发现自己的笔记本电脑最近越来越慢了,又或者发现内存一直高负载 等等,在以前员工会直接联系IT部的某位员工,而现在IT部将自身的运维经验封装为了一个Skill并通过Agent直接回复员工。
以终为始,我们的Agent应用的解决方案长这样子:这是一个.NET控制台应用程序,其中有一个skills目录,存放了系统运维领域的知识,这是IT部呕心沥血整理的“宝典”。

系统运维Skill

首先,我们创建这个SKILL.md,内容如下:
---
name: system-ops
description: 系统运维诊断技能。适用于系统健康检查、磁盘空间分析、进程资源监控、故障排查等系统运维场景。包含可执行的诊断脚本。
---

# 系统运维(System Operations)

## 可用诊断脚本

以下脚本位于本技能的 `scripts/` 目录,可通过 `run_shell` 工具执行:

| 脚本 | 用途 | 执行命令 |
|------|------|--------|
| check-system-info.ps1 | 获取系统基本信息(OS、CPU、内存) |
| check-disk-usage.ps1 | 检查磁盘使用情况和剩余空间 |
| check-top-processes.ps1 | 查看 CPU/内存占用 Top 进程 |

## 运维检查流程

1. **基础检查**:先执行 `check-system-info.ps1` 获取系统概况
2. **针对性诊断**:根据用户问题,选择性执行磁盘或进程检查脚本
3. **分析报告**:综合脚本输出和故障排查指南,给出诊断结论和建议
4. **故障排查**:如需深入排查,参考 (references/troubleshooting-guide.md)

## 告警阈值

| 指标 | 正常 | 警告 | 严重 |
|------|------|------|------|
| CPU 使用率 | <70% | 70-90% | >90% |
| 内存使用率 | <80% | 80-95% | >95% |
| 磁盘使用率 | <70% | 70-90% | >90% |
| 单进程 CPU | <30% | 30-60% | >60% |由于该Skill还定义了引用的资源,所以我们还需要添加:
(1)参考文件:故障自查指南
说明:这是一个markdown文件。
# 故障排查指南

## CPU 持续高负载

1. 通过 `check-top-processes.ps1` 识别高占用进程
2. 判断是否为预期行为(如编译、数据处理)
3. 如为异常进程,建议:
   - 记录进程信息(PID、启动时间、命令行)
   - 联系应用负责人确认
   - 必要时可终止进程:`Stop-Process -Id <PID>`

## 内存不足

1. 检查物理内存使用率(通过 `check-system-info.ps1`)
2. 识别内存大户(通过 `check-top-processes.ps1`)
3. 常见原因:
   - 内存泄漏:进程内存持续增长
   - 缓存过多:数据库或应用缓存未限制
4. 缓解措施:
   - 重启内存泄漏进程
   - 调整应用缓存配置
   - 考虑扩容

## 磁盘空间不足

1. 通过 `check-disk-usage.ps1` 确认各盘使用率
2. 清理建议(按优先级):
   - 清理临时文件
   - 清理日志文件(保留近 7 天)
   - 清理 NuGet 包缓存:`dotnet nuget locals all --clear`
3. 长期方案:配置日志轮转、扩容磁盘(2)脚本文件:PowerShell脚本
说明:这里主要在Windows系统中执行脚本,所以选择了PowerShell。
脚本1:获取系统基本信息
# check-system-info.ps1 — 获取系统基本信息
Write-Host "=== 系统基本信息 ==="
Write-Host "计算机名: $env:COMPUTERNAME"
Write-Host "操作系统: $(::OSDescription)"
Write-Host "处理器架构: $(::ProcessArchitecture)"
Write-Host "逻辑处理器数: $(::ProcessorCount)"

$os = Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction SilentlyContinue
if ($os) {
    $totalMemGB = ::Round($os.TotalVisibleMemorySize / 1MB, 2)
    $freeMemGB = ::Round($os.FreePhysicalMemory / 1MB, 2)
    $usedMemGB = ::Round($totalMemGB - $freeMemGB, 2)
    $memUsagePercent = ::Round(($usedMemGB / $totalMemGB) * 100, 1)
    Write-Host ""
    Write-Host "=== 内存信息 ==="
    Write-Host "总内存: ${totalMemGB} GB"
    Write-Host "已使用: ${usedMemGB} GB ($memUsagePercent%)"
    Write-Host "可用: ${freeMemGB} GB"
}

Write-Host ""
Write-Host "=== 系统运行时间 ==="
$uptime = (Get-Date) - (Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime
Write-Host "已运行: $($uptime.Days) 天 $($uptime.Hours) 小时 $($uptime.Minutes) 分钟"脚本2:检查系统磁盘使用信息
# check-disk-usage.ps1 — 检查磁盘使用情况Write-Host "=== 磁盘使用情况 ==="Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object {    $totalGB = ::Round($_.Size / 1GB, 2)    $freeGB = ::Round($_.FreeSpace / 1GB, 2)    $usedGB = ::Round($totalGB - $freeGB, 2)    $usagePercent = if ($totalGB -gt 0) { ::Round(($usedGB / $totalGB) * 100, 1) } else { 0 }    $status = if ($usagePercent -gt 90) { "
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MAF快速入门(19)给Agent Skill添加脚本执行能力