找回密码
 立即注册
首页 业界区 业界 MAF快速入门(19)给Agent Skill添加脚本执行能力 ...

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

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

根据上一篇我们知道,Agent Skill就是大模型随时翻阅的说明文档,它还可以包含一些资源文件,而脚本就是其中的一种重要资源。
  1. skill/
  2. ├── SKILL.md    # 必需:指令 + 元数据
  3. ├── scripts/    # 可选:可执行代码
  4. ├── references/ # 可选:文档资料
  5. └── 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部呕心沥血整理的“宝典”。
1.png

系统运维Skill

首先,我们创建这个SKILL.md,内容如下:
  1. ---
  2. name: system-ops
  3. description: 系统运维诊断技能。适用于系统健康检查、磁盘空间分析、进程资源监控、故障排查等系统运维场景。包含可执行的诊断脚本。
  4. ---
  5. # 系统运维(System Operations)
  6. ## 可用诊断脚本
  7. 以下脚本位于本技能的 `scripts/` 目录,可通过 `run_shell` 工具执行:
  8. | 脚本 | 用途 | 执行命令 |
  9. |------|------|--------|
  10. | check-system-info.ps1 | 获取系统基本信息(OS、CPU、内存) |
  11. | check-disk-usage.ps1 | 检查磁盘使用情况和剩余空间 |
  12. | check-top-processes.ps1 | 查看 CPU/内存占用 Top 进程 |
  13. ## 运维检查流程
  14. 1. **基础检查**:先执行 `check-system-info.ps1` 获取系统概况
  15. 2. **针对性诊断**:根据用户问题,选择性执行磁盘或进程检查脚本
  16. 3. **分析报告**:综合脚本输出和故障排查指南,给出诊断结论和建议
  17. 4. **故障排查**:如需深入排查,参考 [references/troubleshooting-guide.md](references/troubleshooting-guide.md)
  18. ## 告警阈值
  19. | 指标 | 正常 | 警告 | 严重 |
  20. |------|------|------|------|
  21. | CPU 使用率 | <70% | 70-90% | >90% |
  22. | 内存使用率 | <80% | 80-95% | >95% |
  23. | 磁盘使用率 | <70% | 70-90% | >90% |
  24. | 单进程 CPU | <30% | 30-60% | >60% |
复制代码
由于该Skill还定义了引用的资源,所以我们还需要添加:
(1)参考文件:故障自查指南
说明:这是一个markdown文件。
  1. # 故障排查指南
  2. ## CPU 持续高负载
  3. 1. 通过 `check-top-processes.ps1` 识别高占用进程
  4. 2. 判断是否为预期行为(如编译、数据处理)
  5. 3. 如为异常进程,建议:
  6.    - 记录进程信息(PID、启动时间、命令行)
  7.    - 联系应用负责人确认
  8.    - 必要时可终止进程:`Stop-Process -Id <PID>`
  9. ## 内存不足
  10. 1. 检查物理内存使用率(通过 `check-system-info.ps1`)
  11. 2. 识别内存大户(通过 `check-top-processes.ps1`)
  12. 3. 常见原因:
  13.    - 内存泄漏:进程内存持续增长
  14.    - 缓存过多:数据库或应用缓存未限制
  15. 4. 缓解措施:
  16.    - 重启内存泄漏进程
  17.    - 调整应用缓存配置
  18.    - 考虑扩容
  19. ## 磁盘空间不足
  20. 1. 通过 `check-disk-usage.ps1` 确认各盘使用率
  21. 2. 清理建议(按优先级):
  22.    - 清理临时文件
  23.    - 清理日志文件(保留近 7 天)
  24.    - 清理 NuGet 包缓存:`dotnet nuget locals all --clear`
  25. 3. 长期方案:配置日志轮转、扩容磁盘
复制代码
(2)脚本文件:PowerShell脚本
说明:这里主要在Windows系统中执行脚本,所以选择了PowerShell。
脚本1:获取系统基本信息
  1. # check-system-info.ps1 — 获取系统基本信息
  2. Write-Host "=== 系统基本信息 ==="
  3. Write-Host "计算机名: $env:COMPUTERNAME"
  4. Write-Host "操作系统: $([System.Runtime.InteropServices.RuntimeInformation]::OSDescription)"
  5. Write-Host "处理器架构: $([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture)"
  6. Write-Host "逻辑处理器数: $([Environment]::ProcessorCount)"
  7. $os = Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction SilentlyContinue
  8. if ($os) {
  9.     $totalMemGB = [math]::Round($os.TotalVisibleMemorySize / 1MB, 2)
  10.     $freeMemGB = [math]::Round($os.FreePhysicalMemory / 1MB, 2)
  11.     $usedMemGB = [math]::Round($totalMemGB - $freeMemGB, 2)
  12.     $memUsagePercent = [math]::Round(($usedMemGB / $totalMemGB) * 100, 1)
  13.     Write-Host ""
  14.     Write-Host "=== 内存信息 ==="
  15.     Write-Host "总内存: ${totalMemGB} GB"
  16.     Write-Host "已使用: ${usedMemGB} GB ($memUsagePercent%)"
  17.     Write-Host "可用: ${freeMemGB} GB"
  18. }
  19. Write-Host ""
  20. Write-Host "=== 系统运行时间 ==="
  21. $uptime = (Get-Date) - (Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime
  22. Write-Host "已运行: $($uptime.Days) 天 $($uptime.Hours) 小时 $($uptime.Minutes) 分钟"
复制代码
脚本2:检查系统磁盘使用信息
[code]# check-disk-usage.ps1 — 检查磁盘使用情况Write-Host "=== 磁盘使用情况 ==="Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object {    $totalGB = [math]::Round($_.Size / 1GB, 2)    $freeGB = [math]::Round($_.FreeSpace / 1GB, 2)    $usedGB = [math]::Round($totalGB - $freeGB, 2)    $usagePercent = if ($totalGB -gt 0) { [math]::Round(($usedGB / $totalGB) * 100, 1) } else { 0 }    $status = if ($usagePercent -gt 90) { "
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

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