all-in-rag零散的笔记(自存/持续更新)

2026.3.17

原文说的很详尽,写这么一篇只是为了让自己背的更顺。



1.让代码只输出content?

print(answer.content)

补充:其中,

answer = llm.invoke(prompt.format(question=question, context=docs_content))

该代码先把 question(问题)和 docs_content(上下文 / 参考文档)填充到预设的 prompt(提示词模板)中,再调用大语言模型(llm)处理填充后的提示词,最终将模型返回的结果赋值给 answer 变量。

format 方法会把实际的 questiondocs_content替换到占位符位置 ,生成最终发给模型的完整提示词。例:若 prompt = "基于{context}回答问题:{question}"question="什么是Python"context="Python是编程语言",格式化后得到:"基于Python是编程语言回答问题:什么是Python"

llm.invoke(...)

invoke 是 LangChain 框架中统一的模型调用方法,接收格式化后的提示词,向模型发送请求并获取返回结果。

2.修改Langchain代码中`RecursiveCharacterTextSplitter()`的参数`chunk_size`和`chunk_overlap`,观察输出结果有什么变化。

chunk_size=每个块的目标大小

chunk_overlap= 每个块之间重叠?个字符,以缓解语义割裂

未修改前输出结果

修改后的输出结果,其中

复制代码
chunk_size=5000,
chunk_overlap=500

总结:

一、

  1. 默认参数(chunk_size=4000, chunk_overlap=200)

输出:列举了 8 个例子,包括走迷宫、象棋、股票管理、雅达利游戏、Pong游戏、21点、自动驾驶、MountainCar-v0。

特点:覆盖了文章的主要部分,例子比较全面。

  1. 小参数(chunk_size=1000, chunk_overlap=100)

输出:列举了 3 大类共 10 个例子,包括探索与利用的例子(选择餐馆、做广告、挖油、玩游戏)、强化学习具体应用的例子(DeepMind 走路的智能体、机械臂抓取、OpenAI 的机械臂翻魔方)、Gym 库交互的例子(MountainCar-v0)。

特点:更聚焦于文章的后半部分,特别是探索与利用的例子。

  1. 大参数(chunk_size=5000, chunk_overlap=500)

输出:列举了 3 大类共 9 个例子,包括自然界与生活领域(羚羊、股票交易)、电子游戏(雅达利的 Pong 游戏、雅达利的 Breakout 游戏)、Gym 库中的具体环境(Taxi-v3、Acrobot、CartPole-v0、MountainCar-v0)。

特点:覆盖了文章的前半部分,特别是自然界和游戏的例子

二、

  • chunk_size 影响

    • 增大(如从 50→100):文本块数量减少,单个块更长,减少分割次数,但可能包含过多无关内容;
    • 减小(如从 50→20):文本块数量剧增,单个块更短,分割更细,但可能导致语义碎片化(比如 "Langchain" 被拆成两半)。
  • chunk_overlap 影响

    • 增大(如从 10→20):相邻块重叠内容更多,上下文连贯性更好,但会重复处理字符,增加冗余;
    • 减小(如从 10→0):无重叠,文本块更 "独立",但可能断裂语义(比如 "帮助开发者" 只出现在第一块,第二块直接从 "快速构建" 开始)。
  • chunk_size 决定文本块的长度上限:值越大,块数越少、单块越长;值越小,块数越多、单块越短。
  • chunk_overlap 决定文本块的上下文连贯性:值越大,重叠越多、连贯性越好但冗余增加;值越小,重叠越少、冗余降低但可能语义断裂。

这个例子更直观一点

复制代码
=== 正常参数 (chunk_size=50, chunk_overlap=10) ===
第1块(字符数:50):Langchain是一个强大的大语言模型应用开发框架,它提供了丰富的组件和工具,帮助开发者
第2块(字符数:49):开发者快速构建基于LLM的应用程序。无论是文本处理、链调用还是代理开发,Langchain都能提
第3块(字符数:24):能提供便捷的解决方案。

=== 增大chunk_size (chunk_size=100, chunk_overlap=10) ===
第1块(字符数:99):Langchain是一个强大的大语言模型应用开发框架,它提供了丰富的组件和工具,帮助开发者快速构建基于LLM的应用程序。无论是文本处理、链调用还是代理开发,Langchain都能提
第2块(字符数:24):能提供便捷的解决方案。

=== 减小chunk_size (chunk_size=20, chunk_overlap=10) ===
第1块(字符数:20):Langchain是一个强大的大语言
第2块(字符数:20):大语言模型应用开发框架,它提供了
第3块(字符数:20):它提供了丰富的组件和工具,帮助开
第4块(字符数:20):工具,帮助开发者快速构建基于LLM
第5块(字符数:20):于LLM的应用程序。无论是文本处理
第6块(字符数:20):文本处理、链调用还是代理开发,Lan
第7块(字符数:20):代理开发,Langchain都能提供便捷
第8块(字符数:13):供便捷的解决方案。

=== 增大chunk_overlap (chunk_size=50, chunk_overlap=20) ===
第1块(字符数:50):Langchain是一个强大的大语言模型应用开发框架,它提供了丰富的组件和工具,帮助开发者
第2块(字符数:50):帮助开发者快速构建基于LLM的应用程序。无论是文本处理、链调用还是代理开发,Langchain
第3块(字符数:24):能提供便捷的解决方案。

=== 减小chunk_overlap (chunk_size=50, chunk_overlap=0) ===
第1块(字符数:50):Langchain是一个强大的大语言模型应用开发框架,它提供了丰富的组件和工具,帮助开发者
第2块(字符数:39):快速构建基于LLM的应用程序。无论是文本处理、链调用还是代理开发,Langchain都能提供
第3块(字符数:24):能提供便捷的解决方案。

2.数据加载部分

抽取文本->抽取关键信息作为元数据->转换成统一数据结构

Unstructured 库加载并解析一个PDF文件

from unstructured.partition.auto import partition

elements = partition(

filename=pdf_path,

content_type="application/pdf"

)

3.文本分块:直接分,分割号分,语义分,++文档结构分++(←一般组合使用)

总结各个切块的步骤:

  • **直接分块(固定长度分块)**① 设定固定字符 / 词数长度阈值② 从文本开头按阈值逐段硬切割③ 不考虑语义、标点,直接拆分④ 输出分块结果

  • **分割号分块(分隔符分块)**① 定位分隔符(标点、换行、分隔线、特殊符号等)② 以分隔符作为分块边界③ 按边界位置拆分文本④ 清理冗余内容后输出分块

  • 语义分块(逻辑分块) ① 识别文本话题、句意、逻辑边界② 按语义完整独立原则划分③ 合并零散短句、拆分过长段落④ 输出语义连贯的分块

  • 文档结构分块① 解析文档层级(标题、章节、段落、列表等)② 按结构标签(一级 / 二级标题、正文段)划分③ 遵循文档原有结构边界分块④ 保留结构关系,输出结构化分块

其中语义分块(句子分割 ->上下文感知嵌入 ->计算语义距离 ->识别断点 ->合并成块)中:

langchain_experimental.text_splitter.SemanticChunker 通过 buffer_size 参数(默认为1)来捕捉上下文信息。对于列表中的每一个句子,这种方法会将其与前后各 buffer_size 个句子组合起来,然后对这个临时的、更长的组合文本进行嵌入。

然后计算每对相邻 句子的嵌入向量之间的余弦距离。这个距离值量化了两个句子之间的语义差异------距离越大,表示语义关联越弱,跳跃越明显。

(余弦距离的发现者真伟大。。。)

4.实践:

  • 使用partition_pdf替换当前partition函数并分别尝试用hi_resocr_only进行解析,观察输出结果有何变化。

修改前:

复制代码
解析完成: 5 页, 7956 字符

第一页内容:
进⼊词条 全站搜索检索增强生成
 帮助
近期有不法分子冒充百度百科官方人员,以删除词条为由威胁并敲诈相关企业。在此严正声明:百度百科是免费编辑平台,绝不存在收费代编服务,请勿上当受骗!详情 >>
检索增强生成播报 锁定 讨论1 上传视频
⼤模型前沿技术之⼀ 展开2个同名词条
一分钟了解检索增强生成一分钟了解检索增强生成01:2201:22
 RAG :当下大模型应用落地的必杀技RAG :当下大模型应用落地的必杀技02:2302:23     
查
中国科学院大学计算机科
中国科学院大学计算机科
术学院是 201...
权威合作编辑
⽬录
同义词RAG(⼤模型内化吸收知识的过程)⼀般指检索增强⽣成
本词条由中国科学院大学计算机科学与技术学院、中国科学院计算技术研究所 参与编辑并 审核,经科普中国 · 科学百科认证 。
历史沿革 播报
技术定义 播报
检索增强生成( Retrieval-augmented Generation ),简称 RAG ,是当下热门的大模型 前沿技术之一 [1]。
检索增强生成模型结合了语言模型和信息检索技术。具体来说,当模型需要生成文本或者回答问题时,它会先从一个庞大的
文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性 [2]。
相关推荐
sheeta19982 小时前
苍穹外卖Day05笔记
笔记
想搞艺术的程序员2 小时前
Java Survivor区学习笔记
java·笔记·学习·垃圾回收
-Springer-2 小时前
STM32 学习 —— 个人学习笔记9-2(USART串口数据包 & 串口收发 HEX 及 文本 数据包)
笔记·stm32·学习
celeste03102 小时前
Redis Summary
linux·运维·服务器·redis·笔记
zzh0812 小时前
nginx安全笔记
笔记·nginx·安全
困死,根本不会2 小时前
【C 语言】指针学习笔记:从底层原理到实战应用
c语言·开发语言·笔记·学习·算法
CHENJIAMIAN PRO3 小时前
3D Tiles 2.0 技术审查整理笔记
笔记·3d
kinl20184 小时前
cs2385_note0 (lec2-lec5)
笔记
John_ToDebug5 小时前
死锁案例:UI 线程阻塞等待跨进程 COM 注入
c++·windows·笔记