Semantic Kernel流程框架

Microsoft的AI框架,语义内核(Semantic Kernel),是一个基于C#、Java和Python的易于使用的AI框架,可以帮助您快速构建AI解决方案或将AI功能集成到现有的应用程序中。

Semantic Kernel提供了多种方式将LLM的强大功能嵌入到你的应用中,它提供的两个核心子框架是基于代理的和基于流程的。在之前的博客文章中,我分享了使用Semantic Kernel代理框架创建代理的步骤。在这篇博客中,让我向你介绍基于流程的框架。

1、Semantic Kernel流程框架

基于流程的框架是一种事件驱动的方法,用于使用AI自动化业务流程。流程是一系列有序执行的步骤,以提供服务或产品。流程中的每一步都为最终结果增加了价值。在这个框架中,每一步通常指的是一个插件函数或LLM工具。一个简单的业务流程示例是账户开户流程。

如前所述,Semantic Kernel流程框架提供了一种方法,将AI嵌入到您的业务流程中,以提高生产力和决策能力。该流程框架遵循事件驱动架构。流程框架的核心组件包括:

  • 步骤:步骤是流程中的最小单元。
  • 流程:多个步骤的集合,以实现业务目标。
  • 模式:提供规则,说明步骤如何执行以完成整个流程。

因此,流程开始于定义所需的步骤。每个步骤通常定义一个插件函数或LLM工具。该工具可以使用LLM本身来执行任务,也可以包含简单的代码逻辑。

让我们通过一个Medium博客发布过程的例子来理解它。如果我想自动化这个过程,步骤可以是

步骤1:定义步骤

#pragma warning disable SKEXP0080  
  
// 步骤3  
public class BlogPublisherStep: KernelProcessStep  
{  
    [KernelFunction]  
    public void PublishBlog(string blogContent)  
    {  
        Console.WriteLine("进入博客发布步骤");  
  
        // 在这里编写发布博客的逻辑  
        // 注意,这里我们不需要Kernel对象,因为我们没有进行任何LLM调用  
        Console.WriteLine(blogContent);  
    }  
}  
  
// 步骤2  
public class BlogGeneratorStep: KernelProcessStep  
{  
    [KernelFunction]  
    public async Task<string> GenerateBlogContent(string research, Kernel kernel)  
    {  
        Console.WriteLine("进入博客生成步骤");  
  
        var answer = await kernel.InvokePromptAsync($"根据研究生成有见地的博客文章:{research}。");  
        return answer.ToString();  
    }  
}  
  
// 步骤1  
public class BlogResearchStep: KernelProcessStep  
{  
    [KernelFunction]  
    public async Task ResearchBlogTopic(string blogTopic, KernelProcessStepContext context)  
    {  
        Console.WriteLine("进入博客研究步骤");  
  
        // Web Surfer -> 浏览互联网以获取内容  
        string research = "Microsoft致力于帮助所有客户实现更多目标,Microsoft Azure也不例外。借助Azure,我们希望帮助您推动无限创新。我们的自助支持服务为您提供新的互动方式,并将Azure资源的力量置于您手中。帮助API为您提供访问丰富且强大的自助Azure解决方案的权限,使您能够从首选界面解决Azure问题,而无需创建支持工单。通过使用帮助API,您可以获得诊断见解、故障排除器以及其他针对您的Azure资源和订阅的强大解决方案。这些解决方案由Azure工程师精心策划,旨在加速您在账单、订阅管理和技术问题方面的故障排除体验。本参考文档旨在指导您如何使用帮助API以及每个REST操作的具体参考信息。角色前提条件:要使用帮助API,您必须使用AAD令牌。您必须具有订阅范围的访问权限。对于诊断,您必须对执行诊断的资源具有读取访问权限。解决方案发现和执行步骤:发现解决方案API是发现与订阅或资源映射的解决方案元数据的初始入口点。一旦根据解决方案发现响应中的描述字段确定了解决方案/诊断,您可以使用诊断或解决方案API执行该解决方案。操作组描述 操作 列出所有可用的帮助API REST操作 发现解决方案 使用问题分类ID和资源URI或资源类型列出相关的Azure诊断和解决方案 诊断 为Azure资源创建和列出诊断 解决方案 为选定的订阅或资源创建、更新和列出Azure解决方案 在此版本中,我们将支持技术问题、账单/订阅管理问题(非租户) 故障排除器 作为特定订阅和资源范围的解决方案的一部分创建和列出故障排除器 法律披露:此API连接到Azure服务。您使用此API和它连接的Azure服务受您获得Azure服务时协议的约束。有关更多信息,请参阅Microsoft Azure法律信息 | Microsoft Azure。 其他语言和支持接口 除了REST API支持外,自助API还支持以下接口和语言: Azure Java SDK:工件 | 文档 Azure .NET SDK:工件 | 文档 Azure Python SDK:工件 | 文档 Azure JavaScript SDK:工件 | 文档 Azure Go SDK:工件 | 文档 Azure CLI:代码 | 文档 PowerShell:代码 | 文档 此API连接到Azure服务。您使用此API和它连接的Azure服务受您获得Azure服务时协议的约束。有关更多信息,请参阅Microsoft Azure法律信息 | Microsoft Azure。";  
        await context.EmitEventAsync("ResearchDone", research);  
    }  
}

步骤2:现在所有步骤都已定义,您可以使用ProcessBuilder将这些步骤链接在一起形成流程。

ProcessBuilder processBuilder = new("BlogGenerationProcess");  
  
// 添加步骤  
var blogGeneratorStep = processBuilder.AddStepFromType<BlogGeneratorStep>();  
var blogResearchStep = processBuilder.AddStepFromType<BlogResearchStep>();  
var blogPublisherStep = processBuilder.AddStepFromType<BlogPublisherStep>();  
  
// 协调事件  
processBuilder  
    .OnInputEvent("Start")  
    .SendEventTo(new(blogResearchStep));  
  
blogResearchStep  
    .OnEvent("ResearchDone")  
    .SendEventTo(new(blogGeneratorStep, parameterName: "research"));  
  
blogGeneratorStep  
    .OnFunctionResult()  
    .SendEventTo(new(blogPublisherStep));

如果你注意到,你可以添加OnFunctionResult来指示该函数何时完成执行,并发送事件到下一步以启动执行。另外,步骤本身可以发出多个事件,我们可以为所有事件添加监听器,并根据上一步骤发出的事件做出关于下一步执行哪个步骤的决定。

步骤3:让我们看看实际效果

Kernel kernel = Kernel.CreateBuilder()  
    .AddAzureOpenAIChatCompletion("modelName", "https://<resourcename>.openai.azure.com", "<key>")  
    .Build();  
  
var process = processBuilder.Build();  
await process.StartAsync(kernel, new KernelProcessEvent { Id = "Start", Data = "Azure Help API" });

输出

上述程序的输出截图

可以在我的GitHub上找到整个示例。

这个示例展示了如何自动化博客生成过程,以及语义内核如何使其变得极其简单。但是关于部署呢?

2、部署

流程框架可以通过两种方式进行部署:

  1. 本地部署:直接在本地机器或单个服务器上运行。
  2. 云运行时:适用于分布式可扩展场景,目前支持Dapr和Orleans。

我可以同时使用代理框架和流程框架吗?答案是可以!

你可以将流程框架与代理框架结合使用,以获得更健壮的解决方案。也许这将是下一篇文章的主题。

流程框架是一个有用的工具,我认为混合方法将会成为游戏改变者!

注意:流程框架仍在实验阶段,因此在生产环境中使用时请谨慎使用⚠️。


原文链接:Revolutionize Business Automation with AI: A Guide to Microsoft’s Semantic Kernel Process Framework

汇智网翻译整理,转载请标明出处