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

RAG(Retrieval-Augmented Generation,检索增强生成)流程

目录

  • 一、知识文档的准备
  • 二、OCR转换
  • 三、分词处理
  • 四、创建向量数据库
  • 五、初始化语言聊天模型
    • 1.prompt
    • 2.检索链
    • 3.对话
  • 完整代码

知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型(如OCR技术)将这些文档转换为可理解的纯文本数据。对于长篇文档,还需进行文档切片,以便更高效地处理和检索信息。

嵌入模型:将文本转换为向量形式,以便通过计算向量之间的差异来识别语义上相似的句子。常见的嵌入模型包括Word2Vec、BERT和GPT系列等。

向量数据库:将嵌入后的向量数据存储在向量数据库中,以便进行高效的相似性搜索。

查询检索:当用户提出查询时,系统会将查询通过嵌入模型转换为向量,然后在向量数据库中进行相似性搜索,找到与查询最相关的文档或信息。

生成回答:将检索到的相关信息与用户的查询结合,生成最终的回答。生成模型会利用检索到的信息作为上下文输入,并结合大语言模型来生成文本内容。
这里的嵌入模型用的是本地部署的ollama,也可以使用openai,但是连接不太稳定,还有阿里云的通义千问。
在这里插入图片描述

一、知识文档的准备

知识库中存放pdf等类型的文档,准备后面转换为txt文本
在这里插入图片描述
在这里插入图片描述

二、OCR转换

OCR转换会将PDF、图片这些信息提取得到TXT文本。数据质量的好坏直接影响着后面模型对话效果。因此PDF解析选用的工具必须精确且合适。
在这个例子中,我是事先将PDF用MinerU解析成markdown形式了
在这里插入图片描述
在这里插入图片描述

三、分词处理

文本分词处理(Tokenization)是自然语言处理(NLP)中的一个重要步骤,其目的是将连续的文本字符串分割成有意义的单元,这些单元通常被称为“词”或“标记”(tokens)。分词处理是文本分析的基础,因为大多数NLP任务都需要在词级别上进行操作,例如文本分类、情感分析、机器翻译等。
在这里插入图片描述
中文分词使用了jieba库
jieba 是一个非常流行的 Python 中文分词库,主要用于将中文文本切分成单个词语。它支持多种分词模式,并提供了丰富的功能来满足不同的自然语言处理需求。
主要功能和特点:
分词模式:
精确模式:将文本精确地切分成单个词语,适合用于文本分析。
全模式:将文本中所有可能的词语都扫描出来,速度非常快,但可能存在冗余数据。
搜索引擎模式:在精确模式的基础上,对长词再次进行切分,提高召回率,适合用于搜索引擎分词。
自定义词典:用户可以通过自定义词典来增加新词,以提高分词的准确性。
关键词提取:jieba 提供了基于 TF-IDF 算法的关键词提取功能,可以从文本中提取出最重要的词。
词性标注:通过 jieba.posseg 模块,可以在分词的同时获取词性信息。
并行分词:支持并行分词,以提高分词速度

四、创建向量数据库

def create_vector_store(tokenized_texts: List[List[str]], embeddings_model: OllamaEmbeddings) -> FAISS:"""将分词后的文本创建向量库"""try:# 将分词列表转换回文本processed_texts = [' '.join(tokens) for tokens in tokenized_texts]# 批量处理优化batch_size = 100  # 可以根据实际情况调整vectors = []# # 如果有 GPU# if FAISS.get_num_gpus():#     res = FAISS.StandardGpuResources()#     index = FAISS.index_cpu_to_gpu(res, 0, index)for i in tqdm(range(0, len(processed_texts), batch_size), desc="创建向量数据库"):batch = processed_texts[i:i + batch_size]# 批量创建向量vector_store = FAISS.from_texts(texts=batch,embedding=embeddings_model,metadatas=[{"index": j} for j in range(i, i + len(batch))]  # 添加元数据以追踪文档)vectors.append(vector_store)# 如果有多个批次,合并它们if len(vectors) > 1:final_vector_store = vectors[0]for v in vectors[1:]:final_vector_store.merge_from(v)else:final_vector_store = vectors[0]# 保存向量库到本地final_vector_store.save_local("resume_vectors")return final_vector_storeexcept Exception as e:print(f"创建向量库时发生错误: {str(e)}")raise

五、初始化语言聊天模型

刚刚就是制作了向量数据库,这是大模型的第一步,下面还需要有明确的提示词prompt

1.prompt

在这里插入图片描述

2.检索链

检索链(Retrieval Chain)是一种在信息检索和自然语言处理中使用的技术流程,主要用于从大规模数据集中高效地找到与用户查询最相关的信息片段或文档

在这里插入图片描述

3.对话

使用一个while循环始终在对话中
在这里插入图片描述
在这里插入图片描述

完整代码

import os
import jieba
import re
from typing import List
import pdf
# from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.llms import Ollama
from tqdm import tqdm  from loguru import logger
from magic_pdf.data.data_reader_writer import FileBasedDataWriter
from magic_pdf.pipe.UNIPipe import UNIPipeimport nltk
# 下载punkt
nltk.download('punkt')# 设置 OpenAI API 密钥
# os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
# 创建 OpenAI API 密钥
api_key = "sk-xxx"
os.environ["OPENAI_API_KEY"] = api_key# 定义简历文件夹路径
resume_folder = "./data/demo"# 读取 PDF 文件并提取文本
# def extract_text_from_pdfs(folder_path):
#     texts = []
#     for filename in os.listdir(folder_path):
#         if filename.endswith(".pdf"):
#             with open(os.path.join(folder_path, filename), "rb") as file:
#                 reader = PyPDF2.PdfReader(file)
#                 text = ""
#                 for page in reader.pages:
#                     text += page.extract_text()
#                 texts.append(text)
#     return texts# 读取markdown文件并提取文本
def extract_text_from_markdown(folder_path):texts = []for filename in os.listdir(folder_path):if filename.endswith(".md"):with open(os.path.join(folder_path, filename), "r", encoding="utf-8") as file:text = file.read()texts.append(text)return textsdef clean_text(text: str) -> str:"""清理文本,移除特殊字符和多余的空白"""# 替换多个空白字符为单个空格text = re.sub(r'\s+', ' ', text)# 移除特殊字符,保留中文、英文、数字和基本标点text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9.,!?;:,。!?;:]', ' ', text)return text.strip()def tokenize_texts(texts: List[str]) -> List[List[str]]:"""对文本进行分词处理""Args:texts: 要处理的文本列表Returns:处理后的分词列表"""tokenized_texts = []for text in texts:# 清理文本cleaned_text = clean_text(text)# 分别处理中文和英文words = []# 使用jieba进行中文分词segments = jieba.cut(cleaned_text)# 过滤空字符串和纯空白字符words = [word for word in segments if word.strip()]# 移除停用词(可选)# words = [word for word in words if word not in stopwords]tokenized_texts.append(words)return tokenized_textsdef create_vector_store(tokenized_texts: List[List[str]], embeddings_model: OllamaEmbeddings) -> FAISS:"""将分词后的文本创建向量库"""try:# 将分词列表转换回文本processed_texts = [' '.join(tokens) for tokens in tokenized_texts]# 批量处理优化batch_size = 100  # 可以根据实际情况调整vectors = []# # 如果有 GPU# if FAISS.get_num_gpus():#     res = FAISS.StandardGpuResources()#     index = FAISS.index_cpu_to_gpu(res, 0, index)for i in tqdm(range(0, len(processed_texts), batch_size), desc="创建向量数据库"):batch = processed_texts[i:i + batch_size]# 批量创建向量vector_store = FAISS.from_texts(texts=batch,embedding=embeddings_model,metadatas=[{"index": j} for j in range(i, i + len(batch))]  # 添加元数据以追踪文档)vectors.append(vector_store)# 如果有多个批次,合并它们if len(vectors) > 1:final_vector_store = vectors[0]for v in vectors[1:]:final_vector_store.merge_from(v)else:final_vector_store = vectors[0]# 保存向量库到本地final_vector_store.save_local("resume_vectors")return final_vector_storeexcept Exception as e:print(f"创建向量库时发生错误: {str(e)}")raise# 提取简历文本
resume_texts = extract_text_from_markdown(resume_folder)
# resume_texts = extract_text_from_pdfs(resume_folder)
print("简历文本提取完成")# 简历文本分词
tokenized_texts = tokenize_texts(resume_texts)
print(f"简历文本分词完成,共处理 {len(tokenized_texts)} 份文档")# 可以打印一些统计信息(可选)
for i, tokens in enumerate(tokenized_texts):print(f"文档 {i+1} 分词数量: {len(tokens)}")# 创建 OpenAI 嵌入
embeddings = OllamaEmbeddings(model="nomic-embed-text:latest",base_url='xxx')
print("ollama 嵌入完成~")# 创建向量库
vector_store = create_vector_store(tokenized_texts, embeddings)
print("向量库创建完成")# Initialize OpenAI model
# from langchain_community.chat_models import ChatOpenAI
# llm = ChatOpenAI(model='gpt-4o', temperature=0.1, api_key=os.environ.get("OPENAI_API_KEY"))from langchain_community.llms import Ollama
llm = Ollama(model="llama3.3:70b", temperature=0.1, num_ctx=60000,base_url='xxx')# Update imports
from langchain.chains import RetrievalQA  # Changed from create_retrieval_qa_chain
from langchain.prompts import PromptTemplate  # Import the necessary classPROMPT_TEMPLATE = """
已知信息:{context}"你是一个核聚变、人工智能、科学计算领域的人才鉴别专家,你具备管理大量简历的能力;请注意我向你提供了很多简历PDF文件,但每个PDF文件对应一个候选人,包括候选人的姓名、年龄、技能、经历、项目、成果等内容,请仔细识别各个信息。 \
现在需要你帮我分析每个候选人的详细信息,包括:年龄、教育程度、专业技能、职业履历、项目背景、研究成果、获得荣誉、发展潜力,然后帮我完成以下两个功能: \
1.当我给出开展项目的描述信息时,你能帮我准确地按照适配项目的优先级推荐相关候选人,每次允许按照优先级顺序推荐多个候选人,并且详细给出推荐原因,使用markdown的表格形式给出,包括以下信息:姓名、年龄、专业技能、推荐原因; \
2.当我需要分析一个候选人时,请你能进行客观、准确的评估,先描述其主要信息,然后按照:专业能力、科研成果、项目成绩、发展潜力、综合能力进行评分,每项总分100,结果以markown形式给出。 \
请务必注意每个简历仅对应一个候选人,切记不要混淆各个人的信息;1个候选人只需引用1次相关文档即可,仔细识别每个文档中候选人的姓名。"请回答以下问题:{question}
"""
# 创建提示模板
prompt_template = PromptTemplate(input_variables=["context", "question"],template=PROMPT_TEMPLATE
)# 创建检索链
chain_type_kwargs = {"prompt": prompt_template,"document_variable_name": "context",
}# 创建检索链
qa = RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=vector_store.as_retriever(),chain_type_kwargs=chain_type_kwargs,
)def chat_loop():print("\n欢迎使用简历分析助手!")print("输入 'quit' 或 'exit' 结束对话")while True:# Get user inputuser_input = input("\n请输入您的问题: ").strip()# Check if user wants to exitif user_input.lower() in ['quit', 'exit']:print("感谢使用,再见!")breakif user_input:try:# Get the responseresult = qa.run(user_input)print("\n回答:")print(result)except Exception as e:print(f"发生错误: {str(e)}")continueif __name__ == "__main__":chat_loop()

相关文章:

RAG(Retrieval-Augmented Generation,检索增强生成)流程

目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型…...

数据库系统概论期末复习

期末考试题型: 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句: (select delete update)30分 设计题:ER图 和关系模式 ER转关系模式,注意主码,外码的标注 15分 应用题:…...

B树与B+树:数据库索引的秘密武器

想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...

数据结构-栈与队列笔记

普通的双端队列 验证图书取出顺序 class Solution {/*** 验证书籍的借阅顺序是否合法。* * param putIn 表示放入书架的书籍序列。* param takeOut 表示从书架取出的书籍序列。* return 如果书籍的借阅顺序合法,返回 true;否则返回 false。*/public boo…...

Netty中用了哪些设计模式?

大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…...

设计模式与游戏完美开发(3)

更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第五章 获取游戏服务的唯一对象——单例模式(Singleton) 游戏实现中的唯一对象 在游戏开发过程中…...

人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程

文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…...

【51单片机零基础-chapter5:模块化编程】

模块化编程 将以往main中泛型的代码,放在与main平级的c文件中,在h中引用. 简化main函数 将原来main中的delay抽出 然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口. 注意,单个c文件所有用到的变量需要在该文…...

彻底学会Gradle插件版本和Gradle版本及对应关系

看完这篇,保你彻底学会Gradle插件版本和Gradle版本及对应关系,超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系,其实就是需要知道Gradle插件版本对应所需的gradle最低版本,详细对应关系如下表格&#xff0…...

容器技术思想 Docker K8S

容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...

在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描

在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描,需要充分利用LevelDB的迭代器(iterator)功能,以便能够高效地扫描和处理大量的键值对。下面是一个详细的实现指南。 环境准备 首先,确保已经安装了Level…...

多模态论文笔记——CogVLM和CogVLM2

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…...

BLDC无感控制的驱动逻辑

如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于…...

分布式多机多卡训练全景指南:MPI、DeepSpeed 与 Colossal-AI 深度解析

分布式多机多卡训练技术是深度学习领域提高训练效率和加快模型收敛的重要手段。以下是几个流行的框架和工具: 1. MPI(Message Passing Interface) 概述 MPI 是一种标准化的消息传递协议,用于多机多卡之间的通信与协作&#xff0c…...

Unity中 Xlua使用整理(一)

1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包,并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…...

在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法

在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法 1. GrpcChannel 的概念 GrpcChannel 是 gRPC 客户端与服务器之间通信的核心组件。它是基于 HTTP/2 的连接,支持多路复用,即通过单个通道可以发送多…...

【数据结构与算法:八、排序】

第8章 排序 排序是计算机科学中最基本且最常用的操作之一。本章详细介绍了排序算法的概念、分类、每种算法的定义、图示、代码实现及其应用场景。 8.1 基本概念和排序方法概述 8.1.1 排序的基本概念 排序是指将一组无序的记录按照某种指定的顺序重新排列的过程。 排序的目…...

Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 整体状态框架(简化) Player 是操作对象的类: 继承了 MonoBehaviour 用于定义游戏对象的行为,每个挂载在 Unity 游戏对象上的脚本都需要继承自 MonoBehaviour&#x…...

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章: 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境,均为 windows 环境,mac 环境其实也类似 ~ ① 编译proto文件,相关插件 简单介绍: protoc 是编译器,用于将…...

策略模式(strategy)

一.策略模式是什么 策略模式是一种行为型对象模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法可以独立于使用它的客户端而变化‌‌。 策略者模式的核心思想是将一系列的算法封装到一系列的策略类里…...

Centos源码安装MariaDB 基于GTID主从部署(一遍过)

MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…...

如何在 VSCode 中配置 C++ 开发环境:详细教程

如何在 VSCode 中配置 C 开发环境:详细教程 在软件开发的过程中,选择一个合适的开发环境是非常重要的。Visual Studio Code(VSCode)作为一款轻量级的代码编辑器,凭借其强大的扩展性和灵活性,受到许多开发者…...

信息安全、网络安全和数据安全的区别和联系

1. 前言 有次有朋友问我 信息安全、网络安全和数据安全,这三个词平时写文档时怎么用? 我想很多人都说不清。这次我查阅了资料,尽量讲清楚这三者之间的区别和联系。 2. 信息安全 2.1 定义 信息安全是指为数据处理系统建立和采用的技术和管…...

路由组件与一般组件的区别

路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件,通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件,通常放在 components 文件夹中。 2. 主要区别 2.1 存…...

【微服务】4、服务保护

微服务架构与组件介绍 单体架构拆分:黑马商城早期为单体架构,后拆分为微服务架构。跨服务调用与组件使用 服务拆分后存在跨服务远程调用,如下单需查询商品信息,使用openfeign组件解决。服务间调用关系复杂,需维护服务…...

6_TypeScript 函数 --[深入浅出 TypeScript 测试]

在 TypeScript 中,函数是编程的核心组成部分之一。TypeScript 不仅继承了 JavaScript 的所有函数特性,还添加了静态类型检查和其他一些增强功能,使得函数更加安全和易于理解。以下是关于 TypeScript 函数的一些关键点和两个具体的示例&#x…...

Apifox=Postman+Swagger+Jmeter+Mock

A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具,一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…...

升级 Spring Boot 3 配置讲解 —— Spring Boot 3 核心源码专讲

学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! Spring Boot 3 是 Spring 生态中的重要里程碑,它不仅全面支持 Java 17,还引入了许多新特性,如对 GraalVM 原生镜像的支持、改进的性能优化以及更灵活的…...

接口开发完后,个人对于接下来接口优化的一些思考

优化点 入参的合法性和长度范围&#xff0c;必填项的检查验证 因为没有入参&#xff0c;所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …...

jenkins 使用 ssh-agent向windows进行部署

背景&#xff1a; jenkins在linux的docker环境内&#xff0c;应用服务部署在windows。需要使用jenkins实现自动化部署。 实现方式&#xff1a; jenkins上构建pipeline任务&#xff0c;脚本如下&#xff1a; 遇到问题&#xff1a; 1、问题&#xff1a;jenkins 调用部署bat脚…...

音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现

一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、帧率信息&#xff1a; ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 &#xff08;…...

如果Adobe 退出中国后怎么办

最近听说Adobe要退出中国了?那咱们的设计师们可得好好想想怎么搞到正版软件了。别急&#xff0c;今天教大家一个超酷的福利——Edu邮箱&#xff01; Edu邮箱是什么&#xff1f;有什么好处&#xff1f; Edu邮箱就是学校给学生和老师们发的邮箱&#xff0c;一般结尾是.edu。有了…...

欧几里得距离在权重矩阵中的物理意义

欧几里得距离在权重矩阵中的物理意义 目录 欧几里得距离在权重矩阵中的物理意义**衡量神经元差异程度**:**反映模型变化程度**:**聚类和分组的依据**:自然语言处理中的模型更新:**神经网络聚类分组**:欧几里得距离在权重矩阵中的物理意义衡量神经元差异程度: 在神经网络中…...

玩转大语言模型——ollama导入huggingface下载的模型

ollama导入huggingface模型 前言gguf模型查找相关模型下载模型 导入Ollama配置参数文件导入模型查看导入情况 safetensfors模型下载模型下载llama.cpp配置环境并转换 前言 ollama在大语言模型的应用中十分的方便&#xff0c;但是也存在一定的问题&#xff0c;比如不能使用自己…...

Linux-----进程通讯(管道Pipe)

目录 进程不共享内存 匿名管道 通过匿名管道实现通讯 有名管道 库函数mkfifo() 案例 进程不共享内存 不同进程之间内存是不共享的。是相互独立的。 #include <stdio.h> #include <stdlib.h> #include <errno.h>int num 0;int main(int argc, char con…...

【C++11】列表初始化、右值引用和移动语义、引用折叠、完美转发

C11 一.C的发展历史二.列表初始化1.C98的{}2.C11的{}3.C11中的std::initializer_list 三.右值引用和移动语义1.左值和右值2.左值引用和右值引用3.引用延长生命周期4.左值和右值的参数匹配5.右值引用和移动语义使用场景1.左值引用使用场景2.移动构造和移动赋值3.右值引用和移动语…...

Openssl1.1.1s rpm包构建与升级

rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet&#xff0c;防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…...

递归思想的深度理解——汉诺塔问题和青蛙跳台阶问题

递归的深度理解——汉诺塔问题and青蛙跳台阶问题 青蛙跳台阶问题汉诺塔问题 青蛙跳台阶问题 问题&#xff1a;一只青蛙可以一次跳一级台阶&#xff0c;也可以一次跳两级台阶&#xff0c;如果青蛙要跳n级台阶&#xff0c;共有多少种跳法&#xff1f; 解答&#xff1a;我们可以先…...

从数据到诊断:朴素贝叶斯算法助力肿瘤预测之路

1.案例概述 肿瘤性质的判断影响着患者的治疗方式和痊愈速度。传统的做法是医生根据数十个指标来判断肿瘤的性质&#xff0c;预测效果依赖于医生的个人经验而且效率较低&#xff0c;而通过机器学习有望能快速预测肿瘤的性质。 2.数据集 本次肿瘤预测使用的数据集共有569组样本…...

Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?

如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中&#xff1f; 在使用 Element UI 的 Table 组件时&#xff0c;如果你想要禁用某一行的选中&#xff08;特别是在多选模式下&#xff09;&#xff0c;可以通过自定义行的 selectable 属性来实现。selectable …...

Dexcap复现代码数据预处理全流程(四)——demo_clipping_3d.py

此脚本的主要功能是可视化点云数据文件&#xff08;.pcd 文件&#xff09;&#xff0c;并通过键盘交互选择演示数据的起始帧和结束帧&#xff0c;生成片段标记文件 (clip_marks.json) 主要流程包括&#xff1a; 用户指定数据目录&#xff1a;检查目录是否存在并处理标记文件 -…...

JWT理解

前言 随着互联网的快速发展&#xff0c;身份验证和授权成为了许多应用的重要需求。JWT&#xff08;JSON Web Token&#xff09;作为一种轻量级的身份验证和授权机制&#xff0c;得到了广泛的应用。本文将为您详细介绍JWT的原理、结构和优点&#xff0c;帮助您更好地理解和应用…...

一种融合联邦学习和大模型特点的全新系统架构

一种融合联邦学习和大模型特点的全新系统架构 以下是一种融合联邦学习和大模型特点的全新系统架构设计: 分层分布式架构 底层 - 数据采集与预处理层:由大量的边缘设备和终端节点组成,如智能手机、物联网传感器等。这些设备负责采集本地数据,并在本地进行初步的数据预处理,…...

html表格table导出excel,主从表格式,带样式.自动分列

html的table导出成excel, vue模板 项目使用xlsx-js-style 源代码从https://github.com/gitbrent/xlsx-js-style/releases/tag/v1.2.0 下载 用里面的dist目录下的文件即可. 复制到vue项目的public目录下的XLSX目录下. 在index.hml中引入js脚本, 为啥要在这里引入? 是因为这里…...

U8G2库使用案例(stm32)

目录 一、小球在 OLED 屏幕平面内运动并碰撞反弹的效果 二、 简单的波形生成和显示程序: 三、三维三角形旋转展示 四、正方形平面内顺时针旋转 五、带有旋转点的空心圆圈应用 六、字幕滚动效果 七、下雪动画效果 八、进度条动画效果 自己移植的U8g2库&#xff0c;OLED库…...

067B-基于R语言平台Biomod2模型的物种分布建模与数据可视化-高阶课程【2025】

课程培训包含&#xff1a;发票全套软件脚本学习数据视频文件导师答疑 本教程旨在通过系统的培训学习&#xff0c;学员可以掌握Biomod2模型最新版本的使用方法&#xff0c;最新版包含12个模型&#xff08;ANN, CTA, FDA, GAM, GBM, GLM, MARS, MAXENT, MAXNET, RF, SRE, XGBOOST…...

【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜

AI的两次寒冬&#xff1a;从感知机困局到深度学习前夜 引用&#xff08;中英双语&#xff09; 中文&#xff1a; “第一次AI寒冬&#xff0c;是因为感知机局限性被揭示&#xff0c;让人们失去了对算法可行性的信心。” “第二次AI寒冬&#xff0c;则是因为专家系统的局限性和硬…...

141.《mac m系列芯片安装mongodb详细教程》

文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…...

【Linux】sed编辑器

一、基本介绍 sed编辑器也叫流编辑器&#xff08;stream editor&#xff09;&#xff0c;它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器&#xff08;如Vim&#xff09;中&#xff0c;可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…...

unity3d-搞个场景漫游如何实现Alpha

要处理两个问题&#xff1a; 如何设置地面人不掉下去 方法一、 游戏物体加刚体&#xff0c;将游戏物体和地面加collider。如果是地形&#xff0c;可以使用 Terrain Collider&#xff1b;如果是简单的平面&#xff0c;可以添加 Box Collider 或者 Mesh Collider&#xff08;如果…...