AutoGen.Net 代码执行实战:用 dotnet-interactive 内核运行 Agent 返回的代码片段

发布时间:2026/11/2 4:42:38

AutoGen.Net 代码执行实战:用 dotnet-interactive 内核运行 Agent 返回的代码片段 AutoGen.Net 代码执行实战用 dotnet-interactive 内核运行 Agent 返回的代码片段【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogenAutoGen.Net 内置了“从 Agent 响应中运行代码片段”的能力当前支持 dotnet含 C#、F#、PowerShell以及通过 Jupyter 协议接入的 Python 内核。本文基于文档 Run-dotnet-code结合 AutoGen.DotnetInteractive 源码实现讲解如何构建 dotnet-interactive 组合内核Composite Kernel、注册中间件拦截代码块并执行以及如何在 agentic 工作流中编排“写代码—执行代码”的闭环。什么是代码片段code snippet在 Agent 响应中代码片段是指带有语言标识符的代码块。例如一段包含 C# 和 Python 两个代码块的文本var content csharp // This is csharp code snippet python // This is python code snippet ;该示例完整可见于 RunCodeSnippetCodeSnippet.cs。为什么运行代码片段有价值代码执行能力可以显著扩展 Agent 的能力边界Agent 不再是只能返回纯文本回答而是能够“先写代码、再运行代码”来解决任务其能力远比纯文本响应更强。以数据分析场景为例面对“最近 7 天的销售额平均值是多少”这类问题Agent 可以先写一段查询最近 7 天销售额并计算平均值的代码片段然后执行该片段拿到真实结果而不是凭空给出一个数字。安全警告运行来自 Agent 响应的任意代码片段可能给系统带来风险执行不受控的进程、文件、网络操作等在生产环境使用此功能时需格外谨慎例如限制内核可访问的资源、在隔离环境中运行。使用 dotnet interactive 内核执行代码片段AutoGen.Net 中执行 dotnet 代码片片的内置能力由 dotnet-interactive 提供。使用前需要向项目添加AutoGen.DotnetInteractive包引用它封装了 AutoGen 与 dotnet-interactive 的集成PackageReference IncludeAutoGen.DotnetInteractive /步骤一创建 in-process 组合内核通过DotnetInteractiveKernelBuilder.CreateDefaultInProcessKernelBuilder()可以创建一个包含 C# 与 F# 内核的进程内in-processdotnet-interactive 组合内核using AutoGen.Core; using AutoGen.DotnetInteractive; using AutoGen.DotnetInteractive.Extension; var kernel DotnetInteractiveKernelBuilder .CreateDefaultInProcessKernelBuilder() // add C# and F# kernels .Build();对应示例位于 RunCodeSnippetCodeSnippet.cs。从源码结构看DotnetInteractiveKernelBuilder 提供两类构建入口CreateDefaultInProcessKernelBuilder()返回一个预置了 C# 与 F# 内核的 InProccessDotnetInteractiveKernelBuilder注意它带有#if NET8_0_OR_GREATER条件编译即进程内内核仅在 .NET 8 及以上目标框架可用CreateEmptyInProcessKernelBuilder()返回不含任何内核的空构建器供按需添加内核CreateKernelBuilder(workingDirectory, kernelName)返回基于外部进程stdio的DotnetInteractiveStdioKernelConnector适合需要隔离进程的场景。InProccessDotnetInteractiveKernelBuilder 的构造器内部创建了一个CompositeKernel并注册了 Jupyter 连接器指令ConnectJupyterKernelDirective同时支持 HTTP 与本地两种连接方式这正是后续可以挂接 Python 内核的基础。它还提供了以下扩展方法均可通过别名调用对应内核方法默认别名说明AddCSharpKernel(aliases)c#、C#、csharp创建 C# 内核启用 NuGet 指令、KernelHelpers、%who与值共享AddFSharpKernel(aliases)f#、F#、fsharp创建 F# 内核启用默认格式化、KernelHelpers、%who与值共享AddPowershellKernel(aliases)pwsh、powershell创建 PowerShell 内核启用配置文件与值共享AddPythonKernel(venv, kernelName)—通过 Jupyter 协议挂接 Python 内核见下文Build()最终返回启用默认魔法命令与#!import命令的CompositeKernel。步骤二注册中间件执行代码块并取回结果拿到内核后通过IAgent.RegisterMiddleware注册中间件在 Agent 收到消息时提取代码块并用RunSubmitCodeCommandAsync扩展方法执行。该方法会返回代码片段的执行结果// register middleware to execute code block var dotnetCodeAgent agent .RegisterMiddleware(async (msgs, option, innerAgent, ct) { var lastMessage msgs.LastOrDefault(); if (lastMessage null || lastMessage.GetContent() is null) { return await innerAgent.GenerateReplyAsync(msgs, option, ct); } if (lastMessage.ExtractCodeBlock(csharp, ) is string codeSnippet) { // execute code snippet var result await kernel.RunSubmitCodeCommandAsync(codeSnippet, csharp); return new TextMessage(Role.Assistant, result, from: agent.Name); } else { // no code block found, invoke next agent return await innerAgent.GenerateReply(msgs, option, ct); } }); var codeSnippet csharp Console.WriteLine(Hello World); ; await dotnetCodeAgent.SendAsync(codeSnippet); // output: Hello World完整可运行版本见 RunCodeSnippetCodeSnippet.cs。这里的关键 API 在源码中的实现值得注意ExtractCodeBlock/ExtractCodeBlocks定义于 MessageExtension.cs基于正则codeBlockPrefix([\s\S]*?)codeBlockSuffix从消息内容中提取代码块。单数版本只返回第一个匹配的代码块复数版本以惰性迭代返回所有匹配块并对提取内容做Trim()。因此调用ExtractCodeBlock(csharp, )时前缀需精确匹配语言标识如csharp。RunSubmitCodeCommandAsync定义于 KernelExtension.cs。它将代码块包装为SubmitCode命令并发送到指定名称的目标内核然后从命令结果事件中筛选StandardOutputValueProduced、StandardErrorValueProduced、ReturnValueProduced、DisplayedValueProduced四类展示事件把格式化后的输出值用换行拼接为字符串返回。两个边界行为需要注意若没有任何展示输出则返回null若命令执行失败则捕获异常并返回形如Error: {message}的字符串而不是抛出异常。运行 Python 代码片段要运行 Python 代码需要先在机器上安装 Python并在环境中配置好ipykernel与jupyterpip install ipykernel pip install jupyter安装完成后可以运行以下命令确认ipykernel安装正确jupyter kernelspec list输出应包含所有可用内核其中需要能看到python3Available kernels: python3 /usr/local/share/jupyter/kernels/python3 ...确认环境就绪后调用AddPythonKernel方法把 Python 内核挂接到 dotnet-interactive 组合内核上var pythonKernel DotnetInteractiveKernelBuilder .CreateDefaultInProcessKernelBuilder() .AddPythonKernel(venv: python3) .Build(); var pythonCode print(Hello from Python!) ; var result await pythonKernel.RunSubmitCodeCommandAsync(pythonCode, python3);对应示例见 RunCodeSnippetCodeSnippet.cs。从源码看AddPythonKernel 并不直接创建 Python 进程而是向组合内核提交一条 Jupyter 连接魔法命令#!connect jupyter --kernel-name {kernelName} --kernel-spec {venv}其中venv参数指定 Jupyter 内核规范kernelspec示例中为python3kernelName参数默认python是连接后内核在组合内核中的名称命令失败时会通过ThrowOnCommandFailed抛出异常。这也解释了为什么 Python 路径依赖jupyter kernelspec list能列出对应内核——本质上是 dotnet-interactive 的 Jupyter 连接器在拉起并连接外部 Python 内核进程与前文构造器中预置的ConnectJupyterKernelDirective相呼应。在 agentic 工作流中运行代码片段上面的中间件方式适合单 Agent 场景。文档“Further reading”部分给出的两个动态群聊示例展示了更完整的编排形态均位于 AutoGen.Basic.SampleExample04_Dynamic_GroupChat_Coding_Task.cs动态群聊解决编程任务的完整工作流。示例中用CreateDefaultInProcessKernelBuilder().AddPythonKernel(python3).Build()构建同时具备 C#、F# 与 Python 能力的内核然后由 admin Agent 把用户问题拆解为小任务分派给 coder写 Python 代码与 runner执行代码等 Agent循环推进直到问题解决Example07_Dynamic_GroupChat_Calculate_Fibonacci.cs用动态群聊计算斐波那契数列演示“写代码 Agent 执行代码 Agent”协作的更简洁形态。小结AutoGen.Net 通过AutoGen.DotnetInteractive包提供“运行 Agent 响应中代码片段”的内置能力底层是 dotnet-interactive 的CompositeKernelCreateDefaultInProcessKernelBuilder().Build()得到含 C#、F# 内核的进程内组合内核仅 .NET 8可再经AddPowershellKernel、AddPythonKernel扩展语言支持ExtractCodeBlock负责从消息中正则提取带语言标识的代码块RunSubmitCodeCommandAsync负责提交执行并聚合 stdout/stderr/返回值/展示值无输出返回null、失败返回Error: ...字符串Python 支持依赖本机ipykerneljupyter环境通过 Jupyter 魔法命令连接外部内核该能力让 Agent 从“只回答”进化到“写代码并运行代码”但执行任意代码存在安全风险应按文档中的警告谨慎启用。【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/2 4:32:31

Atlas:多模态世界模型如何实现像素级相机控制与3D重建

World Labs 这次发布的 Atlas,核心不是“又一个能生成视频的模型”,而是把多模态世界模型、像素级相机控制和 3D 重建这三件事放到一个系统里处理。这个方向很值得关注:以前我们要么用文本生成视频,要么用多视角照片做三维重建&am…

2026/11/2 4:40:03

YOLO安全帽/反光衣/工作服数据集:标注检查与误报排查

简介:面向施工工地、工厂等安全着装监测场景的YOLO目标检测数据集,聚焦安全帽、反光衣与工作服的自动识别任务,适合计算机视觉学习者、算法工程师及安全信息化项目开发者用于模型训练、验证与效果评估。压缩包共2000个文件,约952.…

2026/11/2 4:40:03

双核四驱Geo优化SOP:提升地理空间数据处理效率

1. 项目概述"双核四驱"Geo优化标准化作业程序(SOP)是于磊老师团队针对地理空间数据处理领域开发的一套高效优化方案。这个方案的核心在于将地理信息系统(GIS)与空间数据分析(Spatial Analysis)两…

2026/11/2 4:40:03

Python毕业设计:智能联系人管理的拼音检索、去重与意图识别

简介:围绕Python与人工智能技术构建的智能联系人管理毕业设计,面向计算机相关专业毕业生、课程设计学习者及希望积累AI落地经验的开发者,可用于联系人信息增删改查、检索分类、导入导出及基于行为模式的智能推荐等场景。压缩包共50个文件、约…

2026/11/2 4:40:03

Azkaban Solo Server 部署避坑与首个 Flow 跑通

简介:Azkaban 是一款源自 LinkedIn 的开源工作流执行引擎,常用于大数据处理任务的依赖调度与定时管理;这份 azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz 是其单服务器版本,已编译打包,解压后即可直接运行,无…

2026/11/2 4:35:02

用电量数据分享实战:从契约设计到增量交付的完整指南

简介:这份资源面向制造业能源管理与时间序列预测方向的学习者,围绕用电量数据展开 LSTM 建模实践,帮助读者理解如何用循环神经网络捕捉电力消耗中的季节性、周期性与趋势性,并完成训练与预测的完整流程。压缩包共 106 个文件&…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑