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

Spring AI高级RAG功能查询重写和查询翻译

1、创建查询重写转换器

// 创建查询重写转换器queryTransformer = RewriteQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).build();

查询重写是RAG系统中的一个重要优化技术,它能够将用户的原始查询转换成更加结构化和明确的形式。这种转换可以提高检索的准确性,并帮助系统更好地理解用户的真实意图。

Spring AI提供了RewriteQueryTransformer来实现查询重写功能。以下是一个具体的示例:

package com.alibaba.cloud.ai.example.chat.openai.controller;import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.rag.Query;
import org.springframework.ai.rag.preretrieval.query.expansion.MultiQueryExpander;
import org.springframework.ai.rag.preretrieval.query.transformation.QueryTransformer;
import org.springframework.ai.rag.preretrieval.query.transformation.RewriteQueryTransformer;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.List;/*** @Author: wst* @Date: 2024-12-16*/@RestController
@RequestMapping("/rag")
public class RagController {private final ChatClient openAiChatClient;private final ChatModel chatModel;private final MultiQueryExpander queryExpander;private final QueryTransformer queryTransformer;public RagController(ChatModel chatModel) {this.chatModel = chatModel;//		 创建聊天客户端实例
// 设置系统提示信息,定义AI助手作为专业的室内设计顾问角色// 构造时,可以设置 ChatClient 的参数// {@link org.springframework.ai.chat.client.ChatClient};this.openAiChatClient = ChatClient.builder(chatModel).defaultSystem("你是一位专业的室内设计顾问,精通各种装修风格、材料选择和空间布局。请基于提供的参考资料,为用户提供专业、详细且实用的建议。在回答时,请注意:\n" +"1. 准确理解用户的具体需求\n" +"2. 结合参考资料中的实际案例\n" +"3. 提供专业的设计理念和原理解释\n" +"4. 考虑实用性、美观性和成本效益\n" +"5. 如有需要,可以提供替代方案")// 实现 Chat Memory 的 Advisor// 在使用 Chat Memory 时,需要指定对话 ID,以便 Spring AI 处理上下文。.defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))// 实现 Logger 的 Advisor.defaultAdvisors(new SimpleLoggerAdvisor())// 设置 ChatClient 中 ChatModel 的 Options 参数.defaultOptions(OpenAiChatOptions.builder().topP(0.7).build()).build();// 构建查询扩展器
// 用于生成多个相关的查询变体,以获得更全面的搜索结果queryExpander = MultiQueryExpander.builder().chatClientBuilder(openAiChatClient.mutate()).includeOriginal(false) // 不包含原始查询.numberOfQueries(3) // 生成3个查询变体.build();
// 创建查询重写转换器queryTransformer = RewriteQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).build();}@GetMapping("/multiQuery")public List<Query> multiQuery() {
// 执行查询扩展
// 将原始问题"请提供几种推荐的装修风格?"扩展成多个相关查询List<Query> queries = queryExpander.expand(new Query("请提供几种推荐的装修风格?"));return queries;}@GetMapping("/rewriteQuery")public String rewriteQuery( ) {
//        查询重写的主要优势:查询明确化:将模糊的问题转换为具体的查询点
//
//这种转换不仅有助于系统检索到更相关的文档,还能帮助生成更全面和专业的回答。// 创建一个模拟用户学习AI的查询场景Query query = new Query("我正在学习人工智能,什么是大语言模型?");
// 执行查询扩展
// 将原始问题"请提供几种推荐的装修风格?"扩展成多个相关查询// 执行查询重写Query transformedQuery = queryTransformer.transform(query);String rewirte = transformedQuery.text();// 输出重写后的查询System.out.println(rewirte);return rewirte;}}

重写后的查询可能会变成:

什么是大语言模型?

查询重写的主要优势:查询明确化:将模糊的问题转换为具体的查询点

这种转换不仅有助于系统检索到更相关的文档,还能帮助生成更全面和专业的回答

2、查询翻译

查询翻译是RAG系统中的一个实用功能,它能够将用户的查询从一种语言翻译成另一种语言。这对于多语言支持和跨语言检索特别有用。Spring AI提供了TranslationQueryTransformer来实现这一功能。

// 创建查询翻译转换器,设置目标语言为中文
 translationQueryTransformer = TranslationQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).targetLanguage("chinese")  // 设置目标语言为中文.build();

完整代码

package com.alibaba.cloud.ai.example.chat.openai.controller;import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.rag.Query;
import org.springframework.ai.rag.preretrieval.query.expansion.MultiQueryExpander;
import org.springframework.ai.rag.preretrieval.query.transformation.QueryTransformer;
import org.springframework.ai.rag.preretrieval.query.transformation.RewriteQueryTransformer;
import org.springframework.ai.rag.preretrieval.query.transformation.TranslationQueryTransformer;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.List;/*** @Author: wst* @Date: 2024-12-16*/@RestController
@RequestMapping("/rag")
public class RagController {private final ChatClient openAiChatClient;private final ChatModel chatModel;private final MultiQueryExpander queryExpander;private final QueryTransformer queryTransformer;private  QueryTransformer translationQueryTransformer;public RagController(ChatModel chatModel) {this.chatModel = chatModel;//		 创建聊天客户端实例
// 设置系统提示信息,定义AI助手作为专业的室内设计顾问角色// 构造时,可以设置 ChatClient 的参数// {@link org.springframework.ai.chat.client.ChatClient};this.openAiChatClient = ChatClient.builder(chatModel).defaultSystem("你是一位专业的室内设计顾问,精通各种装修风格、材料选择和空间布局。请基于提供的参考资料,为用户提供专业、详细且实用的建议。在回答时,请注意:\n" +"1. 准确理解用户的具体需求\n" +"2. 结合参考资料中的实际案例\n" +"3. 提供专业的设计理念和原理解释\n" +"4. 考虑实用性、美观性和成本效益\n" +"5. 如有需要,可以提供替代方案")// 实现 Chat Memory 的 Advisor// 在使用 Chat Memory 时,需要指定对话 ID,以便 Spring AI 处理上下文。.defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))// 实现 Logger 的 Advisor.defaultAdvisors(new SimpleLoggerAdvisor())// 设置 ChatClient 中 ChatModel 的 Options 参数.defaultOptions(OpenAiChatOptions.builder().topP(0.7).build()).build();// 构建查询扩展器
// 用于生成多个相关的查询变体,以获得更全面的搜索结果queryExpander = MultiQueryExpander.builder().chatClientBuilder(openAiChatClient.mutate()).includeOriginal(false) // 不包含原始查询.numberOfQueries(3) // 生成3个查询变体.build();
// 创建查询重写转换器queryTransformer = RewriteQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).build();// 创建查询翻译转换器,设置目标语言为中文translationQueryTransformer = TranslationQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).targetLanguage("chinese")  // 设置目标语言为中文.build();}@GetMapping("/multiQuery")public List<Query> multiQuery() {
// 执行查询扩展
// 将原始问题"请提供几种推荐的装修风格?"扩展成多个相关查询List<Query> queries = queryExpander.expand(new Query("请提供几种推荐的装修风格?"));return queries;}@GetMapping("/rewriteQuery")public String rewriteQuery( ) {
//        查询重写的主要优势:查询明确化:将模糊的问题转换为具体的查询点
//
//这种转换不仅有助于系统检索到更相关的文档,还能帮助生成更全面和专业的回答。// 创建一个模拟用户学习AI的查询场景Query query = new Query("我正在学习人工智能,什么是大语言模型?");
// 执行查询扩展
// 将原始问题"请提供几种推荐的装修风格?"扩展成多个相关查询// 执行查询重写Query transformedQuery = queryTransformer.transform(query);String rewirte = transformedQuery.text();// 输出重写后的查询System.out.println(rewirte);return rewirte;}@GetMapping("/translationQuery")public String translationQuery( ) {Query query = new Query("What is LLM?");
// 执行查询翻译Query transformedQuery = translationQueryTransformer.transform(query);
// 输出翻译后的查询String transforme = transformedQuery.text();System.out.println(transforme);return transforme;}}

查询翻译的主要优势:

  1. 多语言支持:支持不同语言之间的查询转换
  2. 本地化处理:将查询转换为目标语言的自然表达方式
  3. 跨语言检索:支持在不同语言的文档中进行检索
  4. 用户友好:允许用户使用自己熟悉的语言进行查询

相关文章:

Spring AI高级RAG功能查询重写和查询翻译

1、创建查询重写转换器 // 创建查询重写转换器queryTransformer RewriteQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).build(); 查询重写是RAG系统中的一个重要优化技术&#xff0c;它能够将用户的原始查询转换成更加结构化和明确的形式。这种转…...

速盾:高防CDN的原理和高防IP一样吗?

随着互联网的发展&#xff0c;网络安全威胁日益严重&#xff0c;尤其是DDoS攻击、CC攻击等恶意行为&#xff0c;给企业带来了巨大的风险。为了应对这些挑战&#xff0c;许多企业开始采用高防CDN&#xff08;内容分发网络&#xff09;和高防IP作为防御措施。尽管两者都能提供一定…...

SQLite-Web:一个轻量级的SQLite数据库管理工具

SQLite-Web 是一个基于 Web 浏览器的轻量级 SQLite 数据库管理工具。它基于 Python 开发&#xff0c;免费开源&#xff0c;无需复杂的安装或配置&#xff0c;适合快速搭建本地或内网的 SQLite 管理和开发环境。 SQLite-Web 支持常见的 SQLite 数据库管理和开发任务&#xff0c;…...

数智读书笔记系列028 《奇点更近》

一、引言 在科技飞速发展的今天&#xff0c;我们对未来的好奇与日俱增。科技将如何改变我们的生活、社会乃至人类本身&#xff1f;雷・库兹韦尔的《奇点更近》为我们提供了深刻的见解和大胆的预测&#xff0c;让我们得以一窥未来几十年的科技蓝图。这本书不仅是对未来科技趋势…...

深入理解linux操作系统---第4讲 用户、组和密码管理

4.1 UNIX系统的用户和组 4.1.1 用户与UID UID定义&#xff1a;用户身份唯一标识符&#xff0c;16位或32位整数&#xff0c;范围0-65535。系统用户UID为0&#xff08;root&#xff09;、1-999&#xff08;系统服务&#xff09;&#xff0c;普通用户从1000开始分配特殊UID&…...

系统设计模块之安全架构设计(常见攻击防御(SQL注入、XSS、CSRF、DDoS))

一、SQL注入攻击防御 SQL注入是通过恶意输入篡改数据库查询逻辑的攻击方式&#xff0c;可能导致数据泄露或数据库破坏。防御核心在于隔离用户输入与SQL代码&#xff0c;具体措施包括&#xff1a; 参数化查询&#xff08;预编译语句&#xff09; 原理&#xff1a;将SQL语句与用…...

redission锁释放失败处理

redission锁释放失败处理 https://www.jianshu.com/p/055ae798547a 就是可以删除 锁的key 这样锁就释放了&#xff0c;但是 还是要结合业务&#xff0c;这种是 非正规的处理方式&#xff0c;还是要在代码层面进行处理。...

Visual Studio Code 在.S汇编文件中添加调试断点及功能简介

目录 一、VS Code汇编文件添加断点二、VS Code断点调试功能简介1. 设置断点(1) 单行断点(2) 条件断点(3) 日志断点 2. 查看断点列表3. 调试时的断点控制4. 禁用/启用断点5. 删除断点6. 条件断点的使用7. 多线程调试8. 远程调试9. 调试配置文件 一、VS Code汇编文件添加断点 最…...

计算视觉与数学结构及AI拓展

在快速发展的计算视觉领域&#xff0c;算法、图像处理、神经网络和数学结构的交叉融合&#xff0c;在提升我们对视觉感知和分析的理解与能力方面发挥着关键作用。本文探讨了支撑计算视觉的基本概念和框架&#xff0c;强调了数学结构在开发鲁棒的算法和模型中的重要性。 AI拓展…...

Vue2 老项目升级 Vue3 深度解析教程

Vue2 老项目升级 Vue3 深度解析教程 摘要 Vue3 带来了诸多改进和新特性&#xff0c;如性能提升、组合式 API、更好的 TypeScript 支持等&#xff0c;将 Vue2 老项目升级到 Vue3 可以让项目获得这些优势。本文将深入解析升级过程&#xff0c;涵盖升级前的准备工作、具体升级步骤…...

器件封装-2025.4.13

1.器件网格设置要与原理图一致&#xff0c;同时器件符号要与数据手册一致 2.或者通过向导进行编辑&#xff0c;同时电机高级符号向导进行修改符号名称 2.封装一般尺寸大小要比数据手册大2倍到1.5倍 焊盘是在顶层绘制&#xff0c;每个焊盘距离要用智能尺子测量是否跟数据手册一…...

Python 基础语法汇总

Python 语法 │ ├── 基本结构 │ ├── 语句&#xff08;Statements&#xff09; │ │ ├── 表达式语句&#xff08;如赋值、算术运算&#xff09; │ │ ├── 控制流语句&#xff08;if, for, while&#xff09; │ │ ├── 定义语句&#xff08;def…...

Java函数式编程魔法:Stream API的10种妙用

在Java 8中引入的Stream API为函数式编程提供了一种全新的方式。它允许我们以声明式的方式处理数据集合&#xff0c;使代码更加简洁、易读且易于维护。本文将介绍Stream API的10种妙用&#xff0c;帮助你更好地理解和应用这一强大的工具。 1. 过滤操作&#xff1a;筛选符合条件…...

【力扣hot100题】(094)编辑距离

记得最初做这题完全没思路&#xff0c;这次凭印象随便写了一版居然对了。 感觉这题真的有点为出题而出题的意思&#xff0c;谁拿到这题会往动态规划方向想啊jpg 也算是总结出规律了&#xff0c;凡是遇到这种比较俩字符串的十有八九是动态规划&#xff0c;而且是二维动态规划&…...

穿透三层内网VPC2

网络拓扑 目标出网web地址&#xff1a;192.168.139.4 信息收集端口扫描&#xff1a; 打开8080端口是一个tomcat的服务 版本是Apache Tomcat/7.0.92 很熟悉了&#xff0c;可能存在弱口令 tomcat/tomcat 成功登录 用哥斯拉生成马子&#xff0c;上传war包&#xff0c;进入后台 C…...

AI数字消费第一股,重构商业版图的新物种

伍易德带领团队发布“天天送AI数字商业引擎”&#xff0c;重新定义流量与消费的关系 【2025年4月&#xff0c;深圳】在人工智能浪潮席卷全球之际&#xff0c;深圳天天送网络科技有限公司于深圳大中华喜来登酒店重磅召开“AI数字消费第一股”发布盛典。公司创始人伍易德首次系统…...

Unity 基于navMesh的怪物追踪惯性系统

今天做项目适合 策划想要实现一个在现有的怪物追踪系统上实现怪物拥有惯性功能 以下是解决方案分享&#xff1a; 怪物基类代码&#xff1a; ​ using UnityEngine; using UnityEngine.AI;[RequireComponent(typeof(NavMeshAgent))] [RequireComponent(typeof(AudioSource))] …...

【OpenCV】【XTerminal】talk程序运用和linux进程之间通信程序编写,opencv图像库编程联系

目录 一、talk程序的运用&Linux进程间通信程序的编写 1.1使用talk程序和其他用户交流 1.2用c语言写一个linux进程之间通信&#xff08;聊天&#xff09;的简单程序 1.服务器端程序socket_server.c编写 2.客户端程序socket_client.c编写 3.程序编译与使用 二、编写一个…...

中断的硬件框架

今天呢&#xff0c;我们来讲讲中断的硬件框架&#xff0c;这里会去举3个开发板&#xff0c;去了解中断的硬件框架&#xff1a; 中断路径上的3个部件&#xff1a; 中断源 中断源多种多样&#xff0c;比如GPIO、定时器、UART、DMA等等。 它们都有自己的寄存器&#xff0c;可以…...

大数据面试问答-Hadoop/Hive/HDFS/Yarn

1. Hadoop 1.1 MapReduce 1.1.1 Hive语句转MapReduce过程 可分为 SQL解析阶段、语义分析阶段、逻辑计划生成阶段、逻辑优化阶段、物理计划生成阶段。 SQL解析阶段 词法分析(Lexical Analysis)&#xff1a;使用Antlr3将SQL字符串拆分为有意义的token序列 语法分析(Syntax An…...

【小沐学GIS】基于C++绘制三维数字地球Earth(QT5、OpenGL、GIS、卫星)第五期

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…...

初始图形学(3)

昨天休息了一天&#xff0c;今天继续图形学的学习 向场景发射光线 现在我们我们准备做一个光线追踪器。其核心在于&#xff0c;光线追踪程序通过每个像素发送光线。这意味着对于图像中的每个像素点&#xff0c;程序都会计算一天从观察者出发&#xff0c;穿过该像素的光线。并…...

如果想在 bean 创建出来之前和销毁之前做一些自定义操作可以怎么来实现呢?

使用生命周期扩展接口&#xff08;最灵活&#xff09;​ 创建前拦截可以通过实现 InstantiationAwareBeanPostProcessor 接口的 postProcessBeforeInstantiation 方法&#xff0c;在Bean实例化前执行逻辑 在销毁前拦截可以通过实现 DestructionAwareBean 接口的 postProcessBe…...

【甲子光年】DeepSeek开启AI算法变革元年

目录 引言人工智能的发展拐点算力拐点&#xff1a;DeepSeek的突破数据拐点&#xff1a;低参数量模型的兴起算法创新循环算法变革推动AI普惠应用全球AI科技竞争进入G2时代结论 引言 2025年&#xff0c;人工智能的发展已经走到了一个战略拐点。随着技术能力的不断提升&#xff0…...

Go语言--语法基础4--基本数据类型--整数类型

整型是所有编程语言里最基础的数据类型。 Go 语言支持如下所示的这些整型类型。 需要注意的是&#xff0c; int 和 int32 在 Go 语言里被认为是两种不同的类型&#xff0c;编译器也不会帮你自动做类型转换&#xff0c; 比如以下的例子会有编译错误&#xff1a; var value2 in…...

MCP基础学习计划详细总结

MCP基础学习计划详细总结 1.MCP概述与基础 • MCP&#xff08;Model Context Protocol&#xff09;&#xff1a;由Anthropic公司于2024年11月推出&#xff0c;旨在实现大型语言模型&#xff08;LLM&#xff09;与外部数据源和工具的无缝集成。 • 核心功能&#xff1a; • 资…...

大模型到底是怎么产生的?一文揭秘大模型诞生全过程

前言 大模型到底是怎么产生的呢? 本文将从最基础的概念开始,逐步深入,用通俗易懂的语言为大家揭开大模型的神秘面纱。 大家好,我是大 F,深耕AI算法十余年,互联网大厂核心技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 【专栏介绍】: 欢迎关注《…...

Node.js介绍

一、Node.js 核心定义 本质&#xff1a;基于 Chrome V8 引擎构建的 JavaScript 运行时环境&#xff0c;用于在服务器端执行 JavaScript 代码。 定位&#xff1a;非阻塞、事件驱动的 I/O 模型&#xff0c;专为高并发、实时应用设计。 诞生&#xff1a;2009 年由 Ryan Dahl 发布…...

DRABP_NSGA2最新算法神圣宗教算法优化BP做代理模型,NSGA2反求最优因变量和对应的最佳自变量组合,Matlab代码

一、神圣宗教算法&#xff08;DRA&#xff09;优化BP代理模型 1. DRA的核心原理 DRA是一种模拟宗教社会层级互动的元启发式算法&#xff0c;通过“追随者学习”、“传教士传播”和“领导者引导”三种行为模式优化搜索过程。在BP神经网络优化中&#xff0c;DRA通过以下步骤调整…...

Android Studio 在 Windows 上的完整安装与使用指南

Android Studio 在 Windows 上的完整安装与使用指南—目录 一、Android Studio 简介二、下载与安装1. 下载 Android Studio2. 安装前的依赖准备3. 安装步骤 三、基础使用指南1. 首次启动配置2. 创建第一个项目3. 运行应用4. 核心功能 四、进阶功能配置1. 配置 SDK 和工具2. 自定…...

Matlab学习笔记五十:循环语句和条件语句的用法

1.说明 循环语句&#xff1a;for…end&#xff0c;while…end 条件语句&#xff1a;if…end&#xff0c;switch…case…end 其中if语句语法还可以是&#xff1a;for…else…end&#xff0c;for…elseif…else…end 2.简单for程序实例 for x1:5 %循环遍历1~5 yx5 end [1…...

大漠流光:科技牧歌的未来-内蒙古鄂尔多斯

故事背景 故事发生在中国内蒙古鄂尔多斯&#xff0c;这里是蒙古族文化的摇篮&#xff0c;也是科技与自然交织的未来舞台。在这片广袤的土地上&#xff0c;蒙古族少女、老牧人和工程师们共同谱写着一曲科技与传统共生的赞歌。未来的鄂尔多斯&#xff0c;不再是单一的沙漠或草原…...

MySQL与Oracle深度对比

MySQL与Oracle深度对比&#xff1a;数据类型与SQL差异 一、数据类型差异 1. 数值类型对比 数据类型MySQLOracle整数TINYINT, SMALLINT, MEDIUMINT, INT, BIGINTNUMBER(精度) 或直接INT(内部仍为NUMBER)小数DECIMAL(p,s), FLOAT, DOUBLENUMBER(p,s), FLOAT, BINARY_FLOAT, BI…...

GESP2023年12月认证C++七级( 第一部分选择题(6-10))

选择题第八题&#xff1a; #include <iostream> #include <cstring> #include <algorithm> using namespace std;const int MAXN 1005; // 假设字符串长度不超过1000 char s1[MAXN], s2[MAXN]; int dp[MAXN]; // 一维DP数组int main() {while (cin >>…...

腾势品牌欧洲市场冲锋,科技豪华席卷米兰

在时尚与艺术的交汇点&#xff0c;米兰设计周的舞台上&#xff0c;一场汽车界的超级风暴正在酝酿&#xff0c;腾势品牌如一头勇猛无畏的雄狮&#xff0c;以雷霆万钧之势正式向欧洲市场发起了冲锋。其最新力作——腾势Z9GT的登场&#xff0c;仿佛是一道闪电划破夜空&#xff0c;…...

双指针、滑动窗口

一、双指针 双指针是指在算法中使用两个指针&#xff08;通常是索引或迭代器&#xff09;来解决问题&#xff0c;通过移动这两个指针来扫描数据结构&#xff08;如数组或链表&#xff09;&#xff0c;从而达到高效的目的。双指针的核心思想是利用两个指针的相对位置或移动方式…...

《数据密集型应用系统设计》读书笔记:第二章

我们继续拆解 第2章&#xff1a;数据模型与查询语言。这章讲的是如何组织数据、如何访问数据&#xff0c;也是你选择数据库种类的根本依据。 第2章&#xff1a;数据模型与查询语言 一、为何数据模型重要&#xff1f; Martin 开篇就强调&#xff0c;数据模型影响&#xff1a; …...

ubuntu24.04LTS安装向日葵解决方案

去向日葵官方下载ubuntu使用的deb包 向日葵 输入如下命令安装&#xff0c;将具体版本修改成自己下载的版本 andrew in ~/下载 λ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 290947…...

Python基础语法1

目录 1、认识Python 1.1、计算机 1.2、编程 1.3、编程语言的类别 1.4、Python背景 1.5、Python的应用场景 1.6、Python的优缺点 1.7、Python前景 1.8、Python 环境 2、常量和表达式 3、变量和类型 3.1、定义变量 3.2、使用变量 3.3、变量的类型 3.3.1、整形 3.3…...

深度学习中多机训练概念下的DP与DDP

在进行单机多卡/多机多卡训练时&#xff0c;通常会遇到DP与DDP的概念&#xff0c;为此基于kimi大模型对二者的差异进行梳理。使用DP/DPP的核心是数据并行&#xff0c;也就是根据显卡数量对数据集进行分治&#xff0c;每一个显卡都有一个独立完整的模型和一个局部数据。在多个显…...

设计模式(结构型)-桥接模式

目录 摘要 定义 类图 角色 具体实现 优缺点 优点 缺点 使用场景 使用案例 JDBC 和桥接模式 总结 摘要 在软件开发领域&#xff0c;随着系统规模和复杂性的不断攀升&#xff0c;如何设计出具有良好扩展性、灵活性以及可维护性的软件架构成为关键挑战。桥接模式作为一…...

精品推荐 | 湖仓一体电商数据分析平台实践教程合集(视频教程+设计文档+完整项目代码)

精品推荐&#xff0c;湖仓一体电商数据分析平台实践教程合集&#xff0c;包含视频教程、设计文档及完整项目代码等资料&#xff0c;供大家学习。 1、项目背景介绍及项目架构 2、项目使用技术版本及组件搭建 3、项目数据种类与采集 4、实时业务统计指标分析一——ODS分层设计与数…...

【LangChain少样本提示工程实战】FewShotPromptTemplate原理与应用解析——附运行代码

目录 引言 重点提炼 一、FewShotPromptTemplate作用 1. ​​整合示例与模板&#xff0c;构建结构化提示​​ 2. ​​引导模型理解任务逻辑​​ 3. ​​提升少样本场景下的模型性能​​ 4. ​​支持动态示例选择&#xff08;扩展功能&#xff09;​​ 5. ​​与其他模块…...

基于LSTM的文本分类3——模型训练

前言 之前已经完成了模型搭建和文本数据处理&#xff0c;现在做一下模型训练。 源码 # -*- coding: UTF-8 -*- import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from sklearn import metrics # 导入评估指标 import time from uti…...

【JS】关于原型/原型链

本文会讲解什么是原型&#xff0c;什么是原型链&#xff0c;以及查找原型的方法&#xff0c;最后会实现一个函数&#xff1a;判断某对象是否有某属性。 定义 原型&#xff1a;函数都有prototype属性&#xff0c;称作原型/原型对象 原型可以放一些方法和属性&#xff0c;共享…...

猫咪如厕检测与分类识别系统系列【五】信息存储数据库改进+添加猫咪页面制作+猫咪躯体匹配算法架构更新

前情提要 家里养了三只猫咪&#xff0c;其中一只布偶猫经常出入厕所。但因为平时忙于学业&#xff0c;没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关&#xff0c;频繁如厕可能是泌尿问题&#xff0c;停留过久也可能是便秘或不适。为了更科学地了解牠的如…...

k8s的配置文件总结

在 Kubernetes 中&#xff0c;配置文件 是定义集群资源的核心&#xff0c;通常以 YAML 或 JSON 格式编写。以下是 Kubernetes 中关键的配置文件类型及其作用&#xff1a; 1. 核心工作负载配置 (1) Deployment • 用途&#xff1a;定义无状态应用的 Pod 副本管理策略&#xff…...

插值算法 - 最近邻插值实现

目录 1. 导入必要的库 2. nearest_neighbor_interpolation 3. 测试代码 数学原理 完整代码 本文实现了基于最近邻插值算法的图像缩放功能。 它使用 Python 编写,主要依赖于NumPy和PIL(Python Imaging Library)库。 NumPy用于高效的数值计算,而PIL仅用于图像的加载和…...

QEMU源码全解析 —— 块设备虚拟化(19)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(18) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社 特此致谢! QEMU启动…...

常见的归一化(Normalization)方法

本文详解深度学习中常见的归一化方法。 【归一化是将数据按比例缩放&#xff0c;使之落入一个特定的区间】目录 1. 批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;1.1 数学原理1.2 代码示例 2. 层归一化&#xff08;Layer Normalization&#xff0c;LN&…...