Hello folks,我是 Luga,今天我们来聊一下人工智能应用场景 - 构建高效、灵活的计算架构的 RAG 架构的切块策略—
Fixed-Size Chunking(固定切块)。
众所周知,
在构建 RAG(Retrieval-Augmented Generation,检索增强生成)系统的过程中,文档切块策略往往决定了模型检索质量的上限。切得好,信息命中更精准,生成回答更有上下文逻辑;切得差,模型则容易“答非所问”。
在众多策略中,Fixed-Size Chunking(固定切块)可谓最简单直接,却也是最常被忽视的一种。看似粗暴,却在实际工程中表现稳定、适配广泛,尤其适合对实时响应和成本敏感的场景。
那么,固定切块到底该如何设置?有哪些常见误区?它真的“简单有效”吗?这篇文章将带你深入解析固定切块策略的核心逻辑、代码实现与适用场景,让你在构建 RAG 应用时少踩坑、多提效。
—01 —
如何理解 Fixed-Size Chunking ?
在检索增强生成(RAG)系统中,文档分块(Chunking)是影响检索效率和生成质量的关键第一步,因此,在实际的业务场景中,理解并选择合适的分块策略便显得至关重要。
然而,作为 9 大分块策略中最为基础且直观的分块方法,固定大小切分 (Fixed-Size Chunking) 拥有较为广泛的应用场景以及扮演着重要的角色。
固定大小切分
(Fixed-Size Chunking) 策略的核心思想是将长文本内容按照预设的、统一的长度单位进行机械式分割。这种长度单位可以是词语数量 (word count)、字符数量 (character count),或者是模型输入的 Token 数量 (token count)。
例如,我们可以将一篇冗长的文档,每隔 200 个词语或 512 个 Token 就切分成一个独立的文本块。这种方法完全依赖于直接且程式化的文本分割逻辑,不涉及复杂的语义分析或语言学判断,尤其适用于当下游模型或系统对输入数据有严格固定尺寸要求的场景,例如需要批量处理或作为固定维度输入到某些机器学习模型中。
—02 —
Fixed-Size Chunking 策略有哪些优劣势 ?
在实际的业务场景中,基于固定大小切分(Fixed-Size Chunking) 策略具有较高的优势,具体体现在如下 2 点:
1、实现简易性与处理高效性 (Simplicity and Speed)
固定大小切分策略的实现逻辑极为直观和简单,无需复杂的语言学分析、深度学习模型支持或高级算法支持。这使得它在开发和部署阶段资源消耗极低,能够以非常高的速度完成大规模文本的分块任务,是快速构建 RAG 原型或处理海量非结构化数据的首选策略。
2、高可预测性与数据统一性 (Predictability and Uniformity)
此外,该策略能够产生尺寸统一、格式一致的文本块。这种高度的可预测性极大地简化了数据在后续 RAG 流程中的存储、索引和检索过程。例如,在向量数据库中,所有文本块的维度和存储空间都是可预期的,这有利于数据库性能优化、资源管理和系统调试。
虽然,基于固定大小切分(Fixed-Size Chunking) 策略是在实际的场景中具有较为广泛的应用场景,但随着业务的复杂性,其面临着如下问题:
1 个是上下文碎片化 (Context Fragmentation),即 由于切分是机械性的,它常常会在句子中间、段落连接处,甚至是重要的逻辑单元(如列表项、关键定义)内部进行强制分割。这种语义割裂会严重破坏文本的自然语义流和上下文连贯性。
检索时,大模型可能因此获得不完整或断裂的语境信息,从而导致理解偏差,影响回答的准确性,甚至产生“幻觉”。这也是固定大小切分最显著的缺点。
第 2 个问题便是缺乏适应性与僵硬性 (Rigidity and Lack of Adaptability)。由于此方法无法根据文本本身的逻辑结构、语义边界、主题变化或文档的复杂程度进行自适应调整。
重要的相关概念或信息可能会被不必要地分割到不同的块中,或者不相关的上下文被强制捆绑在一起。这种僵硬性使得它在处理结构复杂、语义关联紧密或包含多主题的文档时,检索和生成效果往往差强人意。
—03 —
Fixed-Size Chunking 策略简单实现示例解析
接下来,我们来看一个简单的示例,
基于 Python 代码实现如何将文本按固定词数进行切分。具体如下所示:
def fixed_size_chunk(text: str, chunk_size: int = 50) -> list[str]:
"""
将文本按固定词数进行切分。
Args:
text (str): 待切分的原始文本字符串。
chunk_size (int): 每个文本块所包含的词语数量。
默认为 50 个词。
Returns:
list[str]: 包含切分后文本块的字符串列表。
"""
words = text.split()
chunks = [" ".join(words[i:i+chunk_size]) for i in range(0, len(words), chunk_size)]
return chunks
# --- 示例用法 ---
# 假设 pdf_text_example 是从 PDF 文档中提取出的一个长文本内容
# 为了演示,我将使用一个足够长的示例文本,但您可以替换为您的实际文本
pdf_text_example = """
在人工智能领域,检索增强生成(RAG)技术已经成为构建实用、知识驱动的大型语言模型(LLM)应用的核心范式。它有效地弥合了模型静态知识与动态外部信息之间的鸿沟,让 LLM 能够引用实时或领域特定的数据,极大地提高了回复的准确性和可靠性。然而,当我们迈向更复杂的 AI 应用时,仅仅依赖向量相似性搜索,在处理那些相互关联、关系至关重要的数据时常常显得力不从心。构建真正智能的代理或提供高度准确、理解上下文深度的回答,需要理解信息之间的‘联系’,而不仅仅是‘相似’。这正是对下一代 RAG 应用的需求所在。支撑这些高级能力的数据库,必须能够同时处理向量相似性和复杂的结构化关系。HelixDB 应运而生,正是为了应对这一挑战。它打破了传统数据库的界限,是一个革命性的开源图向量数据库,巧妙融合了图数据库强大的关系表达能力与向量数据库高效的相似性搜索能力。HelixDB 旨在为下一代 RAG 应用提供一个更智能、更灵活的数据存储基础,让你能够基于内容相似性和结构化关系进行更丰富的上下文检索。如果你正在探索 RAG 的未来,并寻求能够同时处理向量和复杂关系的强大开源数据解决方案,那么理解 HelixDB 至关重要。通过本文,你将一文读懂这款为下一代 RAG 应用量身打造的开源图向量数据库的核心理念、架构优势以及它如何助力你的智能化创新。让我们一起深入了解 HelixDB 的独特之处吧!这是一个额外的句子,确保文本足够长,可以被切分成多个块,以演示第二个块的打印。
"""
# 将文本按每50个词语切分成块
chunks_result = fixed_size_chunk(pdf_text_example, chunk_size=10)
print(f"原始文本被切分成了 {len(chunks_result)} 个块。")
# --- 解决方案在这里:添加安全检查 ---
# 尝试打印第一个块
if len(chunks_result) > 0:
print("\n--- 第一个块内容示例 ---")
print(chunks_result[0])
else:
print("\n--- 列表为空,无法打印第一个块 ---")
# 尝试打印第二个块,先检查列表长度是否至少有2个元素
if len(chunks_result) > 1:
print("\n--- 第二个块内容示例 ---")
print(chunks_result[1])
else:
print("\n--- 无法打印第二个块,因为列表长度不足(少于2个块) ---")
# 如果您想打印所有生成的块,可以使用循环:
# print("\n--- 所有生成的文本块 ---")
# for i, chunk in enumerate(chunks_result):
# print(f"块 {i}:")
# print(chunk)
# print("-" * 20)
上述这段代码实现了一个固定大小分块(Fixed-Size Chunking)的功能,用于将长文本按指定词数分割成多个块,适用于 RAG(Retrieval-Augmented Generation)系统中文档预处理。
执行运行:
(base) lugalee@labs rag % /opt/homebrew/bin/python3 /Volumes/home/rag/fixedsiz.py
原始文本被切分成了 2 个块。
--- 第一个块内容示例 ---
在人工智能领域,检索增强生成(RAG)技术已经成为构建实用、知识驱动的大型语言模型(LLM)应用的核心范式。它有效地弥合了模型静态知识与动态外部信息之间的鸿沟,让 LLM 能够引用实时或领域特定的数据,极大地提高了回复的准确性和可靠性。然而,当我们迈向更复杂的 AI 应用时,仅仅依赖向量相似性搜索,在处理那些相互关联、关系至关重要的数据时常常显得力不从心。构建真正智能的代理或提供高度准确、理解上下文深度的回答,需要理解信息之间的‘联系’,而不仅仅是‘相似’。这正是对下一代 RAG 应用的需求所在。支撑这些高级能力的数据库,必须能够同时处理向量相似性和复杂的结构化关系。HelixDB 应运而生,正是为了应对这一挑战。它打破了传统数据库的界限,是一个革命性的开源图向量数据库,巧妙融合了图数据库强大的关系表达能力与向量数据库高效的相似性搜索能力。HelixDB 旨在为下一代 RAG
--- 第二个块内容示例 ---
应用提供一个更智能、更灵活的数据存储基础,让你能够基于内容相似性和结构化关系进行更丰富的上下文检索。如果你正在探索 RAG 的未来,并寻求能够同时处理向量和复杂关系的强大开源数据解决方案,那么理解 HelixDB 至关重要。通过本文,你将一文读懂这款为下一代 RAG 应用量身打造的开源图向量数据库的核心理念、架构优势以及它如何助力你的智能化创新。让我们一起深入了解 HelixDB 的独特之处吧!
今天的解析就到这里,欲了解更多关于
LM Studio 相关技术的深入剖析,最佳实践以及相关技术前沿,敬请关注我们的微信公众号或视频号:架构驿站(priest-arc),获取更多独家技术洞察!
Happy Coding ~
Reference :
[1] https://www.koyeb.com/blog/what-is-rag-retrieval-augmented-generation-for-ai
Adiós !
··································
对云原生网关 Traefik 技术感兴趣的朋友们,可以了解一下我的新书,感谢支持!
Hello folks,我是 Luga,Traefik Ambassador,Jakarta EE Ambassador, 一个 15 年+ 技术老司机,从 IT 屌丝折腾到码畜,最后到“酱油“架构师。如果你喜欢技术,不喜欢呻吟,那么恭喜你,来对地方了,关注我,共同学习、进步、超越~