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方法会把实际的question和docs_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。
特点:覆盖了文章的主要部分,例子比较全面。
2. 小参数(chunk_size=1000, chunk_overlap=100)
输出:列举了 3 大类共 10 个例子,包括探索与利用的例子(选择餐馆、做广告、挖油、玩游戏)、强化学习具体应用的例子(DeepMind 走路的智能体、机械臂抓取、OpenAI 的机械臂翻魔方)、Gym 库交互的例子(MountainCar-v0)。
特点:更聚焦于文章的后半部分,特别是探索与利用的例子。
3. 大参数(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_res和ocr_only进行解析,观察输出结果有何变化。
修改前:
解析完成: 5 页, 7956 字符 第一页内容: 进⼊词条 全站搜索检索增强生成 帮助 近期有不法分子冒充百度百科官方人员,以删除词条为由威胁并敲诈相关企业。在此严正声明:百度百科是免费编辑平台,绝不存在收费代编服务,请勿上当受骗!详情 >> 检索增强生成播报 锁定 讨论1 上传视频 ⼤模型前沿技术之⼀ 展开2个同名词条 一分钟了解检索增强生成一分钟了解检索增强生成01:2201:22 RAG :当下大模型应用落地的必杀技RAG :当下大模型应用落地的必杀技02:2302:23 查 中国科学院大学计算机科 中国科学院大学计算机科 术学院是 201... 权威合作编辑 ⽬录 同义词RAG(⼤模型内化吸收知识的过程)⼀般指检索增强⽣成 本词条由中国科学院大学计算机科学与技术学院、中国科学院计算技术研究所 参与编辑并 审核,经科普中国 · 科学百科认证 。 历史沿革 播报 技术定义 播报 检索增强生成( Retrieval-augmented Generation ),简称 RAG ,是当下热门的大模型 前沿技术之一 [1]。 检索增强生成模型结合了语言模型和信息检索技术。具体来说,当模型需要生成文本或者回答问题时,它会先从一个庞大的 文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性 [2]。