microsoft / microsoft/semantic-kernel
Bug: The function call plugin name printed is empty
Open
Nobody has claimed this yet.
bug
triage
- Dominant language
- C#
- Stars
- 28.6k
- Forks
- 4.8k
- Avg merge
- 14h 13m
- Merged PRs (30d)
- 18
Description
The function call plugin name printed is empty
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.Ollama;
using System.ComponentModel;
using System.Text;
#pragma warning disable SKEXP0110
public class TimePlugin
{
[KernelFunction, Description("读取指定路径文件的内容,跨平台兼容~目录")]
public string ReadFile(
string filePath)
{
var ret = File.ReadAllText(filePath, Encoding.UTF8);
return ret;
}
[KernelFunction, Description("This method is used to query the current system time and return it in the format yyyy-MM-dd HH:mm:ss")]
public string QueryDateTime()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
[KernelFunction, Description("The purpose of this method is to write the text content to the local computer's target path")]
public void SaveFile(string filePath, string fileContent)
{
System.IO.File.WriteAllText(filePath, fileContent);
}
}
class Program3
{
public static async Task Main()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
var builder = Kernel.CreateBuilder();
var modelId = "qwen3:4b-instruct-2507-q4_K_M";
var endpoint = new Uri("http://localhost:11434");
builder.Services.AddOllamaChatCompletion(modelId, endpoint);
var kernel = builder.Build();
//KernelPlugin plugin = kernel.ImportPluginFromType<TimePlugin>();
var plugin1 = new TimePlugin();
kernel.Plugins.AddFromObject(plugin1, pluginName:"time");
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
string prompt = "读取一下d:\\test123.txt的内容";
var executionSettings = new OllamaPromptExecutionSettings
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(autoInvoke: false)
};
var t0 = DateTime.Now;
var response = await chatCompletionService.GetChatMessageContentAsync(prompt, kernel: kernel, executionSettings: executionSettings);
var functionCalls = Microsoft.SemanticKernel.FunctionCallContent.GetFunctionCalls(response).ToArray();
foreach (var functionCall in functionCalls)
{
Console.WriteLine($" {functionCall.PluginName}, {functionCall.FunctionName}");//error have no PluginName
var functionResult = await functionCall.InvokeAsync(kernel);
Console.WriteLine($"{functionResult.Result}");
}
Console.WriteLine($"工具调用数 {functionCalls.Length}");
Console.Write(response.Content);
}
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with kernel.Plugins.AddFromObject(plugin1, pluginName: "time") and Microsoft.SemanticKernel.FunctionCallContent.GetFunctionCalls(response), reproducing the supplied Ollama chat-completion example. Done means the resulting function call exposes the registered plugin name, "time", while FunctionName and invocation continue to work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, ollama
- Domain
- ai
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100