RAG(03)——高质量文本分块

探索RAG数据分块策略:工具对比与实践指南(含code) 本文探讨了检索增强生成(RAG)应用中的数据分块策略,重点介绍了LangChain、LlamaIndex和Preprocess三种主流工具的功能与特点。数据分块在RAG中至关重要,合理分块能提升检索效率和生成内容的相关性。LlamaIndex提供固定块大小、语义分块和主题节点解析等策略;LangChain则包括字符文本分割、递归字符文本分割和语义分块;Preprocess则擅长处理复杂文档,提供高质量分块。文章还分析了不同工具在PDF、PPT和Word文档处理中的表现,并建议根据数据类型、应用场景和资源限制 阅读详情

为什么你的RAG效果不佳?

核心痛点

  • LLM强大,Prompt精心调校,但答案仍不准确
  • 检索算法和Embedding已优化,却忽略分块(Chunking)

关键结论

  • “不恰当的分块=给模型喂’坏数据”
  • 分块质量决定RAG性能的下限

分块的本质

分块的必要性

  • LM上下文长度限制
  • -向量检索对语义完整性的依赖

理想分块标准

  • 平衡信息密度与上下文完整性
  • 用chunk_size控制大小,chunk_overlap保连续

关键参数

  • chunk_size(每一个分块的长度):256/512/1024(token或字符)
  • chunk_overlap(相邻块之间重复部分(重叠是为了防止语义断裂)): 10%-20% of chunk_size

分块的策略

基础分块

固定长度
核心思想按固定字符数切割文本,不考虑语义结构
优点实现简单
缺点易破坏句子完整性
不推荐语义割裂风险高
递归字符(推荐)

保段落/句完整、通用性强、绝大多数场景

核心思想按优先级分隔符递归切分(/n/n→4/n→ ,尽量保留段落、句子完整性
适用场景绝大多数通用文本的首选策略
首选方案平衡效果与效率
按句切分

语义完整、中文需特殊处理、法律、新闻

核心思想以完整句子为单位进行组合,确保语义完整
适用场景法律文书、新闻报道、对句子完整
首选方案高语义要求领域
结构感知

利用文档“骨架”进行分块。

Markdown/HTML:按照标题层级切分,自动保留元数据。
对话记录:按发言人/轮次切分,保持对话逻辑。

优势:上下文更完整,支持后续元数据过滤与处理。

语义/主题

语义分块(Semantic Chunking)

使用Embedding模型把每一个句子转化成向量,再去计算相邻的句子之间的向量相似度,如果向量相似度超过一定的阈值,那么就合并成一块,然后再把下一个句子和合并后的块再做一个比较,如果相似度下降不满足阈值了,那么就进行切分。

原理:计算句向量相似度,在语义突变处切分
工具:langchain_experimental.SemanticChunker
调参关键:breakpoint_threshold_amount(70起调)

主题分块(LDA)

适合长文档,但不稳定,需大量调参

高级策略

小-大分块

小的文本块利于检索,但是上下文少,因此生成答案时信息不做
大的文本块信息很丰富,但是噪声很大,命中率会下降

结合小块检索的高精度和大块生成的高上下文优势。检索时使用细粒度的小块确保相关性,生成回答时则将其对应的大块父文档作为上下文,提供更丰富的信息

核心工具:ParentDocumentRetriever

代理式分块

赋予LLM判断能力,使其能像人类专家一样,根据问题动态识别文档中的"知识单元"。这种方法能产生极高质量的分块,但抖算成本也最高。
适用场景:高价值小规模知识库

混合分块——复杂文档的最佳实践

策略死的,人是活的,实际分块可以灵活使用策略。

策略:先结构粗切→再语义/递归细切
结合文档的天然结构(如章节、段落)进行初步划分,再对大块内容进行语义或递归的精细切割。

适用场景:技术白皮书、年报、多格式混合文档
特别适合处理包含多种元素(文本、图表、代码)或逻辑层次复夏杂的长文档

如何选择最佳策略?

  • 看数据类型:结构化文档(如PDF、Markdown)?对话记录?还是无格式纯文本?
  • 看业务需求:追求高精度的检索效果?还是需要支持长上下文的生成任务?
  • 看资源成本:能否承受LLM语义分块带来的计算开销和延迟?

策略对比速查表

策略复杂度适用场景推荐度
固定长度★★☆☆☆简单文本★★☆☆☆
送归字符★★★☆☆通用首选★★★★★
结构感知★★★★☆技术文档★★★★☆
语义分块★★★★★多话题文本★★★☆☆
小-大分块★★★★☆高要求QA★★★★☆
代理分块★★★★★实验性项目★★☆☆☆

没有银弹:必须根据数据迭代优化。
始于简单,终于复合:从递归分块建立基线。
分块即建模:你怎么切,就怎么理解知识。

实用建议清单

  1. 优先用RecursiveCharacterTextSplitter做基线
  2. 中文分句:用正则或HanLP,别用 nltk.punkt
  3. chunk_overlap 设为10%-20%
  4. 长文档→混合策略
  5. 语义分块从 percentile=70开始调
  6. 小-大分块→高要求系统首选
  7. 代理分块→慎用于生产!

掌握分块,就是掌握RAG系统的命脉。

RAG 常见分块策略全解析:一文了解7种分块方法【附代码】 然而,生成模型(如大型语言模型,LLM)的上下文窗口是有限的,这意味着它能够处理的输入文本长度是有限制的。如果检索到的文本块过大,超出了这个限制,就无法完整地输入到生成模型中,从而可能导致生成的响应不准确或不完整。通过将文档分块,可以确保每个块的大小都在生成模型的上下文窗口范围内,从而使模型能够有效地处理和生成高质量的响应。例如,在一个包含多个主题的长文档中,分块可以将不同主题的内容分割开来,使得检索系统能够针对特定主题进行更精确的检索。在检索增强生成(RAG)系统中,分块策略是决定系统性能的基石。 阅读详情

相关推荐

RAG系统中的五种文档分块策略:原理详解-全面对比-最佳实践(固定大小分块、语义分块、递归分块、文档结构分块、LLM大模型分块)

RAG系统中的文档分块策略直接影响检索效果和生成质量。本文详解五种分块方法:1)固定大小分块:简单高效但可能截断语义;2)语义分块:基于句子相似度保持语义连贯;3)递归分块:多层级处理复杂文档;4)文档结构分块:利用标题段落等结构化信息;5)LLM分块:利用大模型智能划分。每种策略都配有实现代码和优缺点分析,帮助开发者在实际项目中根据文档特性和应用场景选择合适的分块方法,优化RAG系统性能。

1628

RAG文本分块

不论是向量化模型还是大语言模型,都存在输入长度的限制。对于超过限制的文本,模型会进行截断,造成语义缺失。分块可以确保每个文本片段都在模型的处理范围内,避免重要信息的丢失。

ngadminq的博客 3011

【速通RAG实战:索引】5.RAG分块策略与Embedding技术

分块策略:根据文档类型选择策略(固定分块为基线,语义分块为最优)。嵌入模型:参考 MTEB 榜单,结合业务场景测试模型性能。代码仓库Gitee项目。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 2231

告别粗暴切分:入门 RAG 文本分块,从策略到优化

检索增强生成(RAG)的性能在很大程度上取决于其检索模块的质量,而文本分块(Chunking)是决定检索质量的关键前置步骤。粗暴或不恰当的分块会导致信息丢失、上下文割裂、检索效率低下等问题,严重影响 RAG 系统的最终表现。本文系统性地探讨了文本分块的核心目标与挑战,从克服上下文窗口限制、提高检索精度、维护上下文完整性等角度阐述了其重要性。接着,详细介绍了固定大小、基于句子、递归字符、基于文档结构等基础分块策略,并给出了结合 Markdown 文档结构的混合分块策略的 Python 实现。

m0_59235245的博客 2106

power bi 演唱会-佐罗

我是业务分析人员,注重使用性,因此,课程不到 30% 的内容就可以解决目前为止我碰到的所有业务问题,剩下的 70% 内容是帮助我提升,优化,升华,精益求精用的,比如第三方工具,比如代码运行速度优化,比如查询逻辑优化等等。系统性上来说,结构明晰,安排上非常有条理,层层递进;《BI 真经》,中有真经二字,略显夸大,而当我第一次证明了这点的时候,我也非常惊讶,这就是我做以下所有事情的一切动力。《BI 真经》综合考量思想性,系统性,本质性,创新性,通用性,技巧性,启发性,对比其他课程有压倒性的显著优势。

v_1090213742的博客 911

汽车ECU诊断入门:手把手教你用UDS协议(ISO14229)读取和清除故障码

本文详细介绍了如何使用UDS协议(ISO14229)进行汽车ECU诊断,包括故障码读取与清除的完整流程。从诊断环境搭建、UDS协议基础到实战案例分析,手把手教你掌握0x19诊断服务、安全访问机制等核心技能,适用于汽车电子工程师和诊断开发人员。

weixin_33701251的博客 457

RAG系统文本分块优化指南:9种实用策略让检索精度翻倍

本文将深入分析九种主要的文本分块策略及其具体实现方法。下图概括了我们将要讨论的内容。

deephub 1926

[ESP32]:基于esp-modbus实现serial主机

[ESP32]:基于esp-modbus实现serial主机

LINKKEEE的博客 2570

揭秘大模型提升秘诀:RAG系统中的文本分块策略

LangChain 还预定义了其他编程语言(如 Go、C++、Java)等的分割符列表,方便用户快速定义新的文本切块类。如果需要处理未提供的文本格式,可以参照已有的类实现。自定义示例:创建一个用于切分 Java 代码的文本切块类。"\n\n", # 空行"\n", # 换行", # 语句结束" ", # 空格"" # 无分隔符text = "..." # 待处理的 Java 代码print(doc)通过自定义分割符列表和参数设置,可以灵活地适应不同格式文本的切分需求。

FrenzyTechAI的博客 3155

深入解析i2cdetect:从基础命令到高级读写操作

本文深入解析Linux下i2cdetect工具,从基础安装、总线扫描到高级读写操作。作为i2c-tools的核心组件,i2cdetect是硬件调试的得力侦探,能快速识别I2C总线上的设备地址。文章还涵盖了i2cdump、i2cset、i2cget等进阶工具,并介绍了如何在C程序中调用读写接口进行嵌入式开发,是掌握I2C通信调试的实用指南。

weixin_29189987的博客 372

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1636

别再为 RAG 文本分块发愁!Chonkie 让复杂操作轻松搞定

在自然语言处理(NLP)中,RAG(检索增强生成)技术可谓大放异彩。它能让模型借助大量文本数据,生成更精准、更丰富的内容。不过,在 RAG 的实际运用中,有个关键环节却常常让开发者们头疼不已,那就是文本分块(Chunking)。今天,就给大家介绍一款堪称 “救星” 的神器 ——Chonkie 库,让 RAG 中的文本分块难题迎刃而解!

m0_59164304的博客 1482

【一 扣子客户案例合集】【 1.1 抖音电商:通过扣子智能体重塑电商服务新体验】

**摘要:**抖音电商借助扣子(Coze)智能体平台重塑客服体验,通过无代码开发、多模态交互和跨平台发布等功能,解决了传统客服高峰期压力大、成本高及响应机械等痛点。智能体采用直接面客与人工监管结合模式,实现高效精准服务,并通过解构流程、模块化设计优化系统架构。其技术优势包括零配置学习、意图识别、情绪感知等,实际应用中显著提升客服效率300%以上,改善用户体验。未来将进一步拓展至商品推荐、直播互动等场景,推动电商服务智能化升级。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1571

RAG分块策略全解析+ LlamaIndex代码演示

本文深入解析了RAG(检索增强生成)技术中的五种文档分块策略: 固定大小分块:简单高效但可能破坏语义完整性 语义分块:基于内容相关性划分,保持语义连贯性 递归分块:分层处理文档结构,兼顾灵活性与语义保持 基于文档结构分块:利用文档固有逻辑结构划分 LLM分块:借助大模型智能判断最佳分割点 文章通过LlamaIndex代码演示了各策略的实现方法,并对比分析了RAGFlow/Dify等框架的分块实践。作者建议企业根据具体需求选择分块策略:简单项目可选用集成框架,需深度定制则建议基于LlamaIndex自建方案,

2501_92069919的博客 1079

华为OD机考双机位C卷 - 完美走位 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 完美走位(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 1126

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1947

如何评估 RAG 的分块Chunking策略

本文探讨了如何为RAG(检索增强生成模型)项目选择最佳分块策略。作者指出,尽管许多人认为更好的模型或大上下文窗口可以取代分块策略,但分块技术依然重要且不可或缺。为了挑选合适的分块策略,作者建议先对文档进行抽样,然后创建测试问题集,接着使用RAGAS框架进行评估。通过可视化评估结果,包括性能排名、分块分布与性能、指标雷达图以及处理时间分解,可以更直观地比较不同分块策略的优劣,从而为具体应用选择最适合的策略。

AI人工智能的学习之路 1631

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RAG基础:基于LangChain 的文本分割实战+文本分块

文本分割是RAG流程中的关键步骤,主要解决长文档处理、检索质量和语义完整性问题。LangChain框架提供了专业化的文本分割工具,支持多种文档类型,通过chunk_size、chunk_overlap等参数控制分割粒度。分割后的文本块保留元数据,便于后续向量化和检索。合理分割能提升检索精度,避免信息丢失或冗余,是构建高效RAG系统的基础。

A1063348628的博客 804

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RAG基础分块策略分析

知识库设计是RAG系统的核心基础,直接影响检索精度和生成质量。文章分析了五种分块策略:固定大小分块简单高效但语义割裂;结构化分块保持语义连贯但依赖文档结构;递归分块通过多层切割平衡语义与长度;语义相似度分块基于内容关联聚类,效果最优但实现复杂;基于大模型的分块能识别隐性语义边界但成本较高。不同策略各有优劣,需根据文本特性(结构化程度、主题分布)和业务需求(精度要求、资源限制)灵活选择。优质分块应同时满足语义完整性和长度可控性,为RAG系统提供高质量的知识单元。

Xxxx_jc_zust的博客 985

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【必学收藏】8种大模型RAG系统文本分块策略,小白也能轻松掌握!

文章详细介绍了8种RAG系统中的高级文本分块策略,包括滑动窗口、自适应、基于实体、混合、任务感知、HTML/XML标签、代码AST拆分和正则表达式分块。这些策略针对不同场景和需求,如保留跨边界上下文、处理结构化文档、构建知识库等。文章强调好的分块策略需综合考虑内容类型、任务类型和文档结构,选择或组合合适方法,以提升RAG系统效果。掌握这些策略并结合具体场景实验,能显著提升系统性能。

2401_85375186的博客 1104

LlamaIndex实现RAG分块的艺术:语义分块增强,从“切菜”到“切语义”

在RAG中,我们首先需要将文档解析成结构化的数据,然后将其拆分成更小的块,以便提取详细的特征并进行嵌入表示。传统的分块方法通常是基于规则的,比如固定大小的分块或相邻分块的重叠。然而,这些方法在实际应用中可能会遇到一些问题,比如检索上下文不完整或分块过大导致噪声过多。语义分块的目标是确保每个分块尽可能包含语义上独立的信息。这样一来,RAG模型在检索和生成时就能更加精准地找到相关信息,避免“捡了芝麻丢了西瓜”的情况。

AI人工智能的学习之路 2128

RAG父子分块策略解析

本文介绍了检索增强生成(RAG)系统中父子分块策略的关键作用。传统分块方法面临两难:小分块检索精准但缺乏上下文,大分块上下文完整但检索困难。父子分块通过建立两个层级化解这一矛盾:子块作为精干的侦察兵,负责精准检索;父块作为强大的后勤总部,提供完整上下文。文章以清华大学学生手册为例,解析了父子分块的工作流程和优势,并通过产品文档的实例演示了该系统如何准确回答用户提问。该策略有效平衡了检索精度和生成质量,是RAG系统的重要优化方案。

weixin_72563696的博客 1046
上一篇: RAG(02)——RAG的整体流程
Yuwen_forJava
博客等级 码龄9年 28粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值