首页 > 其他分享 >【semantic Kernel】依赖注入

【semantic Kernel】依赖注入

时间:2024-11-03 18:10:58浏览次数:3  
标签:Kernel 依赖 semantic Name Id Address new public string

参考:https://www.cnblogs.com/ruipeng/p/18241147

代码

/// <summary>
/// 依赖注入案例
/// </summary>
public static class DependencyInjectionSample
{
    public static async Task Exec()
    {
        ServiceCollection services = new ServiceCollection();


        services.AddKernel()
             .AddOpenAIChatCompletion(modelId: Config.OpenAiChatModel, Config.OpenAiKey);
        //注册插件
        services.AddSingleton<KernelPlugin>(sp => KernelPluginFactory.CreateFromType<Order1Plugin>(serviceProvider: sp));
        //注册服务A
        services.AddSingleton<ServiceA>();
        var kernel = services.BuildServiceProvider().GetRequiredService<Kernel>();

        var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
        OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
        {
            ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
        };
        var history = new ChatHistory();
        string? userInput;
        do
        {
            // Collect user input
            Console.Write("User > ");
            userInput = Console.ReadLine();

            // Add user input
            history.AddUserMessage(userInput);

            // Get the response from the AI
            var result = await chatCompletionService.GetChatMessageContentAsync(history, executionSettings: openAIPromptExecutionSettings, kernel: kernel);

            // Print the results
            Console.WriteLine("Assistant > " + result);

            // Add the message from the agent to the chat history
            history.AddMessage(result.Role, result.Content ?? string.Empty);
        } while (userInput is not null);
    }



}

订单插件:

public sealed class Order1Plugin(ServiceA serviceA)
{
    public class Order
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public override string ToString()
        {
            return $"id:{Id},Name:{Name},Address:{Address}";
        }
    }
    List<Order> Orders = new List<Order>()
    {
        new Order(){Id=1,Name="iPhone15",Address="武汉"},
        new Order(){Id=2,Name="iPad",Address="北京"},
        new Order(){Id=3,Name="MacBook",Address="上海"},
        new Order(){Id=4,Name = "HuaWei Mate60 ",Address = "深圳"},
        new Order(){Id = 5,Name = "小米14",Address = "广州"}
    };

    [KernelFunction, Description("根据Id获取订单")]
    [return: Description("获取到的订单")]
    public string GetOrderById(
    [Description("订单的Id")] int id)
    {
        //调用服务A
        serviceA.Invoke();
        var order = Orders.Where(x => x.Id == id).FirstOrDefault();
        if (order != null)
        {
            return order.ToString();
        }
        else
        {
            return "找不到该Id的订单";
        }
    }
}
public class ServiceA
{
    public void Invoke()
    {
        Console.WriteLine("ServiceA Invoked!!");
    }
}

标签:Kernel,依赖,semantic,Name,Id,Address,new,public,string
From: https://www.cnblogs.com/fanfan-90/p/18523719

相关文章

  • 三周精通FastAPI:20 Dependencies 依赖项 和类作为依赖项
    官方文档:依赖项-FastAPI依赖项¶FastAPI提供了简单易用,但功能强大的依赖注入系统。这个依赖系统设计的简单易用,可以让开发人员轻松地把组件集成至 FastAPI。什么是「依赖注入」¶编程中的「依赖注入」是声明代码(本文中为路径操作函数 )运行所需的,或要使用的「依赖」......
  • 一文彻底弄懂Spring IOC 依赖注入
    SpringIOC(InversionofControl,控制反转)依赖注入是Spring框架的核心特性之一,旨在实现对象之间的松耦合,提升代码的可维护性、可测试性和可扩展性。下面我们将从以下几个方面深入探讨SpringIOC依赖注入的机制和实现原理。一、基本概念控制反转(InversionofControl)控制反......
  • Get包中的依赖管理介绍
    文章目录1.概念介绍2.使用方法3.示例代码4.内容总结我们在上一章回中介绍了"使用get进行路由管理"相关的内容,本章回中将介绍使用get进行依赖管理.闲话休提,让我们一起TalkFlutter吧。1.概念介绍依赖管理是一个常用的概念,我们先看看官方文档中的描述:Gethas......
  • 【semantic Kernel】Semantic Kernel Tools(VS Code插件)
    2023年4月13日,Microsoft发布了一个SemanticKernel的VSCode插件,SemanticKernelTools,用于进行SemanticFunction的开发和调试工作。SemanticKernelTools的安装只需要VSCode即可,不需要额外的其他的环境。在VSCode的扩展中搜索SemanticKernelTools,点击Install即......
  • 背包九讲——树形背包问题(有依赖的背包)
    目录树形背包问题问题引入:问题解读:算法例题:10.有依赖的背包问题-AcWing题库题目:算法实现:代码实现:背包问题第七讲——树形背包问题(有依赖的背包)背包问题是一类经典的组合优化问题,通常涉及在限定容量的背包中选择物品,以最大化某种价值或利益。问题的一般描述是:有一......
  • Jupyter Notebook添加kernel的解决方案
      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学......
  • kernel-learn:msgrcv源码解读
    笔者最近复现CVE中时常用到msgrcv,由于对某些细节不了解,卡了很久,所以解读一下源码。msg.c-ipc/msg.c-Linuxsourcecodev5.11.22-Bootlin这是网址,有兴趣的可以自己看看。这是msgrcv的flag/*msgrcvoptions*/#defineMSG_NOERROR010000/*noerrorifmessa......
  • 一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性
    前言:什么是依赖注入依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NETCore提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中。本文主要通过一个简单的例子来阐述ASP.NETCore依赖注入的使用......
  • 开发 react 技术栈的前台项目,选用 semantic-ui-react 组件库是否是较好的选择
    在前端开发中,合适的UI组件库的选择至关重要,它能在保证交互和视觉一致性的同时,大大提升开发效率。Semantic-UI-React是React技术栈中备受关注的UI组件库之一,以其丰富的组件和友好的API受到了许多开发者的欢迎。然而,是否选择它作为项目的UI组件库需结合多个因素综合考虑......