当前位置: 首页 > news >正文

Semantic Kernel 快速入门

文章目录

  • Semantic Kernel 快速入门
    • 一、什么是 Semantic Kernel?
      • 1.1 核心特性
    • 二、安装和配置
      • 2.1 安装 .NET SDK
      • 2.2 创建新的 .NET 项目
      • 2.3 安装 Semantic Kernel
    • 三、快速入门
      • 3.1 导入依赖包
      • 3.2 添加 AI 服务
      • 3.3 添加企业服务
      • 3.4 生成内核并检索服务
      • 3.5 添加插件
        • 创建本机插件
      • 3.6 将插件添加到内核
      • 3.7 规划
      • 3.8 调用
      • 3.9 完整代码如下
    • 四、运行示例
    • 五、总结

Semantic Kernel 快速入门

Semantic Kernel 是微软推出的一款强大的 AI 开发工具,旨在简化人工智能在应用中的集成和管理。本技术博客将基于微软官方文档,为你详细解读如何使用 Semantic Kernel,并通过 C# 语言进行快速入门。

一、什么是 Semantic Kernel?

Semantic Kernel 是一款开放源代码工具,允许开发人员在应用程序中无缝集成和管理人工智能。它提供了一种统一的方式来处理各种 AI 模型,无论是大型语言模型、图像生成器还是其他类型的人工智能。

1.1 核心特性

  • 多模型支持:Semantic Kernel 支持多种 AI 模型,包括大型语言模型(LLM)、图像生成器等。
  • 统一接口:提供统一的 API 接口,简化了不同模型的调用和管理。
  • 上下文管理:支持上下文的持久化和共享,使得 AI 模型能够更好地理解和处理用户请求。
  • 扩展性:允许开发人员自定义和扩展功能,以满足特定需求。

二、安装和配置

在开始使用 Semantic Kernel 之前,需要确保已经安装了必要的依赖项并正确配置了开发环境。

2.1 安装 .NET SDK

Semantic Kernel 是基于 .NET 构建的,因此需要先安装 .NET SDK。你可以从 .NET 官方网站 下载并安装最新版本的 .NET SDK。

2.2 创建新的 .NET 项目

使用以下命令创建一个新的 .NET 控制台应用程序:

dotnet new console -o semantic-kernel-demo
cd semantic-kernel-demo

2.3 安装 Semantic Kernel

在项目目录中,使用以下命令安装 Semantic Kernel 和 OpenAI 库:

dotnet add package Microsoft.SemanticKernel
dotnet add package OpenAI

三、快速入门

以下是一个简单的示例,展示了如何使用 Semantic Kernel 调用 智谱AI 的 glm4-flash(可免费调用) 模型来回答问题。我们将通过演练步骤 1、2、3、4、6、9 和 10 来演示快速入门示例。 构建由 AI 服务提供支持且可以运行代码的简单代理所需的一切。

  • 导入依赖包
  • 添加 AI 服务
  • 企业组件
  • 生成内核
  • 添加内存(本次演示跳过)
  • 添加插件
  • 创建内核参数(本次演示跳过)
  • 创建提示(本次演示跳过)
  • 规划
  • Invoke
    在这里插入图片描述

3.1 导入依赖包

对于此示例,我们首先导入以下包:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;

3.2 添加 AI 服务

向内核生成器添加了 OpenAI 聊天完成服务。

var modelId = "glm-4-flash";
var endpoint = "https://open.bigmodel.cn/api/paas/v4";
var apiKey = "YOUR_API_KEY";
// 注:https://bigmodel.cn/dev/howuse/glm-4 访问智谱官网进行apikey创建
// 创建一个OpenAI聊天完成的内核
var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId, new Uri(endpoint),apiKey);

3.3 添加企业服务

使用语义内核的主要优点之一是它支持企业级服务。 在此示例中,我们已将日志记录服务添加到内核,以帮助调试 AI 代理。

builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace));

3.4 生成内核并检索服务

添加服务后,我们生成内核并检索聊天完成服务供以后使用。

Kernel kernel = builder.Build();// 创建检索聊天完成服务
var chatCompletionService = kernel.Services.GetRequiredService<IChatCompletionService>();

3.5 添加插件

添加服务后,我们生成内核并检索聊天完成服务供以后使用。借助插件,AI 代理可以运行代码,从外部源检索信息或执行操作。 在示例中,我们添加了一个插件,允许 AI 代理与灯泡交互。 下面,我们将演示如何创建此插件。

创建本机插件

下面可以看到,创建本机插件与创建新类一样简单。

在此示例中,我们创建了一个可以操作灯泡的插件。 虽然这是一个简单的示例,但此插件快速演示了如何支持这两者…

  • 通过向 AI 代理提供灯泡的状态来检索扩充生成(RAG)
  • 通过 允许 AI 代理打开或关闭灯泡,任务自动化 。
    在自己的代码中,可以创建与任何外部服务或 API 交互的插件,以实现类似的结果。
using System.ComponentModel;
using System.Text.Json.Serialization;
using Microsoft.SemanticKernel;public class LightsPlugin
{// Mock data for the lightsprivate readonly List<LightModel> lights = new(){new LightModel { Id = 1, Name = "Table Lamp", IsOn = false },new LightModel { Id = 2, Name = "Porch light", IsOn = false },new LightModel { Id = 3, Name = "Chandelier", IsOn = true }};[KernelFunction("get_lights")][Description("Gets a list of lights and their current state")]public async Task<List<LightModel>> GetLightsAsync(){return lights;}[KernelFunction("change_state")][Description("Changes the state of the light")]public async Task<LightModel?> ChangeStateAsync(int id, bool isOn){var light = lights.FirstOrDefault(light => light.Id == id);if (light == null){return null;}// Update the light with the new statelight.IsOn = isOn;return light;}
}public class LightModel
{[JsonPropertyName("id")]public int Id { get; set; }[JsonPropertyName("name")]public string Name { get; set; }[JsonPropertyName("is_on")]public bool? IsOn { get; set; }
}

3.6 将插件添加到内核

创建插件后,可以将其添加到内核,以便 AI 代理可以访问它。 在本示例中,我们已将 LightsPlugin 类添加到内核。

// 将插件添加到内核
kernel.Plugins.AddFromType<LightsPlugin>("Lights");

3.7 规划

语义内核利用 函数调用(大多数 LLM能力)来提供 规划。 使用函数调用,LLM 可以请求(或调用)特定函数以满足用户的请求。 然后,语义内核将请求封送至代码库中的相应函数,并将结果返回给 LLM,以便 AI 代理可以生成最终响应。

若要启用自动函数调用,首先需要创建适当的执行设置,以便语义内核知道在 AI 代理请求函数时自动调用内核中的函数。

OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};

3.8 调用

最后,通过使用插件调用 AI 代理。 示例代码演示如何生成非流式处理响应,但也可以使用该方法生成流式处理响应GetStreamingChatMessageContentAsync。

3.9 完整代码如下

/// <summary>/// 快速入门/// </summary>public class QuickStart{/// <summary>// 执行完成服务/// </summary>public async Task Start(){var modelConfig = Global.CurModelContext("glm-4-flash");// 1. 填充OpenAI格式LLM调用参数值var modelId = modelConfig.Model;var endpoint = modelConfig.EndpointKey;var apiKey = modelConfig.ApiKey;// 2. 创建一个OpenAI聊天完成的内核var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId, new Uri(endpoint),apiKey);// 3.添加企业组件builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace));// 4.构建内核Kernel kernel = builder.Build();var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();// 5.添加一个插件(LightsPlugin类定义如下)kernel.Plugins.AddFromType<LightsPlugin>("Lights");// 6.开启规划OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new(){FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()};// 7.创建一个历史记录存储对话var history = new ChatHistory();// 8.发起一次多轮对话聊天服务string? userInput;do{// 9.收集用户输入Console.Write("User > ");userInput = Console.ReadLine();// 10.添加用户输入history.AddUserMessage(userInput);// 11.获得AI的响应var result = await chatCompletionService.GetChatMessageContentAsync(history,executionSettings: openAIPromptExecutionSettings,kernel: kernel);// 12.输出结果Console.WriteLine("Assistant > " + result);// 13.将消息添加到聊天记录history.AddMessage(result.Role, result.Content ?? string.Empty);} while (userInput is not null);}}/// <summary>/// 定义灯泡插件/// </summary>public class LightsPlugin{// Mock data for the lightsprivate readonly List<LightModel> lights = new()
{new LightModel { Id = 1, Name = "Table Lamp", IsOn = false },new LightModel { Id = 2, Name = "Porch light", IsOn = false },new LightModel { Id = 3, Name = "Chandelier", IsOn = true }
};[KernelFunction("get_lights")][Description("Gets a list of lights and their current state")]public async Task<List<LightModel>> GetLightsAsync(){return lights;}[KernelFunction("change_state")][Description("Changes the state of the light")]public async Task<LightModel?> ChangeStateAsync(int id, bool isOn){var light = lights.FirstOrDefault(light => light.Id == id);if (light == null){return null;}// Update the light with the new statelight.IsOn = isOn;return light;}}/// <summary>/// 定义灯泡模型/// </summary>public class LightModel{[JsonPropertyName("id")]public int Id { get; set; }[JsonPropertyName("name")]public string Name { get; set; }[JsonPropertyName("is_on")]public bool? IsOn { get; set; }}

四、运行示例

  1. YOUR_API_KEY 替换为你实际的 API 密钥。
  2. 在项目目录中运行以下命令:
QuickStart quickStart = new QuickStart();
await quickStart.Start();

如下:可使用原生模型能力和调用对应灯泡插件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

五、总结

Semantic Kernel 是一款强大的工具,它简化了 AI 在应用中的集成和管理。通过本指南,你已经了解了如何安装和配置 Semantic Kernel,以及如何使用它来调用 AI 模型。希望这些内容对你有所帮助!

相关文章:

Semantic Kernel 快速入门

文章目录 Semantic Kernel 快速入门一、什么是 Semantic Kernel&#xff1f;1.1 核心特性 二、安装和配置2.1 安装 .NET SDK2.2 创建新的 .NET 项目2.3 安装 Semantic Kernel 三、快速入门3.1 导入依赖包3.2 添加 AI 服务3.3 添加企业服务3.4 生成内核并检索服务3.5 添加插件创…...

MySQL进阶(一)

一、存储引擎 1. MySQL体系结构 连接层&#xff1a; 最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限 服务层&#xff1a; 第二层架构主要完成大多数的核心服务…...

ThreadLocal理解

1.thread是线程&#xff0c;threadLocal是对象&#xff1f; 在 Java 中&#xff1a; Thread 是线程类&#xff0c;其实例代表线程&#xff1a;Thread 类用于创建和管理线程&#xff0c;每个线程都是 Thread 类的一个实例&#xff0c;用于执行具体的任务&#xff0c;例如&…...

PyTorch、Flash-Attn、Transformers与Triton技术全景解析+环境包

PyTorch、Flash-Attn、Transformers与Triton技术全景解析 包好难找 这里是下载链接 添加链接描述 摘要 本文系统性地介绍了深度学习领域的四大关键技术框架&#xff1a;PyTorch、Flash-Attn、Hugging Face Transformers和Triton&#xff0c;分别从核心特性、技术优势、应用场…...

mindyolo填坑

1、按照gitee上的文档跑预测代码&#xff0c;跑不通 更改&#xff1a; 将predict.py复制到跟目录。如果是cpu&#xff08;本地测试比较常见&#xff09;&#xff0c;那么正确的命令行是&#xff1a; python predict.py --device_targetCPU --config ./configs/yolov7/yolov7.…...

【C++】平衡二叉树(AVL树)迭代版

目录 前言&#xff1a; 一&#xff1a;判断一棵树是否为平衡二叉树 二&#xff1a;明确思路 1.为什么使用平衡二叉树 2.旋转 2.1 左旋 2.2 右旋 3.冲突节点 4.平衡因子 5.双旋 5.1 左右双旋(LR) 5.2 右左双旋(RL) 6.平衡因子的更新 7.冲突节点问题补充 三&…...

双链表详解

一、双向链表介绍 二、实现双向链表 1.定义双向链表的结构 2.双向链表的初始化 3.双向链表的尾插 4.双向链表的头插 5.双向链表的打印 6.双向链表的尾删 7.双向链表的头删 8.查找指定位置的数据 9.在指定位置之后插入数据 10.删除指定位置的数据 11.链表的销毁 三、…...

6.9.单源最短路径问题-BFS算法

一.前言&#xff1a; 问题1&#xff1a; 以上述图片为例&#xff0c;比如从G港到Y城&#xff0c;可以是G港->R城->Y城&#xff0c;也可以是G港->P城->Y城等&#xff0c;有很多条路径都可以实现从G港到Y城&#xff0c;但要从中找出G港到Y城距离最短的那一条路径&am…...

react js 查看字体效果

起因&#xff0c; 目的: 想查看某个字体&#xff0c;对中英文的支持情况。 效果图: 完整项目见这里&#xff0c; 需要积分下载&#xff0c;不然的话&#xff0c;显得太水了。 过程: AI 对话&#xff0c; 生成代码。我检查运行&#xff0c; 来回修改。写个博客&#xff0c;…...

GZIPInputStream 类详解

GZIPInputStream 类详解 GZIPInputStream 是 Java 中用于解压缩 GZIP 格式数据的流类,属于 java.util.zip 包。它是 InflaterInputStream 的子类,专门处理 GZIP 压缩格式(.gz 文件)。 1. 核心功能 解压 GZIP 格式数据(RFC 1952 标准)自动处理 GZIP 头尾信息(校验和、时…...

数字智慧方案6206丨智慧园区大数据整体解决方案(45页PPT)(文末有下载方式)

资料解读&#xff1a;智慧园区大数据整体解决方案 详细资料请看本解读文章的最后内容。 在数字化快速发展的当下&#xff0c;智慧园区成为推动产业升级和城市发展的关键力量。这份智慧园区大数据整体解决方案&#xff0c;融合前沿技术与创新理念&#xff0c;为园区的高效管理、…...

Linux系统常用命令、标准C库函数和系统调用

目录 一、常用命令 env echo $name 键值 export name unset name gcc -c xxx.c ar 命令 ar -r libxxx.a xxx1.o xxx2.o gcc -c -fpic xxx.c gcc -shared -fpic xxx1.c xxx2.c -o libxxx.so kill [-信号] PID kill -l 软链接&#xff1a;ln -s xxx yyy 硬链接&…...

【Linux】基础指令(2)

man linux中有很多指令&#xff0c;我们不可能全部记住&#xff0c;man是linux/unix系统中的手册页指令&#xff0c;当我们遇到不熟悉的命令可以用man来查看命令&#xff0c;函数&#xff0c;配置文件的详细使用说明。 man手册分为多个章节&#xff0c;详情如下&#xff1a; …...

“会话技术”——Cookie_(2/2)原理与使用细节

经过Cookie的快速入门与代码使用。如果想深入理解Cookie的技术实现&#xff0c;就得去理解它的原理。 且有些时候使用Cookie&#xff0c;还要根据需求设置存活期限以及确定Cookie获取范围等其他细节。最后&#xff0c;我们会总结Cookie这门客户端会话技术的作用。 一、原理 注…...

Linux操作系统--进程间通信(中)(命名管道)

目录 1.命名管道&#xff1a; 1.1创建一个命名管道 1.2匿名管道与命名管道的区别 1.3命名管道的打开规则 1.4例子1-用命名管道实现文件拷贝 1.5例子2-用命名管道实现server&client通信 1.命名管道&#xff1a; 毫不相关的进程进行进程间通信管道应用的一个限制就是只能…...

数据结构6 · BinaryTree二叉树模板

代码函数功能顺序如下&#xff1a; 1&#xff1a;destroy&#xff1a;递归删除树 2&#xff1a;copy&#xff1a;复制二叉树 3&#xff1a;preOrder&#xff1a;递归前序遍历 4&#xff1a;inOrder&#xff1a;递归中序遍历 5&#xff1a;postOrder&#xff1a;递归后续遍…...

ubuntu的libc 库被我 sudo apt-get --reinstall install libc6搞没了

我系统的libc 没了 今天为了运行一个开源的yuv 播放器&#xff0c;在运行的时候提醒 Inconsistency detected by ld.so: dl-call-libc-early-init.c: 37: _dl_call_libc_early_init: Assertion sym ! NULL failed!然后听从AI 的建议 当我去执行ls 时&#xff0c;系统提示 就这…...

cat file.tar.gz | tar -xzf - -C /target/dir两个减号之间为什么有个空格?是写错了吗?(管道命令后续)

在 tar 命令的参数 -xzf - -C 中&#xff0c;两个减号&#xff08;-&#xff09;之间的空格是故意保留的语法&#xff0c;没有写错。具体原因如下&#xff1a; 1. -xzf - 的语法解析 -xzf 是 tar 命令的组合参数&#xff1a; x&#xff1a;表示解压&#xff08;extract&#x…...

手机的数据楚门世界是如何推送的

手机推送&#xff0c;也叫茧影算法&#xff0c;手机的数据“楚门世界”&#xff1a;信息推送机制的深度剖析与社会影响 在数字化时代&#xff0c;手机已然成为人们生活中不可或缺的伴侣。当我们沉醉于手机带来的便捷与娱乐时&#xff0c;或许未曾察觉&#xff0c;自己正置身于…...

体系结构论文(八十二):A Comprehensive Analysis of Transient Errors on Systolic Arrays

研究背景与动机 TPU架构&#xff08;Tensor Processing Unit&#xff09;广泛应用于DNN推理&#xff0c;其核心是脉动阵列&#xff0c;由大量的乘加单元&#xff08;MAC&#xff09;组成。 由于使用了纳米级CMOS技术&#xff0c;TPU对辐射引发的瞬态错误&#xff08;SET&#…...

综合案例:使用vuex对购物车的商品数量和价格等公共数据进行状态管理

文章目录 0.实现需求1.新建购物车模块cart2.使用json-server模拟向后端请求数据3.在vuex请求获取并存入数据,并映射到组件中,在组件中渲染【重点】3.1.安装axios3.2.准备actions和mutations,获取和存入数据到vuex中3.3.动态渲染:用mapState映射 其他1.为什么在axios在项目中要局…...

二叉搜索树的判断(双指针解决)

98. 验证二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode*preNULL;bool isValidBST(TreeNode* root) {if(rootNULL){return true;}bool leftisValidBST(root->left);if(pre!NULL&&pre->val>root->val){return fals…...

关于CSDN创作的常用模板内容

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 好文评论新文推送 &#x1f4c3;文章前言 &…...

不小心误删了文件,找Windows数据恢复工具来帮忙

相信很多人都遇到过这样的情况&#xff1a;不小心在电脑上删除了一些重要的文件&#xff0c;等到想要找回来时&#xff0c;却感觉特别棘手。 今天我要给大家推荐一款超棒的Windows数据恢复工具&#xff0c;它能轻松帮你找回那些被误删的文件。 &#xff08;文末附下载链接&…...

[Verilog]跨时钟域数据传输解决方案

跨时钟域数据传输解决方案 摘要:跨时钟域数据传输 (Clock Domain Crossing, CDC) 是 SoC 设计中常见且关键的问题,因为现代 SoC 通常包含多个时钟域,不同模块可能运行在不同频率或相位的时钟下。跨时钟域传输数据时,如果处理不当,可能会导致亚稳态 (Metastability)…...

Linux——进程终止/等待/替换

前言 本章主要对进程终止&#xff0c;进程等待&#xff0c;进程替换的详细认识&#xff0c;根据实验去理解其中的原理&#xff0c;干货满满&#xff01; 1.进程终止 概念&#xff1a;进程终止就是释放进程申请的内核数据结构和对应的代码和数据 进程退出的三种状态 代码运行…...

数据结构与算法:图论——最短路径

最短路径 先给出一些leetcode算法题&#xff0c;以后遇见了相关题目再往上增加 最短路径的4个常用算法是Floyd、Bellman-Ford、SPFA、Dijkstra。不同应用场景下&#xff0c;应有选择地使用它们&#xff1a; 图的规模小&#xff0c;用Floyd。若边的权值有负数&#xff0c;需要…...

双指针(5)——有效三角形个数

题目&#xff1a; 这道题我们首先可能会想到暴力解法&#xff0c;三个for循环然后进行check&#xff08;&#xff09;。时间复杂度肯定是不允许的。 同时&#xff0c;验证可以组成三角形的条件是任意两边之和大于第三边&#xff0c;这就意味着我们每组要进行三次比较。但也有捷…...

Qt QGraphicsScene 的用法

背景&#xff0c;为什么要写这篇博客 今天学习 model - view 模式的时候还看到有 scene - view 模式。不知道还有这个模式&#xff0c;所以学习了下。 学习后总体的感觉是&#xff1a;其实没有也是可以的&#xff0c;但有了方便许多。 从两种画图的方法开始说 以前有个项目也…...

使用 Tesseract 实现藏文OCR

要识别藏文&#xff0c;最常用且有效的方法是使用Tesseract OCR&#xff08;谷歌开源的OCR工具&#xff09;&#xff0c;因为它拥有针对藏文的预训练模型支持。 &#x1f680; 一、安装 Tesseract OCR 软件&#xff1a; 下载链接&#xff1a;Tesseract OCR 下载页面 Windows用…...

数字智慧方案5873丨智慧交通设计方案(57页PPT)(文末有下载方式)

资料解读&#xff1a;智慧交通设计方案 详细资料请看本解读文章的最后内容。 智慧交通设计方案是一份详尽的交通规划文件&#xff0c;旨在通过科学的交通设计方法&#xff0c;优化交通系统&#xff0c;提升交通效率&#xff0c;确保交通安全&#xff0c;并促进可持续发展。该…...

【quantity】6 温度单位实现(temperature.rs)

一源码 以下代码实现了一个温度单位系统&#xff0c;支持开尔文(Kelvin)和摄氏度(Celsius)之间的转换和运算。 /// Temperature (kelvin) / 温度 (开尔文) use super::{Quantity, prefix::*}; use crate::unit::Kelvin; use derive_more::{Add, Sub, AddAssign, SubAssign};/…...

ARConv的复现流程

使用环境 Python 3.10.16 torch 2.1.1cu118 torchvision 0.16.1cu118 其它按照官方提供代码的requirements.txt安装 GitHub - WangXueyang-uestc/ARConv: Official repo for Adaptive Rectangular Convolution 数据准备 从官方主页下载pancollection数据集PanCollection…...

安卓游戏APK文件解密与编辑的完整攻略

在移动游戏开发中,保护游戏数据不被篡改是开发者的重要任务。然而,随着逆向工程技术的发展,破解游戏数据也变得可能。本文将详细介绍如何分析、解密和编辑APK安装包中的加密JSON文件,特别关注assets/task目录下的文件,并提供一种绕过checkfile.json中MD5校验的有效方法。通…...

JVM——JVM 是如何执行方法调用的?

JVM 是如何执行方法调用的&#xff1f; 在 Java 世界的底层运作中&#xff0c;方法调用机制是理解 Java 虚拟机&#xff08;JVM&#xff09;行为的关键之一。JVM 作为 Java 程序运行的核心&#xff0c;承担着执行字节码、管理内存、调度线程等多项职责。而方法调用作为程序逻辑…...

一天学完JDBC!!(万字总结)

文章目录 JDBC是什么 1、环境搭建 && 入门案例2、核心API理解①、注册驱动(Driver类)②、Connection③、statement(sql注入)④、PreparedStatement⑤、ResultSet 3、jdbc扩展(ORM、批量操作)①、实体类和ORM②、批量操作 4. 连接池①、常用连接池②、Durid连接池③、Hi…...

【愚公系列】《Manus极简入门》011-习惯养成教练:“习惯塑造师”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

精益数据分析(38/126):SaaS模式的流失率计算优化与定价策略案例

精益数据分析&#xff08;38/126&#xff09;&#xff1a;SaaS模式的流失率计算优化与定价策略案例 在创业和数据分析的领域中&#xff0c;我们不断探索如何更精准地把握业务发展的关键要素。今天&#xff0c;带着与大家共同进步的想法&#xff0c;深入研读《精益数据分析》&a…...

50.【必备】二分答案法与相关题目

本文的网课内容学习自B站左程云老师的算法详解课程&#xff0c;旨在对其中的知识进行整理和分享~ 网课链接&#xff1a;算法讲解051【必备】二分答案法与相关题目_哔哩哔哩_bilibili 一.爱吃香蕉的珂珂 题目&#xff1a;爱吃香蕉的珂珂 算法原理 整体思路 这是一个二分查找算法…...

C# 方法(局部变量和局部常量)

本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 局部变量 和第5章介绍的字段…...

MQTT 协议与 HTTP 协议的区别

在现代的网络通信中&#xff0c;MQTT 协议和 HTTP 协议都扮演着重要的角色&#xff0c;但它们有着不同的特点和适用场景。下面我们就从多个方面来详细探讨它们之间的区别。 一.协议设计理念 1. MQTT 协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;即…...

博弈论思维——AI与思维模型【90】

一、定义 博弈论思维模型是一种研究在相互影响的决策情境中&#xff0c;参与者如何通过策略选择来实现自身利益最大化的理论框架。它分析参与者之间的相互作用、策略组合以及由此产生的结果&#xff0c;帮助人们理解在竞争或合作环境下的决策逻辑和行为模式。 二、由来 博弈…...

【Bootstrap V4系列】学习入门教程之 表格(Tables)和画像(Figure)

Bootstrap V4系列 学习入门教程之 表格&#xff08;Tables&#xff09;和画像&#xff08;Figure&#xff09; 表格&#xff08;Tables&#xff09;一、Examples二、Table head options 表格头选项三、Striped rows 条纹行四、Bordered table 带边框的表格五、Borderless table…...

第 3 篇:有序的世界:有序表 (TreeMap/TreeSet) 的概念与优势

上一篇我们探讨了哈希表如何以牺牲顺序为代价换取极致的平均速度。然而&#xff0c;在现实世界的许多应用中&#xff0c;数据的有序性不仅是锦上添花&#xff0c;甚至是核心需求。想象一下&#xff1a; 你需要显示一个按价格排序的商品列表。你需要找到某个时间点之前或之后的…...

VulnHub-DC-2靶机

主机发现 sudo arp-scan -l 以sudo管理员权限扫描本地活动ip地址 Interface: eth0, type: EN10MB, MAC: 08:00:27:22:46:4f, IPv4: 192.168.252.230 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.252.6 4c:5f:70:74:3c:3b …...

论文笔记(八十三)STACKGEN: Generating Stable Structures from Silhouettes via Diffusion

STACKGEN: Generating Stable Structures from Silhouettes via Diffusion 文章概括摘要I. INTRODUCTIONII. 相关工作A. 从直觉物理学学习稳定性B. 用于姿态生成的扩散模型C. 自动化顺序装配 III. 方法A. 用于 S E ( 3 ) SE(3) SE(3)积木姿态生成的扩散模型B. 模型架构C. 数据生…...

论文阅读笔记——TesserAct: Learning 4D Embodied World Models

TesserAct 论文 采用RGB-DN&#xff08;RGB深度法线&#xff09; 作为 4D 场景中间表示&#xff0c;由此建模 4D 场景&#xff0c;比纯 2D 视频更准确地建模 3D 几何结构。相比现有的 4D 视频生成&#xff0c;优化速度快&#xff0c;收敛好&#xff0c;且首次从当前帧和文本描述…...

变转速振动信号分析处理与故障诊断算法模块

变转速振动信号分析处理与故障诊断算法模块&#xff0c;作为信号处理算法工具箱的主要功能模块&#xff0c;形成了以变转速振动信号分析处理与故障诊断算法模块的经典算法模型&#xff0c;可应用于各类关键机械部件&#xff08;轴承、齿轮、转子等&#xff09;的信号分析、故障…...

每日算法-250502

每日算法 - 2025.05.02 记录一下今天刷的几道 LeetCode 算法题。 3191. 使二进制数组全部等于 1 的最少操作次数 I 题目 思路 贪心 解题过程 遍历数组 nums。当我们遇到 nums[i] 时&#xff1a; 如果 nums[i] 是 1&#xff0c;我们不需要进行操作&#xff0c;因为目标是全 …...

如何在纯C中实现类、继承和多态(小白友好版)

基本实现原理 /* 通过结构体函数指针模拟类 */ typedef struct {// 成员变量int x; // 成员方法&#xff08;函数指针&#xff09; void (*print)(void* self); } MyClass;/* 成员函数实现 */ void my_print(void* self) {MyClass* obj (MyClass*)self;p…...