RAG系列(八):切分优化 - 基于 Markdown 语法的文档切分

掌握Markdown分割:用MarkdownHeaderTextSplitter优化文档处理 默认情况下,会从输出块的内容中去除标题。如果你想保留标题,可以通过设置Markdown是许多文本处理任务的基础,理解如何有效地分割Markdown文档是增强文本分析能力的重要一步。Langchain 文档Pinecone 的嵌入指南。 阅读详情

引言

本文我们接着这篇文章解析转换后的 Markdown 文件,介绍下基于 Markdown 语法的文档切分方法。
关于指标

从本文开始,我会根据不同优化阶段来选择要重点关注的指标,不必要每次都关注五个指标的表现,这样可以让我们的优化更聚焦,通过优化每个阶段的重点指标,从而逐步优化系统的各个环节。

在不同优化阶段需要重点关注的指标:

  • • 问题优化:上下文召回率、答案正确性;
  • • 切分优化:上下文召回率、上下文相关性、答案正确性;
  • • 检索优化:上下文召回率、上下文相关性、答案正确性;
  • • 生成优化:答案忠实度、答案相关性、答案正确性。

代码实践

本文完整代码地址[1]

基于换行符&空格等字符切分

在之前的示例中,我们用的切分方法是 langchainjs 的 RecursiveCharacterTextSplitter,这是默认推荐(常用)的切分方法。与简单的基于字符计数或固定分隔符的分割方法不同,RecursiveCharacterTextSplitter 使用一种递归的方法来尝试在多个级别的分隔符上进行分割,从而尽量保持文本的语义完整性。

RecursiveCharacterTextSplitter 默认分隔符序列是 ["\n\n", "\n", " ", ""],意味着它会先尝试按段落分割,然后是句子,接着是单词,最后是逐字符处理。

代码实现:

asyncfunctionsplitDocuments_v50(docs) {
const textSplitter = newRecursiveCharacterTextSplitter({
chunkSize: 500, // 文本切分大小
chunkOverlap: 50, // 文本切分重叠大小
  });
const documents = await textSplitter.splitDocuments(docs);
return documents;
}

使用该方法切分出来的文档块大小相对比较均匀,都比较接近设置的 chunkSize(500):

[379,425,396,376,425,206,495,400,248,299,304,335,314,484,485,425,474,479,352,378,441,443,460,400,398,211,481,346,307,476,414,358,494,480,412,367,383,485,421,407,494,487,334,448,493,397,443,410,400,388,460,492,423,55,484,498,488,422,485,414,382,361,431,157,482,485,192,271,332,424,150,456,410,427,491,477,379,202,461,456,48,39,494,235,474,407,405,248,472,473,134,351,407,102,491,413,486,478,210,495,476,163,383,421,406,486,431,224,488,488,93,487,442,388,496,169,487,485,361,412,468,357,421,362,489,445,468,251,495,477,101,202,498,211,494,328,470,422,332,246,295,393,264]

以下是我们用该方法对 《2024少儿编程教育行业发展趋势报告.md》文件进行切分后的结果:

[
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/1ccfc2f4eac2045a72ee79528246c81470330e1622704ae875d7fb6e6d3ad34c.jpg)\n\n多鲸教育研究院/ 2024 年 1 月\n\n## 少儿编程教育行业图谱\n\n### To B / To G\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/52052abeaf37e79866428e4b7b524e27a924454c764f007ee95c2d061fc5bd96.jpg)",
},
{
"pageContent":"![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/57e4a9a7aafc3cded2334132be39c9517a397bf8d5ff933b0514bc473467d7b5.jpg)\n\n## 专家观点\n\n### 【童程童美 CEO/孙滢】\n\n• 当前,素质教育市场比较分散,但包括少儿编程教育在内的市场规模仍将继续扩大。人工智能浪潮越大,人们越可能认识到通过素质教育发展孩子其他能力的重要性,包括体育、艺术、编程等,因此素质教育将会继续蓬勃发展。  \n• 鉴于提升学科成绩的刚需长期持续存在,优质的教师资源将始终都是稀缺资源。有实力的大品牌和大公司会在素质教育发展的过程当中获得更大的优势。与此同时,市场里具有个性化特点的小公司也会蓬勃发展,最终呈现巨头和小而美并存的共荣局面。\n\n### 【点猫科技创始人兼 CEO/李天驰】",
},
{
"pageContent":"### 【点猫科技创始人兼 CEO/李天驰】\n\n• 点猫科技将以“为下一代提供更有价值的教育”为使命,持续聚焦工具和内容研发,培养青少年的计算思维以及用数字化的方法和手段解决实际问题的能力,帮助更多地区和学校开展人工智能编程教育服务,不断为科技教育事业添砖加瓦,并为振兴乡村教育、助力教育公平贡献自己的力量。\n\n### 【核桃编程创始人兼 CEO/曾鹏轩】\n\n• 未来教育的趋势是以实操为主的教育方式。少儿编程是学习的工具,一种能够实现主动学习的教育方式,也是一种未来教育的理念。核桃编程让孩子通过编程来学习,而不是学习编程,而实操是对编程最有效的学习方式,也是核桃编程的核心理念。我们希望通过核桃编程带来一种正向的学习理念,不只是为了学而学,而是为了用而学。我们要培养的孩子,是对科学充满好奇、拥有无限创造力,最重要的是具有独立思考与自主学习的能力。\n\n### 【斯坦星球 CEO/崔显耿】",
}
  ...
]

然后对此进行评测,将该评测结果(v5.0)作为本文的基准:

基于 Markdown 语法切分

要基于 Markdown 语法进行切分,我们采用的是 langchainjs 提供的MarkdownTextSplitter。MarkdownTextSplitter是RecursiveCharacterTextSplitter的子类,也就是在RecursiveCharacterTextSplitter 默认分隔符序列的基础上添加了一些 Markdown 特有的分隔符['\n## ', '\n### ','\n#### ', '\n##### ','\n###### ', '```\n\n','\n\n***\n\n', '\n\n---\n\n','\n\n___\n\n' ] ,这样就意味着它会先尝试按 Markdown 标题 分割,然后是代码块、接着是分割线,最后是按 RecursiveCharacterTextSplitter 方法切分,这样就能够识别并考虑 Markdown 文本中的不同元素(如标题、段落、列表项、代码块等),从而进行更加合理的切分。

代码实现:

asyncfunctionsplitDocuments_v51(docs, config) {
const textSplitter = newMarkdownTextSplitter({
chunkSize: 500, // 文本切分大小
chunkOverlap: 50, // 文本切分重叠大小
  });
const documents = await textSplitter.splitDocuments(docs);
return documents;
}

使用该方法切分出来的文档块大小分布的比较分散,最小的文档块大小只有 10:

[192,340,402,378,387,400,495,381,225,273,275,314,281,435,485,245,350,302,387,411,378,383,445,451,32,463,398,143,359,359,484,359,39,490,271,437,420,308,28,441,443,436,465,25,407,494,487,334,14,432,148,343,182,437,145,72,410,400,388,172,29,255,492,423,55,484,498,28,458,168,252,451,32,477,225,419,392,37,118,482,485,192,19,250,332,424,150,19,27,481,242,487,491,175,300,36,462,35,10,461,456,48,27,10,494,235,14,458,32,206,380,387,27,22,472,473,134,339,10,407,102,412,407,27,13,486,478,210,14,467,129,412,30,31,350,170,206,29,492,71,263,378,253,488,88,440,487,353,38,279,432,170,34,133,487,485,361,392,468,357,243,31,474,203,28,484,203,127,32,460,37,31,12,495,477,101,14,142,30,10,498,211,327,404,36,393,183,453,448,277,393,264]

我们再看下用该方法对 《2024少儿编程教育行业发展趋势报告.md》文件进行切分的结果:

[
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/1ccfc2f4eac2045a72ee79528246c81470330e1622704ae875d7fb6e6d3ad34c.jpg)\n\n多鲸教育研究院/ 2024 年 1 月",
},
{
"pageContent":"## 少儿编程教育行业图谱\n\n### To B / To G\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/52052abeaf37e79866428e4b7b524e27a924454c764f007ee95c2d061fc5bd96.jpg)\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/57e4a9a7aafc3cded2334132be39c9517a397bf8d5ff933b0514bc473467d7b5.jpg)",
},
{
"pageContent":"### 【极客晨星创始人、CTO/张军彪】\n\n• 2023 年以 AIGC 和大模型为代表的 AI 技术迅猛发展,如何为中小学生提供更加优质的科学教育、全面提高科学素质,成为一个急迫的时代命题,编程作为链接 AI 时代和创新人才的“钥匙”越来越刚需,整个青少年编程市场也进入活跃期。编程教育的目标是要培养个性化、创新性人才。  \n• 编程教育最根本的是要立足课程体系,用科技加持的方法教好科技的课程,打造好的平台和工具,为孩子们提供更加优质的教育资源,激发好奇心、培养创造力,实现个性化、创新性人才的培养,在助力科学教育做加法中的作用越来越突出。",
},
  ...
{
"pageContent":"#### 各地积极响应国家政策号召,推动编程教育与人工智能的融合及普及国家战略政策利好,少儿编程教育重要性逐步提升\n\n国家政策支持\n\n从教育部到各地方教育主管部门陆续出台多项政策支持少儿编程教育普及推广\n\n- 2018 -2019 年\n\n• 河南省建议在中小学开设 Scratch、Python 等程序设计课程,培养编程思维,普及编程教育。  \n• 天津市政府招生办发布的《 2018 年天津科技特长生招生计划》中,多所中学将信息学奥赛、信息技术、人工智能等纳入了招生范畴。  \n• 重庆市教委发布《关于加强中小学编程教育的通知》,将编程列为重庆中小学必修课,要求小学三年级开始学编程。  \n• 北京市教育委员会将人工智能纳入北京中小学社会实践,明确了人工智能与教育融合发展在教育各学段主要任务。  \n• 山东省教育厅整合人工智能、编程教育、机器人教育等创客资源,着力打造创客教育课程体系。\n\n- 2020 -2021 年",
},
{
"pageContent":"- 2020 -2021 年\n\n• 新疆乌鲁木齐市教育局通知将在小学初中和高中年级里分别开展图形化编程和 Python 课程,并附对课程及课时安排的具体要求,要求对老师进行线上与线下结合的编程培训。  \n• 浙江省发布消息,八年级新增 Python 内容,五六年级按照教材规划开始接触大数据、人工智能、程序设计与算法。  \n• 北京市海淀区明确指出:将信息技术(包含编程)纳入初中学业水平测试,考试不通过不予毕业。  \n• 上海市教委提出推进人工智能、编程技术等课程进中小学课堂,支持高校人工智能相关专业建设,提升师生信息素养。  \n• 长沙市发改委等部门指出,中小学新增“人工智能教育”和“编程教育”。  \n• 广州市将“信息技术”列入初中学业水平考试录取参考科目之一,示范性普通高中投档考生的录取参考科目成绩均须达到 C 级及以上。\n\n- 2022 年",
}
]

该切分方法的评测结果(v5.1)如下:

从评测结果来看,该方法对各项指标有提升但不是很明显,因此我们进一步分析下原因并优化。

合并过小的文档块

在使用 MarkdownTextSplitter 进行切分文档的时候,我们可以看到切分后的文档块大小分布是比较分散的,最小的文档块大小只有 10,由于 MarkdownTextSplitter 切分方法的特性,这些小的文档块可能就是一个标题,比如:["##### 业务模式", "##### 课程体系", "##### 产品优势"]。由于我们是根据向量距离检索相关文档的,由于更大的文本块,其所涵盖的信息量也增大,可能导致向量表示变得更加稀疏,往往我们检索出来的是这些更小的文档,但这些文档往往不包含或包含很少答案所需的关键信息,从而影响到上下文召回率。

因此我们需要将这些过小的文档块进行合并,由于这些过小的文档块是标题,所以简单的方法就是将过小的文档块直接合并到下一个文档块上,代码实现:

asyncfunctionsplitDocuments_v52(docs) {
// 在 splitDocuments_v51 的结果上进行处理
const documents = awaitsplitDocuments_v51(docs);
for (let i = 0; i < documents.length; i++) {
const doc = documents[i];
// 长度小于100的文档
if (doc.pageContent.length < 100) {
// 如果不是最后一个元素,则合并到下一个元素
if (i < documents.length - 1) {
console.log('合并内容:', doc.pageContent, '到下一个');
        documents[i + 1].pageContent =
          doc.pageContent + '\n' + documents[i + 1].pageContent;
      }
// 删除当前元素
      documents.splice(i, 1);
      i--; // 回退索引以适应数组缩短的情况
    }
  }
return documents;
}

通过这样的优化,我们看下评测结果(v5.2)如下:

此时我们可以看到,上下文召回率较 v5.1 有了比较明显的提升。

给文档块补充标题

之所有要把不同的文件转换成 Markdown 文件,其中的好处是 Markdown 文件能够以纯文本形式保留文档的基本结构(标题、列表、代码块、表格),其中的标题提供了文档的关键词和上下文信息,能来用来帮助快速理解文档内容,并在检索时更准确地定位到与用户提问相关的信息,这可以提高上下文相关性,因此给每个文档块补充标题是非常有必要的。

MarkdownTextSplitter切分后的结果:

[
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/1ccfc2f4eac2045a72ee79528246c81470330e1622704ae875d7fb6e6d3ad34c.jpg)\n\n多鲸教育研究院/ 2024 年 1 月",
},
{
"pageContent":"## 少儿编程教育行业图谱\n\n### To B / To G\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/52052abeaf37e79866428e4b7b524e27a924454c764f007ee95c2d061fc5bd96.jpg)\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/57e4a9a7aafc3cded2334132be39c9517a397bf8d5ff933b0514bc473467d7b5.jpg)",
},
{
"pageContent":"### 【极客晨星创始人、CTO/张军彪】\n\n• 2023 年以 AIGC 和大模型为代表的 AI 技术迅猛发展,如何为中小学生提供更加优质的科学教育、全面提高科学素质,成为一个急迫的时代命题,编程作为链接 AI 时代和创新人才的“钥匙”越来越刚需,整个青少年编程市场也进入活跃期。编程教育的目标是要培养个性化、创新性人才。  \n• 编程教育最根本的是要立足课程体系,用科技加持的方法教好科技的课程,打造好的平台和工具,为孩子们提供更加优质的教育资源,激发好奇心、培养创造力,实现个性化、创新性人才的培养,在助力科学教育做加法中的作用越来越突出。",
},
  ...
{
"pageContent":"#### 各地积极响应国家政策号召,推动编程教育与人工智能的融合及普及国家战略政策利好,少儿编程教育重要性逐步提升\n\n国家政策支持\n\n从教育部到各地方教育主管部门陆续出台多项政策支持少儿编程教育普及推广\n\n- 2018 -2019 年\n\n• 河南省建议在中小学开设 Scratch、Python 等程序设计课程,培养编程思维,普及编程教育。  \n• 天津市政府招生办发布的《 2018 年天津科技特长生招生计划》中,多所中学将信息学奥赛、信息技术、人工智能等纳入了招生范畴。  \n• 重庆市教委发布《关于加强中小学编程教育的通知》,将编程列为重庆中小学必修课,要求小学三年级开始学编程。  \n• 北京市教育委员会将人工智能纳入北京中小学社会实践,明确了人工智能与教育融合发展在教育各学段主要任务。  \n• 山东省教育厅整合人工智能、编程教育、机器人教育等创客资源,着力打造创客教育课程体系。\n\n- 2020 -2021 年",
},
{
"pageContent":"- 2020 -2021 年\n\n• 新疆乌鲁木齐市教育局通知将在小学初中和高中年级里分别开展图形化编程和 Python 课程,并附对课程及课时安排的具体要求,要求对老师进行线上与线下结合的编程培训。  \n• 浙江省发布消息,八年级新增 Python 内容,五六年级按照教材规划开始接触大数据、人工智能、程序设计与算法。  \n• 北京市海淀区明确指出:将信息技术(包含编程)纳入初中学业水平测试,考试不通过不予毕业。  \n• 上海市教委提出推进人工智能、编程技术等课程进中小学课堂,支持高校人工智能相关专业建设,提升师生信息素养。  \n• 长沙市发改委等部门指出,中小学新增“人工智能教育”和“编程教育”。  \n• 广州市将“信息技术”列入初中学业水平考试录取参考科目之一,示范性普通高中投档考生的录取参考科目成绩均须达到 C 级及以上。\n\n- 2022 年",
}
]

我们通过看 MarkdownTextSplitter切分后的结果,可以看到文档块所在的每一层级的标题是有缺失的,理想状态下,该文档块需要有它所在的一级标题、二级标题、三级标题等等,所以在这里我们将对每个文档块的标题进行补充,实现代码如下:

asyncfunctionsplitDocuments_v53(docs, config) {
// 在 splitDocuments_v52 的结果上进行处理
const documents = awaitsplitDocuments_v52(docs, config);
// 获取每个文档块的标题并添加到元数据中
for (let i = 0; i < documents.length; i++) {
const doc = documents[i];
const lines = doc.pageContent.split('\n');
const headers = [
      {
key: 'header5',
value: '##### ',
      },
      {
key: 'header4',
value: '#### ',
      },
      {
key: 'header3',
value: '### ',
      },
      {
key: 'header2',
value: '## ',
      },
      {
key: 'header1',
value: '# ',
      },
    ];
    headers.forEach((header) => {
const { key, value } = header;
      doc.metadata[key] = [];

// 提取每一行的标题
for (const line of lines) {
if (line.startsWith(value)) {
          doc.metadata[key].push(
            line.replace(newRegExp(`/^${value}/`), '').trim()
          );
        }
      }
// 如果当前文档没有对应标题,则取前一个文档的对应标题的第一个,并加入到当前文档中
if (i > 0) {
if (doc.metadata[key].length === 0) {
const preHeader = documents[i - 1].metadata[key][0];
if (preHeader) {
            doc.pageContent = preHeader + '\n\n' + doc.pageContent;
            doc.metadata[key] = [preHeader];
          }
        }
      }
    });
  }
return documents;
}

这样处理后,我们可以看到每个文档块都补充了每一级的标题:

[
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/1ccfc2f4eac2045a72ee79528246c81470330e1622704ae875d7fb6e6d3ad34c.jpg)\n\n多鲸教育研究院/ 2024 年 1 月",
},
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n## 少儿编程教育行业图谱\n\n### To B / To G\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/52052abeaf37e79866428e4b7b524e27a924454c764f007ee95c2d061fc5bd96.jpg)\n\n![](https://cdn-mineru.openxlab.org.cn/extract/c5ab109a-a161-4b6a-97ef-b906c0b2f3c1/57e4a9a7aafc3cded2334132be39c9517a397bf8d5ff933b0514bc473467d7b5.jpg)",
},
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n## 专家观点\n\n### 【极客晨星创始人、CTO/张军彪】\n\n• 2023 年以 AIGC 和大模型为代表的 AI 技术迅猛发展,如何为中小学生提供更加优质的科学教育、全面提高科学素质,成为一个急迫的时代命题,编程作为链接 AI 时代和创新人才的“钥匙”越来越刚需,整个青少年编程市场也进入活跃期。编程教育的目标是要培养个性化、创新性人才。  \n• 编程教育最根本的是要立足课程体系,用科技加持的方法教好科技的课程,打造好的平台和工具,为孩子们提供更加优质的教育资源,激发好奇心、培养创造力,实现个性化、创新性人才的培养,在助力科学教育做加法中的作用越来越突出。",
},
  ...
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n## 少儿编程教育行业 十大趋势\n\n### 01 国家战略政策利好,少儿编程教育重要性逐步提升\n\n#### 各地积极响应国家政策号召,推动编程教育与人工智能的融合及普及国家战略政策利好,少儿编程教育重要性逐步提升\n\n国家政策支持\n\n从教育部到各地方教育主管部门陆续出台多项政策支持少儿编程教育普及推广\n\n- 2018 -2019 年\n\n• 河南省建议在中小学开设 Scratch、Python 等程序设计课程,培养编程思维,普及编程教育。  \n• 天津市政府招生办发布的《 2018 年天津科技特长生招生计划》中,多所中学将信息学奥赛、信息技术、人工智能等纳入了招生范畴。  \n• 重庆市教委发布《关于加强中小学编程教育的通知》,将编程列为重庆中小学必修课,要求小学三年级开始学编程。  \n• 北京市教育委员会将人工智能纳入北京中小学社会实践,明确了人工智能与教育融合发展在教育各学段主要任务。  \n• 山东省教育厅整合人工智能、编程教育、机器人教育等创客资源,着力打造创客教育课程体系。\n\n- 2020 -2021 年",
},
{
"pageContent":"# 少儿编程教育行业发展趋势报告\n\n## 少儿编程教育行业 十大趋势\n\n### 01 国家战略政策利好,少儿编程教育重要性逐步提升\n\n#### 各地积极响应国家政策号召,推动编程教育与人工智能的融合及普及国家战略政策利好,少儿编程教育重要性逐步提升\n\n- 2020 -2021 年\n\n• 新疆乌鲁木齐市教育局通知将在小学初中和高中年级里分别开展图形化编程和 Python 课程,并附对课程及课时安排的具体要求,要求对老师进行线上与线下结合的编程培训。  \n• 浙江省发布消息,八年级新增 Python 内容,五六年级按照教材规划开始接触大数据、人工智能、程序设计与算法。  \n• 北京市海淀区明确指出:将信息技术(包含编程)纳入初中学业水平测试,考试不通过不予毕业。  \n• 上海市教委提出推进人工智能、编程技术等课程进中小学课堂,支持高校人工智能相关专业建设,提升师生信息素养。  \n• 长沙市发改委等部门指出,中小学新增“人工智能教育”和“编程教育”。  \n• 广州市将“信息技术”列入初中学业水平考试录取参考科目之一,示范性普通高中投档考生的录取参考科目成绩均须达到 C 级及以上。\n\n- 2022 年",
}
]

通过这样的优化,我们看下评测结果(v5.3)如下:

此时我们可以看到,上下文相关性较 v5.2 有了比较明显的提升。

结语

通过对比基于通用字符递归切分方法与基于 Markdown 语法的文档切分方法,我们可以看到基于 Markdown 语法的文档切分方法对 RAG 系统的各项指标是有一定的提升作用,然后我们通过合并过小的文档块提升了上下文召回率,通过给文档块补充标题提升了上下文相关性。

大模型算是目前当之无愧最火的一个方向了,算是新时代的风口!有小伙伴觉得,作为新领域、新方向人才需求必然相当大,与之相应的人才缺乏、人才竞争自然也会更少,那转行去做大模型是不是一个更好的选择呢?是不是更好就业呢?是不是就暂时能抵抗35岁中年危机呢?

答案当然是这样,大模型必然是新风口!

那如何学习大模型 ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。但是具体到个人,只能说是:

最先掌握AI的人,将会比较晚掌握AI的人有竞争优势。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

但现在很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是,基于此我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习路线完善出来!

在这里插入图片描述

在这个版本当中:

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型路线+学习教程已经给大家整理并打包分享出来, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型学习资源包》免费分享(安全咨料,放心领取)👈

​

一、大模型经典书籍(免费分享)

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套大模型报告(免费分享)

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、大模型系列视频教程(免费分享)

在这里插入图片描述

四、2025最新大模型学习路线(免费分享)

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码,免费领取

👉优快云大礼包🎁:全网最全《LLM大模型学习资源包》免费分享(安全资料,放心领取)👈

​

如何使用MarkdownHeaderTextSplitter高效分割Markdown文档 是LangChain库中的一个强大工具,它可以根据指定的Markdown标题级别来分割文档。这种方法可以保持文档的逻辑结构,使得分割后的内容更加连贯和有意义。是一个强大的工具,可以帮助我们智能地分割Markdown文档。通过合理使用它的各种选项,我们可以在保持文档结构的同时,实现灵活的文本分割。这对于后续的文本嵌入、信息检索等任务都有很大帮助。 阅读详情

相关推荐

【LLM】Langchain使用[三](基于文档的问答)

不同类型的chain链 想在许多不同类型的块上执行相同类型的问答,该怎么办?上面的实验只返回了4个文档,如果有多个文档,我们可以使用几种不同的方法 * Map Reduce 将所有块与问题一起传递给语言模型,获取回复,使用另一个语言模型调用将所有单独的回复总结成最终答案,它可以在任意数量的文档上运行。可以并行处理单个问题,同时也需要更多的调用。它将所有文档视为独立的 * Refine 用于循环许多文档,实际上是迭代的,建立在先前文档的答案之上,非常适合前后因果信息并随时间逐步构建答案,依赖于先

发现问题,并解决问题,批判性思维 5248

自然语言处理:第八十四章 Markdown文档如何切分?

在解析(1)使用MinerU将PDF转换为Markdown中我们提到了将各种文档解析为Markdown的好处,本文我们接着上一篇文章处理后的Markdown,讲解如何对Markdown文档进行切分。在很多文档中,标题都是非常重要的信息,例如企业内部的办理流程,稍微规范点的文档,标题里面都会体现重点信息的。既然转成了Markdown,标题肯定是保留下来了,本文将首先介绍基于Markdown标题的切分方法,以及另外一种常规的Markdown切分方法。

victor_manches的博客 2208

RAG中的文本切分策略详解

RAG中当比较两段文本的嵌入向量时,可以根据它们在高位空间中的距离或者角度,来推断这两段文本在语义上的相似度或者差异。利用相似度,将语义上相似的文本自动分组在一起,形成聚类,这有助于更好的理解和组织大量的文本数据。RecursiveCharacterTextSplitter文本切割工具的设计目的是为了在处理文本时,能够在不损失语义关联性的前提下,将文本的有效分割成更小的单元。是不是可以基于文本的语义实现一种更好的方法来处理文本分块,即非固定参数(chunk_size),而是基于语义自行动态确认参数。

拥抱具身智能,昇腾Ascend C 1835

使用MarkdownHeaderTextSplitter按标题拆分Markdown文档

在处理聊天应用或者问答系统时,通常需要将输入文档分块以便于嵌入和向量存储。嵌入整段文本时,嵌入过程会考虑文本的上下文以及句子和短语之间的关系,这使得向量能够反映文本的更广泛含义和主题。然而,当我们处理Markdown文档时,以标题为基础进行分块显得尤为直观,这也是我们使用的关键动机。

fGVBSAbe的博客 864

面板数据分析中的随机前沿软件FRONTIER Version 4.1应用

随机前沿模型是一种用于评估单位效率的统计方法。它考虑了输入和输出的随机性,允许我们在效率评估中引入不确定性。随机前沿模型通常用于评估生产单位、金融机构、医院等各种类型的决策单元的效率。FRONTIER是一个广泛使用的随机前沿分析软件,具有用户友好的界面和强大的功能。它提供了估计效率、前沿分析和模型比较的工具,使用户能够深入研究单位的效率和绩效。面板数据是一种包含多个单位(通常是时间序列数据)的数据类型,可以用于分析单位在不同时间点的变化和效率。

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 2982

DeepLearning tutorial(7)深度学习框架Keras的使用-进阶

上一篇文章总结了Keras的基本使用方法,相信用过的同学都会觉得不可思议,太简洁了。十多天前,我在github上发现这个框架的时候,关注Keras的人还比较少,这两天无论是github还是微薄,都看到越来越多的人关注和使用Keras。所以这篇文章就简单地再介绍一下Keras的使用,方便各位入门。主要包括以下三个内容: 训练CNN并保存训练好的模型。 将CNN用于特征提取,用提取出来的特征训练SVM。

wepon的专栏 2万+

检索增强RAG中有哪些好用的Chunk切分方法?

例如,langchain中使用的RecursiveCharacterTextSplitter不分析语法,仅使用关键词进行递归切分,可能会破坏函数的完整性,而llama-index中的code splitter则相对较好,但它是根据行数计算的,有时会超出嵌入模型的上下文长度。文档切分时,在每个chunk的开始加入该chunk在文档中的位置,可以提升LLM对该段落的理解,从而提高回答的质量。:没有完美的切分方法,可以先尝试最佳的切分策略,在无法切分时逐渐退化到次优的切分策略,这便是在生产环境中的最佳实践。

热爱人工智能的一个要卡拉米! 1313

OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)

本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。

devops8pract的博客 335

RAG全栈技术——文档切分

文章摘要:本文系统介绍了文本切分(Chunking)的多种策略及其实现方法,重点分析了通用文档切分策略和LangChain中的TextSplitters工具。主要内容包括:1)五种通用切分方法:按句子切分、固定字符数切分、带重叠窗口的固定字符切分、递归方法和语义切割;2)LangChain提供的CharacterTextSplitter和RecursiveCharacterTextSplitter等工具的使用;3)针对特定格式(如Markdown、JSON、代码)的文档切分方法。文章通过具体代码示例展示了不

Lucky_mzc的博客 1415

PCL 最小生成树用于法向量定向【2025最新版】

PCL 最小代价生成树用于点云法向量的定向。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2067

ThingsBoard教程(七):模拟设备遥测

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了六篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 上一篇我们讲解了如何使用设备管理来对设备进行增删改查,和设备配置的一些基本概念,本篇文章就带大

知无涯 4579

Web开发者实战:LangChain RAG文档切分粒度优化——从“答非所问”到“精准命中”

在构建基于 LangChain 的 RAG(检索增强生成)系统时,许多 Web 开发者会陷入一个经典困境: “为什么用户问‘退货流程’,系统却返回了‘产品保修条款’?” 根本原因往往不是模型不行,也不是向量数据库不准,而是——文档切分粒度过粗或过细。 切太粗:一个 chunk 包含多个主题,检索时“沾边即中”,噪声大 切太细:关键信息被切断,上下文丢失,模型无法理解 本文将从 Web 工程视角出发,系统分析切分粒度问题的本质,并提供一套可落地的 多策略自适应切分方案,覆盖技术文档、FAQ、合同、代码等

沛哥儿的专栏 928

PINN:当深度学习遇上朗伯-比尔定律

光谱数据处理中引入PINN的三种架构设计

qq_53529450的博客 154

为什么在 RAG 中,文档解析为 JSON 优于 Markdown?

本文将分享作者和团队在实践中对 RAG 场景的深入探索和体会,阐述为什么将文档解析为 JSON 格式相比 Markdown 更加适合。

weixin_55585835的博客 2494

Simulink进行无人机飞行力学建模与仿真

摘要:本文详细介绍了使用MATLAB/Simulink进行四旋翼无人机飞行力学建模与仿真的步骤。内容包括准备工作、动力学方程概述、模型构建(使用State-Space或Simscape Multibody)、可选控制器设计、仿真参数配置及结果分析。教程强调理解飞行力学原理和坐标系转换的重要性,建议根据需求选择模型复杂度,并推荐查阅学术文献获取更深入的建模方法。通过本教程,读者可掌握无人机动力学建模基础,为控制系统开发和性能优化奠定基础。

amy_mhd的博客 272

【100%通过率】华为OD机试真题 JS 实现【水库蓄水问题】【2023 Q1 | 100分】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 8173

RAG企业实战:文档切分

定义 LangGraph 的节点入口函数,串联所有步骤。"""1. **获取与清洗内容 (Step 1)**从 `state` 中提取 Markdown 内容与文件标题,统一换行符格式(`\r\n` / `\r` → `\n`),保证跨平台兼容。2. **按标题语义初切 (Step 2)**基于 Markdown 标题语法(`#` ~ `######`)进行**语义级切分**,自动跳过代码块内的标题匹配,避免误切注释,保证每个块语义完整。3. **无标题文档兜底处理 (Step 2 内置)**

赵广陆 454

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

零基础玩转RAG:手把手教你搞定文档切分与大模型微调

文档切分作为RAG流程的“第一步”,其重要性怎么强调都不为过。理解核心原理:切分不只是技术问题,更是信息组织艺术掌握实用方法:五种策略各有适用场景,递归切分是通用选择学会评估优化:没有最好的参数,只有最适合的参数未来趋势动态切分:根据查询动态调整块大小多粒度检索:同时检索不同大小的块,组合使用学习型切分:通过反馈学习优化切分策略给初学者的建议从递归切分开始,参数设置为:chunk_size=500, overlap=50准备一个小型测试集,快速验证效果不要追求完美,先跑通流程再优化。

CodingKitten的博客 918

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

从零开始解析RAG(三):五级分块——从字符切分到语义感知的演进之路

大家好,这是我们 RAG 系列的第三篇文章,前两篇文章分别从 Query 优化的角度,介绍了通过翻译问题来改进检索质量的查询翻译,为问题选择合适数据源的路由选择,以及面向结构化数据,非结构化数据的查询构建。从优化整个 RAG 的角度来说,下一步,我们要优化索引。加载文档分块嵌入保存到向量数据库这是一般的索引过程。文档加载自不必说,一个准备过程,从第 2 步分块开始,才真正影响索引的结果。因此,本篇文章将聚焦于构建索引的第一阶段——文本分块,从易到难介绍 5 个级别的分块。

qq_34731663的博客 2463

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

如何优化RAG应用中的文档切分?

在面对庞大的文档数据时,如何有效切分文档,确保信息的高效传递,成为了RAG应用中的一项核心技术。本文将介绍如何通过递归字符切分方法进行文档分块,确保数据的完整性,并提高查询效率。

2301_82239784的博客 503

RAG系统性能优化:从文档切分到向量检索的实战指南

在构建基于大语言模型的应用时,检索增强生成(RAG)技术通过结合信息检索与文本生成,有效缓解了模型的幻觉问题并实现了知识更新。其核心原理在于将文档转化为向量表示,通过语义相似度匹配实现精准检索,从而为生成模型提供相关上下文。这一技术的工程价值在于能够基于私有知识库构建可靠的问答系统,广泛应用于企业知识管理、智能客服和文档分析等场景。本文聚焦于RAG流程中的关键环节——文档切分与向量检索,深入探讨了语义割裂、上下文丢失等常见挑战,并提供了基于语义的智能切分、混合检索策略等优化方案,旨在提升系统从海量文档中精准

weixin_34184158的博客 404

RAG检索精度优化:文档切分策略与参数配置实践

RAG(检索增强生成)已成为大模型落地应用的主流架构,其效果上限很大程度上取决于知识库切片质量。向量检索基于语义相似度匹配,若切分粒度不当,答案易被无关上下文淹没,导致检索精度下降。合理设定chunk_size与overlap、保留标题层级元数据、采用递归/结构感知/语义切分等策略,能确保每个切片语义完整并显著提升召回准确性。在技术手册、合同、PDF等典型知识库场景中,文档切分优化往往带来50%以上的检索精度提升,是大模型应用工程中成本最低、收益最直接的优化环节。

weixin_34246529的博客 308

RAG文档切分优化:从LangChain到LangGraph的工程实践

检索增强生成(RAG)的检索质量,往往首先取决于文档切分:把长文档拆成可检索块,块的大小、边界和元数据会直接影响向量表示、召回排序与上下文预算。chunk_size 与 chunk_overlap 并非固定值,应结合模型上下文、TopK、分词比例和重复块代价推导;结构感知与语义校验则用于减少断句、表格截断和孤立短块。合理的文档切分能提升命中率、上下文精度与答案完整率,适用于企业知识库、技术手册问答、客服FAQ和PDF批处理。围绕LangChain切分器的能力边界与参数设计,进一步用LangGraph的Sta

weixin_34344403的博客 270

RAG文档切分优化:LangGraph流水线与父子块策略

检索增强生成(RAG)的召回质量,往往在文档进入向量库前就被决定。文档切分的本质是把长文本压成可独立表达的语义单元:块过大,向量被无关信息稀释;块过小,语义被截断,二者都会削弱向量检索的命中率。结构感知切分结合父子块机制,让子块负责精准召回、父块补全生成上下文;再以LangGraph编排解析、分类、分流切分、校验与回退,形成可质检的文档处理流水线。该思路适用于产品手册、合同协议、技术文档和知识库问答等场景,也便于从LangChain单一切分器平滑演进到工程化切分链路,为RAG召回优化与参数推导提供可落地参考

weixin_34332905的博客 326
上一篇: RAG系列(七):解析优化 - 不同文件类型统一转换成Markdown
下一篇: RAG系列(九):解析优化 - 使用 Doc2X 将 PDF 高效转换为 Markdown
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值