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.OpenAIdotnet 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项目中。如果你有任何问题或需要进一步的帮助,请随时提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451716.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis多对一查询的配置及两种方法的使用示例对比以及Mybatis一对多查询两种方法使用示例及对比

一、Mybatis多对一查询的配置及两种方法的使用示例对比 为了试验Mybatis多对一的查询&#xff0c;我们先在数据库中建两个表&#xff0c;一个城市表&#xff0c;一个市区表&#xff0c;一个城市有多个区是一个一对多的关系&#xff1b;多个区对应一个城市是一个多对一的关系。建…

第五届光学与图像处理国际学术会议(ICOIP 2025)征稿中版面有限!

第五届光学与图像处理国际学术会议&#xff08;ICOIP 2025&#xff09; 2025 5th International Conference on Optics and Image Processing (ICOIP 2025&#xff09; 重要信息 时间地点&#xff1a;2025年4月25-27日丨中国西安 截稿日期&#xff1a;2024年12月16日23:59 …

vue3项目使用百度地图实现地图选择功能代码封装(开箱即用)

vue3项目使用百度地图实现地图选择功能代码封装方案(开箱即用) <template><div class="bmapgl">

【软件测试】JUnit

Junit 是一个用于 Java 编程语言的单元测试框架&#xff0c;Selenium是自动化测试框架&#xff0c;专门用于Web测试 本篇博客介绍 Junit5 文章目录 Junit 使用语法注解参数执行顺序断言测试套件 Junit 使用 本篇博客使用 Idea集成开发环境 首先&#xff0c;创建新项目&#…

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中&#xff0c;经常会需要进行各种业务流程梳理&#xff0c;而流程图就是梳理业务时必要的手段&#xff0c;同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…

【CTF-SHOW】Web入门 Web14 【editor泄露-详】【var/www/html目录-详】

editor泄露问题通常出现在涉及文件编辑器或脚本编辑器的题目中&#xff0c;尤其是在Web安全或Pwn&#xff08;系统漏洞挖掘&#xff09;类别中。editor泄露的本质是由于系统未能妥善处理临时文件、编辑历史或进程信息&#xff0c;导致攻击者可以通过某种途径获取正在编辑的敏感…

javaweb-mybatis之动态sql

(1).if标签 编写好方法之后&#xff0c;选中方法名&#xff0c;alt回车&#xff0c;选第一个generate statement快捷生成xml里的标签 (2).foreach标签 用于批量删除 (3)sql和include标签

架构师面试:怎样规划公司的监控架构?

大家好&#xff0c;我是君哥。 监控系统在科技公司非常重要&#xff0c;它可以让运维人员和研发人员提前发现问题、定位问题&#xff0c;进而解决问题。 在我们实际工作中&#xff0c;使用的监控往往五花八门&#xff0c;比较混乱&#xff0c;今天来聊一聊怎么规划公司的监控…

QT开发:深入掌握 QtGui 和 QtWidgets 布局管理:QVBoxLayout、QHBoxLayout 和 QGridLayout 的高级应用

目录 引言 1. QVBoxLayout&#xff1a;垂直布局管理器 基本功能 创建 QVBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐方式 示例代码与详解 2. QHBoxLayout&#xff1a;水平布局管理器 基本功能 创建 QHBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主&#xff0c;卫星、载波、微波等多种通信方式共存&#xff0c;分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高&#xff0c;以及终端通信入网的迅速发展&#xff0c;迫切地需要高效的通信管理系统来应对大规模、复…

Kaggle竞赛——森林覆盖类型分类

目录 1. 竞赛简要2. 数据分析2.1 特征类型统计2.2 四个荒野区域数据分析2.3 连续特征分析2.4 离散特征分析2.5 特征相关性热图2.6 特征间的散点关系图 3. 特征工程3.1 特征组合3.2 连续特征标准化 4. 模型搭建4.1 模型定义4.2 绘制混淆矩阵和ROC曲线4.3 模型对比与选择 5. 测试…

python爬虫案例——selenium爬取淘宝商品信息,实现翻页抓取(14)

文章目录 1、任务目标2、网页分析3、代码编写3.1 代码分析3.2 完整代码1、任务目标 目标网站:淘宝(https://www.taobao.com/) 任务要求:通过selenium实现自动化抓取 淘宝美食 板块下的所有商品信息,并实现翻页抓取,最后以csv格式将数据保存至本地;如: 2、网页分析 首先…

Qt-系统文件相关介绍使用(61)

目录 描述 输⼊输出设备类 打开/读/写/关闭 使用 先初始化&#xff0c;创建出大致的样貌 输入框设置 绑定槽函数 保存文件 打开文件 提取文件属性 描述 在C/C Linux 中我们都接触过关于文件的操作&#xff0c;当然 Qt 也会有对应的文件操作的 ⽂件操作是应⽤程序必不…

wpf grid 的用法

WPF中的Grid是一种布局控件&#xff0c;可用于将子控件按照行和列的方式排列。 以下是Grid控件的用法&#xff1a; 在XAML文件中&#xff0c;添加一个Grid控件&#xff1a; <Grid> </Grid>在Grid控件中&#xff0c;添加行和列定义&#xff1a; <Grid><…

Spring Cloud-Nacos版 学习理解

注册中心 Nacos 下载安装包 bin目录输入 cmd 进入命令行&#xff0c;输入startup.cmd -m standalone 启动 浏览器输入 http://127.0.0.1:8848/nacos/index.html&#xff0c;进入启动页面 账号密码均默认nacos 服务提供者 NacosProvider、服务调用者 NacosConsumer 服务提…

第五届计算机、大数据与人工智能国际会议(ICCBD+AI 2024)

第五届计算机、大数据与人工智能国际会议&#xff08;ICCBDAI 2024&#xff09;将于2024年11月1日-3日在江西景德镇召开。本届会议由景德镇陶瓷大学主办&#xff0c;西安交通大学、暨南大学、南京邮电大学、长沙学院、景德镇学院、ELSP&#xff08;爱迩思出版社&#xff09;、E…

Python Django 数据库优化与性能调优

Python Django 数据库优化与性能调优 Django 是一个非常流行的 Python Web 框架&#xff0c;它的 ORM&#xff08;对象关系映射&#xff09;允许开发者以简单且直观的方式操作数据库。然而&#xff0c;随着数据量的增长&#xff0c;数据库操作的效率可能会成为瓶颈&#xff0c…

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型&#xff08;train.py&#xff09;2. 模型定义&#xff08;model.py&#xff09;3. 测试模型和可视化&#xff08;test.py&#xff09;使用说明模型调整结论 引言 在金融领域&#xff0c;股票价格预测是一个重要且具有挑战性的任务。随着深度学习…

Linux文件操作基础

目录 Linux文件操作基础 引入 回顾C语言文件操作 系统调用接口 open函数 read函数和write函数 close函数 模拟C语言接口 文件描述符 如何理解Linux下一切皆文件 文本读写与二进制读写 Linux文件操作基础 引入 在Linux第一章提到过&#xff0c;在Linux中&#xff0…