
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍Document Loader——加载文档实例Text Splitter——文档切分实例切分参数设置指南完整流程加载 → 切分 → 向量化实例之前的文章我们手动输入文本但在实际项目中文档可能来自 PDF、网页、Markdown 文件等。本节介绍如何使用 Document Loader 加载各类文档以及如何用 Text Splitter 将文档切分成适合检索的小块。Document Loader——加载文档LangChain 提供了数十种文档加载器覆盖常见文件格式Loader来源安装包TextLoader.txt 文件langchain内置PyPDFLoaderPDF 文件langchain-community pypdfWebBaseLoader网页 URLlangchain-community beautifulsoup4CSVLoaderCSV 文件langchain-communityUnstructuredMarkdownLoaderMarkdown 文件langchain-community unstructured实例# 加载文本文件内置无需额外安装from langchain_community.document_loaders import TextLoaderloader TextLoader(knowledge.txt, encodingutf-8)docs loader.load()print(f加载了 {len(docs)} 个文档)print(f内容预览: {docs[0].page_content[:150]}...)# 加载网页# pip install langchain-community beautifulsoup4from langchain_community.document_loaders import WebBaseLoaderloader WebBaseLoader(https://www.runoob.com/python/python-tutorial.html)docs loader.load()print(f\n网页内容: {docs[0].page_content[:150]}...)Text Splitter——文档切分文档通常太长需要切分成小块chunk才能有效检索。切分策略直接影响 RAG 效果实例from langchain_text_splitters import RecursiveCharacterTextSplitter# 创建切分器text_splitter RecursiveCharacterTextSplitter(chunk_size500, # 每块最多 500 个字符chunk_overlap50, # 块之间重叠 50 个字符separators[\n\n, \n, 。, , , , , , ],# 优先按段落分割然后是句子最后是字符)# 示例文档long_text 菜鸟教程RUNOOB是一个免费的编程学习平台。平台提供了丰富的编程语言教程包括但不限于- Python 教程从基础语法到数据分析- Java 教程面向对象编程到 Spring 框架- 前端教程HTML、CSS、JavaScript 及其框架所有教程都配有详细的代码示例和在线运行环境。学习者可以通过边学边练的方式快速掌握编程技能。# 切分文档chunks text_splitter.split_text(long_text)print(f原文长度: {len(long_text)} 字)print(f切分后: {len(chunks)} 块\n)for i, chunk in enumerate(chunks):print(f--- 块 {i1} ({len(chunk)} 字) ---)print(chunk)print()运行结果原文长度: 153 字 切分后: 3 块 --- 块 1 (54 字) --- 菜鸟教程RUNOOB是一个免费的编程学习平台。 平台提供了丰富的编程语言教程包括但不限于 --- 块 2 (49 字) --- - Python 教程从基础语法到数据分析 - Java 教程面向对象编程到 Spring 框架 --- 块 3 (50 字) --- - 前端教程HTML、CSS、JavaScript 及其框架 所有教程都配有详细的代码示例和在线运行环境。chunk_overlap 很重要。如果块之间没有重叠一个完整的句子可能被切成两半导致检索时遗漏关键信息。50-100 字符的重叠是常见的设置。切分参数设置指南场景chunk_sizechunk_overlap原因FAQ 问答200~50020~50问答对较短小块即可技术文档500~100050~100技术内容需要更多上下文长文章/论文1000~2000100~200需要保留段落完整性代码库500~15000~50函数/类作为自然边界完整流程加载 → 切分 → 向量化实例from langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_chroma import Chroma# from langchain_community.document_loaders import TextLoader# 流程 1加载# loader TextLoader(runoob_knowledge.txt, encodingutf-8)# docs loader.load()# 为演示直接使用示例文本docs [菜鸟教程RUNOOB是一个免费的编程学习网站。,网站提供 Python、Java、HTML 等多种编程语言的教程。,Python3 基础教程共 30 章适合零基础入门学习。,HTML 基础教程共 25 章包含表单、多媒体等内容。,菜鸟教程的所有基础教程都是免费的。,]# 流程 2切分text_splitter RecursiveCharacterTextSplitter(chunk_size100,chunk_overlap20,)chunks text_splitter.create_documents(docs)# 流程 3向量化存储embeddings OpenAIEmbeddings(modeltext-embedding-3-small)vector_store Chroma.from_documents(documentschunks,embeddingembeddings,persist_directory./runoob_db,)print(f已建立索引{len(chunks)} 个文档块)# 流程 4检索results vector_store.similarity_search(Python 教程有多少章, k2)for doc in results:print(f检索结果: {doc.page_content})运行结果已建立索引5 个文档块 检索结果: Python3 基础教程共 30 章适合零基础入门学习。 检索结果: 菜鸟教程RUNOOB是一个免费的编程学习网站。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧