【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/146994798
在 AI 大模型的 RAG(Retrieval-Augmented Generation)系统中,Text Splitters 是一个至关重要的模块,特别是在 LangChain 中的第十四章 —— Retrieval 组件中。以下将结合大模型发展现状、前景与 Python 代码,为你详细解析 Text Splitters 的作用与实战用法。
Text Splitters(文本切分器)的核心作用是:
发展点 | 内容 |
---|---|
上下文受限 | LLM 不能一次处理上万字长文,需拆分。 |
RAG 的效果依赖“可检索块” | 文本切分质量决定召回质量。 |
LLM 越强 → 越需结构化输入 | Chunking + metadata 提高上下文利用率。 |
Chunk 可作为 Function Calling 输入 | LLM 可选择性调用 chunk 作为函数输入或回顾窗口。 |
类型 | 描述 |
---|---|
CharacterTextSplitter |
按字符长度拆分(简单) |
RecursiveCharacterTextSplitter |
按语义优先级智能拆分,推荐使用 |
TokenTextSplitter |
按 token 数切分(配合 OpenAI tokenizer) |
MarkdownHeaderTextSplitter |
按 Markdown 层级结构切分 |
SentenceTransformersTokenTextSplitter |
结合 SentenceTransformers 支持多语言的切分器 |
这是最常用、推荐的文本切分器,可避免中断句子、段落等语义结构。
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import TextLoader
# 加载文本文档
loader = TextLoader("data/glacier_analysis.txt")
docs = loader.load()
# 创建切分器
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每个 chunk 最大字符数
chunk_overlap=50, # 相邻 chunk 重叠字符数
separators=["\n\n", "\n", ".", " ", ""], # 按语义优先级分割
)
split_docs = splitter.split_documents(docs)
# 查看第一个切分块
print(split_docs[0].page_content)
from langchain.text_splitter import TokenTextSplitter
splitter = TokenTextSplitter(
chunk_size=300, # 每个 chunk 的最大 token 数
chunk_overlap=30
)
docs = splitter.split_text("Your very long input text ...")
from langchain.text_splitter import MarkdownHeaderTextSplitter
md_text = """
# 冰川遥感研究
## 冰川边界提取
使用多源遥感数据实现冰川边界监测...
## 消融区分析
根据MODIS反演年际变化趋势...
"""
header_splitter = MarkdownHeaderTextSplitter(
headers_to_split_on=[("#", "section"), ("##", "subsection")]
)
md_docs = header_splitter.split_text(md_text)
for doc in md_docs:
print(doc.metadata, doc.page_content[:100])
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
embedding_model = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(split_docs, embedding_model)
retriever = vectorstore.as_retriever()
策略 | 说明 |
---|---|
✂️ 控制 Chunk 大小 | 300 |
保留 Chunk 重叠 | Chunk Overlap 30~50 可保持上下文连续性 |
按结构/句子切分 | 避免打断语义,可用 Recursive 或 Header 分割器 |
标注 Metadata | 每段标注 source/page,用于引用和回溯 |
TextSplitter
是构建高质量 RAG 系统的基础模块。