乐于分享
好东西不私藏

LangChain :基于文档的问答 (Q&A)

LangChain :基于文档的问答 (Q&A)

📖LangChain :基于文档的问答 (Q&A)

在处理大量私有数据或实时文档时,直接将全文放入 Prompt 是不现实的。LangChain 通过 RAG (Retrieval Augmented Generation) 技术解决了这一问题。

1. 核心流程:五个关键步骤

• Loading (加载):从 PDF、Markdown 或数据库加载原始文档。

• Splitting (拆分):将大文档切分成小的语义块(Chunks),因为模型有上下文长度限制。

• Storage (存储):将文本块转换为向量(Embeddings)并存入向量数据库(Vector Store)。

• Retrieval (检索):根据用户问题,从数据库中找出最相关的文本块。

• Output (输出):将问题和检索到的文本块一起交给 LLM,生成最终回答。

2. 关键组件说明

A. Embeddings (嵌入)

将文本转化为数字向量的技术。相似含义的文本在向量空间中的距离更近。

B. Vector Stores (向量存储)

专门用于存储和搜索向量的数据库(如 Chroma, Pinecone, FAISS)。它能执行”相似度搜索”。

C. RetrievalQA (检索问答链)

这是 LangChain 预封装好的链,它自动完成了”检索 → 构造 Prompt → 询问 LLM”的全过程。

3. 链的四种处理模式 (Chain Types)

当检索出的文本块太多时,有四种策略处理:

• Stuff:最常用。将所有检索到的块直接”塞进”一个 Prompt。速度快,成本低,但受模型长度限制。

• Map Reduce:对每个块分别询问,最后汇总。克服了长度限制,但耗时较长且丢失跨块语境。

• Refine:循环迭代。先看第一个块得出初步答案,再结合第二个块改进答案。答案质量高,但极慢。

• Map Re-rank:对每个块评分,选出分数最高的那个作为答案。

4. 代码实现示例 (Python)

以下展示了如何实现一个基础的”Stuff”模式检索问答:

from langchain.chains import RetrievalQA 

from langchain.chat_models import ChatOpenAI 

from langchain.document_loaders import CSVLoader 

from langchain.vectorstores import DocArrayInMemorySearch 

from langchain.indexes import VectorstoreIndexCreator 

# 1. 加载数据 

loader = CSVLoader(file_path=”OutdoorClothingCatalog_1000.csv”)  

# 2. 创建索引 (内部自动完成拆分、嵌入和存储) 

index = VectorstoreIndexCreator(     

    vectorstore_cls=DocArrayInMemorySearch ).from_loaders([loader])  

# 3. 执行查询 

llm = ChatOpenAI(temperature=0.0) 

query = “请列出具有防晒功能的衬衫并总结其特点。”  

# 方式 A:直接通过索引查询 (高层抽象) 

response = index.query(query, llm=llm)  

# 方式 B:使用 RetrievalQA 链 (更具控制力) 

retriever = index.vectorstore.as_retriever() 

qa_stuff = RetrievalQA.from_chain_type(     

    llm=llm,     

    chain_type=”stuff”,     

    retriever=retriever,     

    verbose=True) 

response = qa_stuff.run(query)  

print(response)

5. 核心逻辑总结

术语

描述

Vector Database

存放知识库的”硬盘”。

Similarity Search

在硬盘里找”最相关参考书”的过程。

Chain Type: Stuff

把参考资料全部塞给模型的方法。

Index

结构化的知识表示,方便快速检索。

6. 为什么需要 RAG?

• 克服幻觉:强迫模型基于提供的证据回答。

• 知识更新:无需重新训练模型,只需更新向量数据库即可获取最新信息。

• 隐私保护:私有文档不需要上传到模型训练集中,只在检索时作为上下文使用。

关键要点:理解 Q&A 流程是开发企业级 AI 知识库助手的核心。