明志唯新

Semantic Kernel dotnet 1.0 beta5 发布了!

发表于

Semantic Kernel dotnet 1.0 beta5 发布了!

这个版本带来了一些重要的变化和改进:

破坏性变更:

IPromptTemplateEngine 替换为 IPromptTemplateFactory

这个变更是为了让 Semantic Kernel 更方便的支持自定义提示模板语言,允许变量插值和函数执行。Semantic Kernel 允许集成自定义提示模板格式,例如,可以使用 Handlebars 语法的提示模板。本次也更新了 .NET 示例中的提示渲染和模板引擎。主要变更包括:

  • 替换 PromptTemplate 类为 BasicPromptTemplate
  • 更新 RunSemanticFunctionAsync 方法使用 BasicPromptTemplate
  • 删除 PromptTemplateEngineTests, 因为它已经过时
  • 引入 BasicPromptTemplateFactory 类来创建 BasicPromptTemplate 类的实例

注意:BasicPromptTemplateFactory 将是缺省实现,并将在 KernelSemanticFunctionExtensions 中自动提供。开发人员可以提供自己的实现。

SemanticFunction 中的 _modelSettings_promptTemplate 的可见性从 public 变为 private

这两个变量本应该是私有的,不小心被公开了,这次修复了这个问题。

删除 Oobabooga AI 连接器

Oobabooga AI 连接器现已移至 https://github.com/MyIntelligenceAgency/semantic-fleet 因此删除了 Semantic Kernel 库中的副本

增加了一个实验性的 Flow Orchestrator 扩展

Copilots 通常被视为提供各种功能的代理,如指挥、问答、协作、建议等。为了以智能和可靠的方式将这些功能产品化,Copilot 的编排层需要以下功能。

  • 将目标/问题分解为多个子目标,这在 Semantic Kernel 世界中也称为 Plan。
  • 利用可用的技能,以多步骤、多通道的方式执行计划,包括与用户互动以明确目标、输入技能/功能以及在需要时授权采取行动。

为了实现这一点,需要一个新的流程计划器/执行代理。自动将任务分解为多个步骤的“计划器”部分的优先级可能较低。取而代之的是,对于每个 Copilot,可以提供一些预定义的流程,“执行者”部分应该负责通过解析依赖关系、传递参数并尝试使用 ReAct 风格的可用技能实现每个步骤的目标来可靠地编排这些流程的执行,类似于 ReAct:在语言模型中协同推理和行动 中的描述。

这个规划器包括以下部分:

  • 流程的数据模型、步骤
  • 执行代理,用于解析依赖关系、确定执行顺序、维护上下文范围
  • 每个步骤的 ReAct 执行引擎
  • 状态跟踪器,因此 Copilot 是重新进入的,并在用户提供更多输入时恢复工作。

新的规划器还提供灵活性,支持多种技能,包括语义功能、原生功能和技能要求以更易于使用的方式进行聊天交互。

image

向 ChatStreaming 接口添加 FunctionResponse

IChatResult 具有从 GetFunctionResponse 结果中提取函数响应信息的扩展方法。之前的版本 IChatStreamingResult 继承了 IChatResult,但 GetFunctionResponse 不适用于它,也不能作为函数响应的一部分发送函数信息(并且几乎总是)跨越多个流式处理结果.

例如:第一个结果可能只说它是一个函数调用,第二个结果可能只包含名称,参数可能被拆分到第三个、第四个 IChatResult 等等。

这次的变更,使得我们可以在流式响应中处理函数调用了。参考样例如下:

StringBuilder chatContent = new();

// Non function result streaming will happen here.
await foreach (var message in chatResult.GetStreamingChatMessageAsync())
{
    if (message.Content is not null)
    {
        Console.Write(message.Content);
        chatContent.Append(message.Content);
    }
}
chatHistory.AddAssistantMessage(chatContent.ToString());

// After all stream was loaded check if a `FunctionResponse` was present.
var functionResponse = await chatResult.GetStreamingFunctionResponseAsync();

其他变更

  • 修复了 InternalsVisibleTo 的使用
  • Grpc.Net.Client 从 2.57.0 升级到 2.58.0
  • 将 Roslynator 包版本锁定为 4.3.0, 避免 Dependabot 再次自动升级诱发问题