microsoft / microsoft/semantic-kernel

Bug: The function call plugin name printed is empty

Open
#13,516 4 comments 0 reactions 0 assignees View on GitHub

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

Image

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.