调用外部插件时,ImportPluginFromOpenApiAsync如何指定OpenAPI版本?
解决OpenAPI规范版本为空的错误
问题原因
你遇到的错误是因为Semantic Kernel从指定的endpoint拉取的OpenAPI规范文档中没有包含openapi版本字段,或者读取时无法识别版本。你在appsettings.json的aiPlugin配置中添加的openapi: 3.0.0无效——该配置是插件自身的元数据,不影响第三方OpenAPI接口的导入解析。
解决方案
方案1:修正目标API的OpenAPI规范文档
确保endpoint返回的OpenAPI文档开头包含明确的版本声明,比如OpenAPI 3.0的标准格式:
openapi: 3.0.0 info: title: 目标API名称 version: 1.0.0 # 其他API定义内容
这样Semantic Kernel就能自动识别版本并正常解析。
方案2:手动强制指定OpenAPI版本
如果无法修改目标API的规范文档,可以在导入插件时通过OpenApiImportSettings手动指定版本,修改你的代码如下:
// 导入必要的命名空间 using Microsoft.SemanticKernel.Plugins.OpenApi; // 创建导入设置并指定版本 var importSettings = new OpenApiImportSettings { SpecVersion = OpenApiSpecVersion.OpenApi3_0 }; // 导入插件时传入设置 var plugin = await kernel.ImportPluginFromOpenApiAsync( name, endpoint, new OpenApiFunctionExecutionParameters(httpClient), importSettings); var arguments = new KernelArguments { ["param1"] = "..." }; await plugin[functionName].InvokeAsync(kernel, arguments);
该方式会强制使用指定的OpenAPI版本解析规范文档,忽略文档中缺失的版本声明。
内容的提问来源于stack exchange,提问作者h8tow8
相关产品推荐
相关产品推荐

