# RAG | Langchain # Langchain RAG:打造Markdown文件的结构化分割解决方案

本文介绍了如何通过MarkdownHeaderTextSplitter和Langchain技术对Markdown文档进行结构化分割,以提高文本分析的效率和RAG效果,特别关注于文档的标题层级和上下文信息的保留,为知识管理和应用开发提供了新方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【文章简介】
在信息技术的现代背景下,高效地处理和分析文本数据对于知识获取和决策支持至关重要。Markdown文件因其易读性和高效性,在文档编写和知识共享中占据了重要地位。然而,传统的文本处理方法往往忽视了Markdown的结构化特性,未能充分挖掘文本的深层含义和主题。

本文介绍了一种创新的结构化分割方法,利用Langchain技术,通过MarkdownHeaderTextSplitter工具,根据标题层级进行精确分割,同时保留文本的上下文和结构信息。这种方法特别适合处理报告、教程等结构化文档,有助于提升文本向量化(embedding)的效果。
正如Pinecone所指出的,当整个段落或文档被嵌入时,嵌入过程会同时考虑整体上下文和文本内部句子与短语之间的关系,从而产生更全面的向量表示,捕获文本的更广泛含义和主题。
此外,RecursiveCharacterTextSplitter工具适用于需要均匀文本块的自然语言处理任务,而UnstructuredMarkdownLoader则将Markdown文件转换为Langchain对象,通过mode="elements"选项,进一步增强了文本块的独立性和分析的灵活性。

这种方法不仅提高了文本分析的效率和准确性,而且通过优化embedding过程,显著增强了RAG(Retrieval-Augmented
Generation)效果,为Markdown文件的深入利用和知识管理开辟了新路径。

MarkDown

Markdown是一种轻量级标记语言,用于使用纯文本编辑器创建格式化文本。
优势:纯文本、有语义(用纯文本表示的语义)

使用MarkdownHeaderTextSplitter获取markdown结构

调用方法

%pip install -qU langchain-text-splitters

我们可以自己规定分割的chunksize、标题层级

标题层级分割

# 1 标题
## 1.1 标题
### 1.1.1 标题
#### 1.1.1.1 标题
1.1.1.1 内容

# 2 标题
2 内容
## 2.2 标题
2.2 内容
# 读取markdown内容
content_path= r"xxx.md"
with open(content_path, "r") as f:
    page_content = f.read()


from langchain_text_splitters import MarkdownHeaderTextSplitter

markdown_document = page_content

headers_to_split_on = [
    ("#", "Header 1"),
    ("##", "Header 2"),
    ("###", "Header 3"),
]

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)
for i, doc in enumerate(md_header_splits):
    print("-------------------------------------------------------")
    print(f"Document {
     i+1}:")
    print("Page content:")
    print(doc.page_content)
    print("Metadata:")
    for key, value in doc.metadata
### RAG 工具与 LangChain 文档及教程 #### 关于检索增强生成 (RAG) 检索增强生成是一种结合了预训练语言模型和外部知识库的技术,旨在提高自然语言处理任务的效果。该方法允许机器学习模型在推理过程中动态访问大量未见过的数据,从而提升响应的质量和准确性[^1]。 #### 使用 LangChain 实现 RAG 功能 LangChain 提供了一套强大的工具链用于构建复杂的对话应用和服务,其中包括支持 RAG 的实现方式。具体来说: - **ToolAgent**: 这是一个可以集成多种第三方服务作为插件使用的代理组件。它能帮助开发者轻松接入不同的 API 接口,比如搜索引擎或文档数据库查询接口等。 - **Tavily 和 Retriever 定义**: 为了使这些工具能够在应用程序中被有效调用,通常会先将其封装成符合特定标准的对象形式——即所谓的 "Agent" 格式。对于 Tavily,在线搜索功能则依赖于其官方提供的 RESTful Web Service 来完成;而 Retriever 则更多是指向本地文件系统或是云存储中的结构化数据源发起请求的过程[^2]。 下面给出一段简单的 Python 代码片段展示如何使用 `search` 方法执行一次针对 San Francisco 天气状况的信息检索操作: ```python from langchain import ToolAgent, initialize_agent tools = [ { 'name': 'tavily', 'description': 'An online search engine that requires an API key.', 'type': 'online_search' }, ] agent = initialize_agent(tools=tools) response = agent.run("what is the weather in SF") print(response) ``` 这段代码展示了初始化带有 Tavily 搜索引擎能力的 Agent 并运行一个具体的查询命令的例子。需要注意的是实际部署时还需要配置相应的环境变量以提供必要的认证凭证给到各个工具模块。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值