Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview
Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview
文章目录
- Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview
- 1. Introduction&Abstract
- 1. LLM面临的问题
- 2. RAG核心三要素
- 3. RAG taxonomy
- 2. Overview: RAG的概念和范式(paradigm)
- 1. Naive RAG
- (1) Indexing
- (2) Retrieval
- (3) Generation
- (4) 面临的挑战
- 2. Advanceed RAG
- (1) Pre-retrieval
- (2) Post-retrieval
- 3. Modular RAG
- 📌 Modular RAG 中的核心模块**
- **📌 模块解释**
- 1. Search 模块(搜索模块)
- 2. RAGFusion 模块
- 3. Memory 模块(记忆模块)
- 4. Routing 模块(路由模块)
- 5. Predict 模块(预测模块)
- 6. Task Adapter 模块
- **📌 额外提到的 RAG 变种**
- **🔎 结论**
- 4. 补充: 漏洞代码检索可能的方法
- 5. 重点: RAG, FT, ICL的对比
- 文章对RAG和FT的类比:
- 各项指标对比
- 1. External Knowledge Req
- 2. Model Adaptation Req
- 3. 相应速度
- 4. 计算资源需求
- 5. 数据需求量
- 6. 推理能力 vs. 记忆能力
- 7. 动态性
- 3. 检索
- 1. 检索源
- LLM-Generated Content 的几种实现方式
- 1. SKR(Selective Knowledge Retrieval) - 选择性检索
- 2. GenRead(Generate-Read) - 生成替代检索
- 3. Selfmem(Self-Memory Augmentation) - 自增强记忆
- 2. 检索粒度
1. Introduction&Abstract
1. LLM面临的问题
- 幻觉(表现为不适合领域知识密集型任务)
- 知识过时(预训练)
- 推理过程不可知
2. RAG核心三要素
- 检索(Retrieval): 给定用户输入(query), 如何在数据库中检索需要的内容, 如果检索出来候选, 如何挑选候选检索, 选择怎样的检索方法(关键词/嵌入相似度)
- 生成(Generating): 大模型通过prompt生成推理(或者是训练/微调)
- 增强(Augmentation): 在大模型的哪个阶段(pre-training, fine-tuning, inference)增强大模型性能, 如何组合query和检索内容为prompt(或者是如何设计训练/微调)来增强大模型能力
3. RAG taxonomy
Naive RAG
Advanced RAG
Modular RAG
RAG技术在推理阶段, 预训练阶段, 微调阶段都可以增强

2. Overview: RAG的概念和范式(paradigm)

1. Naive RAG


(1) Indexing
人话: 建立索引
- 把各种来源各种格式(pdf, HTML, md)的文本转换成统一的文本格式
- 为了遵从LLM对上下文长度的限制, 把统一格式的文本切片成chunk
- 计算每个chunk的向量表示(用嵌入模型), 存入向量数据库
(2) Retrieval
人话: 检索数据库
- 用户输入query(可以认为是用户输入的prompt, 但是不是最终输入给LLM的prompt)
- 把query向量化, 通过向量相似度来索引数据库, 获取最相似的chunks
- 把获取到的chunks作为对用户query的补充, 组合成最终输入到大模型的prompt
(3) Generation
人话: 组成prompt输入到大模型让他生成
历史聊天记录也可以部分选取到新一轮的prompt中, 提升交互性
(4) 面临的挑战
- 检索阶段一般缺乏准确性, 会导致检索到无关的文本
- 生成阶段检索的上下文可能不能很好的支持生成的内容
- 增强阶段, 相似的信息可能在不同的文本源被重复检索, 会生成重复的回答
- 生成模型可能过于依赖增强的信息, 可能导致输出只是检索文本的复制品, 而没有增加新的见解
2. Advanceed RAG

简单来说就是在NaiveRAG基础上, 在检索前后(pre-retrieval+post-retrieval)都进行一些处理
- 主要集中在增强检索质量上
- 对索引也有增强, 不是简单的切片, 而是用滑动窗口/更细粒度的切片/增加元数据(比如文本的来源, 创建时间等附加信息)
(1) Pre-retrieval
目标是增强检索质量和优化索引(index)
方法:
-
减小粒度
-
优化索引结构(indexing structure)(如滑动窗口)
-
增加元数据(metadata)(如文本来源和创建时间)
-
对齐(alignment)优化(对齐query和数据库, 比如query可能更口语, 而数据库更正式), 所以训练一个适配器或者对比学习, 使得相似的查询/文档更加接近
比如在 代码检索 场景中,优化查询,使其更贴近代码片段的表示方式 -
混合检索(mixed retrieval): 结合多种方法
稀疏检索(Sparse Retriveal): 基于关键词匹配如BM25, TF-IDF
稠密检索(Dense Retrieval): 使用嵌入向量进行相似度计算
(2) Post-retrieval
简单的把检索出来的相关文本喂给LLM可能导致大模型无法集中在关键信息而过度注意检索的文本而忘记query, 问题是如何把检索出来的文本和query有效的组合
核心目标:
通过选择关键信息/强调关键部分/简短上下文来 让大模型注意到增强后prompt的关键部分, 而不是过度依赖检索文本
方法:
- rerank: 仅仅通过相关性排名筛选出候选文档, 但是初次筛选不够精确, 这样不能反映最终的相关性, 还是要通过更强大的模型来二次排序(rerank)后进行筛选
- 上下文压缩(context compressing)
工具:
- LangChain(听过)
- LlamaIndex
- HayStack
3. Modular RAG
模块化RAG

这部分综述介绍了 Modular RAG(模块化 RAG)框架中的多个 模块(Modules),相比于 Naïve RAG 和 Advanced RAG,Modular RAG 允许灵活地调整、替换和新增模块,从而提高检索的质量和适用性。以下是各个模块的介绍:
📌 Modular RAG 中的核心模块**
| 模块名称 | 作用 | 关键技术 |
|---|---|---|
| 🔍 Search 模块 | 适应不同场景,支持跨数据源的搜索 | 直接查询搜索引擎、数据库、知识图谱,利用 LLM 生成代码或查询语句 |
| 🌀 RAGFusion 模块 | 解决传统搜索的局限性,增强检索的广度 | 多查询策略(将用户查询扩展为多个角度)、并行向量搜索、智能重排序(Re-rank) |
| 🧠 Memory 模块 | 让 RAG 具备“记忆”能力,使检索更贴合数据分布 | LLM 记忆机制、自增强(Iterative Self-enhancement) |
| 🚦 Routing 模块 | 智能路由查询,选择最佳信息路径 | 根据查询类型决定是否检索数据库、搜索引擎、知识图谱,或进行 LLM 直接推理 |
| 🎯 Predict 模块 | 减少冗余和噪声,直接生成高相关的上下文 | LLM 直接预测最相关的内容,无需冗余检索 |
| 🔧 Task Adapter 模块 | 针对不同任务调整 RAG,提高零样本/小样本适配性 | 自动化 Prompt 生成,任务特定的检索器(few-shot query generation) |
📌 模块解释
1. Search 模块(搜索模块)
• 作用:
• 适用于不同的检索场景,支持直接从搜索引擎、数据库、知识图谱中获取信息。
• LLM 生成查询语句(SQL、SPARQL、API 调用等),适配不同数据源。
• 技术:
• 支持 向量检索、关键词检索、混合检索(Hybrid Retrieval)。
• 能够使用 LLM 解析查询意图,自动生成 SQL、SPARQL 或 API 调用代码,实现跨数据源检索。
2. RAGFusion 模块
• 作用:
• 解决传统检索的局限性,采用 多查询策略(Multi-query strategy),扩展用户查询,提高信息的多样性。
• 通过 并行向量检索 + 智能重排序(Re-rank) 发现显性与隐性知识。
• 技术:
• Parallel Vector Search(并行向量搜索):对同一查询生成多个变体,并行检索多个数据库。
• Intelligent Re-ranking(智能重排序):使用 LLM 或 BERT-based Re-ranker 重新排序候选检索结果,保证最优答案排前面。
3. Memory 模块(记忆模块)
• 作用:
• 让 RAG 具备 “长期记忆”,通过 LLM 记忆机制指导检索,使上下文信息更加精准。
• 形成 无界记忆池(Unbounded Memory Pool),对文本进行 自增强(Iterative Self-enhancement),逐步优化存储的知识。
• 技术:
• RAG + Retrieval-augmented Memory(RAM),即结合检索和记忆的增强存储方案。
• 适用于 会话式 AI、个性化问答、长期任务跟踪等 需要记忆的场景。
方法人话: 增量训练或者是把之前的对话记录在知识库中, 保证多次对话的一致性
4. Routing 模块(路由模块)
人话: 选择合适的检索方法, 或是不检索…
• 作用:
• 决定查询的最佳路径,智能选择是直接生成答案、检索数据库,还是从多个来源融合信息。
• 适用于 跨模态、多数据源 的 RAG 应用。
• 技术:
• LLM 充当 路由决策代理(Routing Agent),分析查询意图,决定最佳检索或推理方式。
• 混合信息流(Hybrid Information Flow):支持不同数据源的信息合并(如文本+图像+知识图谱)。
5. Predict 模块(预测模块)
• 作用:
• 直接用 LLM 预测最相关的内容,减少无效检索,提高效率。
• 适用于 低检索成本、高生成精度 的任务,如 FAQ 生成、知识填空等。
• 技术:
• 上下文预测(Context Prediction):让 LLM 直接 生成可能的检索结果,然后再进行搜索。
• 融合生成(Fusion-based Generation):结合 LLM 预测和检索结果,提高最终答案的可信度。
6. Task Adapter 模块
• 作用:
• 让 RAG 自适应不同任务,提升零样本(Zero-shot)和小样本(Few-shot)任务的检索表现。
• 自动 调整 Prompt、检索策略、答案格式 以适应特定应用。
• 技术:
• Few-shot Query Generation:基于 LLM 生成适合任务的检索查询。
• 自动 Prompt 检索(Automated Prompt Retrieval),动态调整提示词,使 LLM 输出符合预期。
📌 额外提到的 RAG 变种
除了模块化 RAG,还提到了几种 不同模式的 RAG 变体:
| 方法 | 核心思路 |
|---|---|
| Rewrite-Retrieve-Read | 先用 LLM 重写查询,再检索,提高任务适配性 |
| Generate-Read | 直接用 LLM 生成内容,而非传统检索 |
| ReciteRead | 让 LLM 从自身权重中召回知识,提高知识密集型任务能力 |
| Demonstrate-Search-Predict(DSP) | 结合示例学习(Demonstrate)、搜索(Search)和预测(Predict),提升检索质量。 |
| ITERRETGEN | Retrieve-Read-Retrieve-Read 迭代流程,增强检索优化能力 |
| FLARE & Self-RAG | 让 RAG 动态决定是否需要检索,减少不必要的搜索 |
🔎 结论
-
Modular RAG 的模块化设计提升了检索质量和灵活性,可以根据不同任务动态调整结构。
-
Search、RAGFusion、Memory、Routing、Predict、Task Adapter 这 6 大核心模块增强了信息获取的精准度。
-
不同的 RAG 变体(如 Rewrite-Retrieve-Read、Self-RAG) 进一步优化了 RAG 的能力,使其适应不同应用场景。
4. 补充: 漏洞代码检索可能的方法
在漏洞代码检索场景下,RAG 需要精准、高效地检索代码片段,同时支持语义查询,并能结合上下文理解代码的安全性。基于你的需求,以下模块的优化和组合会最适合你:
🔍 适用于漏洞代码检索的 Modular RAG 组合
| 模块 | 作用 | 适配漏洞代码检索的关键优化 |
|---|---|---|
| 🔍 Search(搜索模块) | 在代码数据库、GitHub、NVD、CVE 等数据源中检索漏洞代码 | 语义 + 结构化混合检索,结合 AST、API 调用图 |
| 🌀 RAGFusion(多查询增强检索) | 生成多个不同角度的查询,覆盖更全面的漏洞模式 | 漏洞语义变体扩展(代码重构、等价转换) |
| 🧠 Memory(记忆模块) | 记住用户的检索习惯,提高上下文一致性 | 漏洞模式缓存(存储漏洞模式和修复建议) |
| 🚦 Routing(智能路由) | 选择最佳检索方式(代码相似性、API 调用、补丁分析) | 基于代码特征的动态检索策略 |
| 🔧 Task Adapter(任务自适应) | 适配不同漏洞类别(缓冲区溢出、SQL 注入、RCE) | 按漏洞类型自动调整检索策略 |
| 🎯 Predict(生成预测) | 直接基于 LLM 生成潜在漏洞代码 | 漏洞填充与预测(补全漏洞代码,生成 Exploit) |
📌 重点模块优化
1️⃣ Search(搜索模块)
• 传统的向量检索(如 FAISS、Milvus)可能无法完全捕捉代码漏洞的结构特征,建议采用:
• AST(抽象语法树)索引:基于代码结构进行检索,而非仅靠文本相似度
• API 调用图(Call Graph)检索:分析函数调用关系,发现潜在漏洞
• 混合检索(Hybrid Retrieval):
• 语义向量检索(Transformer-based code embedding,如 CodeBERT、GraphCodeBERT)
• 符号分析(静态分析工具结合 RAG)
• 关键词匹配(CVSS 评分、CWE ID)
2️⃣ RAGFusion(多查询策略)
• 代码漏洞的查询往往需要不同的表达方式,例如:
• 代码等价转换(Semantic Code Equivalence):变换不同代码风格、不同变量命名
• 补丁差异分析(Patch-based Retrieval):利用 CVE 补丁信息进行反向检索
• Exploit 生成启发查询:基于已知攻击手法生成更有针对性的查询
3️⃣ Memory(长期记忆)
• 场景:
• 记录用户常搜索的漏洞模式,提高未来检索的相关性
• 存储历史检索上下文,避免重复查询
• 结合漏洞数据库(如 NVD、ExploitDB)进行知识增强
• 优化方法:
• 漏洞模式缓存(Vulnerability Pattern Cache)
• 漏洞传播路径学习(记住哪些代码片段往往与漏洞相关)
4️⃣ Routing(智能路由)
• 基于代码特征选择最佳检索方式:
• 静态分析(SAST)适用于结构化漏洞(如内存泄露)
• 动态分析(DAST)适用于行为相关漏洞(如命令注入)
• 混合方法(如 LLM 先生成可能的漏洞代码,再进行匹配)
5️⃣ Task Adapter(任务自适应)
• 代码漏洞类别多样,不同类型可能需要不同检索方式:
• 缓冲区溢出 → 结构化数据流分析
• SQL 注入 → 语义模式匹配
• 远程命令执行(RCE) → API 调用序列分析
• 权限提升(Privilege Escalation) → 依赖分析(Dependency Analysis)
• 通过自动任务适配,动态调整 RAG 结构,例如:
• 适配不同编程语言(C/C++、Python、Go)
• 适配不同漏洞检测工具(CodeQL、Joern)
6️⃣ Predict(漏洞预测 & 生成)
• 让 LLM 直接预测可能的漏洞代码
• 漏洞补全(Vulnerability Completion):
• 仅有部分代码片段时,生成完整的漏洞示例
• Exploit 预测(Exploit Prediction):
• 预测某段代码是否可能被利用
• 结合 PoC(Proof of Concept)数据库,提高 Exploit 生成能力
📌 适合你的向量数据库
为了高效支持漏洞代码检索,你需要一个能够处理 代码结构化检索 + 语义搜索 的向量数据库。以下是几个适合的方案:
数据库 优点 适用于
FAISS 高效向量搜索,支持 GPU 加速 大规模漏洞数据库的快速检索
Milvus 支持多种索引(HNSW、IVF),可扩展性强 混合代码/漏洞模式检索
Weaviate 自带文本+图结构检索,支持 GraphQL 查询 代码调用图 & 知识图谱增强 RAG
Pinecone 易用性高,适合云端部署 远程漏洞分析(如 Web 漏洞)
Qdrant Rust 实现,性能优越,支持过滤器 基于 CVE/CWE 分类的高效索引
推荐选择:
如果你的漏洞代码量很大,FAISS + Milvus 结合使用会是最优解:
• FAISS:适合大规模语义向量搜索(快速查找相似代码)
• Milvus:适合混合索引,能支持符号+语义混合检索
如果想结合 代码调用关系,Weaviate 会是不错的选择。
综合来看,漏洞代码检索 RAG 可能会采用 以下结构:
用户查询 --> 预处理(Query Expansion + Rewrite)
--> Routing(选择适合的检索方式)
--> Search(Milvus + FAISS 混合搜索)
--> Memory(存储漏洞模式,提高精准度)
--> Re-rank(BERT/LLM 重新排序,提高结果相关性)
--> 结果生成(Predict + LLM Summarization)
5. 重点: RAG, FT, ICL的对比

文章对RAG和FT的类比:
- RAG就像带笔记本参加开卷考试, 用高超的检索能力(翻书能力)和全面的知识库(带很多资料甚至上网查)来增强LLM的能力
- FT就像花长时间准备闭卷考试, LLM内化微调过程中的知识, 真正的理解, 泛化性更好, 遇到没见过但是相关的知识也能不出现幻觉(RAG方法中遇到没见过的知识可能出现幻觉), 对定制的任务性能也更好(比如限定输出格式等)
各项指标对比
1. External Knowledge Req
就是模型对专业领域知识的需求有多大, 对知识的实时性需求有多大
能力排名: RAG > FT >> ICL
2. Model Adaptation Req
就是模型需不需要调整参数, 泛化性如何(遇到没见过的知识会不会出现幻觉), 对特定任务的性能(比如限定输出格式等)
能力排名: FT >> RAG > ICL
3. 相应速度
能力排名: ICL ≈ \approx ≈ FT > RAG(涉及检索和排序)
4. 计算资源需求
资源需求量大小: FT > RAG > ICL
5. 数据需求量
FT > RAG >> ICL
6. 推理能力 vs. 记忆能力
-
Prompt Engineering 强调推理能力(基于预训练知识推理)
-
RAG 强调信息检索能力(从外部知识库获取答案)
-
Fine-tuning 强调记忆能力(将知识固化到模型中)
7. 动态性
也就模型能不能更新最新的知识
RAG > ICL(few-shot) > FT(静态)
3. 检索
1. 检索源
其他的都是NLP的源, 不讨论
特殊点的: LLM生成内容
在传统 RAG(Retrieval-Augmented Generation)框架中,模型通常从向量数据库、知识库或搜索引擎中检索相关文档,并将其提供给 LLM 进行总结或生成。但 LLM-Generated Content 试图利用 LLM 自身的知识,通过自回归生成、自适应检索、甚至存储和迭代优化自身记忆来增强 RAG 的效果。
LLM 生成的内容。为了解决 RAG 中外部辅助信息的局限性,一些研究集中在利用 LLM 的内部知识上。SKR [58] 将问题分类为已知或未知,选择性地应用检索增强。GenRead [13] 用 LLM 生成器替换了检索器,发现 LLM 生成的上下文通常包含更准确的答案,因为它与因果语言建模的预训练目标更加一致。Selfmem [17] 使用检索增强生成器迭代创建一个无界内存池,使用内存选择器选择作为原始问题的对偶问题的输出,从而自我增强生成模型。这些方法强调了 RAG 中创新数据源利用的广度,努力提高模型性能和任务效率。
核心思想:
既然 LLM 经过大规模预训练,已经包含了大量知识,为什么不让它自己生成信息,而非总是依赖外部检索?
就是LLM包含知识, 但是要显式的生成出来
LLM-Generated Content 的几种实现方式
1. SKR(Selective Knowledge Retrieval) - 选择性检索
方法:
-
先用 LLM 判断问题是否为“已知”或“未知”
-
已知问题:直接用 LLM 生成答案
-
未知问题:调用检索模块(RAG)
2. GenRead(Generate-Read) - 生成替代检索
方法
-
完全不使用检索器,让 LLM 生成背景知识,并基于该内容回答问题
-
依赖 LLM 强大的 内在知识(Pre-trained Knowledge)
重点: 为什么可行?
-
LLM 预训练目标(Causal LM / Masked LM)天然适应从上下文预测知识
-
许多事实知识已经固化在 LLM 权重中
-
LLM 生成的内容往往能更符合其内部知识结构
适用场景:
-
少量训练数据的任务(避免 Retriever 需要大规模索引)
-
格式化任务(如 SQL 生成、代码补全)
局限性:
-
LLM 生成内容可能产生幻觉(hallucination)
-
无法适应实时更新的数据(如最新安全漏洞)
3. Selfmem(Self-Memory Augmentation) - 自增强记忆
方法:
- 让 LLM 自己创建“记忆池”,存储回答和相关背景知识
- 使用 Memory Selector 选择最有价值的记忆,提升后续回答质量
- 让 LLM 自我迭代训练,提升自身推理能力
关键技术:
-
Retrieval-Enhanced Generator:模型自己检索、自己生成
-
Memory Pool:存储生成的背景知识,提高上下文连贯性
-
Dual Problem Creation:让 LLM 生成“相关问题”以自我训练
适用场景:
• 需要长期记忆的任务(如对话历史、代码修复)
• 需要持续增强的任务(如漏洞分类、日志分析)
🔹 LLM-Generated Content 在漏洞代码检索的应用
你目前的应用场景是 漏洞代码检索,可以结合 LLM-Generated Content 进行优化:
1️⃣ 提高检索准确性(减少无关代码段)
• 结合 SKR,让 LLM 先判断漏洞是否常见
• 已知漏洞 → 直接用 LLM 生成解释
• 未知漏洞 → 触发代码库检索,提供真实代码
2️⃣ 让 LLM 生成补充信息
• 传统 RAG 检索出的代码可能缺乏上下文
• 结合 GenRead,让 LLM 生成 漏洞影响分析、修复建议
• 适用于 CVE 漏洞数据库、代码安全分析
3️⃣ 让 LLM 记住漏洞模式(Selfmem)
• 让 LLM 存储常见漏洞类型(Memory Pool)
• 未来查询时,不必总是从头检索,提高效率
• 适用于 重复性高的漏洞分析(如 SQL 注入、缓冲区溢出)
2. 检索粒度
-
检索开销
细粒度 > 粗粒度 -
语义完整性(semantic integrity)
粒度大可能提供更多相关信息也可能提供冗余信息
提供信息量: 粗粒度 > 细粒度
相关文章:
Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview
Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey——(1)Overview1. Introduction&Abstract1. LLM面临的问题2. RAG核心三要素3. RAG taxonomy 2. Overv…...
LabVIEW透镜多参数自动检测系统
在现代制造业中,提升产品质量检测的自动化水平是提高生产效率和准确性的关键。本文介绍了一个基于LabVIEW的透镜多参数自动检测系统,该系统能够在单一工位上完成透镜的多项质量参数检测,并实现透镜的自动搬运与分选,极大地提升了检…...
什么是Maxscript?为什么要学习Maxscript?
MAXScript是Autodesk 3ds Max的内置脚本语言,它是一种与3dsMax对话并使3dsMax执行某些操作的编程语言。它是一种脚本语言,这意味着您不需要编译代码即可运行。通过使用一系列基于文本的命令而不是使用UI操作,您可以完成许多使用UI操作无法完成的任务。 Maxscript是一种专有…...
Redis|前言
文章目录 什么是 Redis?Redis 主流功能与应用 什么是 Redis? Redis,Remote Dictionary Server(远程字典服务器)。Redis 是完全开源的,使用 ANSIC 语言编写,遵守 BSD 协议,是一个高性…...
128周二复盘(164)学习任天堂
1.设计相关 研究历史上某些武器数值,对一些设定进行参数修改。兼顾真实性,合理性,娱乐性。 学习宫本茂游戏思想,简单有趣-重玩性,风格化个性化-反拟真。对堆难度与内容的反思。 后续将学习岩田聪以及别的任天堂名人的…...
LeetCode:63. 不同路径 II
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:63. 不同路径 II 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0]…...
VUE之组件通信(一)
1、props 概述:props是使用频率最高的一种通信方式,常用与:父<——>子。 若 父传子:属性值是非函数。若 子传父:属性值是函数。 父组件: <template><div class"father">&l…...
ESP32-S3模组上跑通esp32-camera(41)
接前一篇文章:ESP32-S3模组上跑通esp32-camera(40) 一、OV5640初始化 2. 相机初始化及图像传感器配置 上一回继续对reset函数的后一段代码进行解析。为了便于理解和回顾,再次贴出reset函数源码,在components\esp32-camera\sensors\ov5640.c中,如下: static int reset…...
本地部署DeepSeek R1:打造专属私人AI助手指南
在当今人工智能蓬勃发展的浪潮中,DeepSeek R1模型的本地部署为用户带来了全新的体验。它不仅能够保障数据隐私,还具备与商业AI模型相媲美的出色性能。随着计算能力的不断提升以及开源AI社区的日益壮大,用户如今可以在本地运行高性能AI模型&am…...
Redis-布隆过滤器
文章目录 布隆过滤器的特点:实践布隆过滤器应用 布隆过滤器的特点: 就可以把布隆过滤器理解为一个set集合,我们可以通过add往里面添加元素,通过contains来判断是否包含某个元素。 布隆过滤器是一个很长的二进制向量和一系列随机映射函数。 可以用来检索…...
OpenCV 版本不兼容导致的问题
问题和解决方案 今天运行如下代码,发生了意外的错误,代码如下,其中输入的 frame 来自于 OpenCV 开启数据流的读取 """ cap cv2.VideoCapture(RTSP_URL) print("链接视频流完成") while True:ret, frame cap.rea…...
【视频+图文详解】HTML基础3-html常用标签
图文教程 html常用标签 常用标签 1. 文档结构 <!DOCTYPE html>:声明HTML文档类型。<html>:定义HTML文档的根元素。<head>:定义文档头部,包含元数据。<title>:设置网页标题,浏览…...
【B站保姆级视频教程:Jetson配置YOLOv11环境(五)Miniconda安装与配置】
Jetson配置YOLOv11环境(5)Miniconda安装与配置 文章目录 0. Anaconda vs Miniconda in Jetson1. 下载Miniconda32. 安装Miniconda33. 换源3.1 conda 换源3.2 pip 换源 4. 创建环境5. 设置默认启动环境 0. Anaconda vs Miniconda in Jetson Jetson 设备资…...
【PLL】杂散生成和调制
时钟生成 --》 数字系统 --》峰值抖动频率生成 --》无线系统 --》 频谱纯度、 周期信号的相位不确定性 随机抖动(random jitter, RJ)确定性抖动(deterministic jitter,DJ) 时域频域随机抖动积分相位噪声确定性抖动边带 杂散生成和…...
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...
侯捷 C++ 课程学习笔记:深入理解 C++ 核心技术与实战应用
目录 引言 第一章:C 基础回顾 1.1 C 的历史与发展 1.2 C 的核心特性 1.3 C 的编译与执行 第二章:面向对象编程 2.1 类与对象 2.2 构造函数与析构函数 2.3 继承与多态 第三章:泛型编程与模板 3.1 函数模板 3.2 类模板 3.3 STL 容器…...
Java的Integer缓存池
Java的Integer缓冲池? Integer 缓存池主要为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因此缓存这些对象可以减少内存分配和垃圾回收的负担,提升性能。 在-128到 127范围内的 Integer 对象会被缓存和复用…...
【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027
本文涉及知识点 C动态规划 离散化 LeetCode1626. 无矛盾的最佳球队 假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而,球队中的矛盾会限制球员的发挥,所以必须选…...
python 判断复杂包含
目录 python 判断复杂包含 a和b都是拍好序的: python 判断复杂包含 a[10,13,15] b[[9,11],[11,13],[13,16]] b的子项是区间,返回b中子区间包含a其中元素的子项 if __name__ __main__:a [10, 11, 15]b [[9, 11], [11, 13], [13, 16]]# 筛选出包含…...
Teleporters( Educational Codeforces Round 126 (Rated for Div. 2) )
Teleporters( Educational Codeforces Round 126 (Rated for Div. 2) ) There are n 1 n1 n1 teleporters on a straight line, located in points 0 0 0, a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3, …, a n a_n an. It’s possible to tele…...
css-设置元素的溢出行为为可见overflow: visible;
1.前言 overflow 属性用于设置当元素的内容溢出其框时如何处理。 2. overflow overflow 属性的一些常见值: 1 visible:默认值。内容不会被剪裁,会溢出元素的框。 2 hidden:内容会被剪裁,不会显示溢出的部分。 3 sc…...
python-leetcode-从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right r…...
绝对值线性化
函数中的绝对值线性化有多种方法,包括我之前的一篇博文. 前几天在小红书刷到一个帖子,一位网友提供了另外一种巧妙的方式,记录如下。 假如有一个绝对值表达式: y ∣ a x − b ∣ (1) y|ax-b|\tag{1} y∣ax−b∣(1) 令&#x…...
Java实战:图像浏览器
文章目录 1. 实战概述2. 知识准备3. 实现步骤3.1 创建Java项目3.2 创建图像浏览器类3.2.1 声明变量与常量3.2.2 创建构造方法3.2.3 创建初始化界面方法3.2.4 创建处理事件方法3.2.5 创建主方法3.2.6 查看完整代码 3.3 运行程序,查看结果 4. 实战小结5. 扩展练习 1. …...
SARIMA介绍
SARIMA模型,即季节性自回归积分移动平均模型(Seasonal Autoregressive Integrated Moving Average Model),是一种用于处理和预测具有明显季节性变化的时间序列数据的统计模型。它是ARIMA模型的一种扩展,通过引入额外的…...
I.MX6ULL 中断介绍上
i.MX6ULL是NXP(原Freescale)推出的一款基于ARM Cortex-A7内核的微处理器,广泛应用于嵌入式系统。在i.MX6ULL中,中断(Interrupt)是一种重要的机制,用于处理外部或内部事件,允许微处理…...
Spring Boot WebMvcConfigurer:定制你的 Web 应用
在构建基于Spring Boot的Web应用程序时,WebMvcConfigurer接口扮演着至关重要的角色。它允许开发者以一种简洁且非侵入的方式自定义Spring MVC的功能,而无需直接扩展框架的核心组件。本文将深入探讨WebMvcConfigurer的作用、如何实现其方法以及在实际项目…...
(即插即用模块-特征处理部分) 十九、(NeurIPS 2023) Prompt Block 提示生成 / 交互模块
文章目录 1、Prompt Block2、代码实现 paper:PromptIR: Prompting for All-in-One Blind Image Restoration Code:https://github.com/va1shn9v/PromptIR 1、Prompt Block 在解决现有图像恢复模型时,现有研究存在一些局限性: 现有…...
单链表专题(中)
我们接着上一篇文章,继续对单链表的实现进行扩充 链表的头删 我们在进行头删的时候,不能先释放掉头节点再将头节点传到第二节点上,这样会导致找不到第二个节点了 void SLTPopFront(SLTNode** pphead) {assert(pphead && *pphead);…...
表格结构标签
<!-- thead表示表格的头部 tbody表示表格的主体 --> <thead></thead> <tbody></tbody> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…...
