当前位置:首页 > AI > 正文内容

深入探讨Function Calling:在Semantic Kernel中的使用实践

邻居的猫1个月前 (12-09)AI1350

导言

上一章咱们了解了 OpenAIfunction calling 的履行原理,这一章节咱们解说一下 function callingSemantic Kernel 的运用。

OpenAIPromptExecutionSettings跟 LLM 交互进程中,ToolCallBehavior的特点之前咱们的章节有介绍过

  • ToolCallBehavior:特点用于获取或设置怎么处理东西调用的行为。

          // Enable auto function calling
        OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
        {
            ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
        };
    

    1.EnableKernelFunctions:会向模型供给内核的插件函数信息,但不会主动处理函数调用恳求。模型需求显式主张函数调用恳求,并体系会传达这些恳求给恰当的处理程序来履行。

     OpenAIPromptExecutionSettings settings = new() { ToolCallBehavior = ToolCallBehavior.EnableKernelFunctions };
     var chatHistory = new ChatHistory();
     ChatMessageContent result = await chat.GetChatMessageContentAsync(chatHistory, settings, kernel);
     //手动调用
     IEnumerable<FunctionCallContent> functionCalls = FunctionCallContent.GetFunctionCalls(result);
    

    EnableKernelFunctions:需求经过 FunctionCallContent 手动调用

    2.AutoInvokeKernelFunctions:除了向模型供给内核的插件函数信息外,还会测验主动处理任何函数调用恳求。模型主张函数调用恳求后,体系会主动履行相应的操作,并将成果回来给模型,而无需模型显式处理函数调用的进程。

模型引荐

主张运用 OpenAI 的最新模型(如 gpt-3.5-turbo-1106gpt-4-1106-preview)以取得最佳的东西调用体会。OpenAI 的最新模型一般具有更好的功能和更高的准确性,因而运用这些模型可以进步东西调用的作用。

我这里是公司供给的 Azure OpenAI 的服务,我自己经过 yarp 代理了一层做了相关服务的认证

{
  "InternalAzureOpenAI": {
    "Endpoint": "https://localhost:7079",
    "ModelId": "gpt-35-turbo-1106",
    "ApiKey": "***"
  }
}

实战

接下来咱们会问一下大模型当时北京的气候情况

界说 Prompts

  var template = "我想知道现在北京的气候状况?";

界说 kernel

var kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(config.ModelId, endpoint: config.Endpoint, apiKey: config.ApiKey)
    .Build();

注册 kernel function 到 plugins

界说办法

static string GetWeatherForCity(string cityName)
{
    return $"{cityName} 25°,气候晴朗。";
}

为 Kernel 供给插件

 kernel.ImportPluginFromFunctions("WeatherPlugin", new[]
 {
     kernel.CreateFunctionFromMethod(GetWeatherForCity, "GetWeatherForCity", "获取指定城市的气候")
 });

手动调用 function calling

依据上面的描绘 手动处理function calling的要害实际上是ToolCallBehavior.EnableKernelFunctions参数。

  OpenAIPromptExecutionSettings settings = new OpenAIPromptExecutionSettings()
  {
      Temperature = 0,
      ToolCallBehavior = ToolCallBehavior.EnableKernelFunctions
  };

需求用到Semantic KernelIChatCompletionService的会话服务

    var chatHistory = new ChatHistory();
    chatHistory.AddSystemMessage("You are a useful assistant.");
    chatHistory.AddUserMessage(template);
    Console.WriteLine($"User: {template}");
    var chat = kernel.GetRequiredService<IChatCompletionService>();
    while (true)
    {
        ChatMessageContent result = await chat.GetChatMessageContentAsync(chatHistory, settings, kernel);
        if (result.Content is not null)
        {
            Console.Write(result.Content);
        }

        IEnumerable<FunctionCallContent> functionCalls = FunctionCallContent.GetFunctionCalls(result);
        if (!functionCalls.Any())
        {
            break;
        }

        chatHistory.Add(result); // Adding LLM response containing function calls(requests) to chat history as it's required by LLMs.

        foreach (var functionCall in functionCalls)
        {
            try
            {
                FunctionResultContent resultContent = await functionCall.InvokeAsync(kernel); // Executing each function.

                chatHistory.Add(resultContent.ToChatMessage());
            }
            catch (Exception ex)
            {
                chatHistory.Add(new FunctionResultContent(functionCall, ex).ToChatMessage());
            }
        }

        Console.WriteLine();
    }

输出

=====>手动function calling
User: 我想知道现在北京的气候状况?

Assistant:现在北京的气候是晴朗,气温为25°C。

主动调用 function calling

和手动的差异便是上面描绘的OpenAIPromptExecutionSettings装备的ToolCallBehavior特点值不同

  OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new OpenAIPromptExecutionSettings()
  {
      Temperature = 0,
      ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
  };

主动function calling从本质上来讲是躲藏了跟大模型屡次交互的逻辑,有Semantic Kernel结构主动帮咱们调用

中心代码

    var chatHistory = new ChatHistory();
    chatHistory.AddSystemMessage("You are a useful assistant.");
    chatHistory.AddUserMessage(template);
    Console.WriteLine($"User: {template}");
    var chatService = kernel.GetRequiredService<IChatCompletionService>();
    var result = await chatService.GetChatMessageContentAsync(chatHistory, openAIPromptExecutionSettings, kernel);
    Console.Write("Assistant:" + result.ToString());

输出

=====>主动function calling
User: 我想知道现在北京的气候状况?
Assistant:北京现在的气候状况是晴朗,气温为25°C。

最终

在本章中,咱们探讨了在 OpenAIfunction callingSemantic Kernel 中的运用。经过对 ToolCallBehavior 特点的设置,咱们可以灵敏地操控东西调用的行为,从手动调用到主动调用,为用户供给了愈加快捷和高效的体会。

主张在实践中运用 OpenAI 的最新模型(如 gpt-3.5-turbo-1106gpt-4-1106-preview)以取得最佳的东西调用作用。一起,经过合理装备 OpenAIPromptExecutionSettings 中的参数,可以更好地适配不同的场景和需求。
期望本章内容可以帮助您更深化地了解 function callingSemantic Kernel 中的运用,为您的项目和运用带来更多可能性和立异。

示例代码
本文源代码

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=392

标签: dotNetAI
分享给朋友:

“深入探讨Function Calling:在Semantic Kernel中的使用实践” 的相关文章

论文解读《Neural Cleanse: Identifying and Mitigating  Backdoor Attacks in Neural Networks》

论文解读《Neural Cleanse: Identifying and Mitigating Backdoor Attacks in Neural Networks》

宣布时刻:2019 期刊会议:IEEE Symposium on Security and Privacy (S&P) 论文单位:UC Santa Barbara 论文作者:Bolun Wang, Yuanshun Yao, Shawn Shan, Huiying Li, Bi...

斑马ai课综合,引领少儿在线教育的创新之路

斑马ai课综合,引领少儿在线教育的创新之路

斑马AI课是一款专为28岁儿童设计的在线学习平台,涵盖了英语、数理思维和语文等多个学科,旨在通过人工智能技术和数据化教研成果,提升孩子的综合素质和能力。以下是斑马AI课的详细介绍: 课程体系1. 斑马英语: 课程内容:斑马英语课程体系对标剑桥少儿英语YLE、剑桥通用MSE以及CEFR欧洲共同语...

儿童学习编程机器人,开启智能时代的启蒙之旅

儿童学习编程机器人,开启智能时代的启蒙之旅

1. 玛塔编程机器人: 适合年龄:49岁 特点:无屏幕实物编程,适合低龄孩子,通过图形、颜色、声音等辅助媒介实现编程概念。2. 大疆机甲大师: 适合年龄:5岁以上 特点:支持Scratch和Python编程模式,可以单玩、竞技和比赛,适合亲子陪伴。3. 乐高Boost:...

机器学习 赚钱,开启智能赚钱新时代

机器学习 赚钱,开启智能赚钱新时代

1. 数据科学和机器学习咨询:作为机器学习专家,你可以为企业提供咨询,帮助他们利用机器学习技术解决业务问题。这可以包括数据分析和预测建模,帮助企业做出更明智的决策。2. 开发机器学习模型:你可以为特定行业或领域开发机器学习模型,并将其出售给企业。这些模型可以帮助企业提高效率、降低成本或增加收入。3....

机器学习联想,联想集团在机器学习领域的布局与发展

机器学习联想,联想集团在机器学习领域的布局与发展

1. 数据:机器学习依赖于大量的数据来进行训练和测试。这些数据可以是结构化的(如表格数据)或非结构化的(如图像、文本等)。2. 算法:机器学习算法是计算机系统用来从数据中学习的方法。常见的算法包括线性回归、决策树、支持向量机、神经网络等。3. 模型:机器学习模型是算法在训练数据上学习到的参数和结构。...

机器学习图片,机器学习在图片处理领域的应用

机器学习图片,机器学习在图片处理领域的应用

1. 三张图读懂机器学习:这篇文章用三张图解读了机器学习的定义、原理、历史、未来趋势和常见算法,包括符号主义、贝叶斯派、统计学派、深度学习和神经网络等五大流派。文章还介绍了机器学习的工作方式、应用场n2. 视觉中国:视觉中国提供了1,715个机器学习相关的图片素材,包括机器人、人工智能、神经网络、...