LangChain接入向量数据库

入门·10 分钟·通过可运行代码讲解「LangChain接入向量数据库」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。

LangChain接入向量数据库

LangChain 常用于构建 RAG 应用,而向量数据库是 RAG 的核心组件之一。接入向量数据库后,系统可以根据用户问题检索相关文档,再交给模型回答。

RAG最小流程

  1. 加载文档;
  2. 切分文档;
  3. 生成向量;
  4. 存入向量数据库;
  5. 用户提问时检索相关片段;
  6. 把片段放入提示词;
  7. 模型生成答案。

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 的质量上限,往往取决于文档处理和检索质量。