大家好,我是Edison。

今天我们快速地使用Semantic Kernel来集成OpenAI,使用20来行代码快速实现一个简单的AIGC应用。

这里,我就不多介绍Semantic Kernel了,包括它的一些主要特性如Planners, Functions, Plugins等,这些都留到以后写系列文章再来详细介绍吧。

现阶段你只需要了解,Semantic Kernel 与 LangChain 类似,但 Semantic Kernel 是为应用开发开发人员创建的SDK项目,它支持.NET, Python 以及 Java,但是对.NET支持最成熟(微软自家孩子嘛),可以让你的应用很轻易的集成AI大语言模型。

.NET6应用集成OpenAI

这里,我们快速通过一个.NET 6 控制台应用程序来使用Semantic Kernel集成OpenAI创建一个AIGC应用。

第一步:创建一个.NET6控制台应用程序;

第二步:新建一个appsettings.json,填入以下配置:

{
"LLM_API_MODEL": "mistral-7b-instruct",
"LLM_API_BASE_URL": "https://api.your-company.com/llm",
"LLM_API_KEY": "your-llm-api-key" // Replace this value with your llm api key
}

这里我使用的是我司内部提供的大语言模型API,它是OpenAI兼容的。

第三步:通过NuGet管理器安装以下组件包:

  • Microsoft.SemanticKernel,1.11.0

  • Microsoft.SemanticKernel.Connectors.OpenAI,1.11.0

  • Microsoft.Extensions.Http,8.0.0

  • Microsoft.Extensions.Configuration, 6.0.0

  • Microsoft.Extensions.Configuration.Json, 6.0.0

第四步:创建一个OpenAiConfiguration类用于接收appsettings的配置:

public class OpenAiConfiguration
{
public string ModelId { get; set; }
public string EndPoint { get; set; }
public string ApiKey { get; set; } public OpenAiConfiguration(string modelId, string endPoint, string apiKey)
{
ModelId = modelId;
EndPoint = endPoint;
ApiKey = apiKey;
}
}

第五步:创建一个用于转发OpenAI请求的HttpClientHandler,它会将API请求转发你的大语言模型API地址,当然,你的大语言模型API必须是OpenAI兼容的才行。

public class CustomOpenAiHandler : HttpClientHandler
{
private readonly string _openAiBaseAddress; public CustomOpenAiHandler(string openAiBaseAddress)
{
_openAiBaseAddress = openAiBaseAddress;
} protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
request.RequestUri = new Uri($"{_openAiBaseAddress}{request.RequestUri.PathAndQuery}");
return await base.SendAsync(request, cancellationToken);
}
}

第六步:在Program.cs中添加以下核心步骤的代码,加上注释,合计29行,快速实现一个AIGC应用。

using Microsoft.Extensions.Configuration;
using Microsoft.SemanticKernel;
using SemanticKernelDemo.Configurations;
using SemanticKernelDemo.Handlers; // Step1. Load your custom configuration
var configuration = new ConfigurationBuilder().AddJsonFile($"appsettings.json");
var config = configuration.Build();
var openAiConfiguration = new OpenAiConfiguration(config.GetSection("LLM_API_MODEL").Value, config.GetSection("LLM_API_BASE_URL").Value, config.GetSection("LLM_API_KEY").Value);
// Step2. Create a kernel from Your LLM API
var openAiClient = new HttpClient(new CustomOpenAiHandler(openAiConfiguration.EndPoint));
var builder = Kernel.CreateBuilder();
builder.AddOpenAIChatCompletion(openAiConfiguration.ModelId, openAiConfiguration.ApiKey, httpClient: openAiClient);
var kernel = builder.Build();
// Step3. Create a chat between you and kernel
var promptTemplate = @"<message role=""user"">{0}</message>";
Console.Write("You: ");
var userMessage = string.Empty;
while (!string.IsNullOrEmpty(userMessage = Console.ReadLine()))
{
var prompt = string.Format(promptTemplate, userMessage);
var summarize = kernel.CreateFunctionFromPrompt(prompt);
var response = kernel.InvokeStreamingAsync(summarize);
Console.Write("AI: ");
await foreach (var item in response)
Console.Write(item.ToString());
Console.WriteLine(Environment.NewLine + "---------------------------------------------------------------------");
Console.Write("You: ");
}

运行一下,结果如下图所示:

小结

本文介绍了如何在.NET 6环境下使用Semantic Kernel快速接入OpenAI大预言模型API来实现一个AIGC应用,20来行代码就可以实现,是不是很方便?

如果你对Semantic Kernel感兴趣,后续我也可以考虑整理一个系列文章,逐步深入了解和应用Semantic Kernel。

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

.NET 6+Semantic Kernel快速接入OpenAI接口的更多相关文章

  1. Semantic Kernel 入门系列:🛸LLM降临的时代

    不论你是否关心,不可否认,AGI的时代即将到来了. 在这个突如其来的时代中,OpenAI的ChatGPT无疑处于浪潮之巅.而在ChatGPT背后,我们不能忽视的是LLM(Large Language ...

  2. Semantic Kernel 入门系列:🥑Memory内存

    了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...

  3. Semantic Kernel 知多少 | 开启面向AI编程新篇章

    引言 在ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对ChatGPT的强大略有耳闻.当一些人在对ChatGPT犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐的开展基于ChatGPT ...

  4. Semantic Kernel 入门系列:🪄LLM的魔法

    ChatGPT 只是LLM 的小试牛刀,让人类能够看到的是机器智能对于语言系统的理解和掌握. 如果只是用来闲聊,而且只不过是将OpenAI的接口封装一下,那么市面上所有的ChatGPT的换皮应用都差不 ...

  5. Semantic Kernel 入门系列:🔥Kernel 内核和🧂Skills 技能

    理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 sem ...

  6. Semantic Kernel 入门系列:💬Semantic Function

    如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程. 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好 ...

  7. Semantic Kernel 入门系列:🍋Connector连接器

    当我们使用Native Function的时候,除了处理一些基本的逻辑操作之外,更多的还是需要进行外部数据源和服务的对接,要么是获取相关的数据,要么是保存输出结果.这一过程在Semantic Kern ...

  8. 微信小程序之快速接入七牛云

    小程序为什么要接入云? 目前,开发者在开发小程序过程中,主要遇到以下几个问题: 小程序发布大小超限 微信官方限制小程序的发布代码不能超过 1MB,而在实际开发过程中,一般的小程序难免会有图片等富媒体文 ...

  9. 如何让微信小程序快速接入七牛云

    如果你确定用七牛运行小程序的话,给大家分享一个九折优惠码:61d1fd4d1 月 9 日 微信小程序正式发布,小程序终于揭开了它神秘的面纱,开发者对小程序的追捧更是热度不减.从小程序的热门应用场景来看 ...

  10. 如何接入银联“快速接入”产品API

    引言:使用银联开放平台的用户或多或少都接触过产品API吧,那么大家对于“快速接入”产品API是否还会存在一些疑问呢?因为我之前对“快速接入”模糊不清,所以整理的一份详细的资料,里面梳理了“快速接入”产 ...

随机推荐

  1. Linux之网络排错

    Linux 网卡收包流程如下 网卡收到数据包 将数据包从网卡硬件缓存移动到服务器内存中(DMA方式,不经过CPU) 通过硬中断通知CPU处理 CPU通过软中断通知内核处理 经过TCP/IP协议栈处理 ...

  2. SRC信息收集方法论

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" SRC信息 ...

  3. 用了那么久的Lombok,你知道它的原理么?

    简介: 在写Java代码的时候,最烦写setter/getter方法,自从有了Lombok插件不用再写那些方法之后,感觉再也回不去了,那你们是否好奇过Lombok是怎么把setter/getter方法 ...

  4. 创新推出 | Serverless 场景排查问题利器:函数实例命令行操作

    ​简介: 实例命令行功能的推出希望能消除用户使用 Serverless 的"最后一公里",直接将真实的函数运行环境展现给用户,此后 Serverless 将不再是一个"黑 ...

  5. Serverless Devs 的官网是如何通过 Serverless Devs 部署的

    简介: 只有自己吃自己的狗粮,自己做的东西才不"".Serverless Devs 自发展之处到现在,已经经历了几个月的时间,在这几个月,Serverless Devs 的成长是迅 ...

  6. 业内首款云原生技术中台产品云原生 Stack 来了!

    简介: 云原生 Stack 满足了各种典型场景下客户对于线下高集成平台的诉求,让企业数字话转型不受技术约束,专注业务本身,加速企业数字化迭代. 今天,企业数字化转型依然面临很大的挑战,虽然有很多新技术 ...

  7. AI让边缘更智能 边缘让AI无处不在

    ​简介: 城市管理和城市服务逐步走向智能化,智慧化.到2019底,全国100%的副省级城市,95%以上的地级市,以及50%以上的县级市均提出建设新型智慧城市,并已经有32个主要城市成立了专门的大数据管 ...

  8. Roslyn 分析器 EnforceExtendedAnalyzerRules 属性的作用

    在开始编写 dotnet 的 Roslyn 分析器项目时,会被 VisualStudio 通过 RS1036 要求在项目文件配置上 EnforceExtendedAnalyzerRules 属性,本文 ...

  9. dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输

    我在一台设备上安装了 UOS 系统,但是我如何在我的主开发设备上和 UOS 系统传输文件?通过 dotnet tool 工具可以完成大部分的工作,当然,使用 dotnet tool 不仅做文件传输,还 ...

  10. 2018-11-14-git无法pull仓库refusing-to-merge-unrelated-histories

    title author date CreateTime categories git无法pull仓库refusing to merge unrelated histories lindexi 201 ...