LangChain接入向量数据库
入门·10 分钟·通过可运行代码讲解「LangChain接入向量数据库」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。
LangChain接入向量数据库
LangChain 常用于构建 RAG 应用,而向量数据库是 RAG 的核心组件之一。接入向量数据库后,系统可以根据用户问题检索相关文档,再交给模型回答。
RAG最小流程
- 加载文档;
- 切分文档;
- 生成向量;
- 存入向量数据库;
- 用户提问时检索相关片段;
- 把片段放入提示词;
- 模型生成答案。
LangChain 提供了文档加载器、切分器、Embedding、VectorStore 和 Retriever 等模块。
文档切分
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=80
)
docs = splitter.split_documents(raw_docs)
chunk_size 太大容易噪声多,太小容易缺上下文。chunk_overlap 可以保留片段之间的连续性。
写入向量库
伪代码:
vectorstore = Chroma.from_documents(
documents=docs,
embedding=embedding_model,
persist_directory='db/chroma'
)
实际项目中要保存来源、标题、页码等 metadata,否则回答无法引用出处。
检索相关文档
retriever = vectorstore.as_retriever(search_kwargs={'k': 4})
results = retriever.invoke('报销高铁票需要什么材料?')
k 表示返回多少个片段。太少可能漏资料,太多会增加噪声和 token 成本。
组合成问答链
检索到片段后,把它们拼进提示词:
请只根据以下资料回答问题。
资料:{context}
问题:{question}
如果资料中没有答案,应该要求模型回答“资料中未提到”,避免幻觉。
常见问题
- 文档切分不合理;
- embedding 模型和语言不匹配;
- 没保存 metadata;
- 检索结果相关性差;
- 把太多片段塞给模型;
- 没有评估召回质量。
小结
LangChain 接入向量数据库的重点不是“能查出来”,而是查得准、来源清楚、上下文合适。RAG 的质量上限,往往取决于文档处理和检索质量。