基于 LangChain 和 ChatGLM 的本地知识库问答系统搭建
最近有看到可以利用 LangChain + OpenAI 的 API 来实现一个问答系统。既然可以将 ChatGLM 集成进 LangChain,是不是我们可以在完全不使用 OpenAI 的情况下来实现一个私有化的本地知识库问答系统的搭建呢?本文将介绍一种可行的方案。
环境准备
在开始之前,请确保已安装以下依赖库:
pip install langchain langchain-community chromadb sentence-transformers transformers torch
步骤详解
1. ChatGLM 集成进 LangChain
首先需要将 ChatGLM 模型加载到 LangChain 中。通常可以通过 HuggingFacePipeline 或特定的 LangChain 适配器来实现。这里假设已经封装好了对应的接口。
2. 生成 Embedding
本文使用一篇公开的新闻数据来做测试。
切分文本
参照 Text Splitters 文档,可以选择对应的文本切分器。如果是通用文本的话,建议选择 RecursiveCharacterTextSplitter,代码如下:
from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 导入文本
loader = UnstructuredFileLoader("./data/news_test.txt")
# 将文本转成 Document 对象
data = loader.load()
print(f'documents:{len(data)}')
# 初始化加载器
# chunk_size: 每一个分片的最大大小
# chunk_overlap: 相邻的块之间的最大重叠,有助于保持上下文连续性
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=0)
# 切割加载的 document
split_docs = text_splitter.split_documents(data)
print("split_docs size:", len(split_docs))
打印结果如下:
documents: 1
split_docs size: 31
- chunk_size:每一个分片的最大大小,根据模型上下文窗口调整。


