[论文笔记]构建基于RAG聊天机器人的要素

引言

今天带来一篇构建RAG的论文笔记:FACTS About Building Retrieval Augmented Generation-based Chatbots。

基于生成式人工智能构建企业聊天机器人迅速成为行业中最受关注的应用之一,旨在提高员工生产力。

然而,构建成功的企业聊天机器人并不容易。需要精心设计的RAG流程,包括微调语义嵌入和LLM、从向量库中检索相关文档、查询改写、结果重排序、设计有效的提示、遵循文档访问控制、提供简明回答、包含相关参考资料、保护个人信息以及构建智能体来编排所有这些过程。

本篇工作提出了一个构建有效RAG聊天机器人的框架:用于IT和HR福利、公司财务已经一般企业内容的聊天机器人。

本文的贡献有:

  1. 引入了FACTS框架,解决了上述挑战。FACTS表示RAG聊天机器人必须做到的五个方面——内容新鲜度(content freshness,F)、架构(architecture,A)、LLM的经济成本(cost economics of LLM,C)、测试(testing,T)以及安全(security,S)。
  2. 提出了RAG流程的15个控制点和优化聊天机器人性能的技术。
  3. 提供了试验论证。

1. 总体介绍

作者发现即使在后ChatGPT时代,打造成功的企业聊天机器人也并不容易。该过程需要精心设计RAG流水线、微调LLM、提示工程、确保企业知识的相关性和准确性、遵守文档访问控制权限、提供简介的回应、包含相关参考资料、保护个人隐私。

本篇工作分享了作者在构建高效、安全和经济的聊天机器人方面的经验和策略。从实践的角度回答以下问题:

  • 在构建和部署基于生成式AI的企业级聊天机器人时需要考虑哪些关键挑战?通过尝试以灵活的架构(A)交付新鲜内容(F)、成本效益©、测试良好(T)和安全(S)这5个方面来展示作者的工作FACTS。
  • 如何通过 RAG 系统在构建聊天机器人时实现用户可接受的质量水准?介绍了 RAG流水线的15个控制点以及优化每个控制点和整体 RAG流水线的技术。

2. 案例学习

本篇论文介绍了作者在英伟达使用RAG和LLM构建的三个聊天机器人:

  • NVInfo Bot 回答有关企业内容(大约 500 亿份文档,大小大于7TB)的问题,补充了公司内部搜索。它管理各种数据格式并强制执行文档访问控制。技术栈包括 LangChain、用于检索和处理文档访问控制的供应商向量数据库、LLM 模型(可选择多个LLM模型)和自定义 web-UI。
  • NVHelp Bot 专注于 IT 助手和 HR 福利约 2K 个包含文本、表格、图片、pdf 和 html 页面的多模态文档),使用与 NVInfo 机器人相似的技术栈,但数据量较小。
  • Scout Bot 处理来自公共来源的关于财务收益的问题,管理结构化和非结构化数据(约 4K 个包含文本、表格、pdf 和 html 页面的多模态文档)。技术栈包括开源向量数据库、LangChain、Ragas 评估、可选择的LLM 模型和自定义 web-UI。

下文总结了在构建上述三个聊天机器人过程中遇到的挑战和学到的经验。

首先探讨在每个聊天机器人中交付新鲜企业内容所面临的挑战。

3. 在LLM驱动的聊天机器人中确保企业数据的新鲜度(F)

尽管基础模型非常强大,但通常由于缺乏领域特定和企业特定的知识而表现不佳。

检索增强生成是一个通过语义匹配从向量数据库中检索相关信息,然后将其输入LLM用于响应生成的过程。RAG流水线中,向量数据库和LLM共同确保提供及时的企业知识。

然而,RAG流水线具有很多控制点,每个控制点如果调整不当可能会导致较低的准确性、幻觉和无关的回复。

此外,多模态内容需要使用多模态检索器来处理结构化、非结构化以及半结构化的数据,包括PPT、图表、视频和会议记录。

202407121357

Figure 1: Control Points in a typical RAG pipeline when building Chatbots.

受到1的启发,作者从图1中可视化的案例研究中确定了RAG的15个控制点。每个控制点都标有一个数字。下文提出了针对解决RAG控制点的见解和经验。

3.1 经验

在图4中提供了这15个控制点的总结描述、每个控制点相关的挑战以及建议的优化方法。每个控制点分别标记为RAG-C[num]RAGOp[num],用于RAG和RAGOps流程。

元数据增强、分块、查询重写、查询重排序

在RAG流水线的元数据增强、分块、查询重写、查询重排序对聊天机器人响应质量影响最大。LLM响应生成质量高度依赖于检索相关系。检索相关性又高度依赖于文档元数据增强、分块和查询重写。

作者实现了基于网格搜索的automl能力,以找到合适的分块标记大小配置,尝试了各种不同的提示词,并探索了不同的分块重排策略来找到每个对应的最佳设置。

混合搜索 向量数据库在处理匹配实体(人名、地点、公司名等)方面表现不佳。使用字面量搜索(比如elastic search)和向量搜索相结合的方式提供了更好的检索相关性和更广泛地覆盖范围。

202407121358

Figure 2: Agent architecture for handling complex queries

智能体架构

像"比较英伟达自2024财年Q1到Q4的收入,并就此期间收入变化的主要影响因素提供分析评论"这样的问题需要能够进行查询分解和编排的复杂智能体。图2显示了作者在Scout bot中处理这种问题时的一种机制。信息检索系统和LLM都无法回答复杂查询。此时需要复杂智能体和多智能体架构来处理复杂查询。

是否需要微调大模型?

当涉及LLM时,无法直接回答该问题。有些应用情况可能适用于基础模型,而其他情况则需要定制。在考虑定制化时,有几种选择。包括提示工程、P-tuning、参数高效微调(PEFT)和全量微调(FT)。

202407121311

Figure 3: NVHelp answer quality and latency metrics com parison among different models

微调需要大量投资在数据标注、训练和评估上。每一项都可能耗费较大。因此在定制LLM时,自动化测试和质量评估流程变得至关重要,以确保效率和准确率。图3显示了作者进行的关于GPT4模型和一些开源模型在NVHelp bot上大于245个查询的准确信和延迟的权衡评估。

结果显示,Llama3-70B模型在多个答案质量方面表现出色,同时保持可接受的延迟。

处理多模态数据

企业数据是多模态的。在处理结构化、非机构化和多模态数据对于多功能RAG流水线至关重要。

如果文档的结构是一致的且事先已知(例如在金融收益领域的EDGAR数据库中发现的SEC报表数据,由Scout机器人处理),实施基于章节的拆分,使用章节标题和副标题,并将其纳入片段的背景中可以提高检索相关性。

像https://unstructured.io/这样的解决方案,专门从PDF中提取和结构化内容,有助于在上下文中解析和分块非结构化文档。

RAGOPs

一旦部署了RAG流水线,有效监控其监控状况是至关重要的。当回答质量低下时,需要进行彻底的错误分析。要调试检索相关性,需要了解片段(chunk)与其关联的元数据存储在向数据库中的详细信息、查询是如何改写的、哪些片段被检索出来以及这些片段是如何排名的。

同样如果LLM响应不正确,审查用于生成答案的最终提示是非常重要的。对于引用文档方面,需要追溯到原始文档链接及其对应的片段。

RAGOps/LLMOps和评估框架,如Ragas,对于提供必要的自动化以在RAG流水线中的准确性改进周期中实现快速迭代至关重要。更多详细信息参考图4。

RAG 阶段描述挑战可选解决方案
RAG-C1:数据提取连接到数据源,将数据导入存储库以确保数据的新鲜度和可访问性* 规模
* 文档RBAC(基于角色的访问控制)
* ACL 支持
* 持续更新的状态维护
* 持续提取支持的删除、修改、更新操作
* 需要流式提取流水线
RAG-C2:数据解析转换数据到助于检索的格式,处理结构化以及半结构化数据,包括多模态文档* 结构化+非结构化数据
* 多模态PDF(PPT)
* 智能HTML解析 + 结构化解析
* 章节级拆分
* PDF解析
RAG-C3:元数据增强为了实现一致和相关的检索,对数据进行标准化、清洗、丰富处理* 基于领域特定格式的数据清洗* 使用NLTK库或LLMs提取和丰富文档和文本块的数据,标题,文件名和文章编写时间,以及重要关键词
RAG-C4:嵌入模型转换预处理数据到稠密向量来理解和匹配用户查询* 开箱即用模型的限制* 开源嵌入模型 v.s. 微调嵌入模型
RAG-C5:LLMs抽取元数据使用LLMs抽取关键词和概念,增强元数据以指导检索* LLM在指令遵循中的不确定性
* 数学
* 防护
* 元数据增强 - 使用NLTK库或LLMs提取和丰富文档和文本块的数据,标题,文件名和文章编写时间,以及重要关键词
RAG-C6:分块拆分数据到可管理的文本块以高效检索* 随意的标记级拆分会影响检索质量
* 分块结构化数据
* 使用HTML标签进行章节级分块
* 多标签索引
* 对于表格数据使用Markdown和LLM摘要
* 使用网格搜索寻找最优分块和重叠大小
RAG-C7:检索器存储管理向量表示和字面量数据用于查询快速响应* 存储卷的缩放
* 多数据源集合的维护
* 分片
* 混合搜索的基建
RAG-C8:查询重述重写用户查询来提升检索准确率和解释用户意图* 掌握提示词艺术
* 过滤器和工具
* 智能体,提示工程(date time)
* 日期上下文工具
* 复杂和多部分问题处理的高级智能体
RAG-C9:检索搜索相关数据块回复用户的问题* 实体的挑战
* 差的召回率和精度
* 检索到相关文档而不是相关块
* 混合检索+ 向量数据库
RAG-C10:分块重排序根据相关性和权限(authority)对检索到的文本块重新评估和排序* 数据源存储卷& 权限不平衡* 多排序策略(为数据源分配权重,Cross-encoder,公司政策规则)
RAG-C11:分块整合&后处理将分块合并、细化为具有连贯性的回答,确保相关性和敏感性* 敏感内容移除的防护栏* 通过额外的防护措施移除包含敏感内容的文本块
RAG-C12:Guardrails(防护)确保生成的内容符合安全和质量标准* LLM在指令遵循中的不确定性* 对于敏感内容提示词级防护
* Guardrails的后处理
RAG-C13:答案生成使用LLM生成适应上下文且连贯的回复* 回复生成的LLM指令* 最终答案生成的提示词
* 任务拆解和编排
* 传递用户上下文到某些领域
* 在提示中设置个人身份信息和员工敏感性的保护措施
RAC-C14:答案后处理重写回复变得更准确和可靠* 幻觉
* 引用生成
* 通过防护控制幻觉
* 基于分块数据源生成引用而非LLM
RAC-C15:RAG监控跟踪RAG流水线的健康和性能* 调试查询重写&检索* 使用类似Open Telemerty的LLMOps工具、RAGs评估框架、类似Datadog的应用监控平台
* 调试RAG流水线的自定义脚本

Figure 4: RAG control points, challenges, and remediations

4. 为生成式AI聊天机器人构建灵活的架构(A)

跟上人工智能领域的快速发展就像航行在急流中一样。从向量数据库和嵌入模型到LLMs、智能体架构、低代码/无代码平台、RAG评估框架以及提示技术,每个方面都在迅速演变。

在这个充满活力的环境中,构建通用、灵活和适应性强的平台至关重要。从最初构建三个聊天机器人开始,作者意识到建立一个通用平台的重要性,以避免在安全、防护措施、认证、提示、用户界面、反馈机制、使用报告、监控和评估方面做出重复的努力。 为了解决这个问题,作者开发了NVBot平台(见图7),这是一个具有可插入式架构的模块化平台。它允许开发人员选择最适合其用例的LLMs、向量数据库、嵌入模型、代理和RAG评估框架。它还为像安全性、防护措施、认证、授权、用户体验和监控等基本功能提供了通用组件。此外,该平台支持全民开发,允许多个团队为集体使用贡献其经过测试的提示、工作流程、防护措施和经过精细调整的模型。

随着机器人生态系统的扩大,面临一个关键问题:应该构建许多特定领域的机器人、一个单一的企业机器人,还是采用混合方法?特定领域的聊天机器人在定制环境中表现出色,而企业范围的聊天机器人则充当通才,为所有员工提供集中的知识库。作者认为没有必要在两者之间选择。 新颖的架构模式正在出现,其中企业范围的聊天机器人充当"万事通",将查询引导到调整了特定领域数据的专用机器人。

这种多机器人架构允许专门聊天机器人的并行开发,同时为用户提供统一的界面。NVBot平台支持企业内多个聊天机器人的共存和编排。关于单一机器人还是多个专门机器人的辩论仍在进行中。

202407121313

Figure 5: Scout Bot: Multi-part query

202407121314

Figure 6: NVHelp Bot: Answering questions on HR benefits

5. 聊天机器人的成本©

了解基于生成式人工智能的聊天机器人的成本经济学涉及到几个关键因素。主要使用商业性和商业化的大型语言模型(LLMs)的高成本可能是不可持续的,因为在多个应用案例中,开支会显著增加。此外,未预料到的开支通常会在团队测试各种LLMs以满足特定需求时累积起来。此外,当使用商业LLM供应商的API时,确保敏感企业数据的安全性需要设置防范措施来检测和防止敏感数据泄露,以及进行审计和合法许可。此外,还需要考虑成本与延迟之间的权衡,因为具有较长上下文长度的大型LLMs通常具有较慢的响应时间,影响整体效率。

大型模型 v.s. 小型模型 对于许多用例来说,大型商业LLMs和较小的开源LLMs越来越成为可行的选择,从而为企业提供成本效益的替代方案。随着开源模型正在赶超大型商业模型,它们在准确度上逐渐提供了接近可比较的水平,正如在图3中展示的NVHelp机器人实证评估中所示,并且通常比大型模型具有更好的延迟性能。此外,通过优化GPU推理模型,可以进一步加快处理时间。例如,经过NVIDIA的Tensor RT-LLM推理库优化的开源模型显示出比未经优化的模型更快的性能。这些策略有助于在维持高性能和安全标准的同时平衡成本效益的需求。

LLM网关 如果必须使用供应商的LLM API,最好为整个公司实现一个内部LLM网关,以进行审核、订阅和成本管理。实施内部LLM网关可以简化LLM的使用、订阅和数据跟踪,以进行安全审核。这个中央枢纽简化了管理,并确保了有效的资源分配。在NVIDIA IT中实施了一个LLM网关,用于记录入站和出站的有效负载,以进行审核,并通过访问控制权限保护这些数据。LLM网关有助于管理LLM API的订阅和成本调用。

总结起来,开发一种混合和平衡的LLM策略对于管理成本和促进创新至关重要。这包括使用较小和定制的LLMs来管理开支,同时通过LLM网关允许对大型LLMs进行负责任的探索。

通过跟踪LLM订阅和成本以及评估Gen-AI功能的使用情况和生产力改进,确保衡量和监控投资回报率至关重要。确保在基于云的LLM使用中保护敏感企业数据的安全性需要实施防泄露措施,并建立LLM网关进行审核和合法许可的学习。最后,注意成本、准确度和延迟之间的权衡,通过定制较小的LLMs以匹配较大模型的准确度,同时注意到具有较长上下文长度的大型LLMs往往具有较长的响应时间。

6. 测试基于RAG的聊天机器人(T)

202407121315

Figure 7: Architecture of NVBot platform upon which multiple chatbots are being built.

由于需要进行人工响应验证,测试生成式人工智能解决方案可能是一个漫长的过程。越来越多地人使用LLMs作为裁判。然而,在使用LLMs作为人类代理时,需要谨慎,因为使用LLMs作为评判者可能会导致强化其评估中固有偏见的自我实现预言类型的情景。

  • 安全测试:自动化安全测试对于在不牺牲安全性的情况下保持开发速度至关重要。强大的安全框架和回归测试数据集确保聊天机器人对潜在威胁保持弹性。需要准备一系列可以在每个主要迭代中进行测试的安全数据集。
  • 提示更改测试:生成式人工智能模型对提示更改非常敏感。为了保持准确性,需要进行全面的回归测试来测试每个提示的更改。
  • 反馈循环:结合收集到的反馈和RLHF循环对于持续改进至关重要。这使得LLM模型可以随着时间的推移改进解决方案和语言模型,确保聊天机器人越来越熟练。然而,如果选择的基础模型不提供定制化,则很难将模型与人类反馈对齐。如果反馈是显著的并涉及多个领域,则可以考虑进行模型定制化。也需要收集用户反馈来促进强化学习和人类反馈的持续学习流程。拥有工具使这个过程自动化对于这些聊天机器人的生产后生命周期管理至关重要。

6.1 经验

长测试周期的计划:有效测试基于RAG的聊天机器人需要预期到较长的测试周期。首先,集中精力自动化测试和提高准确性评估,以简化这个关键阶段。

构建具有代表性的真实数据集:构建全面的真实数据集,反映出目标解决方案的全面优势是至关重要的。这确保了聊天机器人在实际使用中遇到的场景中进行测试。

自动化评估:尽管利用LLMs作为评估者可以提供可扩展的测试选项,但请记住,人类评估的质量是无可比拟的。应该在可行的情况下使用自动化工具来辅助,而不是取代人类监督。

融入人类反馈和持续学习:建立机制,允许人类反馈和系统性的错误分析。根据这些反馈优先进行迭代改进,不断提高聊天机器人的性能和适应性。

7. 确保基于RAG的聊天机器人的安全性(S)

在部署生成式AI聊天机器人时,安全性是至关重要的。为了减轻风险、幻觉、有害性、增加公平性、透明度和安全性至关重要。强大的基础模型在这些保护措施方面越来越好。然而,仍然存在着越狱(jail breaks)、对抗性攻击和其他安全问题的许多可能性。除了这些安全风险,基于生成式AI的聊天机器人还容易受到派生风险的影响。由于这里的机器人都是内部企业聊天机器人,更关注企业内容安全和对敏感数据的保护。以下是作者根据经验总结的确保RAG-based聊天机器人安全的一些经验和见解。解决这些挑战对于在企业环境中维护RAG-based聊天机器人的完整性和安全性至关重要。

7.1 经验

企业内容访问控制:企业文档受到访问控制的保护,要求基于RAG的聊天机器人在生成响应时遵守访问控制列表(ACLs)。

生成式AI的派生风险:聊天机器人可能生成缺乏原始数据源上下文的响应,从而可能导致误解。此外,增强的搜索方法如果企业内容未经适当保护,可能会无意中增加暴露敏感数据的风险。作为NVInfo机器人的一部分,作者在自动检索过程中实施了敏感数据保护措施,同时利用了向量搜索解决方案提供的敏感数据过滤和分类能力来自动过滤敏感数据。

数据治理和内容安全:高效的知识访问可能增加敏感数据泄漏的风险。因此,在部署之前优先考虑数据治理,以防止未经授权的访问和数据泄露。作者启动了一个企业内容安全计划,用于对文档进行敏感性分类,并从聊天机器人中排除敏感内容。

企业保护措施:实施与特定企业政策和规定相一致的生成式AI响应保护措施至关重要。这些保护措施有助于通过确保聊天机器人生成的内容符合既定的规范和道德准则,防止潜在的法律和声誉损害。在NVInfo机器人中,最初在LLM提示中实施了许多保护措施。然而,后来意识到并不是所有的LLMs都始终遵循这些提示。因此,使用Nemo Guardrails 在查询和响应的预处理和后处理过程中实施了这些保护措施。

8. 相关工作

9. 结论

在这篇工作中,介绍了作者开发的基于RAG的聊天机器人的方法,并强调了在构建三个聊天机器人的经验。强调了内容新鲜度、架构、LLM成本管理、测试计划和安全性在创建强大、安全和企业级聊天机器人方面的重要性。确定并详细说明了RAG流程中的15个关键控制点,并提供了在每个阶段提高聊天机器人性能的策略。

总结

⭐ 作者来自英伟达的团队,介绍了他们在构建企业级RAG聊天机器人的经验。提出了FACTS这5个要注意的方面以及15个可提升性能的控制点。是一篇偏实战的工作,值得仔细研读。

引用


  1. Seven Failure Points When Engineering a Retrieval Augmented Generation System ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Spring Cloud:构建分布式微服务架构的最佳实践

导语:随着互联网业务的快速发展,传统的单体应用已无法满足高并发、高可用、可扩展的需求。微服务架构以其轻量级、独立性、灵活性的特点,逐渐成为大型分布式系统的首选架构。Spring Cloud作为构建微服务架构的重要框架,为开发者提…

【边缘计算网关教程】6.松下 Mewtocol TCP 协议

前景回顾:【边缘计算网关教程】5.三菱FX3U编程口通讯-CSDN博客 松下 Mewtocol TCP 协议 适配PLC:松下FP0H 松下XHC60ET 1. 硬件连接 Mewtocol TCP协议采用网口通信的方式,因此,只需要保证网关的LAN口和松下PLC的IP在一个网段即…

MYSQL--第九次作业

MYSQL–第九次作业 1、安装redis,启动客户端、验证。 安装网址:Redis Released,找到适合自己电脑的redis版本后,下载并安装。 安装完后,打开cmd命令框: -- 启动客户端 C:\Windows\System32>redis-cl…

【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会

【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会 【创作不易,求点赞关注收藏】 文章目录 【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会一、版本情况介绍二、安装cuda1、到官网…

破解快消行业营销费用管理难题,引领财务费控数字化转型

众所周知,快消品行业消费群体较为广泛,涉及渠道复杂,产品周转期短、可替代性强,特别是面对竞争激烈的市场环境,大力投入营销、渠道费用对快消行业的企业来说十分普遍,而这其中,由于渠道多、业态…

【LoadRunner】博客笔记项目 性能测试报告

文章目录 前言一、博客笔记项目性能测试介绍二、编写性能测试脚本(VUG) 2.1 测试脚本编写步骤 2.2 脚本总代码和结果分析三、创建测试场景(Controller) 3.1 测试场景创建实现步骤四、生成测试报告(Anal…

Sql查询语句

SELECT * from student,class 在上一篇博客里我们已经介绍了Sql语句的增删改,以及创建了用来演示增删改的数据库和表,下面我们介绍SQL语句中最重要的查询语句。 增删改博客链接(Sql语句之增删改查(CRUD)-CSDN博客&…

Nacos最新0day漏洞复现

目录 一、漏洞原理 二、版本信息 三、资产测绘 四、poc信息 五、总结 一、漏洞原理 漏洞的核心在于 Nacos 的某些接口没有严格的权限控制,攻击者可以通过特制的请求向 Nacos 服务器发送恶意数据,从而执行任意代码。下载nacos代码搭建环境https://gi…

数字孪生Digital Twin 结合建筑信息模型 BIM 在AIoT 智慧城市建设中Web 可视化大屏实践...

智慧城市建设通过将城市中的建筑、基础设施等构建 BIM 模型,并与实时采集的数据相结合,创建数字孪生体。可以实现对城市能源消耗、交通流量、环境质量等的实时监测和预测,优化城市规划和资源分配。 01 数字孪生 Digital Twin 数字孪生 Digita…

Jira学习

1.Dev OPS DevOps简介 DEV OPS 流程 DEV OPS流程对应工具 最重要的就是持续集成–Jenkins 2.Jira 新建项目

自主升级,平稳过渡!麒麟信安保障长沙市智慧交通发展中心CentOS迁移无忧

长沙市智慧交通发展中心围绕综合交通运输协调体系的构建,实施交通运行的监测、预测和预警,面向公众提供交通信息服务,开展多种运输方式的调度协调,提供交通行政管理和应急处置的信息保障。 该中心目前数据日交换量超2亿条&#x…

社交电商的新篇章:AI智能名片O2O商城小程序与传统微商的区别与融合

摘要 在数字经济蓬勃发展的今天,互联网技术的革新正以前所未有的速度重塑着商业格局。传统微商模式,尽管在初期借助社交媒体迅速崛起,但因其固有的局限性,如产品质量不一、营销手段单一、信任机制脆弱等,逐渐暴露出诸…

Qt程序图标更改以及程序打包

Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 1 windows 1.1 cmake 1.1.1 修改.exe程序图标 获得一个…

【Git分支管理】分支2种合并模式

目录 0.回顾 1.ff模式 2.no-ff模式 3.ff模式转no-ff模式 先提交再合并再提交 0.回顾 前面介绍了两种情况总结如下: master没有修改提交,在dev中修改提交,master和dev合并顺利master修改提交的同时dev也修改提交了,产生合并…

【数据结构】高效解决连通性问题的并查集详解及Python实现

文章目录 1. 并查集:一种高效的数据结构2. 并查集的基本操作与优化2.1 初始化2.2 查找操作与路径压缩2.3 合并操作与按秩合并 3. 并查集的应用3.1 判断连通性3.2 计算连通分量 4. 并查集的实际案例4.1 图的连通性问题4.2 网络连接问题 5. 并查集的优缺点5.1 优点5.2…

BernNet Learning Arbitrary Graph Spectral Filters via Bernstein Approximation

发表于:neurips21 推荐指数: #paper/⭐⭐ 设定:在本文中,h是过滤器. bernstein 多项式逼近(这个证明有点稀里糊涂的,反正我觉得一点点问题,可能因为我水平低) p K ( t ) : ∑ k 0 K θ k ⋅ b k K ( t ) ∑ k 0 K f ( k K ) ⋅ ( K k ) ( 1 − t ) K − k t k . p_K(t):…

大数据hive表和iceberg表格式

iceberg: https://iceberg.apache.org/ iceberg表,是一种面向大型分析数据集的开放表格式,旨在提供可扩展、高效、安全的数据存储和查询解决方案。它支持多种存储后端上的数据操作,并提供 ACID 事务、多版本控制和模式演化等特性&#xff0c…

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

目录: 目录: 一、 Base64概述和应用场景 1.1 概述 1.2 应用场景 二、Base16 2.1 Base16编码 2.2 Base16编解码 三、Base64 四、OpenSSL BIO接☐ 4.1 Filter BIOs: 4.2 Source/Sink BIOs: 4.3 应用场景: 4.4 具体使用&…

设计模式学习(二)工厂模式——抽象工厂模式

设计模式学习(二)工厂模式——抽象工厂模式 背景抽象工厂模式优点与缺点参考文章 背景 现在我需要开发一个相机操作模块,它可能在Windows下运行,也可能在Linux下运行。由于在厂家提供的SDK中,Windows下的SDK和Linux下…

【JVM】JVM实战笔记-随笔

JVM实战笔记-随笔 前言字节码如何查看字节码文件jclasslibJavapArthasArthurs监控面板Arthus查看字节码信息 内存调优内存溢出的常见场景解决内存溢出发现问题Top命令VisualVMArthas使用案例 Prometheus Grafana案例 堆内存情况对比内存泄漏的原因:代码中的内存泄漏并发请求问…