1. 项目概述:当Agent Skill遇上Shell命令
在.NET生态中,AgentFramework正逐渐成为构建智能代理的热门选择。最近我在一个水产养殖监控项目中,尝试将Shell命令集成到Agent Skill中,意外实现了小龙虾养殖环境的mini版智能管理方案。这个方案的核心在于让Agent能够直接调用系统级命令,完成从水质监测到喂食控制的自动化操作。
传统的水产养殖监控系统往往需要单独开发硬件控制模块,而通过Shell命令集成,我们可以直接利用现有Linux设备(如Raspberry Pi)的底层能力。比如用vcgencmd读取温度传感器数据,用gpio命令控制增氧泵开关,甚至用curl发送报警通知到企业微信。这种方案不仅减少了开发量,还让系统具备了更强的硬件兼容性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 AgentFramework基础组件
AgentFramework的核心是Agent和Skill两个关键类。一个典型的Agent初始化代码如下:
csharp复制var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddAgentFramework(agentBuilder =>
{
agentBuilder.AddSkill<ShellSkill>("shell-commands");
agentBuilder.AddAgent<CrayfishAgent>();
});
其中ShellSkill是我们自定义的技能类,需要继承ISkill接口。关键在于实现ExecuteAsync方法时注入IProcessService:
csharp复制public class ShellSkill : ISkill
{
private readonly IProcessService _process;
public ShellSkill(IProcessService process) {
_process = process;
}
public async Task<object> ExecuteAsync(string command, CancellationToken ct = default)
{
var result = await _process.RunAsync("bash", $"-c \"{command}\"", ct);
return result.ExitCode == 0
? result.StandardOutput
: throw new Exception(result.StandardError);
}
}
2.2 Shell命令的安全封装
直接执行Shell命令存在明显安全隐患,我们需要实现以下防护措施:
- 命令白名单机制:
csharp复制private static readonly string[] AllowedCommands =
{
"vcgencmd measure_temp",
"gpio -g write",
"cat /sys/class/thermal/thermal_zone*/temp"
};
public bool IsCommandAllowed(string input)
{
return AllowedCommands.Any(cmd =>
input.StartsWith(cmd, S
