升级SemanticKernel 1.0.0-rc4后使用Native Functions报tools参数错误
SemanticKernel 1.0.0-rc4 Native Functions 报错"Unrecognized request argument supplied: tools" 解决方法
错误原因
rc4版本中,当设置ToolCallBehavior.AutoInvokeKernelFunctions时,SemanticKernel会自动向模型请求中添加tools参数,但你的模型不支持该参数(比如使用了不支持工具调用的旧版模型,或者模型部署未开启函数调用支持),导致返回404错误。rc3版本的工具调用逻辑不同,所以未触发该问题。
解决方案
1. 确认模型支持工具调用
确保你使用的是支持函数/工具调用的模型版本:
- OpenAI:gpt-3.5-turbo-0613、gpt-4-0613及以上版本
- Azure OpenAI:部署的模型需为支持函数调用的版本,且在部署配置中开启相关支持
2. 调整工具调用行为
如果模型不支持自动工具调用,修改ToolCallBehavior为非自动调用模式:
OpenAIPromptExecutionSettings settings = new() { // 关闭自动调用,手动处理工具请求 ToolCallBehavior = ToolCallBehavior.None }; var result = await chatService.GetChatMessageContentsAsync(chatHistory, settings, kernel); // 手动解析并执行工具调用 var toolCalls = result.FirstOrDefault()?.GetToolCalls(); if (toolCalls != null) { foreach (var toolCall in toolCalls) { var functionResult = await kernel.InvokeAsync(toolCall.FunctionName, new KernelArguments(toolCall.Parameters)); // 将工具执行结果添加到聊天历史 chatHistory.AddAssistantMessage(functionResult.ToString()); } // 再次请求模型获取最终回复 var finalResult = await chatService.GetChatMessageContentsAsync(chatHistory, settings, kernel); }
或者选择让用户确认后调用:
ToolCallBehavior = ToolCallBehavior.PromptUser
3. 检查服务配置
如果你使用Azure OpenAI,确认部署的模型已开启函数调用支持,且SemanticKernel的服务初始化配置正确,rc4可能对服务端参数的校验更严格。
4. 适配rc4的工具注册方式
确认Native Functions的注册方式是否符合rc4要求,比如显式指定工具元数据:
// 示例:显式注册Native Function并指定工具描述 kernel.ImportPluginFromObject(new LightPlugin(), "LightPlugin"); // 或者手动添加工具元数据 var lightFunction = kernel.Functions.GetFunction("LightPlugin", "TurnOnLight"); lightFunction.Metadata.Description = "Turn on the light in a specific room"; lightFunction.Metadata.Parameters.Add(new KernelParameterMetadata("room") { Description = "The room name to turn on the light" });
内容的提问来源于stack exchange,提问作者mehrandvd
相关产品推荐
相关产品推荐

