ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Semantic Kernel 流程框架如何与 .NET Aspire 集成并实现分布式追踪

Semantic Kernel 流程框架如何与 .NET Aspire 集成并实现分布式追踪 Semantic Kernel 流程框架如何与 .NET Aspire 集成并实现分布式追踪【免费下载链接】semantic-kernelIntegrate cutting-edge LLM technology quickly and easily into your apps项目地址: https://gitcode.com/GitHub_Trending/se/semantic-kernel如果你的业务逻辑是一个多步骤流程比如先翻译一段文本、再对翻译结果做摘要而每个步骤又依赖独立运行的 Agent 服务那么你需要解决两个问题如何把这些服务统一编排起来运行以及如何跨服务追踪一个流程的完整执行链路。Semantic Kernel 仓库中的ProcessFrameworkWithAspire演示给出了一个完整做法用 Semantic Kernel Process Framework 定义事件驱动的流程把流程步骤和 Agent 拆成独立服务再交给 .NET Aspire 做开发期编排并通过 OpenTelemetry 生成跨服务的分布式追踪。演示的业务场景很直接定义一个流程先把文本从英文翻译出来随后对翻译结果做摘要README。演示的组成与集成方式整个演示位于dotnet/samples/Demos/ProcessFrameworkWithAspire/ProcessFramework.Aspire/由五个项目组成ProcessFramework.Aspire.AppHost.NET Aspire 宿主负责编排下面三个服务ProcessFramework.Aspire.ProcessOrchestrator流程编排服务内部用 Process Framework 定义流程步骤ProcessFramework.Aspire.TranslatorAgent翻译 Agent 服务作为独立外部服务运行ProcessFramework.Aspire.SummaryAgent摘要 Agent 服务同样作为独立外部服务运行ProcessFramework.Aspire.ServiceDefaults与ProcessFramework.Aspire.Shared共用的服务默认配置含 OpenTelemetry 配置和请求模型。Agent 被定义为外部服务每个流程步骤通过 HTTP 请求调用这些 Agent。正因为调用链是真实的服务间 HTTP 请求.NET Aspire 才能借助 OpenTelemetry 对整个流程做追踪。同时每个 Agent 都是独立服务可以在 .NET Aspire 开发者仪表盘中单独重启。AppHost 的 Program.cs 展示了编排的全部要点var builder DistributedApplication.CreateBuilder(args); var openai builder.AddConnectionString(openAiConnectionName); var translateAgent builder.AddProjectProjects.ProcessFramework_Aspire_TranslatorAgent(translatoragent) .WithReference(openai); var summaryAgent builder.AddProjectProjects.ProcessFramework_Aspire_SummaryAgent(summaryagent) .WithReference(openai); var processOrchestrator builder.AddProjectProjects.ProcessFramework_Aspire_ProcessOrchestrator(processorchestrator) .WithReference(translateAgent) .WithReference(summaryAgent) .WithHttpCommand(/api/processdoc, Trigger Process, commandOptions: new() { Method HttpMethod.Get } ); builder.Build().Run();几个关键行为AddConnectionString(openAiConnectionName)声明连接字符串两个 Agent 项目通过WithReference(openai)自动注入无需在服务内重复配置WithHttpCommand注册了一条Trigger Process命令GET/api/processdoc它会出现在 Aspire 仪表盘上点击即可触发流程项目文件 ProcessFramework.Aspire.AppHost.csproj 中TargetFramework为net10.0使用Aspire.AppHost.Sdk 13.0.0AppHost 还引用了Process.LocalRuntime项目本地运行时。运行前的配置AppHost 的 appsettings.json 中声明了 Agent 所需的 Azure OpenAI 连接字符串{ ConnectionStrings: { openAiConnectionName: https://{account_name}.openai.azure.com/ } }其中{account_name}需要替换为你自己的 Azure OpenAI 资源名。这是本演示唯一必须由读者提供的值替换后由 AppHost 通过.WithReference(openai)注入到两个 Agent 服务。Agent 侧使用注入的连接创建客户端并注册 Kernel以 SummaryAgent 的 Program.cs 为例builder.AddServiceDefaults(); builder.AddAzureOpenAIClient(openAiConnectionName); builder.Services.AddKernel().AddAzureOpenAIChatCompletion(gpt-4o);即 Agent 服务通过gpt-4o模型提供聊天补全能力并暴露/api/summaryPOST端点供编排服务调用。流程步骤与分布式追踪的实现流程如何定义ProcessOrchestrator 的 Program.cs 中的GET /api/processdoc端点内构建并启动流程var processBuilder new ProcessBuilder(ProcessDocument); var translateDocumentStep processBuilder.AddStepFromTypeTranslateStep(); var summarizeDocumentStep processBuilder.AddStepFromTypeSummarizeStep(); processBuilder .OnInputEvent(ProcessEvents.TranslateDocument) .SendEventTo(new(translateDocumentStep, TranslateStep.ProcessFunctions.Translate, parameterName: textToTranslate)); translateDocumentStep .OnEvent(ProcessEvents.DocumentTranslated) .SendEventTo(new ProcessFunctionTargetBuilder(summarizeDocumentStep, SummarizeStep.ProcessFunctions.Summarize, parameterName: textToSummarize)); summarizeDocumentStep .OnEvent(ProcessEvents.DocumentSummarized) .StopProcess(); var process processBuilder.Build(); await using var runningProcess await process.StartAsync(kernel, new KernelProcessEvent { Id ProcessEvents.TranslateDocument, Data ... });事件链路为输入事件TranslateDocument→TranslateStep的Translate函数 →DocumentTranslated事件 →SummarizeStep的Summarize函数 →DocumentSummarized事件后StopProcess()。端点完成后返回Results.Ok(Process completed successfully)。关键点在于步骤内部如何跨服务调用。TranslateStep.cs 中步骤函数通过注入的TranslatorAgentHttpClient发起真实的 HTTP 请求拿到翻译文本再EmitEventAsync发出下游事件。编排服务在注册这两个 HTTP 客户端时使用了服务发现地址builder.Services.AddHttpClientTranslatorAgentHttpClient(client { client.BaseAddress new(httpshttp://translatoragent); }); builder.Services.AddHttpClientSummaryAgentHttpClient(client { client.BaseAddress new(httpshttp://summaryagent); });httpshttp://translatoragent这类地址由 Aspire 服务发现解析到实际端点因此步骤代码不硬编码任何服务 URL。追踪如何落地追踪能力集中在共用的 CommonExtensions.cs。每个服务启动时调用AddServiceDefaults()它做四件事ConfigureOpenTelemetry日志接入 OpenTelemetryIncludeFormattedMessage、IncludeScopes并注册Microsoft.SemanticKernel日志源指标AspNetCore / HttpClient / Runtime 三段 instrumentation外加AddMeter(Microsoft.SemanticKernel*)采集 Semantic Kernel 自身的计量追踪AddSource(应用名) AspNetCore instrumentation过滤掉/health与/alive健康检查请求 HttpClient instrumentation AddSource(Microsoft.SemanticKernel*)使流程步骤与 Agent 内部的 SK 调用也进入链路导出器逻辑仅当环境变量OTEL_EXPORTER_OTLP_ENDPOINT非空时启用 OTLP 导出器另有一段被注释的 Azure Monitor 导出器代码启用需安装Azure.Monitor.OpenTelemetry.AspNetCore包。本地开发时数据直接进 Aspire 仪表盘无需额外配置。AddDefaultHealthChecks注册self存活检查开发环境下映射/health与/alive端点。AddServiceDiscovery启用服务发现。HttpClient 默认值为所有 HttpClient 开启标准弹性处理AddStandardResilienceHandler和服务发现AddServiceDiscovery。另外编排服务与 Agent 服务的Program.cs开头都有一行AppContext.SetSwitch(Microsoft.SemanticKernel.Experimental.GenAI.EnableOTelDiagnosticsSensitive, true);该开关启用 Semantic Kernel GenAI 相关诊断信息的敏感内容记录源码中标注为 Experimental按源码保留即可。运行与验证前置条件仓库已克隆、AppHost 的appsettings.json中连接字符串已替换为真实 Azure OpenAI 资源名。AppHost 项目文件声明的目标框架为net10.0使用Aspire.AppHost.Sdk 13.0.0。在仓库中进入 AppHost 目录执行cd dotnet/samples/Demos/ProcessFrameworkWithAspire/ProcessFramework.Aspire/ProcessFramework.Aspire.AppHost dotnet runREADME 中给出的路径写作scr/ProcessFramework.Aspire/ProcessFramework.Aspire.AppHost其中scr为笔误实际路径如上。运行后的浏览器仪表盘中可以看到三个服务及其连接关系文档示例截图触发流程有两种方式效果相同在仪表盘中调用ProcessOrchestrator服务的Trigger Process命令发送预定义请求仓库中 ProcessFramework.Aspire.ProcessOrchestrator.http 文件已给出GET https://localhost:7207/api/processdoc Accept: application/json成功判断端点返回Process completed successfully仪表盘生成该次流程的分布式追踪覆盖编排服务到各 Agent 服务的完整 HTTP 调用链文档示例各 Agent 的指标可在仪表盘 Metrics 页签中查看文档示例适用边界与限制该演示面向本地开发期编排健康检查端点仅在开发环境映射CommonExtensions.cs注释也提示在非开发环境启用/health、/alive存在安全影响。追踪数据默认进入 Aspire 仪表盘要导出到外部后端需设置OTEL_EXPORTER_OTLP_ENDPOINT环境变量启用 OTLP 导出器Azure Monitor 导出器则需自行取消注释并安装对应包。演示依赖 Azure OpenAIAddAzureOpenAIChatCompletion(gpt-4o)服务重启、独立调试 Agent 等能力来自 Aspire 开发者仪表盘。若要理解 Process Framework 本身的事件与步骤模型可继续查看 ProcessFrameworkWithAspire 目录结构 中的Steps、Models与Shared项目或仓库内dotnet/src/Experimental/Process.Abstractions的源码定义。【免费下载链接】semantic-kernelIntegrate cutting-edge LLM technology quickly and easily into your apps项目地址: https://gitcode.com/GitHub_Trending/se/semantic-kernel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表