5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架
5.6.1 Semantic Kernel概述
Microsoft Semantic Kernel(以下简称SK)是一个开源的软件开发工具包(SDK),旨在帮助开发者将大型语言模型(LLM)无缝集成到现有的应用程序中。它支持C#、Python和Java等多种编程语言,提供了轻量级、模块化的框架,用于构建智能代理(Agent)并实现AI与传统代码的协同工作。SK的核心目标是通过提供统一的AI编排层,简化企业在现有系统上引入LLM的复杂性,同时确保企业级可靠性、安全性和可扩展性。
SK的设计理念是将LLM视为一种能力增强工具,通过与现有代码、数据源和API的深度集成,赋予应用程序自然语言处理、任务自动化和智能决策能力。它不仅支持单一LLM的调用,还能通过其代理框架和插件生态系统实现多代理协作,适用于从简单聊天机器人到复杂企业工作流的多种场景。
SK的独特优势包括:
- 模型无关性:支持OpenAI、Azure OpenAI、Hugging Face、NVIDIA等多种LLM,开发者可以根据需求灵活选择模型。
- 插件生态:通过插件机制,开发者可以将现有代码或外部API封装为可被LLM调用的功能模块。
- 企业级特性:内置可观察性、安全性(例如通过Microsoft Graph的权限管理)和稳定的API,适合大规模生产环境。
- 跨语言支持:C#、Python和Java的实现遵循各语言的开发习惯,确保开发体验自然流畅。
以下将详细探讨SK的架构、核心组件、实现方法以及在企业应用中的实践指南。
5.6.2 Semantic Kernel核心架构与组件
SK的架构围绕“内核”(Kernel)这一核心概念构建,Kernel作为一个依赖注入容器,负责管理AI服务、插件和上下文信息。以下是SK的核心组件及其功能:
5.6.2.1 内核(Kernel)
Kernel是SK的中枢,负责协调LLM、插件和外部服务的交互。它通过依赖注入管理所有资源,确保AI应用的模块化与可扩展性。Kernel的主要职责包括:
- 服务选择:根据任务需求选择合适的AI服务(如Azure OpenAI或Hugging Face)。
- 提示渲染:将用户输入和模板化提示词(Prompt)组合,生成可供LLM处理的请求。
- 函数调用:解析LLM的响应,调用相应的插件或原生函数。
- 上下文管理:维护会话状态和上下文信息,支持长期交互。
5.6.2.2 插件(Plugins)
插件是SK的功能扩展单元,封装了可被LLM调用的功能。SK支持两种类型的插件:
- 语义函数(Semantic Functions):基于提示词的函数,直接调用LLM生成自然语言响应。例如,一个语义函数可以通过提示词生成文本摘要。
- 原生函数(Native Functions):用C#、Python或Java编写的传统代码,处理LLM不擅长的任务,如数学计算、API调用或数据库操作。
插件通过OpenAPI规范定义,确保与其他系统(如Microsoft 365 Copilot或ChatGPT)的互操作性。开发者可以通过标注(如C#中的[KernelFunction])或配置文件将现有代码转化为插件。
5.6.2.3 规划器(Planner)
规划器是SK的高级组件,负责将复杂任务分解为多个子任务,并动态编排插件的调用顺序。规划器利用LLM的推理能力,生成执行计划,支持以下模式:
- 顺序规划:按固定顺序执行一系列函数。
- 条件规划:根据上下文动态选择执行路径。
- 递归推理:通过多次调用LLM优化任务分解和执行。
规划器特别适合需要多步骤推理的任务,例如自动生成报告或处理多系统集成的业务流程。
5.6.2.4 记忆(Memory)
SK的记忆机制支持短期和长期上下文管理,分为:
- 短期记忆(Volatile Memory):存储当前会话的上下文,适合实时交互。
- 长期记忆(Vector Store):通过向量数据库(如Azure AI Search、Elasticsearch或Pinecone)存储嵌入(Embedding),支持语义搜索和知识检索。
记忆机制通过与向量数据库的集成,实现了高效的检索增强生成(RAG),使LLM能够基于企业数据生成更准确的响应。
5.6.2.5 代理框架(Agent Framework)
SK的代理框架支持构建自主或协作型智能代理。代理可以分为:
- 单代理:独立完成任务,如智能客服。
- 多代理:多个代理协作完成复杂工作流,如数据分析与报告生成。
代理框架通过与AutoGen的集成,提供了多代理对话和任务分配功能,进一步增强了SK在复杂场景中的适用性。
5.6.2.6 连接器(Connectors)
连接器是SK与外部系统交互的桥梁,支持与Microsoft Graph、REST API、数据库等集成。例如,通过Microsoft Graph连接器,SK可以基于用户权限动态生成个性化的响应。
5.6.3 Semantic Kernel的实现方法
以下是基于SK构建企业应用的典型开发流程,结合代码示例说明如何实现一个简单的智能代理。
5.6.3.1 环境配置
首先,安装SK的SDK。对于C#,可以通过NuGet安装:
bash
dotnet add package Microsoft.SemanticKernel
对于Python,安装PyPI包:
bash
pip install semantic-kernel
配置AI服务(如Azure OpenAI)的环境变量:
bash
export AZURE_OPENAI_API_KEY="your-api-key"
export AZURE_OPENAI_ENDPOINT="your-endpoint"
export AZURE_OPENAI_DEPLOYMENT="your-deployment"
5.6.3.2 创建内核
以下是一个C#示例,初始化内核并添加Azure OpenAI服务:
csharp
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(deploymentName: Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT"),endpoint: Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT"),apiKey: Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY")
);
var kernel = builder.Build();
5.6.3.3 定义插件
创建一个原生函数插件,计算字符串长度:
csharp
public class TextPlugin
{[KernelFunction]public int GetLength(string input) => input.Length;
}
将插件添加到内核:
csharp
kernel.Plugins.AddFromType<TextPlugin>("TextPlugin");
5.6.3.4 创建代理
定义一个简单的聊天代理:
csharp
var agent = new ChatCompletionAgent
{Name = "TextAgent",Instructions = "You are a helpful assistant that processes text inputs.",Kernel = kernel
};
5.6.3.5 执行任务
调用代理处理用户输入:
csharp
await foreach (var response in agent.InvokeAsync("Count the length of 'Hello, World!'"))
{Console.WriteLine(response.Message); // 输出:13
}
5.6.3.6 集成外部API
假设需要调用天气API,可以定义一个插件:
csharp
public class WeatherPlugin
{[KernelFunction]public async Task<string> GetWeatherAsync(string city){// 模拟API调用return await Task.FromResult($"Weather in {city}: Sunny, 25°C");}
}
在提示词中调用插件:
csharp
var prompt = "What's the weather in Shanghai?";
var result = await kernel.InvokePromptAsync(prompt);
Console.WriteLine(result); // 输出:Weather in Shanghai: Sunny, 25°C
5.6.4 企业应用实践
SK在企业场景中的应用广泛,以下结合典型案例说明其实现方式。
5.6.4.1 智能客服
需求:构建一个智能客服系统,能够回答用户问题并调用CRM系统记录交互。 实现:
- 配置记忆:使用Azure AI Search存储历史对话,支持上下文感知。
- 定义插件:创建插件调用CRM API,记录用户问题和解决方案。
- 代理设计:部署一个协作代理,结合LLM生成回答和插件执行操作。
- 部署:通过Azure Functions实现无服务器部署,确保高可用性。
5.6.4.2 数据分析助手
需求:生成销售数据的洞察报告,并支持自然语言查询。 实现:
- 数据连接:通过连接器访问SQL数据库,提取销售数据。
- 语义函数:设计提示词,将用户查询转化为SQL查询。
- 规划器:自动分解复杂查询(如“对比去年和今年的销售额”),生成多步执行计划。
- 可视化:通过插件调用Power BI API,生成可视化报告。
5.6.4.3 知识管理
需求:构建企业知识库,支持员工通过自然语言查询内部文档。 实现:
- 向量存储:使用Pinecone存储文档嵌入,支持语义搜索。
- RAG集成:结合LLM和检索结果生成准确回答。
- 权限控制:通过Microsoft Graph连接器,确保回答符合用户权限。
5.6.5 优势与局限性
5.6.5.1 优势
- 无缝集成:与现有代码和API的高度兼容性,降低迁移成本。
- 企业级支持:内置安全性和可观察性,适合生产环境。
- 灵活性:支持多种LLM和编程语言,适应不同技术栈。
- 生态系统:与Microsoft生态(如Azure、Microsoft 365)的深度集成。
5.6.5.2 局限性
- 文档不足:部分语言(如Python、Java)的文档和示例相对C#较少,可能增加学习曲线。
- 复杂性:对于简单任务,SK的配置可能显得过于复杂。
- 依赖外部服务:部分功能(如向量存储)需要依赖Azure或其他云服务,增加部署成本。
5.6.6 最佳实践
- 模块化设计:将功能分解为独立插件,提高代码可维护性。
- 提示工程:优化提示词设计,确保LLM生成结果准确且高效。
- 性能监控:利用SK的日志和可观察性功能,实时监控系统性能。
- 增量实施:从小规模原型开始,逐步扩展到复杂工作流。
- 社区参与:利用SK的GitHub仓库和社区资源,获取最新更新和支持。
5.6.7 未来发展
SK正在快速迭代,未来可能在以下方向进一步增强:
- 多模态支持:整合图像、音频等多模态数据,扩展应用场景。
- AutoGen深度集成:通过与AutoGen的融合,提供更强大的多代理协作能力。
- 无代码平台:结合AutoGen Studio,推出更易用的低代码开发工具。
- 本地化部署:增强对本地模型(如Ollama)的支持,满足数据隐私需求。
5.6.8 总结
Microsoft Semantic Kernel通过其轻量级、模块化的设计,为企业提供了将LLM集成到现有应用的强大工具。其核心组件(Kernel、插件、规划器、记忆、代理框架)共同构建了一个灵活的AI编排层,支持从简单任务到复杂工作流的多种场景。尽管存在文档和复杂性方面的挑战,SK的企业级特性和与Microsoft生态的深度集成使其成为构建智能应用的理想选择。通过遵循最佳实践并结合实际案例,企业可以利用SK快速实现AI驱动的数字化转型。
AutoGen和Microsoft Semantic Kernel(SK)是两种主流的开源框架,用于构建基于大语言模型(LLM)的智能代理(Agent)应用。两者都支持LLM驱动的自动化任务,但在设计理念、功能特性、应用场景和实现方式上存在显著差异。以下从多个维度对AutoGen和SK进行详细比较,以帮助开发者选择适合自身需求的框架。
- 概述与设计理念
AutoGen
- 概述:AutoGen是由Microsoft开发的一个开源框架,专注于多代理(Multi-Agent)协作系统的构建。它通过定义多个具有特定角色和能力的代理,支持复杂的对话和任务协作,特别适合需要动态交互和自动化工作流的场景。
- 设计理念:以多代理协同为核心,强调代理间的对话和任务分解,模拟人类团队协作模式。AutoGen将LLM视为“可对话的计算单元”,通过对话驱动任务执行。
- 目标用户:AI研究人员、需要多代理系统的开发者、自动化任务工程师。
Semantic Kernel (SK)
- 概述:SK是Microsoft开发的一个开源SDK,旨在将LLM无缝集成到现有应用程序中,提供统一的AI编排层。它支持单代理和多代理场景,强调与企业现有系统和代码的深度集成。
- 设计理念:以“内核”为中心,通过模块化组件(插件、规划器、记忆等)整合LLM和传统代码,简化企业应用的开发和部署。SK更像是一个通用的AI集成框架,适用于多种场景。
- 目标用户:企业开发者、技术决策者、需要将AI集成到现有系统的工程师。
比较:
- AutoGen专注于多代理对话和协作,适合探索复杂的代理交互逻辑。
- SK更通用,强调LLM与现有系统的集成,适合企业级应用开发。
- AutoGen更偏向研究和实验,SK更注重生产环境的稳定性和可扩展性。
- 核心功能与组件
AutoGen
- 代理模型:
- 支持多种代理类型:用户代理(UserProxyAgent)、助手代理(AssistantAgent)、群聊代理(GroupChatAgent)。
- 代理通过自然语言对话协作,动态分配任务。
- 对话机制:
- 核心是对话驱动的任务执行,代理通过消息传递协商和完成任务。
- 支持自定义对话模式(如顺序对话、群聊、嵌套对话)。
- 工具调用:
- 提供工具集成功能,代理可以调用Python代码、API或其他外部工具。
- 工具调用依赖于LLM的函数调用能力(如OpenAI的Function Calling)。
- 记忆管理:
- 对话历史存储在内存中,支持上下文感知,但缺乏长期记忆或向量数据库集成。
- 规划与编排:
- 通过对话动态规划任务,缺乏显式的规划器组件。
- 依赖LLM的推理能力分解复杂任务。
- 生态支持:
- 集成OpenAI、Azure OpenAI、Hugging Face等LLM。
- 支持与SK的部分互操作(如代理框架集成)。
Semantic Kernel
- 代理模型:
- 支持单代理(ChatCompletionAgent)和多代理(通过AutoGen或其他框架集成)。
- 代理基于Kernel管理,强调模块化设计。
- 对话机制:
- 通过提示词和插件驱动任务执行,交互逻辑由开发者定义。
- 支持对话上下文管理,但更注重任务导向而非自由对话。
- 工具调用:
- 提供强大的插件系统,支持语义函数(基于LLM)和原生函数(C#/Python/Java代码)。
- 插件通过OpenAPI规范定义,支持与企业API和数据库无缝集成。
- 记忆管理:
- 提供短期记忆(会话上下文)和长期记忆(向量数据库,如Azure AI Search、Pinecone)。
- 支持检索增强生成(RAG),适合知识密集型应用。
- 规划与编排:
- 内置规划器(Planner),支持顺序、条件和递归推理规划。
- 规划器可自动分解复杂任务并生成执行计划。
- 生态支持:
- 支持多种LLM(OpenAI、Azure OpenAI、Hugging Face、NVIDIA等)。
- 与Microsoft生态深度集成(如Microsoft Graph、Azure Functions、Power BI)。
- 支持C#、Python、Java,适合多种技术栈。
比较:
- 代理协作:AutoGen的多代理对话机制更灵活,适合动态交互场景;SK的代理更结构化,依赖规划器和插件。
- 工具集成:SK的插件系统更强大,支持原生代码和企业级API;AutoGen的工具调用更轻量,依赖LLM推理。
- 记忆管理:SK的长期记忆和RAG能力更适合知识库应用;AutoGen的记忆局限于对话历史。
- 规划能力:SK的规划器提供显式的任务分解和编排;AutoGen依赖对话动态规划,灵活但可能不够结构化。
- 生态支持:SK与Microsoft生态的深度集成和跨语言支持更适合企业;AutoGen更轻量,适合快速原型开发。
- 技术实现与开发体验
AutoGen
-
编程语言:主要支持Python,代码风格简洁。
-
开发流程:
- 定义代理及其角色(例如,编码器、测试员、规划者)。
- 配置LLM服务(OpenAI、Azure OpenAI等)。
- 设置对话模式(单代理、群聊等)。
- 实现工具调用或自定义函数。
- 执行对话并处理结果。
-
代码示例(Python):
python
from autogen import AssistantAgent, UserProxyAgent, config_list_from_jsonconfig_list = config_list_from_json("OAI_CONFIG_LIST.json") assistant = AssistantAgent("Assistant", llm_config={"config_list": config_list}) user = UserProxyAgent("User", human_input_mode="ALWAYS") user.initiate_chat(assistant, message="Write a Python script to calculate factorial.")
-
开发体验:
- 易于上手,适合快速原型开发。
- 文档和社区支持较为活跃,但复杂场景的调试可能较困难。
- 依赖LLM的对话能力,任务结果可能因提示词设计而异。
Semantic Kernel
-
编程语言:支持C#、Python、Java,C#生态最成熟。
-
开发流程:
- 初始化Kernel并配置AI服务。
- 定义插件(语义函数或原生函数)。
- 配置代理或规划器,定义任务逻辑。
- 实现记忆或外部系统集成。
- 部署并监控应用。
-
代码示例(C#):
csharp
using Microsoft.SemanticKernel; var builder = Kernel.CreateBuilder(); builder.AddAzureOpenAIChatCompletion("deployment", "endpoint", "api-key"); var kernel = builder.Build(); var result = await kernel.InvokePromptAsync("Write a Python script to calculate factorial."); Console.WriteLine(result);
-
开发体验:
- 配置较复杂,学习曲线稍陡,但适合企业级开发。
- C#文档详尽,Python和Java文档相对较少。
- 提供强大的调试和可观察性工具,适合生产环境。
比较:
- 语言支持:SK支持多语言,适合多样化的技术栈;AutoGen专注于Python,开发更轻量。
- 开发复杂度:AutoGen的对话驱动开发更直观,适合快速实验;SK的模块化设计更复杂,但更适合结构化应用。
- 调试与监控:SK提供企业级的可观察性和日志支持;AutoGen的调试依赖开发者手动分析对话历史。
- 应用场景
AutoGen
- 优势场景:
- 多代理协作:如代码生成与测试(一个代理写代码,另一个代理测试)。
- 自动化工作流:如市场分析(数据收集、分析、报告生成)。
- 研究与实验:探索代理间动态交互逻辑。
- 典型案例:
- 智能编程助手:多个代理协作完成代码编写、调试和优化。
- 任务自动化:通过对话分解复杂任务(如行程规划)。
- 教育与模拟:模拟团队协作,研究多代理行为。
Semantic Kernel
- 优势场景:
- 企业系统集成:将LLM集成到CRM、ERP或知识库系统。
- 知识密集型应用:如智能客服、数据分析助手。
- 生产级部署:需要高可用性、安全性和可扩展性的场景。
- 典型案例:
- 智能客服:结合Microsoft Graph和向量数据库,提供个性化回答。
- 数据分析:通过插件调用SQL和Power BI,生成洞察报告。
- 知识管理:基于RAG的内部文档查询系统。
比较:
- AutoGen适合需要动态交互和多代理协作的场景,如自动化工作流或研究。
- SK更适合需要与现有系统深度集成、支持复杂业务逻辑的企业应用。
- AutoGen更灵活但可能缺乏结构化;SK更结构化但配置成本较高。
- 优势与局限性
AutoGen
- 优势:
- 多代理协作能力强大,适合复杂任务分解。
- 轻量级,易于快速原型开发。
- 对话驱动的任务执行灵活,适应动态场景。
- 开源社区活跃,迭代速度快。
- 局限性:
- 缺乏长期记忆和向量数据库支持,难以处理知识密集型任务。
- 对LLM推理能力依赖较强,结果稳定性可能较低。
- 生产环境支持较弱,缺乏企业级安全性与可观察性。
- 仅支持Python,限制了技术栈选择。
Semantic Kernel
- 优势:
- 支持多语言(C#、Python、Java),适应多样化技术栈。
- 强大的插件系统和企业级集成能力,适合生产环境。
- 提供长期记忆和RAG,适合知识密集型应用。
- 与Microsoft生态深度集成,提供安全性、可观察性和高可用性。
- 局限性:
- 配置和开发复杂度较高,学习曲线陡峭。
- Python和Java生态相对C#较弱,文档支持不足。
- 对于简单任务,SK的模块化设计可能显得过于复杂。
- 部分功能依赖Azure等云服务,增加部署成本。
比较:
- AutoGen在多代理协作和快速原型开发方面更具优势;SK在企业集成、生产部署和知识管理方面更强。
- AutoGen适合研究和轻量级应用;SK适合需要稳定性和可扩展性的企业场景。
- AutoGen的局限性在于生产支持不足;SK的局限性在于开发复杂度和部分生态不成熟。
- 社区与生态
AutoGen
- 社区:开源社区活跃,GitHub Star数较高,迭代频繁。
- 文档:提供丰富的入门教程和案例,但复杂场景的文档较少。
- 生态:与OpenAI、Hugging Face等LLM集成,支持与SK的部分互操作。
- 未来发展:可能进一步增强多模态支持和与SK的融合。
Semantic Kernel
- 社区:Microsoft支持的开源项目,社区稳步增长,C#生态更成熟。
- 文档:C#文档详尽,Python和Java文档有待完善。
- 生态:与Microsoft生态(Azure、Microsoft 365、Power BI)深度集成,支持多种LLM和向量数据库。
- 未来发展:计划增强多模态支持、AutoGen集成和无代码开发工具。
比较:
- AutoGen的社区更偏向研究和开源开发者;SK的社区更偏向企业用户和Microsoft生态开发者。
- AutoGen的文档更适合快速上手;SK的文档更适合企业级开发但不够全面。
- SK的生态更丰富,适合企业集成;AutoGen的生态更轻量,适合灵活实验。
- 选择建议
选择AutoGen的场景
- 需要多代理协作完成复杂任务(如代码生成、自动化工作流)。
- 快速原型开发或研究多代理交互逻辑。
- 技术栈以Python为主,开发者熟悉LLM对话机制。
- 不需要复杂的生产环境支持或长期记忆。
选择Semantic Kernel的场景
- 需要将LLM集成到现有企业系统(如CRM、ERP、知识库)。
- 开发生产级应用,要求高可用性、安全性和可扩展性。
- 需要支持多语言(C#、Python、Java)或与Microsoft生态集成。
- 涉及知识密集型任务,需RAG或向量数据库支持。
结合使用的可能性
- AutoGen和SK并非互斥,可以结合使用。例如,使用AutoGen实现多代理对话逻辑,通过SK的插件和记忆机制集成企业数据和API。
- Microsoft正在推动两者的互操作性,未来可能通过AutoGen的代理框架增强SK的多代理能力。
- 总结
维度 | AutoGen | Semantic Kernel |
---|---|---|
设计理念 | 多代理协作,对话驱动任务执行 | LLM与现有系统集成,模块化AI编排 |
核心功能 | 多代理对话、工具调用、动态规划 | 插件系统、规划器、记忆管理(RAG)、企业集成 |
编程语言 | Python | C#、Python、Java |
开发复杂度 | 低,适合快速原型开发 | 中高,适合企业级开发 |
应用场景 | 多代理协作、自动化工作流、研究 | 企业系统集成、知识管理、生产级部署 |
优势 | 灵活、轻量、易上手 | 企业级支持、模块化、跨语言、生态丰富 |
局限性 | 生产支持弱、记忆能力有限 | 开发复杂、部分文档不足、云服务依赖 |
社区与生态 | 活跃、偏研究 | 稳步增长、偏企业、Microsoft生态支持 |
结论:
- 如果你需要快速构建多代理协作系统或进行AI研究,AutoGen是更轻量、灵活的选择。
- 如果你需要在企业环境中集成LLM、支持复杂业务逻辑和生产部署,SK是更稳健、全面的框架。
- 对于需要结合多代理协作和企业集成的场景,可以探索两者的互操作性,利用AutoGen的对话能力和SK的集成能力。
相关文章:
5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架
5.6.1 Semantic Kernel概述 Microsoft Semantic Kernel(以下简称SK)是一个开源的软件开发工具包(SDK),旨在帮助开发者将大型语言模型(LLM)无缝集成到现有的应用程序中。它支持C#、Python和Java…...
vite+vue构建的网站项目localhost:5173打不开
原因:关掉了cmd命令提示符,那个端口就没有被配置上,打开就是这样的。 解决方法:重新在工作目录下打开cmd,输入npm run dev重新启动项目。 重新出现这样的界面说明已经成功启动项目,再次在浏览器中刷新并输入…...
电脑屏幕录制软件Captura源码编译(Win10,VS2022)
屏幕录像的意义: 教育教学方面 制作教学资源:教师可以通过录制屏幕来制作教学视频,演示软件操作、讲解复杂的知识点等。学生可以随时观看这些视频,便于复习和巩固知识,尤其对于一些抽象的概念或难以在课堂上一次性掌握…...
【版本控制】SVN + TortoiseSVN版本管理实用教程(附安装+开发常用操作)
摘要: 本文将带你从零开始掌握 SVN 版本控制系统,结合 TortoiseSVN 图形客户端工具,深入学习包括安装、检出、提交、更新、回滚、冲突解决等常用开发操作,快速上手团队协作! 🧩 什么是 SVN? SV…...
常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法
常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法 在Web应用安全领域,SQL注入(SQL Injection)是历史最悠久、危害最广泛的攻击类型之一。据OWASP(开放式Web应用安全项目)统计,SQL注入连续多年稳居“OWASP Top 10”漏洞榜单前列,每…...
DeepSeek智能时空数据分析(三):专业级地理数据可视化赏析-《杭州市国土空间总体规划(2021-2035年)》
序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…...
day49—双指针+贪心—验证回文串(LeetCode-680)
题目描述 给你一个字符串 s,最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。 示例 1: 输入:s "aba" 输出:true…...
AI电视里的达摩
2025年,所有电视都搭载了AI功能,所有电视厂商都在宣传AI能力。但问题是,消费者依旧没有对AI电视做出什么积极的回应。“AI电视是鸡肋”“AI只是电视的又一轮泡沫”等观点层出不穷。 为什么明明AI技术能够解决电视的很多问题,但AI电…...
算力网络(CFN)在跨校联合科研中的应用:安全性挑战与联邦调度实践
引言:科研协作的算力困境 上海交通大学与麻省理工学院联合开展的高能物理模拟实验,因算力资源分配不均导致部分节点连续72小时处于空转状态。这个典型案例揭示了当前跨机构科研协作的痛点:算力资源无法实现安全可信的细粒度共享。算力网…...
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
面向对象编程核心:封装、继承、多态与 static 关键字深度解析 一、封装:数据安全与接口规范 1. 封装的本质与作用 核心定义:将数据(属性)与操作数据的方法(行为)绑定在类中,隐藏内…...
c++进阶——类与继承
文章目录 继承继承的基本概念继承的基本定义继承方式继承的一些注意事项 继承类模板 基类和派生类之间的转换继承中的作用域派生类的默认成员函数默认构造函数拷贝构造赋值重载析构函数默认成员函数总结 不能被继承的类继承和友元继承与静态成员多继承及其菱形继承问题继承模型…...
【CODEMATE】进制转换(transform) 粤港澳青少年信息学创新大赛 C/C++/Python 解题思路
目录 问题描述做题思路,解决过程思路:踩过的坑:核心代码C 语言 / C 切片:C 语言 / C 判断 ‘A’ 数量:Python 切片:Python 判断 ‘A’ 数量: 完整代码C 语言 完整代码C 完整代码Python 完整代码…...
window和ubuntu自签证书
window下 以管理员身份 运行 Windows PowerShell # CN192.168.0.100 (换成自己的IP或者域名) # O(组织) OU(组织单位) # Cert:\LocalMachine\My:证书存储位置 # test_10:自定义证书名称 .AddYears(10): 证书过期时间 10 年 $cert New-SelfSi…...
ES历史版本下载
下载地址 Past Releases of Elastic Stack Software | Elastic 安装步骤参考 windows 安装 Elasticsearch_windows安装elasticsearch-CSDN博客...
技术面试一面标准流程
0. 自我介绍 ...... 1. 拷打项目 项目干了啥? 难点是啥? 问项目中用到的东西? 扩展? ...... 2. 基础知识 数据结构、C基础、设计模式 数据结构: 堆? unordered_map 和 布隆过滤器 都是用于查找…...
第14篇:Linux设备驱动程序入门<一>
Q:如何简单的理解DE1-SoC-UP Linux系统的设备驱动程序? A:设备驱动程序(Device Driver),简称驱动程序(Driver)。DE1-SoC-UP Linux系统中的设备驱动程序允许系统软件与DE1-SoC开发板…...
软件设计模式与体系结构:基于Java实现管道-过滤器架构
软件设计模式与体系结构:基于Java实现管道-过滤器架构 前言 在软件架构中,数据流风格是一种常见的架构模式,特别适用于需要对数据进行一系列处理的场景。管道-过滤器(Pipe and Filter)*架构是数据流风格的典型代表&a…...
Node.js 包管理工具介绍
Node.js 包管理工具介绍 Node.js 是一个基于 Chrome V8 JavaScript 引擎的服务器端运行环境,它允许开发者使用 JavaScript 进行后端开发。为了方便管理和维护项目中使用的第三方库和模块,Node.js 提供了多种包管理工具。本文将详细介绍几种常用的 Node.…...
Node.js 应用场景
Node.js 应用场景 引言 Node.js 是一个基于 Chrome V8 JavaScript 引擎的开源、跨平台 JavaScript 运行环境。它主要用于服务器端开发,通过非阻塞 I/O 模型实现了高并发处理能力。本文将详细介绍 Node.js 的应用场景,帮助你了解其在实际项目中的应用。…...
C/C++线程详解
一、C语言线程创建(POSIX线程) 1. 基本创建方法 POSIX线程(pthread)是C语言中创建线程的标准API: #include <pthread.h> #include <stdio.h>void* thread_func(void* arg) {printf("Thread runnin…...
动态ip与静态ip的概念、区别、应用场景
动态ip与静态ip的区别 前言 一、IP地址的概念和作用 1.1、IP地址的定义 1.2、IP地址的作用 二、动态IP和静态IP的区别 2.1、动态IP和静态IP的定义 2.2、动态IP和静态IP的特点 2.3、动态IP和静态IP的优缺点比较 三、动态IP和静态IP的应用场景 3.1. 动态IP的应用场景 3.2. 静态IP…...
P12167 [蓝桥杯 2025 省 C/Python A] 倒水
P12167 [蓝桥杯 2025 省 C/Python A] 倒水 题目描述 小蓝有 n n n 个装了水的瓶子,从左到右摆放,第 i i i 个瓶子里装有 a i a_i ai 单位的水。为了美观,小蓝将水循环染成了 k k k 种颜色,也就是说,第 i i i …...
Appium自动化开发环境搭建
自动化 文章目录 自动化前言 前言 Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windows sdk编写的应用。移动网页应用是通过移动浏览器访问的网页应用(appum支持iOS和Chrom…...
【金仓数据库征文】金仓数据库:国产化浪潮下的技术突破与行业实践
目录 前言 技术突破:从追赶国际到引领创新 行业深耕:从医疗到航空航天的多领域落地 事务管理与ACID特性 事务管理概述 索引优化与性能调优 安全性与备份恢复策略 Json构造函数 总结 前言 在数字化转型的全球趋势下,数据库作为信息系…...
计算机操作系统
1. T0 时刻是否为安全状态? 步骤 1: 计算当前可用资源 总资源数量: A: 17B: 5C: 20 已分配资源: P1: (2, 1, 2)P2: (4, 0, 2)P3: (4, 0, 5)P4: (2, 0, 4)P5: (3, 1, 4) 当前可用资源: A: 17 - (2 4 4 2 3) 2B: 5 - (1 0 …...
linux系统问题杂谈
1.配置好anaconda之后,在一个终端中编辑好环境变量之后能够正常使用conda命令,但是新打开一个中断使用conda命令报错"无法识别conda"。 原因:使用“export PATH"/home/username/anaconda3/bin:$PATH"命令,临…...
百度打响第一枪!通用超级智能体时代,真的来了
Create2025百度AI开发者大会在武汉举行,K哥受邀参加,看到了许多有趣的创新技术和产品。其中最令我印象深刻的是一款全新发布的通用超级智能体——心响App。 这款App通过多智能体复杂组合、协作,满足用户能够「一站式」解决复杂问题的使用诉求…...
FWFT_FIFO和Standard_FIFO对比仿真
在FPGA中使用FIFO时,如果使用FPGA厂商提供的FIFO IP,一般都会有First Word Fall Through FIFO和Standard FIFO类型选项,那么这两种FIFO有什么差异么。两种FIFO的端口是一样的,看不出区别,只有通过仿真,才能…...
【网络原理】TCP提升效率机制(二):流量控制和拥塞控制
目录 一. 前言 二. 流量控制 三. 拥塞控制 一. 前言 TCP的可靠传输依靠确认应答机制,超时重传机制是对确认应答的一种补充,解决了丢包问题 为了提高传输效率,避免大量的时间都浪费在等待应答的过程,故引入了滑动窗口机制&…...
DeepSeek+Cline:开启自动化编程新纪元
目录 一、引言:AI 编程时代的曙光二、认识 DeepSeek 和 Cline2.1 DeepSeek 是什么2.2 Cline 详解2.3 两者结合的魅力 三、DeepSeek Cline 安装与配置全流程3.1 安装 VS Code3.2 安装 Cline 插件3.3 获取 DeepSeek API Key3.4 配置 Cline 与 DeepSeek 连接 四、实战演…...
【RedisLockRegistry】分布式锁
RedisLockRegistry分布式锁 介绍 RedisLockRegistry是Spring框架提供的一种分布式锁机制,它基于Redis来实现对共享资源的保护,防止多个进程同时对同一资源进行修改,从而避免数据不一致或其他问题 基本原理 RedisLockRegistry通过Redi…...
脚本批量启动Node服务器
创建文件start-projects.ps1 定义项目路径(使用PowerShell中更可靠的路径表示方式) $变量A “E:/XXXX文件根目录” $变量B “E:/XXXX” $变量C “E:/XXXX” 打开变量A并执行npm run dev Start-Process powershell -ArgumentList “-NoExit”, “-Com…...
使用命令行加密混淆C#程序
C#作为托管语言编译生成的IL中间代码极易被反编译工具还原源码。据统计,超过83%的商业软件曾遭遇过代码逆向风险,导致核心算法泄露、授权被跳过. 因此对于C#语言开发的程序来说, 在发布前进行混淆和加密非常有必要. 本文主要介绍如何使用恒盾C#混淆加密…...
零基础上手Python数据分析 (23):NumPy 数值计算基础 - 数据分析的加速“引擎”
写在前面 —— 超越原生 Python 列表,解锁高性能数值计算,深入理解 Pandas 的底层依赖 在前面一系列关于 Pandas 的学习中,我们已经领略了其在数据处理和分析方面的强大威力。我们学会了使用 DataFrame 和 Series 来高效地操作表格数据。但是,你是否好奇,Pandas 为何能够…...
深度学习实战106-大模型LLM+股票MCP Server的股票分析和投资建议应用场景
大家好,我是微学AI,今天给大家介绍一下深度学习实战106-大模型LLM+股票MCP Server的股票分析和投资建议应用场景。 文章目录 一、项目背景(一)大型语言模型(LLM)在金融领域的应用趋势(二)模型上下文协议(MCP)的兴起(三)大模型LLM+股票MCP服务的需求二、开发流程(…...
IDEA配置将Servlet真正布署到Tomcat
刚开始只能IDEA运行完Servlet web application 并保持IDEA运行才能通过浏览器访问到我的Servlet,跟想象中的不一样,不应该是IDEA运行完项目以后只要打开Tomcat就能访问吗?事实时运行完项目只要关掉IDEA就不能再访问到应用了,而且T…...
交叉编译paho.mqtt.c和paho.mqtt.cpp(MQTT客户端)
一、参考资料 【MQTT】paho.mqtt.cpp 库的 介绍、下载、交叉编译、MQTT客户端例子源码-CSDN博客 【MQTT】paho.mqtt.c 库的“介绍、下载、交叉编译” 详解,以及编写MQTT客户端例子源码-CSDN博客 二、准备工作 1. 重要说明 paho.mqtt.cpp与paho.mqtt.cÿ…...
Prometheus中部署Alertmanager
部署Alertmanager 是 Prometheus 生态系统中的一个重要步骤,用于管理和处理 Prometheus生成的告警。Alertmanager和Prometheus Server一样均采用Golang实现,并且没有第三方依赖。一般来说我们可以通过以下几种方式来部署Alertmanager:二进制包…...
van-field组件设置为textarea属性被软键盘遮挡问题
在移动端van-field 输入框当type为text时,调出软键盘输入框会被顶上去,但type为textarea时不会被顶上去,可以用下面方法来实现: 1. 来2个van-field type为text的输入框z-index: 1 type为textarea的输入框z-index: 9999&#x…...
websheet之 编辑器
一、默认编辑器 该单元格编辑器是控件自带的编辑器,用户不需要指定。 二、下拉选择 该单元格编辑器是控件自带的编辑器的一种。该控件需要你指定下拉的数据源。在下面的例子中,我们给C3和C6单元格指定了币种的下拉选择编辑器。参数见:六、 参…...
氢气泄漏应急预案应包括哪些内容?
氢气泄漏应急预案是科研实验室中应对氢气泄漏事故的重要文件,其内容需要全面覆盖预防、检测、响应和善后处理等环节,确保在紧急情况下能够快速、有序地采取措施,最大限度地减少事故风险和损失。以下是氢气泄漏应急预案应包括的主要内容&#…...
【每天一个知识点】IPv4(互联网协议版本4)和IPv6(互联网协议版本6)
IPv4(互联网协议版本4)和IPv6(互联网协议版本6)是用于在互联网上标识和定位设备的两种主要协议。它们的主要区别在于地址空间、结构、以及一些附加功能。以下是两者的对比: 1. 地址长度 IPv4: 地址长度为32位…...
【高频考点精讲】前端构建工具对比:Webpack、Vite、Rollup和Parcel
前端构建工具大乱斗:Webpack、Vite、Rollup和Parcel谁是你的菜? 【初级】前端开发工程师面试100题(一) 【初级】前端开发工程师面试100题(二) 【初级】前端开发工程师的面试100题(速记版) 最近在后台收到不少同学提问:“老李啊,现在前端构建工具这么多,我该选哪个?…...
牛客小白月赛115-B题:签到题
题目传送门牛客网竞赛题目 一、题目描述 给定n道题目,每道题难度为aᵢ。要从中选出m道题组成比赛,使得难度最低的题目(签到题)数量尽可能多。求签到题的最大可能数量。 输入: 第一行两个整数n,m(1≤m≤n≤210⁵)第…...
【QQMusic项目复习笔记——音乐管理模块详解】第四章
🌹 作者: 云小逸 🤟 个人主页: 云小逸的主页 🤟 motto: 要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在&…...
IPv6 技术细节 | 源 IP 地址选择 / Anycast / 地址自动配置 / 地址聚类分配
注:本文为 “IPv6 技术细节” 相关文章合集。 部分文章中提到的其他文章,一并引入。 略作重排,未整理去重。 如有内容异常,请看原文。 闲谈 IPv6 - 典型特征的一些技术细节 iteye_21199 于 2012-11-10 20:54:00 发布 0. 巨大的…...
代码随想录算法训练营day11(二叉树)
华子目录 翻转二叉树思路 对称二叉树思路 二叉树的最大深度思路 翻转二叉树 https://leetcode.cn/problems/invert-binary-tree/description/ 思路 采用递归的思路可以前序遍历和后序遍历,不能使用中序遍历 # Definition for a binary tree node. # class TreeNo…...
A Comprehensive Survey of Spoken Language Models
语音大语言模型(Spoken Language Model, SLM)正在引领人工智能领域的新一轮革新浪潮。正如文本自然语言处理从任务特定模型迈向通用大语言模型的演进,语音领域也正在经历类似转型。 为填补该领域系统性综述的空白,芝加哥大学、卡…...
深入解析 SMB 相关命令:smbmap、smbclient、netexec 等工具的使用指南
Server Message Block(SMB)协议是广泛应用于文件共享、打印机共享和进程间通信的网络协议,尤其在 Windows 环境中常见。渗透测试和网络安全审计中,SMB 是一个重要的攻击面,相关工具如 smbmap、smbclient 和 netexec 提…...
伊克罗德信息亮相亚马逊云科技合作伙伴峰会,以ECRobot 智能云迁移助手在GenAI Tech Game比赛勇夺金牌!
十年同行,共赴盛会:伊克罗德信息亮相2025亚马逊云科技Partner Summit 2025亚马逊云科技合作伙伴峰会(AWS Partner Summit)于乌镇盛大启幕,这场全球云计算领域的顶级盛会汇聚了亚马逊云科技全球核心合作伙伴、行业领袖与…...