当前位置: 首页 > news >正文

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

本文介绍如何将 PDF 和 TXT 文档通过摘要提取与向量化处理后存入向量数据库 Chroma,并实现 RAG(Retrieval-Augmented Generation)问答功能,适用于私有知识库、行业报告系统等场景。


一、 背景介绍

在构建 AI 应用(如智能问答、知识检索)时,第一步往往是将原始文档转化为向量形式并存入数据库。这通常包含以下流程:

 

  1. 加载原始文件(PDF、TXT 等格式)

  2. 文本切分(控制 chunk 大小以适配模型)

  3. 使用大模型提取摘要(减少冗余)

  4. 向量化(生成 embedding 向量)

  5. 存入向量数据库(如 Chroma)

本文将使用 LangChain 框架 + 阿里通义大模型 + Chroma 数据库,完成从原始文档到知识入库再到语义检索的完整闭环。


二、 技术选型

工具作用
LangChain文档加载、文本切分、链式处理调用
ChromaDB本地/远程向量数据库,支持相似度搜索
DashScope通义千问 Embedding 与摘要模型支持
PyMuPDF高效解析 PDF 文档内容
tqdm控制台进度条显示,便于查看批处理状态

三、 什么是向量数据库?

在 AI 应用中,大模型会将文本编码成向量(embedding),以便进行语义层面的匹配与搜索。此时,传统数据库已无法满足需求,我们通常会使用向量数据库来做底层支撑。

向量数据库的优势包括:

  • ✅ 适配高维嵌入向量(如 OpenAI/通义输出的 768/1536 维向量)

  • ✅ 提供基于向量的相似度检索(支持余弦距离、欧氏距离等)

  • ✅ 支持批量插入、删除、更新

  • ✅ 支持元数据绑定,便于实现过滤、分类检索等高级功能

本项目使用的 Chroma 向量数据库 是一个轻量级、高性能的开源库,具备本地部署优势,非常适合私有化知识库场景。


四、 第一步:连接 Chroma 向量数据库

from chromadb import HttpClient
from langchain_chroma import Chroma
from models import get_dashscope_embedclient = HttpClient(host="localhost", port=8000)
embed = get_dashscope_embed()db = Chroma(collection_name="doc_db", embedding_function=embed, client=client)# 可选:清空已有数据
ids = db.get(include=[])["ids"]
if ids:db.delete(ids=ids)

五、加载 PDF 并进行摘要处理

loader = PyMuPDFLoader("计算机行业深度报告:AI搜索,大模型商业落地“第一束光”.pdf")
docs = loader.load()splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
chunks = splitter.split_documents(docs)prompt = ChatPromptTemplate.from_messages([("system", "你是一个文本摘要机器人,只输出适合入库的知识摘要:\n\n文章:{passage}\n\n摘要:")
])
chain = prompt | get_tongyi_llm() | StrOutputParser()final_docs = []
for doc in tqdm(chunks):metadata = {"author": "Tom","file_name": "计算机行业深度报告:AI搜索,大模型商业落地“第一束光”.pdf","create_datetime": get_current_datetime(),"department": "技术部","origin": doc.page_content}meta = deepcopy(doc.metadata)meta.update(metadata)summary = chain.invoke({"passage": doc.page_content})final_docs.append(Document(page_content=summary, metadata=meta))

六、加载 TXT 文本并生成摘要

with open("寻龙特刊.text", encoding="utf8") as f:texts = [t.strip() for t in f.read().split("###") if t.strip()]for text in tqdm(texts):metadata = {"author": "李四","file_name": "寻龙特刊.text","create_datetime": get_current_datetime(),"department": "产品部","origin": text}summary = chain.invoke({"passage": text})final_docs.append(Document(page_content=summary, metadata=metadata))

七、 批量写入 Chroma 向量数据库

batch_size = 10
num_docs = len(final_docs)for idx in range(math.ceil(num_docs / batch_size)):batch = final_docs[idx * batch_size : (idx + 1) * batch_size]if batch:db.add_documents(batch)

八、 查询测试:RAG 检索问答示例

入库后,我们就可以使用大模型 + 向量数据库实现 RAG 查询(检索增强生成),如下所示:

from langchain.chains import RetrievalQA
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from models import get_tongyi_llm# 构建 RAG 检索链
retriever = db.as_retriever(search_kwargs={"k": 3})  # top-3 相似块
llm = get_tongyi_llm()prompt = ChatPromptTemplate.from_messages([("system", "你是一个行业知识问答助手,请根据以下内容准确回答用户问题:\n\n{context}\n\n问题:{question}\n\n回答:")
])qa_chain = (prompt| llm| StrOutputParser()
)# 查询示例
query = "大模型在 AI 搜索领域有哪些实际应用?"
docs = retriever.get_relevant_documents(query)
context = "\n\n".join([doc.page_content for doc in docs])response = qa_chain.invoke({"context": context,"question": query
})print("💡 回答:", response)

你将看到模型结合真实资料内容给出的精准回答,这就是典型的 RAG 问答流程。


九、总结

本文构建了一个端到端的私有知识入库与查询系统:

  • ✅ 多格式文档支持(PDF、TXT)

  • ✅ 摘要提取减少冗余,提升嵌入质量

  • ✅ 向量化并存入 Chroma 向量数据库

  • ✅ 基于检索的问答系统(RAG)可灵活对接各类大模型

这一套流程适用于企业知识管理、内部报告搜索、垂直问答系统等多种场景,是 LLM 应用落地的重要基建环节。

相关文章:

  • Linux基本指令篇 —— cd指令
  • 【TypeScript】结构化类型系统与标明类型系统
  • [Protobuf] 快速上手:安全高效的序列化指南
  • Anaconda 常用命令汇总
  • RocketMQ核心特性与最佳实践
  • 用HTML5实现实时ASCII艺术摄像头
  • QT6安装与概念介绍
  • 汉诺塔超级计算机堆栈区与数据区的协同
  • 【Linux】系统程序−进度条
  • MySQ里的主从复制
  • 深入探索AI模型工程:算法三大门派与监督学习的魅力
  • python的pip怎么配置的国内镜像
  • 深入理解设计模式之装饰器模式
  • 网络段、主机段、子网掩码
  • 【网络安全】轻量敏感路径扫描工具
  • MySQL权限管理:层级化作用域、权限分类、操作命令
  • 5GC网络中的QoS Flow级QoS控制
  • Baklib领跑五款知识管理工具评测
  • 五窍排泄物的形成机制
  • 【JSON 】全面掌握JSON的相关知识
  • 北京哪里可以做网站/网络推广引流是做什么的
  • 阿里云的网站建设好不好/百度中心人工电话号码
  • 广州网站设计建设/淘宝店铺买卖交易平台
  • 沈阳个人做网站/企业邮箱哪个好
  • 郑州模板建站多少钱/汽车推广软文
  • 接做网站的私活怎么报价/上海谷歌seo推广公司