本地知识库问答系统(RAG)
利用 LangChain 的文档加载器(Document Loaders)、文本分割器、向量数据库以及检索链,构建一个支持 PDF/文本文档上传的智能问答系统。用户上传文档后,系统能够基于文档内容精准回答相关问题,而非依赖模型本身的训练知识。
raglangchain向量数据库embedding
目标
- 使用 LangChain 的 PyPDFLoader 或 TextLoader 成功加载至少一份本地文档,并打印文档的页数/块数
- 使用 RecursiveCharacterTextSplitter 对文档进行分块,chunk_size 和 chunk_overlap 参数可自定义,并验证分块结果
- 将文本块通过 Embedding 模型向量化后存入向量数据库,并实现本地持久化
- 构建 RetrievalQA 检索链,能够根据用户输入的问题,从知识库中检索相关内容并生成准确回答
- 在回答中附带返回所引用的原始文档来源(source documents),让回答具备可溯源性
提示
- 加载 PDF 前请确保安装依赖:`pip install pypdf`,加载中文 PDF 时若出现乱码,可尝试 `UnstructuredPDFLoader` 替代
- chunk_size 设置过大会导致检索不精准,设置过小会丢失上下文语义——建议先用 500 字符测试,再根据回答质量调整
- 如果不想调用 OpenAI Embedding(需付费),可以用 `HuggingFaceEmbeddings` 加载本地免费模型,例如 `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` 支持中文
- 使用 `return_source_documents=True` 后,结果字典中有 `source_documents` 字段,可打印每个来源的 `metadata` 查看页码和文件名
- 向量库建立后用 `vectorstore.save_local()` 持久化,下次直接用 `FAISS.load_local()` 加载,避免重复向量化浪费 API 费用