Prompt实战之构建语义搜索引擎 5)构建向量数据库与检索器

Prompt实战之构建语义搜索引擎 5)构建向量数据库与检索器

前一章我们已经将文档片段向量化,现在需要将这些向量结构化地存储起来,并提供高效检索能力

这就是向量数据库(Vector Store)和检索器(Retriever)的作用。


5.1 向量数据库的作用

向量数据库用于存储:

  • 文档片段(原文)
  • 对应的向量(Embedding)
  • 可选的元信息(metadata)

并支持以下操作:

  • 插入(Indexing)
  • 相似度搜索(Similarity Search)
  • 过滤与排序

5.2 LangChain 支持的向量数据库

向量数据库类型是否支持本地备注
FAISS本地快速轻量,离线优选
Chroma本地+服务端支持过滤、持久化等高级功能
Milvus / Qdrant向量服务端❌(需部署)商业场景、支持大规模数据
Weaviate / Pinecone向量服务端❌(需注册)商业服务,适用于云部署

本章重点使用 FAISSChroma


5.3 使用 FAISS 存储向量

安装依赖

pip install faiss-cpu

构建向量数据库

from langchain.vectorstores import FAISS

# 构建 FAISS 向量数据库
vectorstore = FAISS.from_documents(
    documents=split_docs,
    embedding=embedding_model
)

向量搜索示例

query = "中国的法律体系如何演变?"
docs = vectorstore.similarity_search(query, k=3)

for i, doc in enumerate(docs):
    print(f"第{i+1}条结果:\n{doc.page_content}\n")

5.4 使用 Chroma 存储向量(支持持久化)

安装依赖

pip install chromadb

构建 Chroma 向量库

from langchain.vectorstores import Chroma

vectorstore = Chroma.from_documents(
    documents=split_docs,
    embedding=embedding_model,
    persist_directory="chroma_db"
)

vectorstore.persist()

💡 Chroma 支持 metadata 过滤、删除、更新等操作,更适合构建长期项目。


5.5 检索器(Retriever)介绍

Retriever 是向量数据库的封装,LangChain 使用它来做“语义搜索”。

创建检索器

retriever = vectorstore.as_retriever(
    search_type="similarity",  # 可选:"mmr", "similarity_score_threshold"
    search_kwargs={"k": 5}
)

使用检索器

retrieved_docs = retriever.get_relevant_documents(query)

📌 Retriever 是 LangChain Agent / Chain 模块的重要输入组件。


5.6 检索器的高级用法

用法说明
MMR 检索结果去冗余,覆盖更多主题
分数阈值过滤(score_threshold)仅返回相似度高于设定值的文档
向量 + 元信息过滤组合如限制“文档年份 > 2020 且作者为张三”

示例:

retriever = vectorstore.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={"score_threshold": 0.8, "k": 3}
)

5.7 本章小结

你已经掌握了:

  • 向量数据库的结构与作用;
  • 如何使用 FAISS 与 Chroma 存储向量;
  • 如何使用检索器执行语义搜索;
  • 常见的高级检索策略与参数配置。

练习区 🛠️

  1. 使用 FAISS 构建一个向量数据库,并搜索关键词“机器学习的发展史”,输出前 3 个文档片段。
  2. 改用 Chroma,并添加自定义 metadata={"source": "chapter1.pdf"},尝试基于 source 进行过滤检索。
  3. 比较两种检索器类型:similaritymmr,观察返回文档的差异。
  4. 尝试更换向量模型(如 bge-large),观察相似度排序是否变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是Jamon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值