第十七章:知识库与向量数据库

学习目标

  • 理解知识库的类型和建设流程
  • 掌握向量搜索的原理和优势
  • 了解常见向量数据库的特点和适用场景
  • 能够使用Chroma构建简单的向量数据库

前置要求

建议先学习第十四章:向量与Embedding,了解向量、Embedding和相似度计算的基本概念。

AI知识库与向量数据库架构图
图17-1 知识库与向量数据库架构:文档经分块和Embedding后存入向量数据库,检索时通过相似度匹配返回相关内容

什么是知识库?

知识库是有组织地存储和管理知识的系统,为AI应用提供可靠的信息来源。在AI系统中,知识库是RAG、Agent等应用的基础设施。

为什么需要知识库?

LLM的知识来自训练数据,存在时效性差(无法获取最新信息)、领域知识不足(缺乏专业领域深度知识)、无法引用来源(回答无法追溯出处)等问题。知识库为AI提供了可靠、可更新、可追溯的外部知识来源。

知识库的类型

类型 存储方式 检索方式 适用场景
结构化知识库 关系数据库(SQL)、知识图谱 精确查询(SQL、SPARQL) 需要精确查询的结构化数据
非结构化知识库 文档、网页、PDF 全文搜索、向量搜索 文档问答、知识检索
向量知识库 向量数据库 向量相似度搜索 RAG系统、语义搜索
混合知识库 多种存储方式组合 多路召回、融合排序 复杂企业级应用

知识库建设流程

1

数据收集

收集文档、网页、数据库等各类数据源

2

数据清洗

去除噪声、格式统一、质量检查

3

数据处理

文档切分、向量化、建立索引

4

存储入库

将处理后的数据存入向量数据库

5

检索应用

通过检索接口为AI应用提供知识服务

向量数据库详解

向量数据库是专门用于存储和检索高维向量的数据库。它通过向量相似度搜索(而非精确匹配)来找到语义相关的内容。

传统搜索 vs 向量搜索

维度 传统关键词搜索 向量语义搜索
匹配方式 精确关键词匹配 语义相似度匹配
理解能力 不理解语义,只看字面 理解语义,能匹配同义词
查询示例 "机器学习"只能匹配含"机器学习"的文档 "机器学习"也能匹配含"AI训练"、"模型训练"的文档
跨语言 不支持 多语言模型可支持
速度 极快(倒排索引) 快(近似最近邻算法)

向量搜索的优势

  • 语义理解:能匹配含义相近的内容,而非仅字面匹配
  • 容错性强:对拼写错误、表述方式变化不敏感
  • 跨模态:可以实现图文互搜(图片向量与文本向量在同一空间)
  • 个性化:可以结合用户偏好向量进行个性化推荐

常见向量数据库

  • Chroma:轻量级、Python友好、适合开发和小规模应用
  • Milvus:分布式、高性能、适合大规模生产环境
  • Pinecone:全托管云服务、无需运维
  • Weaviate:支持混合搜索(向量+关键词)
  • Qdrant:Rust编写、高性能、支持复杂过滤
  • FAISS:Meta开源的向量检索库(非完整数据库)

向量检索流程

1

向量化查询

将用户查询文本转换为Embedding向量

2

相似度计算

计算查询向量与数据库中所有向量的相似度

3

排序筛选

按相似度排序,返回Top-K个最相关的结果

4

返回结果

返回对应的原始文档内容和元数据

使用Chroma构建向量数据库

import chromadb
from chromadb.utils import embedding_functions

# 1. 创建Chroma客户端
client = chromadb.PersistentClient(path="./my_chroma_db")

# 2. 初始化Embedding函数
embedding_fn = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="BAAI/bge-small-zh-v1.5"
)

# 3. 创建集合(相当于一张表)
collection = client.get_or_create_collection(
    name="ai_knowledge_base",
    embedding_function=embedding_fn,
    metadata={"description": "AI学习笔记知识库"}
)

# 4. 添加文档
documents = [
    "机器学习是人工智能的一个分支,通过数据训练模型来学习规律。",
    "深度学习使用多层神经网络来学习数据的复杂表示。",
    "自然语言处理(NLP)让计算机能够理解和生成人类语言。",
    "计算机视觉让机器能够理解和处理图像和视频数据。",
    "强化学习通过奖励和惩罚机制来训练智能体做出最优决策。"
]

collection.add(
    documents=documents,
    ids=["doc1", "doc2", "doc3", "doc4", "doc5"],
    metadatas=[
        {"category": "ML", "chapter": 4},
        {"category": "DL", "chapter": 5},
        {"category": "NLP", "chapter": 11},
        {"category": "CV", "chapter": 9},
        {"category": "RL", "chapter": 4}
    ]
)
print(f"已添加 {collection.count()} 条文档")

# 5. 向量搜索
results = collection.query(
    query_texts=["如何让计算机理解人类语言?"],
    n_results=3
)

print("\n搜索结果:")
for i, (doc, distance, metadata) in enumerate(zip(
    results["documents"][0],
    results["distances"][0],
    results["metadatas"][0]
)):
    print(f"\n[{i+1}] 相似度距离: {distance:.4f}")
    print(f"    分类: {metadata['category']}")
    print(f"    内容: {doc}")

# 6. 带条件过滤的搜索
filtered_results = collection.query(
    query_texts=["学习方法"],
    n_results=2,
    where={"category": "ML"}
)

本章小结

  1. 知识库是有组织地存储和管理知识的系统,分为结构化、非结构化、向量和混合四种类型,是AI应用的重要基础设施。
  2. 向量数据库通过语义相似度搜索实现智能检索,相比传统关键词搜索,能理解语义、匹配同义词、容错性更强。
  3. 向量检索流程包括:向量化查询→相似度计算→排序筛选→返回结果,核心是Embedding模型和近似最近邻算法。
  4. Chroma是轻量级向量数据库,Python API友好,适合快速构建原型和小规模应用;大规模生产环境推荐使用Milvus。

练习题

  1. 向量搜索相比传统关键词搜索的最大优势是什么?

    A. 搜索速度更快
    B. 能理解语义,匹配含义相近的内容
    C. 占用存储空间更小
    D. 不需要建立索引

    答案:B。向量搜索通过Embedding将文本转换为向量,通过向量相似度来匹配语义相关的内容,即使字面不完全相同也能找到相关结果。

  2. 以下哪个向量数据库最适合大规模生产环境?

    A. Chroma
    B. FAISS
    C. Milvus
    D. 以上都不适合

    答案:C。Milvus是分布式架构的向量数据库,支持十亿级向量的高性能检索,最适合大规模生产环境。

  3. 向量检索的四个步骤中,第二步是什么?

    A. 向量化查询
    B. 相似度计算
    C. 排序筛选
    D. 返回结果

    答案:B。向量检索的四个步骤依次是:向量化查询→相似度计算→排序筛选→返回结果。