【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?

【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?

【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?


文章目录

  • 【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?
  • 前言
    • 一、什么是 Text Splitters?
    • 二、Text Splitters 的重要性(结合大模型发展)
    • 三、LangChain 中的 Text Splitter 类别
    • 四、实战代码示例
      • 1️⃣ 使用 RecursiveCharacterTextSplitter
      • 2️⃣ 使用 TokenTextSplitter(适合 GPT 系列模型)
      • 3️⃣ Markdown 文档结构化切分(如技术手册、博客)
    • 五、切分后的数据可用于 RAG 向量化处理
    • 六、设计建议(增强效果)
    • ✅ 总结


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表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?

Text Splitters(文本切分器)的核心作用是:

  • 将长文档切分为小的、结构合理的文本块(chunk),以便后续嵌入、存入向量数据库、实现高效检索与问答。
  • 大模型限制: 当前 OpenAI GPT 系列模型(如 GPT-4)依然受限于上下文长度(例如 128k
    tokens),切分文档能提升检索精度并避免截断。

二、Text Splitters 的重要性(结合大模型发展)

发展点 内容
上下文受限 LLM 不能一次处理上万字长文,需拆分。
RAG 的效果依赖“可检索块” 文本切分质量决定召回质量。
LLM 越强 → 越需结构化输入 Chunking + metadata 提高上下文利用率。
Chunk 可作为 Function Calling 输入 LLM 可选择性调用 chunk 作为函数输入或回顾窗口。

三、LangChain 中的 Text Splitter 类别

类型 描述
CharacterTextSplitter 按字符长度拆分(简单)
RecursiveCharacterTextSplitter 按语义优先级智能拆分,推荐使用
TokenTextSplitter 按 token 数切分(配合 OpenAI tokenizer)
MarkdownHeaderTextSplitter 按 Markdown 层级结构切分
SentenceTransformersTokenTextSplitter 结合 SentenceTransformers 支持多语言的切分器

四、实战代码示例

1️⃣ 使用 RecursiveCharacterTextSplitter

这是最常用、推荐的文本切分器,可避免中断句子、段落等语义结构

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)

2️⃣ 使用 TokenTextSplitter(适合 GPT 系列模型)

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 ...")

  • 适合控制 Token 数量,尤其当你后续使用 OpenAI 的 embedding 模型时。

3️⃣ Markdown 文档结构化切分(如技术手册、博客)

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])

  • 非常适合将章节结构与文本分离,利于构建结构化知识库。

五、切分后的数据可用于 RAG 向量化处理

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 大小 300500 字或 200300 tokens 是经验值
保留 Chunk 重叠 Chunk Overlap 30~50 可保持上下文连续性
按结构/句子切分 避免打断语义,可用 Recursive 或 Header 分割器
标注 Metadata 每段标注 source/page,用于引用和回溯

✅ 总结

  • TextSplitter 是构建高质量 RAG 系统的基础模块。
  • LangChain 提供多种文本切分器,应根据文本结构和用途选择。
  • 结合向量数据库(如 FAISS、Weaviate、Qdrant),实现高效检索增强问答。
  • 未来,随着多模态模型发展,Splitter 将扩展至图文结构化、表格实体提取等。

你可能感兴趣的:(【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?)