大家好,我是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 classOpenAiConfiguration
{
publicstring ModelId { get; set; }
publicstring EndPoint { get; set; }
publicstring ApiKey { get; set; }
publicOpenAiConfiguration(string modelId, string endPoint, string apiKey)
{
ModelId = modelId;
EndPoint = endPoint;
ApiKey = apiKey;
}
}
第五步
:创建一个用于转发OpenAI请求的HttpClientHandler,它会将API请求转发你的大语言模型API地址,当然,你的大语言模型API必须是OpenAI兼容的才行
。
public classCustomOpenAiHandler : HttpClientHandler
{
privatereadonlystring _openAiBaseAddress;
publicCustomOpenAiHandler(string openAiBaseAddress)
{
_openAiBaseAddress = openAiBaseAddress;
}
protectedoverrideasync Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
request.RequestUri = new Uri($"{_openAiBaseAddress}{request.RequestUri.PathAndQuery}");
returnawaitbase.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.Getp("LLM_API_MODEL").Value, config.Getp("LLM_API_BASE_URL").Value, config.Getp("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: ");
awaitforeach (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。
年终总结:
数字化转型:
C#刷算法题:
C#刷设计模式:
.NET面试:
.NET大会: