from llama_index.core.node_parser import SimpleNodeParser parser = SimpleNodeParser.from_defaults( chunk_size=512, # 中文文档建议设置为384 tokens左右 chunk_overlap=64 # 重叠区域,保证上下文连贯性)nodes = parser.get_nodes_from_documents(documents)
from llama_index.core.node_parser import MarkdownNodeParserparser = MarkdownNodeParser()nodes = parser.get_nodes_from_documents(markdown_docs)
from llama_index.core.node_parser import HTMLNodeParser parser = HTMLNodeParser(tags=["p", "h1"]) # 指定需要提取的标签nodes = parser.get_nodes_from_documents(html_docs)
import nltkfrom llama_index.core.node_parser import SentenceWindowNodeParser node_parser = SentenceWindowNodeParser.from_defaults( window_size=3, # 每侧包含的句子数 window_metadata_key="window", original_text_metadata_key="original_sentence",)
from llama_index.core.node_parser import SemanticSplitterNodeParserfrom llama_index.embeddings.openai import OpenAIEmbedding embed_model = OpenAIEmbedding()splitter = SemanticSplitterNodeParser( buffer_size=1, breakpoint_percentile_threshold=95, embed_model=embed_model)
from llama_index.core.llms import OpenAIimport json def llm_chunking(text): llm = OpenAI(model="gpt-4-turbo") prompt = f"""将以下技术文档划分为逻辑单元,每个单元包含完整的技术概念: {text} 返回JSON格式: [{{"title":"单元标题","content":"文本内容"}}]""" response = llm.complete(prompt) try: return json.loads(response.text) except json.JSONDecodeError: raise ValueError("LLM响应格式错误")
|
分块方法 |
处理速度 |
语义保持 |
实现难度 |
适用场景 |
|
固定分块 |
⭐⭐⭐⭐ |
⭐ |
⭐ |
快速搭建原型系统 |
|
滑动窗口 |
⭐⭐⭐ |
⭐⭐ |
⭐⭐ |
对话记录、访谈稿 |
|
结构感知分块 |
⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
特定格式的Markdown/HTML/JSON等文档 |
|
嵌入分块 |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
叙事性长文本 |
|
LLM分块 |
⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
各种各样的复杂文档 |

Settings.embed_model = dashscope_embed_model()# 语义分块配置Settings.node_parser = SemanticSplitterNodeParser( buffer_size=128, # 保留128 tokens重叠区域 breakpoint_percentile_threshold=95, # 95%阈值自动寻找最佳分割点 embed_model = dashscope_embed_model())
-
对Markdown/HTML等结构化文档采用结构感知分块 -
对非结构化纯文本采用语义分块 -
对简单场景或资源受限情况采用固定分块提高处理效率


