首页 > 其他分享 >【Semantic Kernel】RAG(检索增强生成)

【Semantic Kernel】RAG(检索增强生成)

时间:2024-11-07 16:10:18浏览次数:4  
标签:Kernel Semantic RAG chatHistory warning pragma reply var Console

RAG(Retrieval-Augmented Generation)是一种结合信息检索和生成模型的自然语言处理方法。它通过检索相关文档片段作为生成模型的上下文,提高生成文本的准确性和相关性。RAG广泛应用于问答系统、对话系统和文本摘要等领域,兼具高效性和灵活性。公司的客户机器人都特别适合。下面的案例是使用GPT的embedding来向量化相关信息,然后通过关键字检索,最后把这些信息,结合用户问题送给gpt-4o,得到一个相对友好的回复结果。

代码:

/// <summary>
/// RAG(Retrieval Augmented Generation)检索增强生成
/// </summary>
public static class RAGSample
{
    public static async Task Exec()
    {
        
#pragma warning disable SKEXP0001
#pragma warning disable SKEXP0010
#pragma warning disable SKEXP0050
        ISemanticTextMemory memory = new MemoryBuilder()
        .WithOpenAITextEmbeddingGeneration("text-embedding-ada-002", Config.OpenAiKey)
        .WithMemoryStore(new VolatileMemoryStore())//内存数据库,生产环境不能用
        .Build();
        #region 数据导入Memory
#pragma warning restore SKEXP0050
#pragma warning restore SKEXP0010
#pragma warning restore SKEXP0001
        var sampleData = new Dictionary<string, string>
        {
            ["info4"]
            = "3年级2班有56人",
            ["info5"]
            = "小明在3年级2班",
            ["info6"]
            = "小明在第二中学",
            ["info7"]
            = "第二中学有1500人"
        };
        var i = 0;
        foreach (var entry in sampleData)
        {
            await memory.SaveReferenceAsync(
                collection: "个人信息",
                externalSourceName: "GitHub",
                externalId: entry.Key,
                description: entry.Value,
                text: entry.Value);
        }
        #endregion

        var builder = Kernel.CreateBuilder()
            .AddOpenAIChatCompletion(modelId: Config.OpenAiChatModel, Config.OpenAiKey);

        var kernel = builder.Build();
        var chatHistory = new ChatHistory(); 
        var chat = kernel.GetRequiredService<IChatCompletionService>();
        while (true)
        {
            Console.ResetColor(); 
            Console.WriteLine("----------学生提问:----------"); 
            var ask = Console.ReadLine(); 
            chatHistory.Clear();
            chatHistory.AddSystemMessage("基于下面的信息回复问题:"); 
            await foreach (var answer in memory.SearchAsync(collection: "个人信息", query: ask, limit: 3, minRelevanceScore: 0.65d, withEmbeddings: true))
            { 
                chatHistory.AddSystemMessage(answer.Metadata.Description); 
            }
            chatHistory.AddUserMessage(ask); 
            Console.WriteLine(); 
            Console.ForegroundColor = ConsoleColor.Green; 
            Console.WriteLine("==========讲师回答:=========="); 
            AuthorRole? role = AuthorRole.Assistant; 
            var contentBuilder = new StringBuilder(); 
            await foreach (var reply in chat.GetStreamingChatMessageContentsAsync(chatHistory)) 
            { 
                if (reply.Role.HasValue && role != reply.Role) 
                { 
                    role = reply.Role; 
                } 
                Console.Write(reply.Content);
                contentBuilder.Append(reply.Content); 
            }
            chatHistory.AddMessage(role.Value, contentBuilder.ToString()); 
            Console.WriteLine();
        }

    }
}

标签:Kernel,Semantic,RAG,chatHistory,warning,pragma,reply,var,Console
From: https://www.cnblogs.com/fanfan-90/p/18532503

相关文章

  • 服务器上mysqld,java的进程Out of Memory,被kernel kill 掉了
    /var/log/messages里面日志如下Aug1019:47:16VM-0-7-centoskernel:8936totalpagecachepagesAug1019:47:16VM-0-7-centoskernel:0pagesinswapcacheAug1019:47:16VM-0-7-centoskernel:Swapcachestats:add0,delete0,find0/0Aug1019:47:16VM-0......
  • 基于langchain的RAG问答(QA)链实现
    文章目录概要整体架构流程1.加载JSON数据2.创建文档对象并添加元数据3.初始化嵌入模型4.初始化Chroma向量存储5.向向量数据库添加文档6.基于相似度检索文档7.通过嵌入向量检索相似文档8.初始化检索器9.加载RAG提示模板10.定义RAG链并生成回答总结技......
  • AI-Prompt、RAG、微调还是重新训练?选择正确的生成式AI的使用方法
    生成式人工智能正在快速发展,许多人正在尝试使用这项技术来解决他们的业务问题。一般情况下有4种常见的使用方法:PromptEngineeringRetrievalAugmentedGeneration(RAG检索增强生成)微调从头开始训练基础模型(FM)本文将试图根据一些常见的可量化指标,为选择正确的生......
  • 零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG
    零基础学习SpringAIJavaAI使用向量数据库postgresql检索增强生成RAG向量数据库是一种特殊类型的数据库,在人工智能应用中发挥着至关重要的作用。在向量数据库中,查询与传统的关系数据库不同。它们不是进行精确匹配,而是执行相似性搜索。当给定一个向量作为查询时,向量数......
  • 基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力
    作者:肯梦本文将演示如何使用事件总线(EventBridge),向量检索服务(DashVector),函数计算(FunctionCompute)结合灵积模型服务[1]上的EmbeddingAPI[2],来从0到1构建基于文本索引的构建+向量检索基础上的语义搜索能力。具体来说,我们将基于OSS文本文档动态插入数据,进行实时的文本......
  • 【semantic Kernel】如何让其他模型也能在SemanticKernel中调用本地函数
    参考:https://mp.weixin.qq.com/s/swPPTyIJa-2OJcyycBVJNQ代码://接入星火AIvarhttpClient=newHttpClient(newXinghuoOpenAIHttpClientHandler());varbuilder=Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId:"generalv3.5","tHQoTStMXIMXmmFwr......
  • Windows Server 2025 Enhanced Storage 是微软在其未来版本的 Windows Server 操作系
    WindowsServer2025EnhancedStorage是微软在其未来版本的WindowsServer操作系统中引入的一项新技术或功能,旨在增强存储管理和优化存储性能。虽然在我的知识库中没有具体的“WindowsServer2025EnhancedStorage”这个专有术语的详细描述,但我可以根据类似技术的背景以及微......
  • centos7-kernel-upgrade-内核升级
    CentOS7升级内核版本yum安装参考1参考2参考3首先查看当前系统的内核版本uname-rs导入ELRepo仓库的公钥信息rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装指令#RHEL-7,SL-7orCentOS-7yuminstallhttps://www.elrepo.org/elrepo-release-7.e......
  • 前端数据持久化指南:LocalStorage、SessionStorage 等的区别与应用
    一、引言在前端开发中,数据持久化是一个至关重要的需求。它能够确保用户在不同页面切换、刷新页面或者关闭浏览器后,数据仍然能够被保存和恢复。本文将详细介绍几种实现前端数据持久化的方法,并深入分析它们之间的区别。二、实现前端数据持久化的方法(一)LocalStorage介绍:LocalS......
  • averaged_perceptron_tagger_eng模块
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注......