最近 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 验证支持
为 RestApiOperationRunner
和 RestApiOperationResponse
类添加了对 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
关联操作和活动