当前位置: 首页 > news >正文

.Net如何在AgentFramework中给AI智能体给AI添加执行python脚本和运行代码的能力后——后续可用于对接openClaw技能

一步

在上一篇文章中,我们学习了如何为AgentFramework添加Agent Skill命令。接下来,我们将共同封装一个可执行的Python技能,具体实现代码如下:

using System.ComponentModel; using System.Diagnostics; namespace kevin.AI.AgentFramework.Tools { // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ // RunPython — 一个 执行Python脚本的工具 // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ public class PythonTools { [Description("执行Python脚本。通过System.Diagnostics.Process类来启动一个新的进程,并运行Python.py的脚本。这种方法适用于Windows和Linux系统。")] public static string RunPythonPy([Description("需要执行的python脚本路径。例如:'Skills\\python-skills\\hello-python\\scripts\\hello-python.py'")] string scriptPath, [Description("需要传入python脚本的参数。例如:['你好','word']")] List<string> args = default ) { try { string output = ""; scriptPath = AppContext.BaseDirectory + scriptPath.Replace(@"/", @"\"); Console.WriteLine($"🔧 正在执行Py脚本 {scriptPath}"); // 设置进程信息 ProcessStartInfo start = new ProcessStartInfo(); start.FileName = @"python"; // Python解释器的路径,例如 "python" 或 "python3" start.Arguments = $"{scriptPath}"; // 传递参数 if (args != default) { foreach (var item in args) { start.Arguments += $" {item} \" "; } } start.UseShellExecute = false; // 不使用操作系统外壳启动 start.RedirectStandardOutput = true; // 重定向标准输出 start.RedirectStandardError = true; // 重定向标准错误 using (Process process = Process.Start(start)) { // 获取输出 output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); process.WaitForExit(); // 等待进程结束 if (!string.IsNullOrEmpty(error)) { return $"❌ 执行失败: {error}"; } } if (string.IsNullOrWhiteSpace(output)) { output = "Python脚本执行完成,但没有输出结果。"; } return output; } catch (Exception ex) { return $"❌ 执行失败: {ex.Message}"; } } [Description("执行Python代码。使用IronPython库直接执行Python代码 必须定义为main函数")] public static string RunPythonCode([Description("需要执行的python代码。例如:'def main(name): return 'Hello ' + name.title() + '!'")] string code) { try { Console.WriteLine($"🔧 正在执行Py代码 {code}"); // 创建Python引擎和作用域 var eng = IronPython.Hosting.Python.CreateEngine(); var scope = eng.CreateScope(); eng.Execute(code, scope); dynamic main = scope.GetVariable("main"); return main(); } catch (Exception ex) { return $"❌ 执行失败: {ex.Message}"; } } } }

注册技能

#pragma warning disable MAAI001 // 类型仅用于评估,在将来的更新中可能会被更改或删除。取消此诊断以继续。 var skillsProvider = new FileAgentSkillsProvider( skillPaths: [Path.Combine(AppContext.BaseDirectory + "/Skills", "expense-report-skills"), Path.Combine(AppContext.BaseDirectory + "/Skills", "system-ops-skills"), Path.Combine(AppContext.BaseDirectory + "/Skills", "hello-python-skills") ], options: new FileAgentSkillsProviderOptions { SkillsInstructionPrompt = """ 你可以使用以下技能获取领域知识和操作指引。 所有文件目录都在服务器的/Skills 文件夹下,技能文件夹命名为 技能名称-skills,技能文件夹内包含技能指令文件 instruction.txt、参考资料文件夹 resources 和可执行脚本文件夹 scripts。 脚本文件夹 scripts 如何包含python脚本,则使用RunPythonPy来执行或者RunPythonCode来执行,否则使用RunShell来执行。 每个技能提供专业指令、参考文档和可执行脚本 它们如下: {0} 使用 `system-ops-skills` 这个技能 工作流程: 1. 当用户任务匹配技能描述时,使用 `load_skill` 加载该技能的完整指令 2. 技能指令中会标明可用脚本及其执行命令 3. 使用 `run_shell` 工具执行技能中标注的命令 4. 需要时使用 `read_skill_resource` 读取参考资料。 重要原则:先加载知识,再执行操作。 使用 `hello-python-skills` 这个技能 1.当用户任务匹配技能描述时,使用 `load_skill` 加载该技能的完整指令 2.技能指令中会标明可用脚本及其执行命令 3.用于测试python环境运行的技能,包含一个简单的python脚本 脚本文件名:hello-python.py, 可以随意传入参数, 输出“你所有的参数和Hello,Python”返回结果为"你所有的参数和Hello,Python"。 4. 需要时使用 `read_skill_resource` 读取参考资料。 """ }); #pragma warning restore MAAI001 // 类型仅用于评估,在将来的更新中可能会被更改或删除。取消此诊断以继续。 chatClientAgentOptions.AIContextProviders = [skillsProvider]; Console.WriteLine("📂 Skills 已从文件系统加载");
http://www.jsqmd.com/news/1093387/

相关文章:

  • Mybatis基础操作
  • Rust的async函数中的await点优化与编译器在状态机生成中的转换
  • 各类幕墙验收时应提供的资料
  • Skill用得好,下班走得早:一文讲透Skill的结构与设计
  • AI native: Casebook 面向 AI Agent 时代的测试用例工程化工作流
  • 149期目录 黄大年茶思屋“难题揭榜”第149期--云核心网领域第四期
  • 一篇搞懂SpringMVC XML 配置标签<context:component-scan>
  • Linux x86-64 DMA映射探秘(二)——SWIOTLB的bounce buffer机制
  • 计算机Java毕设实战-网络域名资源信息化管理平台设计与实现 面向企业的 Web 域名运维管理系统设计【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-轻量化网络博客发布平台的设计与实现基于 SpringBoot 的在线文章发布管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • LLM Serving 进入下半场:Prefill/Decode 解耦架构、KV 迁移与 PD 调度工程实践
  • 浅谈src挖掘中—文件上传和XSS漏洞的组合拳,网络安全零基础入门到精通实战教程!
  • Win11Debloat终极指南:4步快速清理Windows系统,性能提升70%
  • 【从零开始学架构】状态机不是增加架构复杂度,而是停止猜测
  • 私域直播SaaS大乱斗:小鹅通、微赞、有赞、悦邻,到底谁更适合“卖菜”的?
  • 将 Rust 绑定到 .NET 10:Oxigraph 的 FFI 桥接实践
  • 【毕业设计】基于 SpringBoot 的文章发布与评论互动博客系统 个人博文编辑、分类与归档管理系统设计与实现(源码+文档+远程调试,全bao定制等)
  • 第11章:对话管理与会话持久化
  • 国内智慧交通数字孪生头部企业汇总,一站式建设方案对比推荐
  • 盯盘与研究辅助AI工具选择与流程适配指南
  • 2026 珠三角磁吸手机支架转轴源头厂家盘点|5 家实体工厂选型指南
  • Rust的Send与Sync:理解线程安全标记trait
  • Prisma安装使用
  • 从0到1:企业级AI项目迭代日记 Vol.56|每一个“差点能用”,都是一次真实的用户流失
  • 用AI自动提取小红书抖音脚本文案,同步Obsidian素材库
  • 162.乐理进阶:和声大调与旋律大调的实战应用与听觉辨识
  • 告别传统写作繁琐流程:gradpaper 的全流程辅助模式新在哪?
  • 拒绝玄学调参!开发者必修的 Prompt Engineering 十二式核心心法
  • 5分钟免费实现VR视频转2D播放的终极方案
  • Lemo-AI vs 顶尖产品:记忆驱动的智能革命