Semantic Kernel进阶:将ChatCompletion(聊天完成)服务添加到你的AI项目(三)
文章目录
- Semantic Kernel进阶:将聊天完成服务添加到你的AI项目
- 一、引言
- 二、聊天完成服务的重要性
- 三、基本介绍
- 3.1 创建聊天完成服务
- 3.2 依赖注入方式
- 3.3 创建独立的服务实例
- 四、实战
- 4.1 检索聊天完成服务
- 4.2 使用聊天完成服务
- 4.2.1 非流式
- 4.2.2 流式
- 4.3 完整代码
- 五、结论
Semantic Kernel进阶:将聊天完成服务添加到你的AI项目
一、引言
在当今的人工智能领域,聊天完成服务已成为构建交互式AI代理的关键组件。Semantic Kernel(SK)提供了一种简单而高效的方式来集成这些服务。本文将指导你如何将聊天完成服务添加到你的Semantic Kernel项目中,并展示如何使用这些服务来生成响应。
在这里插入图片描述
二、聊天完成服务的重要性
聊天完成服务允许你的AI代理通过模拟人类对话的方式与用户进行互动。这种服务不仅适用于构建聊天机器人,还可以用于创建能够完成业务流程、生成代码等任务的自治代理。
三、基本介绍
在将聊天完成服务添加到Semantic Kernel之前,你需要安装相应的包。以下是C#中安装OpenAI聊天完成服务的示例:
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
dotnet add package Microsoft.Extensions.DependencyInjection
3.1 创建聊天完成服务
安装所需的包后,你可以创建聊天完成服务。以下是如何在C#中创建Azure OpenAI聊天完成服务的示例:
using Microsoft.SemanticKernel;
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAIChatCompletion(
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4" // 可选,如果部署名称与模型名称不匹配时需要
);
Kernel kernel = kernelBuilder.Build();
对于OpenAI服务,你可以使用类似的代码:
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // 可选
serviceId: "YOUR_SERVICE_ID" // 可选
);
3.2 依赖注入方式
使用DI可以简化你的AI服务管理,并允许你在不同的内核实例中共享这些服务。以下是如何在C#中使用DI添加OpenAI聊天完成服务的示例:
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY"
//Semantic Kernel中定位特定服务
);
builder.Services.AddTransient((serviceProvider) => {
return new Kernel(serviceProvider);
});
这段代码展示了如何在DI容器中注册聊天完成服务,并创建一个Kernel
实例。
3.3 创建独立的服务实例
如果你不想通过DI容器管理你的AI服务,你可以直接创建服务实例。这样,你可以在需要时将它们添加到内核中,或者在代码中直接使用它们,而无需注入到内核或服务提供商中。
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY"
);
四、实战
4.1 检索聊天完成服务
一旦你将聊天完成服务添加到内核中,你可以使用GetRequiredService
方法检索它们:
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
4.2 使用聊天完成服务
4.2.1 非流式
有了聊天完成服务后,你可以使用它从AI代理生成响应。以下是如何使用非流式处理聊天完成生成响应的示例:
ChatHistory history = new ChatHistory();
history.AddUserMessage("你好,你能为我提供什么帮助?");
var response = await chatCompletionService.GetChatMessageContentAsync(
history,
kernel: kernel
);
Console.WriteLine(response);
4.2.2 流式
如果你需要流式处理响应,可以使用以下代码:
var response = chatCompletionService.GetStreamingChatMessageContentsAsync(
chatHistory: history,
kernel: kernel
);
await foreach (var chunk in response)
{
Console.Write(chunk);
}
4.3 完整代码
/// <summary>
/// 聊天完成
/// </summary>
public class Step3_ChatCompletion
{
public static async Task RunAsync()
{
#pragma warning disable SKEXP0001, SKEXP0010, SKEXP0050, SKEXP0020, ASP0000
//创建语义内核
Kernel kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "gpt-4o-mini",
endpoint: new Uri("https://xie.openai.com/v1"),
apiKey: "sk-")
.Build();
#region 使用依赖注入
//如果使用依赖项注入,则可能需要将 AI 服务直接添加到服务提供商。
//如果要创建 AI 服务的单一实例并在暂时性内核中重复使用它们,这非常有用。
var builder = Host.CreateApplicationBuilder();
builder.Services.AddOpenAIChatCompletion(
modelId: Global.Model,
endpoint: new Uri(Global.EndpointKey),
apiKey: Global.ApiKey
);
builder.Services.AddTransient((serviceProvider) => {
return new Kernel(serviceProvider);
});
//将聊天完成服务添加到内核后,可以使用 get 服务方法检索它们。 下面是如何从内核检索聊天完成服务的示例。
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
Console.WriteLine("--------------非流式--------------");
ChatHistory history = new ChatHistory();
history.AddUserMessage("你好,你能为我提供什么帮助?");
var response = await chatCompletionService.GetChatMessageContentAsync(
history,
kernel: kernel
);
Console.WriteLine(response);
Console.WriteLine();
Console.WriteLine("--------------流式输出--------------");
var streamResponse = chatCompletionService.GetStreamingChatMessageContentsAsync(
chatHistory: history,
kernel: kernel
);
await foreach (var chunk in streamResponse)
{
Console.Write(chunk);
}
#endregion
}
}
五、结论
通过将聊天完成服务添加到你的Semantic Kernel项目,你可以为你的AI代理提供一个强大的对话能力。这不仅可以提升用户体验,还可以使你的AI代理更加智能和自适应。
希望这篇文章能帮助你了解如何将聊天完成服务集成到你的Semantic Kernel项目中。如果你有任何问题或需要进一步的帮助,请随时提问。
原文地址:https://blog.csdn.net/qq_40600379/article/details/143081004
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!