基于 LangChain 和 ChatGPT 构建 PDF 问答机器人
引言
在使用 ChatGPT 等通用大模型后,我们常面临一个需求:能否利用它来处理我们自己的私有文档资料,并提供精准的文档问答与摘要?
直接微调模型虽然可行,但成本高且需要大量数据集,且通常只能赋予模型单一技能。另一种方法是使用提示词(Prompt)将文档上下文传入,但受限于 Token 长度和 API 调用成本,处理大量文档时效率较低。
本文介绍一种基于检索增强生成(RAG)的思路,使用 LangChain 结合向量数据库和大模型构建 PDF 聊天机器人原型。该方案证明了从非结构化文档中提取信息并进行问答的可行性,同时避免了大模型在未训练知识上的幻觉问题。
系统架构
核心流程如下:
- 数据加载:加载 PDF、HTML、文本等源文件。
- 文本分割:将长文档切分为适合嵌入的小块(Chunks)。
- 向量化:使用 Embedding 模型将文本转换为数字向量表示。
- 索引构建:将向量存入向量数据库(如 ChromaDB)并建立索引。
- 检索与生成:用户提问经向量化后,在数据库中检索相似内容,连同问题一起发送给 LLM 生成回答。
注:上图展示源文件经工程化处理存入向量库,用户问题向量化后匹配最近邻数据返回给大模型,并记录聊天历史。
开发环境准备
运行本项目需要 Python 版本不低于 3.7。建议创建虚拟环境以隔离依赖。
1. 创建虚拟环境
# 创建虚拟环境
$ python3 -m venv llm_app_env
# 在 MacOS 或 Linux 上激活
$ source llm_app_env/bin/activate
# 在 Windows 上激活
$ llm_app_env\Scripts\activate.bat
2. 安装依赖库
openai[embeddings]==0.27.6
langchain==0.0.155
pypdf==3.8.1
tiktoken==0.3.3
faiss-cpu==1.7.4
unstructured==0.6.2
chromadb==0.3.21
llama-index ==0.6.1
jupyterlab
LangChain 是一个功能强大的开源工具,可作为中间层连接应用程序与各种 LLM 提供商(如 OpenAI、Cohere、Huggingface 等)。它提供了处理内存、长文档及令牌限制问题的特性,支持自定义应用构建。


