明志唯新

Semantic Kernel dotnet 1.0 beta8 发布

发表于

最近 Semantic Kernel dotnet 1.0 的测试版发布真的太密集了,1.0 beta8 刚刚发布了,带来了一些重要的变化和改进:

ChatHistory 的序列化和反序列化

ChatMessageBase 抽象类改为普通类 ChatMessage,使得 ChatHistory 可以被序列化和反序列化,便于存储和传输。

支持枚举与 OpenAI 函数调用一起使用

之前的实现不支持在 FunctionDefinition 中指示一个 enum 值的封闭列表。现在优化了 OpenAIFunction 和 Planner 相关的代码,使之得到较好的支持,并给出了示例

private enum WidgetColor
{
    Red,
    Green,
    Blue
}

private sealed class WidgetPlugin
{
    [SKFunction, SKName("CreateWidget"), System.ComponentModel.Description("Create a virtual widget.")]
    public string CreateWidget(
        [System.ComponentModel.Description("Widget name")] string name,
        [System.ComponentModel.Description("Widget color")] WidgetColor color
        )
    {
        return $"Created a {color} widget named {name}";
    }
}

添加 OpenAPI 响应和 Schema 验证支持

RestApiOperationRunnerRestApiOperationResponse 类添加了对 OpenAPI 响应和模式验证的支持。具体来说,它在 RestApiOperationRunner 的 SendAsync 方法中添加了一个新参数,允许传入预期响应的字典。如果找到匹配的响应,则使用预期响应中的模式更新响应模式。此外,还添加了 CreateRestApiOperationResponses 方法来解析 OpenAPI 响应并创建预期响应的字典。现在,RestApiOperationResponse 包括一个新属性 Schema 用于指定要校验相对于该 Schema 是否有效,并且新增了 IsValid 方法来校验相对于该 Schema 是否有效。同时也修改了 KernelOpenApiPluginExtensions 以便在操作中定义多个响应时使用正确的响应。

这一修改也使得 SKFunction 输入/输出参数支持复杂对象了。未来这部分可能会为输出架构(和输入架构)使用 TypeScript,以便将来与 Typechat 一起使用。这将会大幅提升 Planner 的质量。

其他变更

  • 优化 SK Abstractions 与 Assistants 的项目依赖关系
  • 修复了一个函数调用相关的示例错误
  • 添加 `IAssistant.GetThreadAsync,这是能够继续现有对话所必需的
  • Assistant 程序集标记为实验性(使用 C# 12 的 ExperimentalAttribute)
  • 删除 StringExtensions
  • 修复 ApplicationInsights 示例以使用 SpanId 关联操作和活动

参考源: