数据库知识篇
什么是向量数据库
AI 时代的新型数据库
传统数据库擅长精确查找——"找出名字叫张三的用户"。但 AI 时代有了新需求:"找出和这段话意思相近的文章"。这种"按意思搜索"就需要向量数据库。
💡 类比:传统数据库像字典的目录,按首字母精确查找;向量数据库像你的大脑,听到"苹果"会联想到"水果"、"iPhone"、"乔布斯"。
加载图表中...
什么是向量?
在这里,向量(Embedding) 是一串数字,用来表示文本的"含义"。
"我喜欢编程" → [0.12, -0.45, 0.78, 0.33, ...] (1536个数字)
"我热爱写代码" → [0.11, -0.44, 0.77, 0.35, ...] (意思相近,数字接近)
"今天天气真好" → [0.89, 0.23, -0.56, 0.12, ...] (意思不同,数字差很大)
加载图表中...
向量搜索的原理
向量搜索的核心是计算相似度——两个向量的数字越接近,含义越相似:
加载图表中...
向量数据库的应用场景
| 场景 | 说明 | 例子 |
|---|---|---|
| 语义搜索 | 按意思而非关键词搜索 | 搜"怎么变量命名" → 找到"代码规范"文章 |
| AI 知识库(RAG) | 让 AI 基于你的文档回答问题 | 企业内部问答机器人 |
| 推荐系统 | 找到相似内容推荐 | "看了这篇文章的人还看了..." |
| 图片搜索 | 用文字搜图片 | 搜"日落" → 返回日落照片 |
| 去重/聚类 | 找到相似的内容 | 检测重复文章 |
加载图表中...
RAG:让 AI 读懂你的文档
RAG(Retrieval-Augmented Generation) 是向量数据库最重要的应用——让 AI 基于你的私有文档回答问题:
加载图表中...
常见的向量数据库
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| Pinecone | 全托管、易用 | 快速上手 |
| Supabase pgvector | PostgreSQL 扩展 | 已用 Supabase 的项目 |
| Chroma | 轻量、本地运行 | 本地开发、小项目 |
| Weaviate | 开源、功能丰富 | 生产环境 |
| Milvus | 高性能、分布式 | 大规模数据 |
代码示例:使用 OpenAI + Supabase 实现语义搜索
1. 生成向量
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
// 将文本转换为向量
async function getEmbedding(text) {
const response = await openai.embeddings.create({
model: "text-embedding-3-small",
input: text,
});
return response.data[0].embedding; // 返回 1536 维向量
}
2. 存储向量到 Supabase
-- 启用 pgvector 扩展
CREATE EXTENSION IF NOT EXISTS vector;
-- 创建带向量字段的表
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536) -- 1536维向量
);
// 存储文档和向量
const content = "Next.js 是一个 React 全栈框架";
const embedding = await getEmbedding(content);
await supabase.from("documents").insert({
content,
embedding,
});
3. 语义搜索
// 用户搜索
async function search(query) {
const queryEmbedding = await getEmbedding(query);
const { data } = await supabase.rpc("match_documents", {
query_embedding: queryEmbedding,
match_count: 5,
});
return data; // 返回最相似的5条结果
}
// 搜索
const results = await search("React框架怎么用");
// 返回: ["Next.js 是一个 React 全栈框架", ...]
向量数据库 vs 传统数据库
| 对比 | 传统数据库 | 向量数据库 |
|---|---|---|
| 搜索方式 | 精确匹配 / 模糊匹配 | 语义相似度匹配 |
| 搜索"编程" | 只找包含"编程"的内容 | 也能找到"写代码"、"开发" |
| 数据类型 | 文本、数字 | 向量(高维数组) |
| 典型应用 | 用户管理、订单系统 | AI搜索、知识库、推荐 |
| 是否需要 AI | 不需要 | 需要(生成向量) |
🎯 AI编程小贴士:想给你的项目加上"智能搜索"功能?告诉 AI"帮我用 Supabase pgvector + OpenAI 实现文章的语义搜索",它会帮你从建表到前端搜索框一步步实现。
小结
- 向量数据库存储文本的"含义向量",支持按意思搜索
- 向量(Embedding) 是 AI 模型将文本转换成的一串数字
- RAG 是最重要的应用场景——让 AI 基于你的文档回答问题
- Supabase pgvector 可以直接在 PostgreSQL 中使用向量搜索
- 向量数据库是 AI 应用的核心基础设施