用 LangChain 和 ChatGLM 搭一个本地知识库
企业里做知识库,最先绕不开的不是'能不能回答',而是'数据能不能留在自己手里'。公有云接口省事,但一旦涉及内部文档、合同、流程规范,很多团队最后还是会回到本地部署这条路。LangChain 负责把检索、提示词和模型调用串起来,ChatGLM 负责中文生成,组合起来做一套私有化知识库,路子比较清楚。
方案结构
这里用的是典型的 RAG 架构,核心就四块:
- 大语言模型:ChatGLM 系列,支持本地部署,中文能力够用。
- Embedding 模型:把文本切成向量,常见选择是
bge-m3或m3e-base。 - 向量数据库:存切分后的文档向量,
ChromaDB和Milvus都能用。 - 应用编排:LangChain 负责把加载、切分、检索、问答这些步骤接起来。
这套结构不新,但胜在可控。模型、向量库、切分策略都能单独替换,后面排问题也不会被一个黑盒卡死。
环境准备
基础要求
- Python >= 3.9
- GPU 显存建议 >= 8GB,量化后可以再往下压
- 操作系统:Linux / macOS / Windows
安装依赖
先建虚拟环境,再装需要的库:
python -m venv rag_env
source rag_env/bin/activate # Linux/Mac
# 或
rag_env\Scripts\activate # Windows
pip install langchain langchain-community transformers torch accelerate
pip install chromadb sentence-transformers streamlit
代码实现
加载本地模型
ChatGLM 和 HuggingFace Transformers 配合起来比较直接,先把本地模型拉起来,再用 HuggingFacePipeline 包一层给 LangChain 用。
from langchain.llms import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
model_name = "THUDM/chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map="auto",
trust_remote_code=True
).half()
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=512,
do_sample=True,
temperature=
)
llm = HuggingFacePipeline(pipeline=pipe)


