创建kernel
// Create a kernel with OpenAI chat completionKernel kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId:"使用的模型id" ,apiKey: "APIKey").Build();
使用讯飞星火认知大模型的话,可以参考我这一篇文章:
记一次WPF集成SemanticKernel+OneAPI+讯飞星火认知大模型实践 (qq.com)
使用gpt-3.5-turbo的效果
代码:
// Example 1. Invoke the kernel with a prompt and display the resultDebug.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));Debug.WriteLine("-------------------------------------------------------");// Example 2. Invoke the kernel with a templated prompt and display the resultKernelArguments arguments = new() { { "topic", "sea" } };Debug.WriteLine(await kernel.InvokePromptAsync("这是什么颜色{{$topic}}?", arguments));Debug.WriteLine("-------------------------------------------------------");// Example 3. Invoke the kernel with a templated prompt and stream the results to the displayawait foreach (var update in kernel.InvokePromptStreamingAsync("这是什么颜色 {{$topic}}? 请提供一个详细的解释", arguments)){Debug.Write(update);}Debug.WriteLine("-------------------------------------------------------");// Example 4. Invoke the kernel with a templated prompt and execution settingsarguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "dogs" } };Debug.WriteLine(await kernel.InvokePromptAsync("告诉我关于这个主题的故事 {{$topic}}", arguments));// Example 5. Invoke the kernel with a templated prompt and execution settings configured to return JSON
#pragma warning disable SKEXP0013arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "chocolate" } };Debug.WriteLine(await kernel.InvokePromptAsync("给这种 {{$topic}} 的蛋糕用json格式制作一个食谱 ", arguments));
效果:
一个一个看:
// Example 1. Invoke the kernel with a prompt and display the resultDebug.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));Debug.WriteLine("-------------------------------------------------------");
回答:
天空的颜色通常是蓝色的。这是因为大气对太阳光的散射作用。在白天,空气中的气体和微粒会散射太阳光中的短波蓝光,使我们看到天空是蓝色的。在日落和日出时,由于光线穿过更多的大气层,散射更多的波长,使得天空呈现出橙红色。
// Example 2. Invoke the kernel with a templated prompt and display the resultKernelArguments arguments = new() { { "topic", "sea" } };Debug.WriteLine(await kernel.InvokePromptAsync("这是什么颜色{{$topic}}?", arguments));Debug.WriteLine("-------------------------------------------------------");
回答:
"Sea" 不是一种具体的颜色,而是指海洋。海洋的颜色通常取决于许多因素,例如水深、海底的颜色、水质等等,因此海洋的颜色可能是蓝色、绿色、灰色等等不同的色调。如果你需要描述海洋的颜色,你可以根据具体情况选择最贴切的颜色描述。
// Example 3. Invoke the kernel with a templated prompt and stream the results to the displayawait foreach (var update in kernel.InvokePromptStreamingAsync("这是什么颜色 {{$topic}}? 请提供一个详细的解释", arguments)){Debug.Write(update);}Debug.WriteLine("-------------------------------------------------------");
回答:
"Sea" 不是一种具体的颜色,因为海洋的颜色会随着不同的地点和时间而变化。一般来说,海水的颜色可以是深蓝色、浅蓝色、绿色或者灰色等。这些颜色是由海水中的水质、深度、天空的颜色、阳光的角度等因素影响而形成的。深蓝色的海水通常表示着水深和透明度很高,这种颜色在深海处很普遍。浅蓝色的海水通常会出现在沿海地区,这可能是由于波浪的搅动导致的。而绿色的海水可能是由于海洋中浮游植物的存在所导致的。另外,灰色的海水可能是由于天气阴沉或者海水中的悬浮物质造成的。综上所述,海洋的颜色是多种因素综合作用的结果,具有多样性和变化性。
// Example 4. Invoke the kernel with a templated prompt and execution settingsarguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "dogs" } };Debug.WriteLine(await kernel.InvokePromptAsync("告诉我关于这个主题的故事 {{$topic}}", arguments));
回答:
《忠诚的狗》从前,有一个农夫,他有一只忠诚的狗,名叫小白。小白是农夫的得力助手,他每天都跟着农夫一起工作,保护庄稼,驱赶野兽。有一天,农夫生病了,病得很重,不能下地工作了。家里的存粮也所剩无几。小白看着主人的病情一天比一天严重,他心里很着急,却无计可施。一天,小白突然想到了一个主意。他决定去附近的城镇寻找帮助。于是,小白离开了农场,开始了他的旅程。在城镇上,小白遇到了一个慈祥的老人,老人看到小白的眼神中充满了忠诚和坚定,便决定跟着小白回到了农场。小白回到农场后,老人开始帮助农夫种地、照顾庄稼,而小白则继续保护庄稼,驱赶野兽。经过一段时间的努力,农夫的病情逐渐好转,庄稼也长得茁壮。农夫感激不尽,他对小白和老人说:“你们是我最忠诚的朋友,我永远不会忘记你们的帮助。”从此以后,小白、老人和
由于我们设置了MaxTokens = 500
,所以这个故事由于太长了而无法完整呈现。
// Example 5. Invoke the kernel with a templated prompt and execution settings configured to return JSON
#pragma warning disable SKEXP0013arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "chocolate" } };Debug.WriteLine(await kernel.InvokePromptAsync("给这种 {{$topic}} 的蛋糕用json格式制作一个食谱 ", arguments));
回答:
{"食谱名称": "巧克力蛋糕","食材": {"巧克力": "200克","黄油": "150克","糖": "150克","鸡蛋": "4个","面粉": "150克","泡打粉": "1茶匙","可可粉": "30克","牛奶": "100毫升"},"步骤": ["1. 将巧克力和黄油融化在锅中,待凉。","2. 打蛋和糖,直到颜色变浅。","3. 加入巧克力混合物,搅拌均匀。","4. 筛入面粉、泡打粉和可可粉,搅拌均匀。","5. 慢慢倒入牛奶,搅拌成浓稠的面糊。","6. 将面糊倒入预热至180°C的烤箱中,烤约30-35分钟至熟。","7. 取出蛋糕,待凉后即可享用。"]
}
返回的是json格式。
使用讯飞星火认知大模型的效果
代码与上面那个一样。
效果:
一个一个看:
// Example 1. Invoke the kernel with a prompt and display the resultDebug.WriteLine(await kernel.InvokePromptAsync("天空是什么颜色?"));Debug.WriteLine("-------------------------------------------------------");
回答:
天空的颜色通常是蓝色或灰色,但在日出和日落时会呈现出橙色、红色或紫色等不同的颜色。这是因为太阳的光线在穿过大气层时被散射,使得天空呈现出不同的色彩。
// Example 2. Invoke the kernel with a templated prompt and display the resultKernelArguments arguments = new() { { "topic", "sea" } };Debug.WriteLine(await kernel.InvokePromptAsync("这是什么颜色{{$topic}}?", arguments));Debug.WriteLine("-------------------------------------------------------");
回答:
由于您没有提供足够的信息,我无法确定您所提到的颜色。
// Example 3. Invoke the kernel with a templated prompt and stream the results to the displayawait foreach (var update in kernel.InvokePromptStreamingAsync("这是什么颜色 {{$topic}}? 请提供一个详细的解释", arguments)){Debug.Write(update);}Debug.WriteLine("-------------------------------------------------------");
回答:
海的颜色通常是蓝色或绿色。这是因为海水吸收了太阳光中的红色、黄色和橙色波长,而反射出蓝色和绿色的波长。当太阳在天空中较低时,海水会呈现出更深的蓝色,因为更多的红色和黄色波长被散射掉了。此外,海洋的颜色还受到天气、水质和深度等因素的影响。例如,当海水中含有大量的浮游生物或污染物时,它可能会呈现出混浊的绿色或棕色。
// Example 4. Invoke the kernel with a templated prompt and execution settingsarguments = new(new OpenAIPromptExecutionSettings { MaxTokens = 500, Temperature = 0.5 }) { { "topic", "dogs" } };Debug.WriteLine(await kernel.InvokePromptAsync("告诉我关于这个主题的故事 {{$topic}}", arguments));
回答:
从前,有一个小镇,这个小镇里住着许多善良的人们。他们非常热爱动物,尤其是狗。在这个小镇上,有一个特殊的节日,叫做“狗狗节”。每年的这个时候,小镇的居民们都会为他们心爱的狗狗举办一场盛大的庆祝活动。在小镇的东边,有一户人家,他们养了一只名叫旺财的金毛犬。旺财非常聪明,而且非常忠诚。它的主人小明和小红非常喜欢旺财,把它当作家庭的一员。今年的狗狗节即将来临,小明和小红决定为旺财准备一份特别的礼物。他们想了很久,最后决定为旺财制作一顶漂亮的帽子。小明和小红开始四处寻找材料,他们找到了一些彩色的丝带、布料和纽扣。经过一番努力,他们终于为旺财制作了一顶独一无二的帽子。狗狗节那天,整个小镇都沉浸在欢乐的氛围中。狗狗们都穿上了最漂亮的衣服,戴上了最时尚的配饰。小明和小红带着旺财来到了镇上的广场,那里已经聚集了许多人和狗狗。在广场的一角,有一个舞台,上面摆放着各种狗狗表演的道具。小明和小红带着旺财走上了舞台,他们为旺财戴上了那顶漂亮的帽子。旺财立刻成为了众人瞩目的焦点,它昂首挺胸,神气十足。接下来,旺财要参加一个狗狗才艺表演比赛。比赛开始了,旺财经过了一系列的考验,展示了它的聪明才智和出色的表演能力。最后,旺财成功地完成了所有任务,赢得了比赛的冠军。比赛结束后,主持人宣布了一个重要的消息:今年的狗狗节将评选出一位“最佳狗狗主人”,以表彰那些对狗狗无微不至的照顾和关爱。经过激烈的角逐,小明和小红凭借他们对旺财的精心照料和无私奉献,成功当选为“最佳狗狗主人”。颁奖典礼上,镇长亲自为小明和小红颁发了奖杯和证书。他说:“你们是所有狗狗主人的榜样,你们的爱心和付出让我们看到了人与动物之间最美好的感情。”从那以后,小明和小红更加珍惜与旺财相处的时光。他们知道,狗狗不仅仅是宠物,更是家庭的一部分,是他们生活中不可或缺的伙伴。而那个小镇上的人们也更加关爱动物,让每一个狗狗都能过上幸福快乐的生活。
// Example 5. Invoke the kernel with a templated prompt and execution settings configured to return JSON
#pragma warning disable SKEXP0013arguments = new(new OpenAIPromptExecutionSettings { ResponseFormat = "json_object" }) { { "topic", "chocolate" } };Debug.WriteLine(await kernel.InvokePromptAsync("给这种 {{$topic}} 的蛋糕用json格式制作一个食谱 ", arguments));
回答:
{"recipe": {"name": "Chocolate Cake","ingredients": [{"item": "flour","quantity": "2 cups"},{"item": "cocoa powder","quantity": "1 cup"},{"item": "baking powder","quantity": "1.5 teaspoons"},{"item": "salt","quantity": "1/2 teaspoon"},{"item": "sugar","quantity": "1.5 cups"},{"item": "butter","quantity": "1 cup"},{"item": "eggs","quantity": "2"},{"item": "vanilla extract","quantity": "2 teaspoons"},{"item": "boiling water","quantity": "1 cup"}],"instructions": ["Preheat the oven to 350°F (175°C).","Grease and flour two 9-inch round cake pans.","In a large bowl, mix together the flour, cocoa powder, baking powder, and salt.","In another bowl, cream together the butter and sugar until light and fluffy. Beat in the eggs one at a time, then stir in the vanilla.","Gradually blend the dry ingredients into the wet ingredients. Beat in the boiling water last. The batter will be thin.","Pour the batter evenly into the prepared pans.","Bake for 30 to 35 minutes, or until a toothpick inserted into the center of the cake comes out clean.","Allow the cakes to cool in the pans for 10 minutes, then remove from the pans and cool completely on wire racks."]}
}
返回的是json格式。
参考
semantic-kernel/dotnet/samples/KernelSyntaxExamples at main · microsoft/semantic-kernel (github.com)
推荐阅读:
记一次WPF集成SemanticKernel+OneAPI+讯飞星火认知大模型实践 (qq.com)