首页 > 其他分享 >Semantic Kernel 简单问答

Semantic Kernel 简单问答

时间:2023-09-16 18:44:05浏览次数:34  
标签:Kernel Semantic kernel com https text var semantic 问答

一.按官方文档先安装Semantic Kernel

1. 创建一个新的控制台App

2.添加 semantic kernel nuget包  Microsoft.SemanticKernel

  注意:目前这个框架还是预览版本所以安装的时候需要把预览勾选上

 3.编写代码

4.将 API 密钥和其他参数的配置占位符替换为您的密钥和设置

5.使用F5或运行dotnet run

 二.开始Semantic Kernel

  OpenAI / Azure OpenAI API 密钥

    要运行下 LLM 提示和语义函数,请确保拥有 Open AI API 密钥或 Azure Open AI 服务密钥。

        Nuget package   

        如何从 C# 控制台应用程序使用语义内核的快速示例。首先,让我们创建一个面向 .NET 6 或更高版本的新项目,并 Microsoft.SemanticKernel从 Visual Studio 中的命令提示符将 nuget 包添加到项目中:

dotnet add package Microsoft.SemanticKernel --prerelease

  带输入参数的运行提示

   将以下代码复制并粘贴到您的项目中,并使用您的 Azure OpenAI 密钥:

   需要注意2点

  1.需要您有API KEY,  

  2.需要梯子

 

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Memory;
using Microsoft.SemanticKernel.Orchestration;

namespace YaDea.Semantic.Kernel
{
    internal class Program
    {
        

        static async Task Main(string[] args)
        {
            try
            {
                const  string ApiKey = "key";
                //var kernel = Kernel.Builder.Configure(c =>
                //    {
                //        c.AddOpenAITextCompletionService("openai", "text-davinci-003", Environment.GetEnvironmentVariable("MY_OPEN_AI_API_KEY"));
                //        c.AddOpenAIEmbeddingGenerationService("openai", "text-embedding-ada-002", Environment.GetEnvironmentVariable("MY_OPEN_AI_API_KEY"));
                //    })
                //    .WithMemoryStorage(new VolatileMemoryStore())
                //    .Build();


                /*
                 *   这里必须要有梯子
                 *   不足问题:调用频率受限于官方规则,1 分钟只能调用 3 次。—— 这是账号限速,也有不限速的账号。
                 */
                var builder = new KernelBuilder();

                //builder.WithAzureChatCompletionService(
                //    "gpt-35-turbo",                  // 模型名称
                //    "https://contoso.openai.azure.com/", //  Endpoint
                //    "...your Azure OpenAI Key...");       //  Key

                builder.WithOpenAIChatCompletionService("gpt-3.5-turbo",
                    ApiKey);
                builder.WithOpenAITextEmbeddingGenerationService("text-embedding-ada-002", ApiKey);

                // Alternative using OpenAI
                //builder.WithOpenAIChatCompletionService(
                //         "text-davinci-003",//"gpt-3.5-turbo",               // OpenAI Model name
                //         "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");     // OpenAI API Key

                //builder.WithOpenAITextEmbeddingGenerationService("text-embedding-ada-002",
                //    "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");

                // 内存配置
                // 也可以使用 Vector Database 向量数据库
                // docker pull qdrant/qdrant
                // docker run -p 6333:6333 qdrant/qdrant
                //    使用Memory需要注册 embedding模型,目前使用的就是 text-embedding-ad -002。同时需要为Kernel添加MemoryStore,用于存储更多的信息,这里Semantic Kernel提供了一个 VolatileMemoryStore,就是一个普通的内存存储的MemoryStore。
                builder.WithMemoryStorage(new VolatileMemoryStore());


                var kernel = builder.Build();

                // 信息存储
                // 完成了基础信息的注册后,就可以往Memroy中存储信息了
                //const string MemoryCollectionName = "天气";
                //await kernel.Memory.SaveInformationAsync(MemoryCollectionName, id: "info1", text: "成都的天气");
                //await kernel.Memory.SaveInformationAsync(MemoryCollectionName, id: "info2", text: "关于天气的一些传闻消息");


                // 语义搜索
                //var questions = new[]
                //{
                //    "今天天气?",
                //    "关于天气的消息?"
                //};
                //foreach (var q in questions)
                //{
                //    var response =  kernel.Memory.SearchAsync(MemoryCollectionName, q);
                //    await foreach (var item in response)
                //    {
                //        Console.WriteLine(q + " " + item.Metadata.Text);
                //    }
                //}

                // 这里将所有的Skill都放在了 SkillCollection 这个文件夹下
                var textSkill = kernel.ImportSemanticSkillFromDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SkillCollection"), "Skills");

                while (true)
                {
                    Console.WriteLine("请输入您的问题: ");
                    var input = Console.ReadLine();
                    //var myContext = new ContextVariables();
                    //myContext.Set("input", input.ToString());
                    //// 可以根据对应的定位信息由客户端传过来地理位置
                    //myContext.Set("city", "成都");
                    var resultContext = await kernel.RunAsync(input, textSkill["Tips"]);

                    var rel = resultContext.Result;

                    Console.WriteLine(rel);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

 

 

 

三.提示链接

 前面的代码展示了如何调用各个语义函数,但您也可以链接函数(也称为提示链接)来通过多个操作处理初始输入。

例如,以下代码将初始文本转换为数学符号,然后生成摘要

string translationPrompt = @"{{$input}}

Translate the text to math.";

string summarizePrompt = @"{{$input}}

Give me a TLDR with the fewest words.";

var translator = kernel.CreateSemanticFunction(translationPrompt, maxTokens: 200);
var summarize = kernel.CreateSemanticFunction(summarizePrompt, maxTokens: 100);

string inputText = @"
1st Law of Thermodynamics - Energy cannot be created or destroyed.
2nd Law of Thermodynamics - For a spontaneous process, the entropy of the universe increases.
3rd Law of Thermodynamics - A perfect crystal at zero Kelvin has zero entropy.";

// Run two prompts in sequence (prompt chaining)
var output = await kernel.RunAsync(inputText, translator, summarize);

Console.WriteLine(output);

// Output: ΔE = 0, ΔSuniv > 0, S = 0 at 0K.

 Prompt 编写示例

不要浪费时间
使用简短、清晰、完整的句子。
不要使用项目符号或破折号。
使用主动语音。
最大化细节、意义
关注内容

{{$input}}
+++++


创建一个目录专门来存储Prompt

 

 使用 ImportSemanticSkillFromDirectory将Prompt导入

kernel.ImportSemanticSkillFromDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SkillCollection"), "Skills");

测试结果

就这样一个简单问答训练就完成了

 

最后附上测试程序

链接: https://pan.baidu.com/s/1CBKwKXRCVw8AKdSyNhsi3A?pwd=9875 提取码: 9875 

 

参考文献

https://www.cnblogs.com/xbotter/p/semantic_kernel_introduction_connector.html

https://github.com/microsoft/semantic-kernel

https://learn.microsoft.com/en-us/semantic-kernel/concepts-sk/connectors

https://learn.microsoft.com/en-us/semantic-kernel/overview/

https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/kernel/?tabs=Csharp

https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/your-first-prompt

https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/plugins/native-functions/using-the-SKFunction-decorator?tabs=Csharp

https://github.com/johnmaeda/SK-Recipes

问题文献

https://github.com/microsoft/semantic-kernel/issues/1839

 

标签:Kernel,Semantic,kernel,com,https,text,var,semantic,问答
From: https://www.cnblogs.com/liuxiaoji/p/17706911.html

相关文章

  • NT kernel & System 占用80端口
    问题:1运行'netstat-ano'发现80端口被pid=4的进程占用2打开任务管理器,发现pid=4的进程,其实是system进程,其对应的进程描述是NTkernel&system。如何清除:解决方法一:http协议里的某个进程占用了80,但是在任务管理器显示的是System(通常为ID4),最后发现是http协议的某个进程占用......
  • mpam linux kernel源码分析
    MPAM(MemorySystemResourcePartitioningandMonitoring)是Armv8.4的feature,用于cache和内存带宽的监控和限制。截至现在,该feature在linuxkernel的实现还在推进,最新一版参见https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git/log/?h=mpam/snapshot/v6.5-rc1。......
  • Semantic Kernel
    https://github.com/microsoft/semantic-kernelSemanticKernel isanSDKthatintegratesLargeLanguageModels(LLMs)like OpenAI, AzureOpenAI,and HuggingFace withconventionalprogramminglanguageslikeC#,Python,andJava.SemanticKernelachievesth......
  • 【笔记】机器学习基础 - Ch6. Kernel Methods
    6.1Introduction继续从二分类模型出发,实际情况中样本通常不是线性可分的一种思路是增大特征空间的维度,也就是加入原本特征的组合,即一个从\(\calX\)到更高维\(\mathbb{H}\)的非线性映射\(\Phi:\calX\to\mathbb{H}\),从而在\(\mathbb{H}\)可能变得线性可分;尽管SVM对有......
  • FAILED: SemanticException Unable to determine if hdfs://localhost.localdomain:90
    问题描述在hive数据库里面,使用select语句对表的数据进行查找,就出现了这个错误:问题解决这怎么说呢?就是说,本来想先放一放,之后再解决,在解决了namenode的问题之后,再次打开hive,执行select语句,发现莫名其妙地好了;本人也很是莫名其妙;......
  • 智能问答系统机器人-知识库搭建使用步骤
    我们都使用过ChatGPT,也能感受得到他的大模型能力。但是,它并不能知道我们企业或个人的私有知识信息。现在,智能客服系统已经搭配了智能知识库AI,基于ChatGPT和私有数据构建智能知识库,智能辅助客服回复用户消息。可以做到全自动回复,或者辅助客服人工回复。现在网站注册账号:https://go......
  • kernel内核启动流程
    (1)自解压代码 linux-2.6.22.6\arch\arm\boot\compressed\head.S 对比于linux-2.6.22.6\arch\arm\kernel\head.S,是自解压代码+原本的代码,执行时执行自解压代码的内容(2)第一阶段: ENTRY(stext) msr cpsr_c,#PSR_F_BIT|PSR_I_BIT|SVC_MODE@ensuresvcmode ......
  • 企业客户服务的最好帮手——定制AI问答机器人
    很多企业在面对客户管理的时候会遇到这样的情况:客户总是在下班时候提出问题,等到上班时候再回复,客户却已经离开。请一个全天候的人工客服成本又太高了,超出了公司的预算。这个时候我们就需要去定制一个专属的AI问答机器人。为什么使用HelpLookHelpLook 是一款零代码、开箱即用的帮助......
  • linux kernel mount rootfs失败问题
    linuxkernel在初始化末尾会mountrootfs。有时会mount失败,出现类似下面的log:[0.623289]/dev/root:Can'topenblockdev[0.624045]VFS:Cannotopenrootdevice""orunknown-block(0,0):error-6[0.625312]Pleaseappendacorrect"root="bo......
  • 在Docker下一键安装部署免费开源的问答社区!
    在Docker下一键安装部署免费开源的问答社区! 1.准备一台VPS主机,没有的话,【搞一台】 2.一键安装部署Dockerwgethttps://raw.githubusercontent.com/QUANTAXIS/QUANTAXIS/master/config/install_docker.shsudobashinstall_docker.sh全选代码复制3.一键安装Answ......