0Pricing
Learn AI with Python · 课时

向量数据库简介

了解向量数据库存在的原因,使用 FAISS 进行本地相似性搜索,并存储用于人工智能检索的嵌入向量。

向量数据库简介 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

不止于精确匹配

传统数据库通过精确值查找行(WHERE name = "x")。不过,AI 处理的是嵌入——能够捕捉含义的向量——而您通常希望找到与查询最相似的项目,而不是精确匹配。

向量数据库旨在让这种相似性搜索变得快速。

什么是嵌入

嵌入是表示文本、图像或音频的一组数字(即一个向量),使相似的项目在向量空间中彼此靠近。

语义搜索、推荐系统和检索增强生成(RAG)都以嵌入为基础。

import numpy as np

# A toy 4-dim embedding for a sentence
vec = np.array([0.12, -0.43, 0.88, 0.05], dtype="float32")
print(vec.shape)   # (4,)

为何不使用普通数据库

使用蛮力循环将查询与数百万个向量逐一比较会很慢。向量数据库使用专门的索引和距离计算,在毫秒级返回最近邻。

它们还可以扩展、持久化,并在向量旁处理元数据。

衡量相似度

接近程度通过距离度量来衡量:

  • L2(欧几里得)——直线距离;数值越小表示越接近
  • 余弦——向量之间的夹角;适合文本

FAISS 支持多种度量;我们将使用 L2。

认识 FAISS

FAISS(Facebook AI Similarity Search)是一个快速、免费的向量搜索库。它无需服务器即可在本地运行,非常适合学习和原型开发。

import faiss
import numpy as np
# pip install faiss-cpu

使用 IndexFlatL2 创建索引

IndexFlatL2(dim) 使用 L2 距离构建一个平面(蛮力、精确)索引。您必须告知它向量的维度。

“平面”表示返回精确结果,非常适合小型到中型集合。

import faiss

dim = 4
index = faiss.IndexFlatL2(dim)
print(index.is_trained)   # True (flat index needs no training)

使用 index.add 添加向量

将嵌入作为形状为 (n, dim) 的二维 32 位浮点型 NumPy 数组传入。index.add 会存储这些向量;index.ntotal 会报告数量。

import numpy as np

embeddings = np.random.random((100, dim)).astype("float32")
index.add(embeddings)
print(index.ntotal)   # 100

使用 index.search 进行搜索

index.search(query, k) 会返回距离查询最近的 k 个向量。它会返回两个数组:距离 D 和索引 I(表示按添加顺序排列的位置)。

query = np.random.random((1, dim)).astype("float32")
D, I = index.search(query, k=5)
print("nearest ids:", I[0])
print("distances:", D[0])

从索引返回项目

FAISS 返回的是位置,而不是您的原始数据。请保留一个并行列表(或数据库),将索引位置映射到实际项目,以便查找结果。

docs = ["doc about cats", "doc about dogs", "doc about cars"]
# after search:
for pos in I[0]:
    print(docs[pos])   # map id -> original document

一个小型语义搜索流程

完整流程是:将文档转换为嵌入,将其添加到索引中,将查询转换为嵌入,执行搜索,然后返回匹配的文档。(sentence-transformers 等嵌入模型会生成这些向量。)

import faiss, numpy as np

# doc_vectors: (n, dim) from an embedding model
index = faiss.IndexFlatL2(doc_vectors.shape[1])
index.add(doc_vectors)

# query_vec: (1, dim) embedding of the user query
D, I = index.search(query_vec, k=3)
results = [docs[i] for i in I[0]]
print(results)

何时应使用向量数据库

在以下情况下,您应使用向量数据库:

  • 对文本或图像进行语义搜索
  • 基于相似性的推荐
  • RAG:为 LLM 检索相关上下文

FAISS 很适合本地使用;托管方案(Pinecone、Weaviate、pgvector)可提供持久化和扩展能力。

快速检查:FAISS 搜索

您在 FAISS 索引上调用 index.search(query, k=5)。

回顾:向量数据库

您了解了相似性搜索的基础:

  • 嵌入会将相似项目置于向量空间中彼此接近的位置
  • 向量数据库让最近邻搜索在大规模场景下保持快速
  • FAISS 的 IndexFlatL2(dim) 会构建精确的 L2 索引
  • index.add(embeddings) 会存储向量;index.search(query, k) 会返回距离和索引
  • 将返回的索引映射回原始项目

至此,数据库部分已完成。下一步:使用 Git 组织 AI 项目。

常见问题解答

「向量数据库简介」课时是免费的吗?

是的 — 「向量数据库简介」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「向量数据库简介」这节课中我会学到什么?

了解向量数据库存在的原因,使用 FAISS 进行本地相似性搜索,并存储用于人工智能检索的嵌入向量。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「向量数据库简介」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Python 的 sqlite3 模块操作 SQLite
  2. Pandas 与 SQL 集成
  3. 存储和查询机器学习结果
  4. 向量数据库简介
← 返回 Learn AI with Python