(1)semantic-kernel入门课程
获取OpenAI在线API
- 由于在国内的限制,我们并没有办法直接访问OpenAI,所以下面的教程我们会推荐使用https://api.token-ai.cn,然后您需要在这个网站中注册一个账号,并且创建一个令牌(最好是设置无限额度和无过期时间),创建好的令牌我们保存好,下面的基础教程入门会用到,这个令牌是用于代替OpenAI的原有的令牌
创建项目
-
打开
Visual Studio 2022
,然后创建一个名称为TokenAI
的控制台项目
-
右键新建的项目,然后点击
管理 NuGet 程序包
-
搜索
Semantic Kernel
,并且选择包括预览版,然后选择安装Microsoft.SemanticKernel
,
- 由于SK默认的限制并没有提供直接修改地址的接口,所以我们需要自定义
HttpClientHandler
,下面我们创建一个OpenAIHttpClientHandler.cs
,然后提供以下实现
csharp
public class OpenAIHttpClientHandler : HttpClientHandler
{
private readonly string _uri;
public OpenAIHttpClientHandler(string uri) => _uri = uri.TrimEnd('/');
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
UriBuilder uriBuilder;
if (request.RequestUri?.LocalPath == "/v1/chat/completions")
{
uriBuilder = new UriBuilder(_uri + "/v1/chat/completions");
request.RequestUri = uriBuilder.Uri;
}
else if (request.RequestUri?.LocalPath == "/v1/embeddings")
{
uriBuilder = new UriBuilder(_uri + "/v1/embeddings");
request.RequestUri = uriBuilder.Uri;
}
return await base.SendAsync(request, cancellationToken);
}
}
- 实现Stream式对话输出
打开Program.cs
csharp
using Microsoft.SemanticKernel;
using TokenAI;
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "gpt-3.5-turbo",
apiKey: "这里填写在https://api.token-ai.cn/创建的令牌",
httpClient: new HttpClient(new OpenAIHttpClientHandler("https://api.token-ai.cn/")))
.Build();
await foreach (var item in kernel.InvokePromptStreamingAsync("您好,我是TokenAI"))
{
Console.Write(item.ToString());
};
执行效果:
我们使用Kernel
的CreateBuilder
创建了一个Kernel
对象,并且在这个对象中存在InvokePromptStreamingAsync
方法,这个方法提供了OpenAI的一个Stream的对话接口,并且我们添加了AddOpenAIChatCompletion
添加了自定义的模型和我们的代理网站的key地址。
很好您已经初步入门我们的SK了!