LangChain + RAG 实战(二):文档切片与向量化

LangChain + 文档处理:构建智能文档问答系统 RAG 的实战指南 在这篇文章中,我们深入探讨了如何使用 LangChain 构建一个智能文档问答系统。文章通过实战案例,展示了如何将文档内容(如员工手册、规章制度等)从 Word 文件中提取、向量化,并存储到 FAISS 向量数据库中。通过结合 OpenAI 的 GPT 模型,我们创建了一个强大的问答系统,能够根据用户的问题从文档中检索相关信息,并生成准确的答案。本文详细介绍了文档加载、文本切分、向量化存储和智能问答的核心流程,帮助读者理解如何实现高效的文档处理和检索机制,从而在实际应用中为企业或个人提供智能化的文档管理和问 阅读详情

创作者: Yardon  |  GitHub: github.com/YardonYan  |  版本: v1.0  | 



RAG 的核心流程

RAG(Retrieval-Augmented Generation)是最实用的 LLM 应用模式:

1. 用户提问 → "React 的 useEffect 怎么用?"
2. 从知识库检索相关文档片段
3. 把片段 + 问题一起发给 LLM
4. LLM 基于检索到的内容生成答案

为什么要检索?因为 LLM 有两个致命问题:

  • 知识截止日期:训练数据固定在某个时间点
  • 幻觉:遇到不知道的问题会"编造"答案

RAG 通过注入外部知识解决了这两个问题。

文档处理流程:

原始文档 → 加载 → 切分 → Embedding → 向量数据库 → 检索 → 生成答案

文档加载器:从各种格式读取

# PDF 加载
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("document.pdf")
pages = loader.load()

# Markdown/Text 加载
from langchain_community.document_loaders import TextLoader
loader = TextLoader("notes.md")
docs = loader.load()

# 网页加载
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://docs.langchain.com")
docs = loader.load()

文本切分:大小与重叠的策略

LLM 的上下文窗口有限,不能把整本书扔进去。切分是最关键的一步——切得太碎语义断裂,切得太长检索精度下降。

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,      # 每块最大 1000 字符
    chunk_overlap=200,    # 块之间重叠 200 字符
    separators=["\n\n", "\n", "。", ",", " ", ""],  # 优先在自然边界切
)

chunks = splitter.split_documents(documents)
print(f"切分为 {len(chunks)} 个文档块")

重叠是必需的。比如一个概念跨了两块:

块1: "...在 React 中,useEffect 是一个非常重要的 Hook..."
块1 结束 ←
块2: "...useEffect 来处理副作用,如 API 调用、事件监听等..."

如果不重叠,“useEffect” 这个概念可能在第二个块里失去了上下文——“Effect” 到底指什么?200 个字符的重叠保证了关键信息不会被"一刀两断"。

经验值:

场景chunk_sizechunk_overlap
技术文档500-800100
长文章/论文1000-1500200
代码库按函数/类切按 import 块重叠

Embedding:把文字变成向量

计算机不理解文字,只理解数字。Embedding 就是把文字翻译成 1536 维(或更多)的数字向量——语义越接近,向量的空间距离越近。

"苹果很好吃" → [0.12, -0.34, 0.56, ..., 0.78]  (1536个数字)
"橙子很甜"   → [0.14, -0.31, 0.58, ..., 0.79]  (向量很近)
"汽车很快"   → [-0.45, 0.67, -0.23, ..., -0.11]  (向量很远)
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 单个文本
vector = embeddings.embed_query("什么是 React Hooks?")
print(len(vector))  # 1536

# 批量(文档块)
chunk_vectors = embeddings.embed_documents(
    [chunk.page_content for chunk in chunks]
)

向量数据库:存什么,怎么存

向量数据库专门存储"向量 + 文本"的配对:

存储结构:
{
  "id": "chunk_001",
  "vector": [0.12, -0.34, 0.56, ...],  # 1536维向量
  "metadata": {
    "source": "react-guide.pdf",
    "page": 15,
    "chunk_index": 3
  },
  "text": "useEffect 是 React 中处理副作用的 Hook..."
}

检索时,把用户问题也 Embedding 化,在向量空间里找最近的 Top K 个块。


Chroma 快速上手

Chroma 是入门级的向量数据库,轻量到可以嵌入 Python 进程运行:

pip install chromadb
from langchain_community.vectorstores import Chroma

# 构建向量数据库
vectordb = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db",  # 持久化到磁盘
)

# 检索
retriever = vectordb.as_retriever(search_kwargs={"k": 3})
docs = retriever.invoke("React 的 useEffect 怎么用?")

for doc in docs:
    print(doc.page_content[:100])

检索:找到最相关的片段

# 相似度搜索
docs = vectordb.similarity_search("useEffect 的依赖数组")

# 带分数
docs_with_scores = vectordb.similarity_search_with_score("useEffect", k=5)
for doc, score in docs_with_scores:
    print(f"相关度: {score:.2f} | {doc.page_content[:80]}")

# MMR 多样化检索(避免搜出 5 条几乎一样的内容)
docs = vectordb.max_marginal_relevance_search(
    "useEffect", k=5, fetch_k=20, lambda_mult=0.5
)

本章小结

步骤工具要点
加载PyPDFLoader、TextLoader支持多种格式
切分RecursiveCharacterTextSplitterchunk_size + overlap 决定检索质量
向量化OpenAIEmbeddings1536 维表征语义距离
存储Chroma轻量级向量数据库
检索similarity_search / MMRTop-K 或多样化检索

下一章:构建第一个 RAG 链——把切分、向量化、检索、生成串成一条完整的管道。


📌 创作者: Yardon  |  🏠 个人网站: GlimmerAI.top

📖 本章是「LangChain + RAG 实战」系列的第 2 章。

🌟 欢迎大家来观看!

python实战(七)——基于LangChain的RAG实践 本文详细介绍了使用LangChain构建RAG程序的各个流程,并给出了对应的python实现代码。 阅读详情

相关推荐

基于 LangChain + Chroma 实现文档向量化入库(含摘要处理 + RAG 查询):完整实战流程

在构建 AI 应用(如智能问答、知识检索)时,第一步往往是将原始文档转化为向量形式并存入数据库。这通常包含以下流程:加载原始文件(PDF、TXT 等格式)文本切分(控制 chunk 大小以适配模型)使用大模型提取摘要(减少冗余)向量化(生成 embedding 向量)存入向量数据库(如 Chroma)本文将使用 LangChain 框架 + 阿里通义大模型 + Chroma 数据库,完成从原始文档到知识入库再到语义检索的完整闭环。

murphymeng2001的博客 1981

LangChain向量嵌入从入门到实战:一文搞懂文本向量化、语义搜索与RAG全流程

本文系统讲解了LangChain向量嵌入(Embeddings)的核心原理与实战应用,从嵌入技术如何将文本等非结构化数据转换为高维向量、并利用余弦相似度等方法衡量语义相关性入手,深入解析了Google Gemini等主流嵌入模型的使用方法,特别是embed_documents()与embed_query()在处理文档集合与单条查询时的差异化优化策略,结合从Markdown加载、文本分块到向量生成的完整代码示例,串联起RAG工作流的“离线构建”与“在线检索”全过程,并对比了OpenAI、HuggingFace

羑悻的博客. 5832

LangChain入门2 RAG详解

最常见的方法是嵌入每个文档分割的内容,并将这些嵌入插入到矢量数据库(或矢量存储)中。当我们想搜索分割时,我们采用文本搜索查询,嵌入它,并执行某种“相似性”搜索,以识别嵌入与查询嵌入最相似的存储分割。我们将使用LCEL Runnable协议来定义链,使我们能够以透明的方式将组件和函数管道连接在一起,在LangSmith中自动跟踪我们的链,从而获得流式、异步和批量调用。我们想要创建一个简单的应用程序,该应用程序接受用户问题,搜索与该问题相关的文档,将检索到的文档和初始问题传递给模型,并返回答案。

weixin_41870426的博客 3679

AI Agent从无到有42: RAG 数据预处理实战 — 文档加载、切片与向量化

本文介绍了检索增强生成(RAG)的核心概念及其数据预处理流程。RAG通过检索外部知识库来增强大语言模型的生成能力,解决数据陈旧和领域知识缺失问题。文章详细阐述了RAG数据预处理的四个关键步骤:文档加载、文本切片、向量化嵌入和向量存储,并提供了基于LangChain的完整实现代码。代码示例使用模拟嵌入模型,无需外部API即可运行,展示了从原始文本到向量检索的端到端流程。文章还给出了切片大小选择、嵌入模型选型等实践建议,为构建高质量RAG应用奠定基础。

Wang的专栏 518

基于langchain RAG问答应用实战

大模型的时代已经到来,而RAG技术的应用,为我们打开了一扇通往更深层次AI应用的大门。• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

2401_83239642的博客 1615

SpringBoot 整合 Langchain4j RAG 技术深度使用解析

SpringBoot 整合 Langchain4j RAG 技术深度使用解析

congge 4585

LangChain RAG 完整流程实战解析

在大语言模型(LLM)应用中,一个常见的问题是:模型虽然强大,但它的知识止步于训练数据。如果我们想让模型回答某份文件、公司资料或特定领域的知识,就需要一种机制——**让模型先“查资料”,再作答**。 这正是 **RAG(Retrieval-Augmented Generation,检索增强生成)** 的核心思想。 RAG 技术通过在生成阶段引入检索模块,让模型在回答之前访问外部文档,从而实现“带知识”的智能问答。 本文将结合一段完整的 **LangChain 实战代码**,一步步解析 RAG 的构建过

cooldream2009的博客 1394

Langchain核心模块与实战[9]:RAG检索增强生成[文本向量化、实战ChatDoc智能文档助手]

Langchain核心模块与实战[9]:RAG检索增强生成[文本向量化、实战ChatDoc智能文档助手]

丨汀、的博客 1245

快速搭建 LangChain + RAG

本文阐释 RAG 原理,对比传统方式优势,分步骤解析流程,并附案例演示。

qq_26285567的博客 1112

【AI大模型应用开发】【LangChain系列】2. 一文全览LangChain数据连接模块:从文档加载到向量检索RAG,理论+实战+细节

本文学习 LangChain 中的 数据连接(Retrieval) 模块。该模块提供文档加载、切分,向量存储、检索等操作的封装。最后,结合RAG基本流程、LangChain Prompt模板和输入输出模块,我们将利用LangChain实现RAG的基本流程。

同学小张的博客 5766

LangChain RAG实战——数据预处理篇:从文档加载到嵌入向量化

本文介绍了LangChain RAG系统的数据预处理环节,主要包括文档加载、文本分割和嵌入向量化三大模块。RAG技术通过检索增强生成解决大语言模型的局限性,如知识时效性、幻觉问题和领域知识缺乏等。文章详细讲解了环境配置、多种文档加载器(PDF/Word/TXT)的使用方法,以及不同文本分割策略(递归字符分割、段落分割、Token分割)的实现和对比。通过代码示例展示了如何将原始文档处理为适合检索的文本块,为后续向量化和检索生成阶段奠定基础。

m0_74398756的博客 993

RAG实践技巧:Langchain、向量化与RAG关系详解,大模型开发小白入门指南

本文深入解析了Langchain(高代码Agent框架)与Dify/Coze(低代码平台)的区别,详细介绍了RAG技术的完整实现链路,分析了向量化的作用与局限性,并提出了"向量路由+结构化知识库"的混合架构方案。通过咖啡配方案例展示了RAG技术的实际应用与优化策略,帮助开发者更好地理解和应用大模型技术。

2401_85325557的博客 1028

智能车视觉算法实战:十字路口与弯道拐点的精准识别

本文深入探讨了智能车视觉导航中十字路口与弯道拐点的精准识别算法。通过实战经验,详细解析了如何利用纵向巡线法生成边界数组,并从中高效提取“上拐点”与“下拐点”的关键特征。文章重点分享了提升算法鲁棒性的核心技巧,包括图像预处理、ROI设置、状态机应用及多特征融合,旨在帮助开发者实现智能车在复杂路况下从“看见”到“看懂”的稳定决策。

weixin_29061465的博客 633

langchain学习笔记之基于RAG实现文档问答

本节将介绍使用langchain基于RAG的文档问答以及具体实现方法。

静静的学习就好 1389

从零构建个性化AI助手:基于Mem0与本地大模型的记忆化实践

本文详细介绍了如何利用Mem0与本地大模型构建个性化AI助手,实现记忆化应用结构的实践方法。从开发环境搭建、记忆存储机制到个性化交互实现,提供了完整的解决方案和代码示例,帮助开发者在本地环境中创建能记住用户习惯和偏好的智能助手。

weixin_29214335的博客 466

AD服务器搭建

一、角色安装1)打开服务器管理器,添加 角色和功能;2) 点 下一步;3)点 下一步;4)点 下一步;5)点击安装;6-1)将此服务器提升为域控制器;6-2)点下一步;6)输入密码 点 下一步;7)自动生成LIXF,点击下一步;8)确认目录,点下一步;8)确认安装条件,点安装; 8)安装成功,点关闭;...

潇峰的博客 6451

【LangChain】一文读懂RAG基础以及基于langchain的RAG实战

本文介绍了RAG的基础过程,在langchain框架下如何使用,再到提供两个个例子进行了代码实践,最后又简要介绍了企业级别RAG构建的内容。最后希望大家能有所收获。码字不易,如果喜欢,请给作者一个小小的赞做鼓励吧~~

京东科技开发者 1287

C#实战:基于ONNX与SCRFD/ArcFace的高效人脸识别系统开发

本文详细介绍了如何在C#环境中,利用ONNX Runtime高效部署SCRFD人脸检测与ArcFace人脸识别模型,构建一个完整的、高性能的人脸识别系统。内容涵盖环境搭建、模型推理、人脸对齐、特征提取等核心模块,并提供了从Demo到生产系统的优化思路与实战代码,为.NET开发者提供了一套开箱即用的解决方案。

weixin_29061821的博客 488

【LangChain系列】2. 一文全览LangChain数据连接模块:从文档加载到向量检索RAG,理论+实战+细节

本文学习 LangChain 中的 数据连接(Retrieval) 模块。该模块提供文档加载、切分,向量存储、检索等操作的封装。最后,结合RAG基本流程,我们将利用LangChain实现RAG的基本流程。

AAI666666的博客 2596

大模型LangChain面试题及参考答案(上)

明确的输入输出类型:函数参数需包含类型注解,返回值需定义清晰的数据结构(如JSON格式),便于LLM理解参数含义和调用方式。工具描述:通过文档字符串或独立的描述对象(如Tool类)说明函数的功能、参数用途及调用场景,供LLM判断是否需要调用。示例:定义一个计算两个数之和的工具函数@tool"""计算两个整数的和。参数:- a:第一个整数- b:第二个整数调用场景:当用户需要进行数值加法计算时使用。"""除了内置的。

大模型大数据攻城狮的专栏 1139

激光打标轴坐标计算分析

‌:基于坐标差的平方和开方运算,勾股定理将几何关系转化为代数计算,从而实现了从坐标到距离的精确转换‌12。直角三角形的应用从上图可以看到A,B,P三个点连起来就是一个直角三角形了。用勾股定理计算距离 C#有相关的方法直接传参数就可以了。很方便。

StevenChen的博客 312

LangChain 宝典 00:一个简单的 RAG demo

RAG 宝典的开篇文章,使用 LangChain 构建一个简单的 demo

weixin_68908126的博客 2530

提升JVM性能:CMS垃圾回收器的优化分析与案例研究

本文介绍了CMS(Concurrent Mark-Sweep)垃圾回收器的工作原理、优缺点及常见问题,并通过具体案例分析了其优化策略。重点探讨了CMS的各个阶段,包括标记、并发清理和重标记,分析了可能导致性能瓶颈的因素如停顿时间过长和内存碎片化。文章还分享了调整垃圾回收参数、结合其他垃圾回收器以及内存优化等方法,帮助提高CMS的回收效率和性能。最后,文章展望了随着JVM发展,结合新一代垃圾回收器优化的趋势,助力Java应用在高并发环境下的性能提升。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 175万+

【建议收藏】大模型核心技术解析:Langchain、RAG与向量化的实战指南

本文详细解析了大模型技术中的Langchain、RAG和向量化等核心概念。Langchain作为高代码Agent框架面向开发者,而Dify等低代码平台则适合非技术人员。RAG技术通过数据工程和向量化实现知识检索,但面临"语义相似≠答案相关"的挑战。文章提出将向量库降级为语义路由器,结合结构化知识库的混合架构,并通过咖啡配方案例展示了技术实现过程与优化方向。

m0_59162559的博客 861

2026年佰维存储数字IC笔试试卷带答案

建立时间是有效时钟沿到来前,输入数据必须稳定保持的最短时间。保持时间是有效时钟沿到来后,输入数据必须继续稳定保持的最短时间。

Open 103

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

收藏!小白程序员必看:Langchain、向量化、RAG大模型概念科普与实战解析

本文详细解析了Langchain、向量化、RAG等大模型核心概念,对比了Langchain与Dify、Coze等Agent平台的定位与适用对象,并通过咖啡知识问答案例,深入剖析了RAG技术链路及向量化应用。文章指出,向量检索虽在模型初期作用有限,但仍是知识搜索的重要手段,并探讨了向量路由与结构化知识库结合的混合架构,旨在提升答案精准性。最后,文章强调学习大模型技术的重要性,并分享了免费学习资料获取方式。

2401_85375186的博客 707

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: Kimi Code与MiMo Code:2026年AI编程助手的双雄对决
下一篇: LangChain + RAG 实战(三):构建第一个 RAG Chain
Yardon_Official
博客等级 码龄5年 800粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yardon_Official

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值