微软 GraphRAG 项目学习总结
微软2024年4月份发布了一篇《From Local to Global: A GraphRAG Approach to Query-Focused Summarization》(GraphRAG:从局部到全局的查询式摘要方法)论文,提出了一种名为GraphRAG的检索增强生成(RAG)方法,用于查询式摘要任务。传统的RAG方法主要基于局部检索和生成,可能会忽略不同检索片段之间的全局关系,导致生成的摘要缺乏整体连贯性和深度。GraphRAG 结合了知识图谱构建、检索增强生成和查询聚焦摘要技术,将检索到的文档片段组织成一个全局知识图,以捕捉它们之间的语义关系和逻辑关联,从而更好地支持跨文档推理和信息整合。论文实验表明,GraphRAG 在查询相关性、信息覆盖率和生成质量方面优于传统方法,特别适用于需要整合多个信息源的复杂查询式摘要任务。这项研究为提升检索增强生成模型的全局信息整合能力提供了新的思路。
并开源了论文的实现 GraphRAG 的项目:microsoft/graphrag: A modular graph-based Retrieval-Augmented Generation (RAG) system
今天简单总结学习这篇论文和项目的主要内容。
微软 GraphRAG 项目:提升LLM能力的新突破
LLM 的挑战与机遇
大语言模型(LLM)面临的最大挑战,同时也是最大机遇,在于如何将其强大的能力扩展到超出训练数据的范围,并在从未见过的数据 上依然取得可比拟的效果。这种能力的提升为数据研究开辟了新的可能性,例如结合上下文和数据集背景,识别主题和语义概念。
微软研究院(Microsoft Research) 开发的 GraphRAG,这一方法在增强 LLM 处理未见数据的能力方面取得了重要突破。
RAG 方法的局限性
传统的 检索增强生成(RAG, Retrieval-Augmented Generation) 方法通常依赖于 向量检索(vector search),在用户提出问题时,搜索相关片段并提供给大语言模型(LLM)生成答案。然而,这种方法存在 全局理解(global comprehension) 的局限性,尤其在以下场景下表现不佳:
1. 信息整合困难:
-
- 当问题需要从多个信息来源提取和综合分析时,Baseline RAG 无法有效关联分散的信息,导致缺乏深入的洞察力。
- 例如,在企业内部文档或学术研究中,不同文档之间的共享属性可能蕴含重要的关联信息,但 Baseline RAG 难以“串联”这些数据,导致信息整合能力不足。
Baseline RAG retrieved context
GraphRAG provenance
2. 难以处理大规模数据集:
-
- 在面对 超大规模数据集合或长篇文档 时,Baseline RAG 无法提供全面的语义理解。
- 由于 LLM 的 上下文窗口(context window) 存在限制,过长的文本可能会在上下文的中间部分“丢失”关键信息,使得 RAG 无法捕捉深层语义概念,从而影响整体理解质量。
微软 GraphRAG 方法:基于知识图谱的增强
为了解决上述问题,微软研究团队提出了一种基于图的 RAG 方法(GraphRAG),用于在私有文本语料库上进行问答,并提升 LLM 处理全局理解任务的能力。GraphRAG 主要具备以下优势:
- 增强用户问题的广泛性:通过构建知识图谱,GraphRAG 更好地捕捉不同文档之间的关联,从而提升回答复杂问题的能力。
- 扩展索引的文本数量:相比于 Baseline RAG 受限于向量相似性检索,GraphRAG 允许更大规模的数据索引,使其更适用于大规模数据分析。
GraphRAG 的技术架构
GraphRAG 采用了两阶段的 基于图的文本索引(graph-based text indexing) 方法:
1. 构建实体知识图(Entity Knowledge Graph)
-
- GraphRAG 从源文档中提取实体和它们的关系,构建知识图谱,使得信息之间的关联更加清晰。
- 例如,在企业研究文档中,GraphRAG 可提取公司名称、研究主题、关键技术等实体,并建立它们之间的联系。
2. 生成社区摘要(Community Summaries)
-
- 预生成相关实体群体的摘要,提高查询时的检索效率。
- 当用户提出问题时,GraphRAG 先从知识图谱中找到相关的社区摘要,并基于摘要生成部分答案,最后再将这些部分答案整合成最终的用户响应。
- 这一过程避免了单纯依赖向量搜索时的信息丢失问题,并在问答时提供更完整的上下文。
实验结果:GraphRAG 显著提升问答能力
在包含100 万 token 的数据集中,GraphRAG 展示了相较于 Baseline RAG 显著的改进,尤其在:
- 答案的全面性(completeness)
- 答案的多样性(diversity)
GraphRAG 能够提供更深入的综合分析,而不是仅仅依赖简单的相似性匹配进行片段检索。
GraphRAG 系统架构:Index & Query 模块
GraphRAG 主要由两个核心模块组成:
1. Index 模块:数据索引与存储
- 读取 输入文件(可以是本地存储或云端存储)。
- 使用 大模型(LLM) 进行 文本切分(chunking)、嵌入生成(embedding)和实体提取(entity extraction)。
- 将最终处理的结果存储为 Parquet 格式,以供后续查询使用。
2. Query 模块:智能问答
- 基于用户输入的问题,在本地索引文件中进行检索。
- 结合知识图谱,对查询结果进行分段处理,将相关信息提供给 LLM 进行答案生成。
- 生成最终的高质量响应,确保答案的全面性和多样性。
GraphRAG 的意义与应用场景
GraphRAG 解决了 RAG 在长文本理解和复杂信息整合上的痛点,使其适用于以下场景:
- 企业内部知识管理(例如:法律文档、技术文档)
- 医学和科研分析(例如:医学病例研究、科研论文整合)
- 金融与商业数据分析(例如:市场分析、投资研究)
微软的研究表明,GraphRAG 超越了传统 RAG 的性能,在私有数据集的问答任务上实现了更高的准确性和信息整合能力。
项目实践
1.安装 GraphRAG
pip install graphrag
2.运行 Indexer
- 创建存储路径并导入相关测试文件
mkdir -p ./microsofttest/input
touch ./microsofttest/input/wangzengqi_test.txt //wangzengqi_test.txt的编码方式必须时utf8
- 初始化项目配置
python -m graphrag.index --init --root ./microsofttest
- 修改配置文件,主要修改llm api和embedding api
vi ./microsofttest/setting.yaml# yaml
llm:api_key: "xxx"type: openai_chat # or azure_openai_chatmodel: deepseek-chatmodel_supports_json: False # recommended if this is available for your model.api_base: https://api.deepseek.com/v1
embeddings:llm:api_key: "xxx"type: openai_embedding # or azure_openai_embeddingmodel: embedding-2api_base: https://open.bigmodel.cn/api/paas/v4
- 运行
python -m graphrag.index --root ./microsofttest⠋ GraphRAG Indexer
├── Loading Input (InputFileType.text) - 1 files loaded (0 filtered) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 0:00:00
├── create_base_text_units
├── create_base_extracted_entities
├── create_summarized_entities
├── create_base_entity_graph
├── create_final_entities
├── create_final_nodes
├── create_final_communities
├── join_text_units_to_entity_ids
├── create_final_relationships
├── join_text_units_to_relationship_ids
├── create_final_community_reports
├── create_final_text_units
├── create_base_documents
└── create_final_documentsAll workflows completed successfully.
- 可以看到创建了对应的artifacts文件
└── microsofttest├── cache├── input│ └── wangzengqi_test.txt├── output│ └── 20240812-150155│ ├── artifacts│ │ ├── create_base_documents.parquet│ │ ├── create_base_entity_graph.parquet│ │ ├── create_base_extracted_entities.parquet│ │ ├── create_base_text_units.parquet│ │ ├── create_final_communities.parquet│ │ ├── create_final_community_reports.parquet│ │ ├── create_final_documents.parquet│ │ ├── create_final_entities.parquet│ │ ├── create_final_nodes.parquet│ │ ├── create_final_relationships.parquet│ │ ├── create_final_text_units.parquet│ │ ├── create_summarized_entities.parquet│ │ ├── join_text_units_to_entity_ids.parquet│ │ ├── join_text_units_to_relationship_ids.parquet│ │ └── stats.json│ └── reports│ ├── indexing-engine.log│ └── logs.json├── prompts│ ├── claim_extraction.txt│ ├── community_report.txt│ ├── entity_extraction.txt│ └── summarize_descriptions.txt└── settings.yaml
- 查询
➜ graphrag python3 -m graphrag.query --root ./microsofttest --method global "介绍汪曾祺的短篇小说《黄油烙饼》"
2024-08-12 17:01:41.769441: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.INFO: Reading settings from microsofttest/settings.yaml
/usr/local/lib/python3.12/site-packages/graphrag/query/indexer_adapters.py:71: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copyentity_df["community"] = entity_df["community"].fillna(-1)
/usr/local/lib/python3.12/site-packages/graphrag/query/indexer_adapters.py:72: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copyentity_df["community"] = entity_df["community"].astype(int)
creating llm client with {'api_key': 'REDACTED,len=35', 'type': "openai_chat", 'model': 'deepseek-chat', 'max_tokens': 4000, 'temperature': 0.0, 'top_p': 1.0, 'n': 1, 'request_timeout': 180.0, 'api_base': 'https://api.deepseek.com/v1', 'api_version': None, 'organization': None, 'proxy': None, 'cognitive_services_endpoint': None, 'deployment_name': None, 'model_supports_json': False, 'tokens_per_minute': 0, 'requests_per_minute': 0, 'max_retries': 10, 'max_retry_wait': 10.0, 'sleep_on_rate_limit_recommendation': True, 'concurrent_requests': 25}SUCCESS: Global Search Response: 《黄油烙饼》是汪曾祺创作的一篇短篇小说,收录于他的短篇小说集《晚饭花集》中。这篇小说通过讲述主人公萧胜与奶奶的生活变迁,展现了家庭情感和社会变迁的深刻主题。小说中,萧胜与奶奶的亲密关系、对食物质量的担忧、与父亲的旅行、在马缨花研究站的新生活以及对蘑菇圈的了解等情节,共同构成了小说的主要内容。小说不仅关注物质生活,也深入探讨了家庭成员之间的情感纽带和相互支持。萧胜的祖母(奶奶)是社区的核心人物,负责照顾萧胜的日常生活,包括从食堂打饭。父亲每年回家看望奶奶,并带回食物,如土豆、口蘑和黄油。奶奶去世后,木业生产合作社为她制作了棺材。社区中的关系主要围绕家庭成员的日常生活和情感联系。[Data: Reports (90)]《黄油烙饼》通过描述萧胜家庭的生活细节,展现了家庭成员之间的深厚情感和日常生活的艰辛。小说中,黄油作为一种牛奶炼制的食品,在社区中具有象征意义。父亲带回黄油给奶奶,但奶奶没有吃。这可能反映了家庭成员之间的情感联系和物质交换,以及奶奶对家庭成员的关心和照顾。[Data: Reports (90)]汪曾祺的文学作品,包括《黄油烙饼》,通常以其对人物心理的细腻刻画和对生活细节的精准捕捉而著称。他的作品不仅展现了人物的内心世界,也反映了社会背景和时代特征,使读者能够通过小说的窗口窥见那个时代的风貌。《黄油烙饼》作为汪曾祺的代表作之一,不仅在中国文学界产生了广泛影响,也被翻译成多种语言在国际上传播,增进了世界对中国现代文学的了解和认识。
➜ graphrag
相关文章:
微软 GraphRAG 项目学习总结
微软2024年4月份发布了一篇《From Local to Global: A GraphRAG Approach to Query-Focused Summarization》(GraphRAG:从局部到全局的查询式摘要方法)论文,提出了一种名为GraphRAG的检索增强生成(RAG)方法…...
DeepSeek结合MCP Server与Cursor,实现服务器资源的自动化管理
MCP Server是最近AI圈子中又一个新的热门话题。很多用户都通过结合大语言模型、MCP Server,实现了一些工具流的自动化,例如,你只需要给出文字指令,就可以让Blender自动化完成建模的工作。你有没有想过,利用MCP来让AI A…...
DFX架构详解:构建面向全生命周期的卓越设计体系
引言 在当今高度竞争的市场环境中,产品开发已不再是单纯的功能实现,而是需要从设计源头考虑制造效率、用户需求、成本控制、环境兼容性等多维目标。DFX(Design for X)架构作为一种系统化的设计方法论,正成为企业实现产…...
如何在 Vue 项目中使用 Vite 和 Cordova 动态加载 Layui 和 DTree
随着前端开发工具的不断进步,Vue 项目的构建工具也从 Webpack 升级到了 Vite。Vite 的快速构建和热更新功能使得开发体验大大提升。 本文将介绍如何在迁移至 Vite 后,动态加载 Layui 和 DTree 库,并兼容 Cordova 应用中的资源路径。 1. Vite …...
如何在 vue 渲染百万行数据,vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染
vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染;如何在 vue 渲染百万行数据;当在开发项目时,遇到需要流畅支持百万级数据的表格时, vxe-table 就可以非常合适了,不仅支持强大的功能,虚…...
el-select+el-tree实现下拉树形选择
主要实现el-select下使用树结构,支持筛选功能 封装的组件 composeTree.vue <template><div class"vl-tree"><el-select class"treeScroll" popper-class"treeScrollSep"v-model"selectedList"placeholder"请选择…...
JavaScript函数知识点总结
JavaScript函数是一种可重复使用的代码块,它接受输入值(参数)、执行特定任务,并返回输出值。 1. 声明函数 function greet(name) {return "Hello, " + name + "!"; }console.log(greet("Alice")); // 输出: Hello, Alice! console.log( t…...
SQL INSERT INTO 语句详解
SQL INSERT INTO 语句详解 引言 SQL(Structured Query Language)是数据库管理系统的标准语言,用于处理数据库中的数据。在SQL中,INSERT INTO 语句是用于向数据库表中插入新记录的重要命令。本文将详细介绍 INSERT INTO 语句的用…...
为什么可视化大屏越来越多应用3D元素呢?
现在可视化大屏应用3D元素越来越普及了,背后的原因是什么呢?3D元素相较于2D元素有什么优势?应用3D元素涉及到哪些技术呢?大象数据工场通过本文与大家分享一下。 一、3D元素普及的原因是什么? 可视化大屏应用中使用3D…...
Github Webhook 以及主动式
Github配置 GitHub 默认支持两种 Content-Type: application/json application/x-www-form-urlencoded 特别要注意 Content-Type 我们选择: application/json Flask代码 import os import shutil import subprocess from flask import Flask, request, jsonifyapp = Fla…...
MySQL的基础语法1(增删改查、DDL、DML、DQL和DCL)
目录 一、基本介绍 二、SQL通用语法 三、SQL分类(DDL、DML、DQL、DCL) 1.DDL 1.1数据库操作 1.2表操作 1.2.1表操作-查询创建 1.2.2表操作-数据类型 1)数值类型 2)字符串类型 3)日期时间类型编辑 4)表操作-案例 1.2.3…...
基于 SpringBoot 的火车订票管理系统
收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...
c#的反射和特性
在 C# 中,反射(Reflection)和特性(Attributes)是两个强大的功能,它们在运行时提供元编程能力,广泛用于框架开发、对象映射和动态行为扩展。以下是对它们的详细介绍,包括定义、用法、…...
MaxEnt物种分布建模全流程;R+ArcGIS+MaxEnt模型物种分布模拟、参数优化方法、结果分析制图与论文写作
融合R语言的MaxEnt模型具有以下具体优势: 数据处理高效便捷 📊强大的数据预处理功能:R语言提供了丰富的数据处理工具,能够轻松完成数据清洗、筛选、转换等操作,为MaxEnt模型提供高质量的输入数据。 🌐自动…...
【AI插件开发】Notepad++插件开发实践:从基础交互到ScintillaCall集成
一、背景与目标 在文本编辑器领域,Notepad凭借其轻量级特性和强大的插件生态,成为开发者群体中的热门选择。作为基于Scintilla组件构建的编辑器(Scintilla是开源的代码编辑控件,被Notepad、Geany等知名工具广泛采用)&…...
TCP/IP协议的应用层与传输层
TCP/IP协议簇是互联网的核心通信框架,定义了数据如何在网络中封装、寻址、传输和路由(确定数据包从源主机到目标主机的传输路径的过程)。 应用层 直接面向用户和应用,负责实现网络服务的具体功能(如网页浏览、文件传输…...
CentOS与Ubuntu命令对比指南:从软件包管理到系统配置
CentOS与Ubuntu命令对比指南 作为两大主流Linux发行版,**CentOS(基于RHEL)和Ubuntu(基于Debian)**在日常运维中常因命令差异引发混淆。本文通过关键场景对比,助您快速掌握两者的核心操作区别。 一、软件包管理:yum/dnf vs apt 操作CentOSUbuntu更新软件源yum check-upd…...
python-leetcode 61.N皇后
题目: 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击 给你一个整数 n ,返回所有不同的 n 皇后问题 的解…...
Scala 正则表达式
Scala 正则表达式 引言 正则表达式(Regular Expression)是一种强大的文本处理工具,在Scala编程语言中也有着广泛的应用。Scala正则表达式可以帮助开发者高效地进行字符串匹配、搜索、替换和解析等操作。本文将深入探讨Scala正则表达式的相关知识,包括语法、常用模式、匹配…...
【分布式】分布式限流方案解析
文章目录 固定窗口限流方案实现方式优点缺点 滑动窗口限流方案实现方式优点缺点 令牌桶限流方案实现方式优点缺点 漏斗限流方案实现方式优点缺点 在分布式系统蓬勃发展的当下,系统面临的流量挑战日益复杂。为确保系统在高并发场景下…...
Docker 拉取镜像部分成功部分失败?
🐋 Docker 拉取镜像部分成功部分失败?一次代理配置踩坑记录! 最近在部署 Zitadel 身份认证平台的过程中,遇到一个看似“随机”的问题:Docker 有些镜像可以拉取,有些却一直超时失败。最终通过配置 Docker 守…...
Spring AI Alibaba 对话记忆使用
一、对话记忆 (ChatMemory)简介 1、对话记忆介绍 ”大模型的对话记忆”这一概念,根植于人工智能与自然语言处理领域,特别是针对具有深度学习能力的大型语言模型而言,它指的是模型在与用户进行交互式对话过程中,能够追踪、理解并利…...
Mysql从入门到精通day5————子查询精讲
本文主要讲述子查询的几种方法,读者注意体会它们的不同场合的适用情况及功能,本篇文章也融入了小编实践过程遇到的坑,希望读者不要再踩坑 一.带IN关键字的子查询 in关键字可以检测结果集中是否存在某个特定的值,检测成功则执行外…...
QScreen 捕获屏幕(截图)
一、QScreen核心能力解析 硬件信息获取 // 获取主屏幕对象 QScreen* primaryScreen QGuiApplication::primaryScreen();// 输出屏幕参数 qDebug() << "分辨率:" << primaryScreen->size(); qDebug() << "物理尺寸:" << primar…...
Skyeye 云智能制造办公系统 VUE 版本 v3.15.15 发布
Skyeye 云智能制造,采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...
【最新】探索CFD的未来:从OpenFOAM到深度学习,全面解析计算流体力学的顶级资源与前沿技术
计算流体力学(CFD)作为现代工程与科学研究的核心工具,正以前所未有的速度迈向智能化与多物理场耦合的新时代。本文全面梳理了在线学习CFD的顶级资源,涵盖了从传统数值模拟到深度学习驱动的物理信息模型的广泛领域,旨在为研究者、工程师和学生提供一站式参考指南。内容分为…...
【QT5 网络编程示例】TCP 通信
文章目录 TCP 通信 TCP 通信 QT主要通过QTcpSocket 和 QTcpServer两个类实现服务器和客户端的TCP 通信。 QTcpSocket 是 Qt 提供的套接字类,看用于建立、管理和操作 TCP 连接。 常用方法 connectToHost(host, port):连接到指定服务器。disconnectFro…...
QT五 文件系统,QFile,QfileInfo
总览 QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。QFlie:访问本地文件或者嵌入资源;QTemporaryFile&a…...
OpenMCU(五):STM32F103时钟树初始化分析
概述 本文主要描述了STM32F103初始化过程系统时钟的初始化,主要描述了系统时钟的初始化,AHB总线时钟,APB总线时钟等的初始化。 硬件板卡3d图 时钟树 STM32F103的时钟树,如下所示: 时钟源选择 从STM32F103的时钟树框图,我们可以…...
docker save如何迁移镜像更节省空间?
文章目录 方法一:使用docker save命令方法二:直接保存多个镜像到一个tar文件哪个方法更节省磁盘空间?空间效率对比实际测试示例其他优势结论 如何用脚本迁移加载镜像 迁移镜像时候,往往会碰到基础镜像相同的很多镜像需要迁移&…...
在 UniApp 编译小程序时出现 `:class` 不支持 `getStatusClass(device.deviceStatus)` 语法的报错
在 UniApp 编译小程序时出现 :class 不支持 getStatusClass(device.deviceStatus) 语法的报错,这是因为在非 H5 平台,v-bind:class(:class 是其简写形式)里直接使用方法调用这种动态计算类名的方式可能不被支持。下面为你提供几种…...
Python之贪心算法
Python实现贪心算法(Greedy Algorithm) 概念 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的算法策略。 基本特点 局部最优选择:每一步都做出当前看起来最佳的选择不可回退:一旦做出选择…...
Javaweb后端AOP记录操作日志
日志记录表 提示词 切入点表达式,注解的方法 查询不用加上日志记录功能...
obsidian ios git同步
首先感谢几位博主的文章,我现在时间久了,未保存原文地址。以下是我自己的执行步骤总结。 应用商店安装 iSH 打开iSH,执行 apk update 安装下面软件,(我觉得只安装第一个应该就行,下次测试)。 …...
我的机器学习学习之路
学习python的初衷 • hi,今天给朋友们分享一下我是怎么从0基础开始学习机器学习的。 • 我是2023年9月开始下定决心要学python的,目的有两个,一是为了提升自己的技能和价值,二是将所学的知识应用到工作中去,提升工作…...
Python的ASGI Web 服务器之uvicorn
文章目录 什么是uvicornUvicorn 和 uWSGI 对比区别安装 Uvicorn使用示例 什么是uvicorn 官网https://www.uvicorn.org/ Uvicorn 是一个用于 Python 的 ASGI Web 服务器实现。 Until recently Python has lacked a minimal low-level server/application interface for async…...
Spring Boot分布式项目实战:装饰模式的正确打开方式
我在最近参与的物流中台项目中,面对复杂的分布式服务调用场景时,发现装饰模式(Decorator Pattern)竟成为提升系统扩展性的秘密武器。当某个基础服务接口需要同时支持缓存、日志、限流等多种能力时,传统的继承方式已难以…...
基于WebSocket的金融数据实时推送系统架构设计对接多国金融数据API
基于WebSocket的金融数据实时推送系统架构设计 ——高可用、低延迟与全球化数据支持的技术实践 一、实时数据推送的技术演进 在证券交易、外汇监控、量化策略等场景中,毫秒级延迟可能带来完全不同的业务结果。早期基于HTTP轮询的方案存在三大核心问题:…...
Java虚拟机JVM知识点(已完结)
JVM内存模型 介绍下内存模型 根据JDK8的规范,我们的JVM内存模型可以拆分为:程序计数器、Java虚拟机栈、堆、元空间、本地方法栈,还有一部分叫直接内存,属于操作系统的本地内存,也是可以直接操作的。 详细解释一下 程…...
ffuf:一款高效灵活的Web模糊测试利器
在网络安全领域,模糊测试(Fuzzing)是一种强大的技术,用于发现系统中的隐藏功能、潜在漏洞或未公开资源。而在Web渗透测试中,ffuf(Fast Fuzzing Tool)凭借其高效性、灵活性和强大的自定义能力&am…...
深入理解二叉树、B树与B+树:原理、应用与实现
文章目录 引言一、二叉树:基础而强大的结构基本概念特性分析Java实现应用场景 二、B树:适合外存的多路平衡树基本概念关键特性查询流程示例Java简化实现典型应用 三、B树:数据库索引的首选核心改进优势分析范围查询示例Java简化实现实际应用 …...
NLP高频面试题(二十八)——Reward model是如何训练的,怎么训练一个比较好的Reward model
在强化学习领域,**奖励模型(Reward Model)是关键组件之一,旨在通过预测特定行为或输出的奖励值,指导智能体的学习方向。特别是在基于人类反馈的强化学习(RLHF)**中,奖励模型通过整合…...
基础算法篇(3)(蓝桥杯常考点)-图论
前言 这期是蓝桥杯常考点的最后一章了,其中的dijkstra算法更是蓝桥杯中的高频考点 图的基本相关概念 有向图和无向图 自环和重边 稠密图和稀疏图 对于不带权的图,一条路径的路径长度是指该路径上各边权值的总和 对于带权的图,一条路径长度时…...
【力扣hot100题】(017)矩阵置零
还是挺简单的,使用哈希表记录需要置换的行列即可,这样就可以避免重复节省时间。 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {unordered_set<int> row;unordered_set<int> line;for(int i0;i&l…...
量子退火与机器学习(2):少量实验即可找到新材料,黑盒优化➕量子退火
使用量子退火和因子分解机设计新材料 这篇文章是东京大学的一位博士生的毕业论文中的主要贡献。 结合了黑盒优化和量子退火,是融合的非常好的一篇文章,在此分享给大家。 https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.0133…...
Ubuntu 系统上完全卸载 CasaOS
以下是在 Ubuntu 系统上完全卸载 CasaOS 的详细步骤 一.卸载验证 二.卸载步骤 1.停止并禁用 CasaOS 服务 # 停止 CasaOS 核心服务 sudo systemctl stop casaos.service# 禁用开机自启 sudo systemctl disable casaos.service# 确认服务状态(应显示 inactive&…...
Flutter敏感词过滤实战:基于AC自动机的高效解决方案
Flutter敏感词过滤实战:基于AC自动机的高效解决方案 在社交、直播、论坛等UGC场景中,敏感词过滤是保障平台安全的关键防线。本文将深入解析基于AC自动机的Flutter敏感词过滤实现方案,通过原理剖析实战代码性能对比,带你打造毫秒级…...
Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现
目录 运行展示引言系统整体架构后端技术实现后端代码文件前端代码文件1. 项目启动与配置2. 实体类设计3. 控制器设计4. 异常处理 前端技术实现1. 页面布局与样式2. 交互逻辑 系统功能亮点1. 分页功能2. 搜索与筛选功能3. 图书操作功能 总结 运行展示 引言 本文将详细剖析一个基…...
高精度加减乘除 + R 格式
蓝桥账户中心 高精度核心思路:使用vector存储每一位数,倒序存储,即数组从低到高存储的是个位数。 注意减法、乘法、除法都需要去掉前导零 加法: vector<int> add(vector<int> &A, vector<int> &B) …...
鸿蒙编译构建-多目标产物
此文章内容兼容API12,使用harmony next应用开发 前置概念介绍 1,配置文件介绍: build-profile.json5:modules字段,用于记录工程下的模块信息,主要包含模块名称、模块的源码路径以及模块的 target 信息oh-…...