Fork me on GitHub

Semantic Kernel:Service内置服务

  在SK中内置了一些服务,这些服务可以让我们的应用,简单的实例化调用,便拥有AI能力。

  以OpenAI为例,SK中内置的OpenAI服务有:

  • 内容生成服务:OpenAITextGenerationService

  • 聊天服务:OpenAIChatCompletionService

  • 文本转图片服务:OpenAITextToImageService

  • 声音转文本服务:OpenAIAudioToTextService

  • 文本转声音服务:OpenAITextToAudioService

  • 文本嵌入向量服务:OpenAITextEmbeddingGenerationService


  这些服务可以直接实例化使用,也可以配合Kernel使用。下面是一个TextGeneration服务使用方式,TextGeration只支持modelid为gpt-3.5-turbo-instruct的模型,具体实现如下:

复制代码
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using System.Text.Json;

var chatModelId = "gpt-3.5-turbo-instruct";
var key = File.ReadAllText(@"C:\GPT\key.txt");

var settings = new PromptExecutionSettings
{
    ExtensionData = new Dictionary<string, object>
    {
        ["max_tokens"] = 1000,
        ["temperature"] = 0.2,
        ["top_p"] = 0.8,
        ["presence_penalty"] = 0.0,
        ["frequency_penalty"] = 0.0
    }
};
Console.WriteLine("---------------非流式---------------");
var textGenerationService = new OpenAITextGenerationService(chatModelId, key);
var textContents = await textGenerationService.GetTextContentsAsync("用50个字描述一下.NET", settings);
foreach (var textContent in textContents)
{
    var usage = textContent?.Metadata?["Usage"] as Azure.AI.OpenAI.CompletionsUsage;
    if (usage != null)
    {
        var tokenStr = @$"====================Tokens==================
提示词Tokens数:{usage.PromptTokens}
返回内容Tokens数:{usage.CompletionTokens}
总Tokens数:{usage.TotalTokens}
===========================================";
        Console.WriteLine(tokenStr);
    }
    Console.WriteLine(textContent.Text);
}

Console.WriteLine("---------------流式---------------");
var streamTextContents = textGenerationService.GetStreamingTextContentsAsync("用50个字描述一下C#");
await foreach (var textContent in streamTextContents)
{
    Console.Write(textContent.Text);
}
复制代码

  上面举了两种实现方式,阻塞式,一次性返回结果,流式,时时返回结果。

  下面这些参数是用来精细控制OpenAI GPT模型在文本生成过程中的行为的:max_tokens:这个参数定义了模型输出的最大词数(或者说是token数)。Token不仅仅是单词,还包括标点符号和空格等。这个限制帮助控制生成内容的长度。

  temperature:这个参数用于控制输出的随机性或者创造性。温度值在0到1之间,较低的温度(如0.2或0.3)会让模型的输出更加可预测和稳定,而较高的温度(如0.8或1)会增加输出的随机性和多样性,但也可能导致文本的连贯性和相关性下降。

top_p (Nucleus Sampling):这个参数控制模型在选择下一个词时考虑的范围。例如,如果top_p设置为0.9,模型将只从概率累积到90%的那部分词中选择下一个词。这通常有助于保持文本的相关性同时还能保持一定的创意自由。

presence_penalty 和 frequency_penalty:这两个参数用于增加输出的多样性和降低重复性。presence_penalty增加了已出现过的词再次出现的代价,有助于避免重复同一主题或词汇。frequency_penalty类似,但它是基于词出现的频率来增加代价,频繁出现的词在后续生成中被选中的概率将降低。

这些参数的组合可以帮助调整生成文本的风格和质量,以适应不同的应用场景和需求。

关于其他服务,我们在后续的文章中使用说明。

  文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

posted @   桂素伟  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2018-03-01 Ocelot + Consul实践
点击右上角即可分享
微信分享提示