恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

[LangChain RAG] 06 文档加载、Chroma 向量库与检索增强问答

  • 首页
  • 资讯中心
  • /
  • [LangChain RAG] 06 文档加载、Chroma 向量库与检索增强问答

相关资讯

高速列车自动驾驶曲线生成:动态规划在轨交控制中的硬核落地 2026/9/3 16:05:41
体育课选课系统如何快速搭建?这个办法简单又实用 2026/9/3 16:00:41
SimAssist:基于MATLAB API的Simulink模型批量处理与自动化实践 2026/9/3 16:00:41

最新资讯

电锯目标检测数据集:1107张真实工业图像VOC+YOLO双格式
Spring AI Chat模型入门——理解 ChatModel、ChatClient、Prompt 和 ChatResponse
Shimano 8170电变与CANYON公路车:技术解析与性价比评估
ARM架构与英伟达GPU融合趋势下的开发环境适配与实战指南
MC模组配乐全流程:从sounds.json到Fabric自定义音乐
蛋白粉别被营销迷惑,看懂蛋白科研硬实力再选

今日推荐

零基础装 OpenClaw 小龙虾 AI:Windows 一键部署教程与避坑要点
Hermes Agent 本地部署新方案:Windows 整合包减少依赖报错
实测 OpenClaw 一键包,5 分钟完成本地自动化环境搭建

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

[LangChain RAG] 06 文档加载、Chroma 向量库与检索增强问答

发布时间:2026/9/3 16:05:41
[LangChain RAG] 06 文档加载、Chroma 向量库与检索增强问答 一、Document 与文档加载器文档加载器提供一套标准接口用于将不同来源如 CSV、PDF 或 JSON 等的数据读取为 LangChain 的文档格式确保无论数据来源如何都能对其进行一致性处理。1.1 BaseLoader 与 Document文档加载器内置或自行实现需实现BaseLoader接口。Class Document是 LangChain 内文档的统一载体所有文档加载器最终返回此类的实例。核心记录page_content文档内容metadata文档元数据字典一个基础的Document类实例基于如下代码创建from langchain_core.documents import Document document Document( page_contentHello, world!, metadata{source: https://example.com} )1.2 两个统一方法load()一次性加载全部文档lazy_load()延迟流式传输文档对大型数据集很有用避免内存溢出官方文档加载器列表Document loader integrations - Docs by LangChain重点加载器CSVLoader、JSONLoader、PDFLoaderPyPDFLoader、TextLoader。二、CSVLoader2.1 最简用法from langchain_community.document_loaders.csv_loader import CSVLoader loader CSVLoader(file_path./xxx.csv) data loader.load() print(data)2.2 自定义解析loader CSVLoader( file_path./xxx.csv, csv_args{ delimiter: ,, # 指定分隔符 quotechar: , # 指定字符串的引号包裹 # 字段列表无表头使用有表头勿用会读取首行作为数据 fieldnames: [name, age, gender], }, ) data loader.load() print(data)2.3 小结文档加载器均继承于 BaseLoader返回 Documentload一次性批量加载list 内含 Document内容过多可能内存溢出lazy_load得到生成器for 循环依次获取单个 Document适合大文档三、JSONLoader 与 jq3.1 依赖使用 JSONLoader 需要额外安装pip install jq。jq 是跨平台 JSON 解析工具LangChain 底层对 JSON 的解析基于 jq。抽取依赖jq_schema语法。3.2 jq_schema 常见写法示例对象{ name: 周杰轮, age: 11, hobby: [唱, 跳, RAP], other: { addr: 深圳, tel: 12332112321 } }jq_schema含义.整个 JSON 对象根[]数组.name抽取「周杰轮」.hobby抽取爱好数组.hobby[1]或.hobby.[1]抽取「跳」.other.addr抽取地址「深圳」数组[ {name: 周杰轮, age: 11, gender: 男}, {name: 蔡依临, age: 12, gender: 女}, {name: 王力鸿, age: 11, gender: 男} ].[]得到 3 个字典.[].name抽取全部 name即 3 个 name 信息3.3 初始化参数from langchain_community.document_loaders import JSONLoader loader JSONLoader( file_pathxxx.json, # 文件路径 jq_schema., # jq schema 语法 text_contentFalse, # 抽取的是否是字符串默认 True json_linesTrue, # 是否是 JsonLines 文件每一行都是 JSON )四个主要参数file_path必填、jq_schema必填、text_content默认 True、json_lines默认 False。JsonLines 示例每一行都是独立字典{name: 周杰轮, age: 11, gender: 男} {name: 蔡依临, age: 12, gender: 女} {name: 王力鸿, age: 11, gender: 男}四、PyPDFLoaderLangChain 内支持许多 PDF 加载器课件选用PyPDFLoader。依赖 PyPDFpip install pypdf。from langchain_community.document_loaders import PyPDFLoader loader PyPDFLoader( file_path, # 文件路径必填 modepage, # page按页面划分不同 Documentsingle单个 Document passwordpassword, # 文件密码 )五、TextLoader 与文本分割5.1 TextLoader读取文本文件如.txt将全部内容放入一个 Document 对象中。from langchain_community.document_loaders import TextLoader loader TextLoader( xxx.txt, encodingutf-8, ) docs loader.load() print(docs) print(len(docs)) # 结果为 1如果文档很大加载到一个 Document 里并不合适。5.2 RecursiveCharacterTextSplitter递归字符文本分割器按自然段落分割大文档是 LangChain 官方推荐的默认字符分割器。它在保持上下文完整性和控制片段大小之间实现了良好平衡开箱即用效果佳。from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter loader TextLoader( ../P3_LangChainRAG开发/data/Python基础语法.txt, encodingutf-8, ) docs loader.load() splitter RecursiveCharacterTextSplitter( chunk_size500, # 分段的最大字符数 chunk_overlap50, # 分段之间允许重叠的字符数 # 文本分段依据 separators[\n\n, \n, 。, , , ., !, ?, , ], # 字符统计依据函数 length_functionlen, ) split_docs splitter.split_documents(docs)5.3 小结TextLoader 加载文本文件返回仅有一个 Document 的 listRecursiveCharacterTextSplitter 是官方推荐的默认分割器可指定小文档最大字符数、重叠字符数可手动指定段落划分依据符号以及字符数量统计函数六、Vector Stores 向量存储基于 LangChain 的向量存储存储嵌入数据并执行相似性搜索。这是一个典型的向量存储应用也即是典型的 RAG 流程。6.1 要做的三件事如何文本转向量前文已经学习创建向量存储并完成存入向量、删除向量、向量检索LangChain 为向量存储提供统一接口add_documentsdeletesimilarity_search6.2 内存向量存储from langchain_core.vectorstores import InMemoryVectorStore from langchain_community.embeddings import DashScopeEmbeddings vector_store InMemoryVectorStore(embeddingDashScopeEmbeddings()) # 添加文档到向量存储并指定 id vector_store.add_documents(documents[doc1, doc2], ids[id1, id2]) # 删除文档通过指定的 id 删除 vector_store.delete(ids[id1]) # 相似性搜索 similar_docs vector_store.similarity_search(your query here, 4)6.3 外部 Chroma 向量存储from langchain_community.embeddings import DashScopeEmbeddings from langchain_chroma import Chroma vector_store Chroma( collection_nameexample_collection, embedding_functionDashScopeEmbeddings(), persist_directory./chroma_langchain_db, # 本地持久化目录不需要可去掉 )6.4 小结InMemoryVectorStore内存向量存储Chroma外部数据库向量存储通用 APIadd_documents、delete、similarity_search整体向量存储使用流程即 RAG 流程索引阶段存、查询阶段检索七、检索增强生成把检索接进 Prompt7.1 两条步骤向量存储实例可通过add_texts(list[str])快速添加文本。先通过向量存储检索匹配信息将用户提问和匹配信息一同封装到提示词模板中再提问模型7.2 手动 RAG 示例减肥知识库# 准备一下资料向量库的数据 # add_texts 传入一个 list[str] vector_store.add_texts( [减肥就是要少吃多练, 在减脂期间吃东西很重要,清淡少油控制卡路里摄入并运动起来] ) input_text 怎么减肥 # 检索向量库 result vector_store.similarity_search(input_text, k2) reference_text [ for doc in result: reference_text doc.page_content reference_text ] chain prompt | print_prompt | model | StrOutputParser() res chain.invoke({input: input_text, context: reference_text}) print(res)7.3 下一步让检索加入链这里检索是链外手工完成的。课件提出下一步让向量检索加入链使用 RunnablePassthrough 类。RunnablePassthrough的作用是让用户问题在链中「原样穿过」同时把检索器挂到同一条 LCEL 链上避免先similarity_search再手动拼context。课件以这个问题收束 RAG 开发主线先掌握「检索 Prompt 模型」再把检索组件化进链。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号