自学内容网 自学内容网

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)!