3.2 向量数据库应用 — 大模型应用开发从零到一 关键词短语 本节导读:深入理解向量数据库的核心原理和实际应用,掌握主流向量数据库的选择与部署,构建高效的检索增强系统基础架构。 学习目标 理解向量数据库的基本概念和工作原理 掌握主流向量数据库的特点和适用场景 学会FAISS、Pinecone等数据库的安装和配置 掌握向量数据库的核心操作和数据管理 了解向量数据库的性能优化策略 构建完整的向量数据库应用项目 核心概念 什么是向量数据库 向量数据库是专门用于存储、管理和查询向量数据的高性能数据库系统。与传统的关系型数据库不同,向量数据库专注于支持向量相似性搜索,是现代AI应用的重要组成部分。
本节导读:深入理解向量数据库的核心原理和实际应用,掌握主流向量数据库的选择与部署,构建高效的检索增强系统基础架构。
向量数据库是专门用于存储、管理和查询向量数据的高性能数据库系统。与传统的关系型数据库不同,向量数据库专注于支持向量相似性搜索,是现代AI应用的重要组成部分。
向量数据库的核心优势:
传统数据库特点:
向量数据库特点:
# 向量数据库工具安装 pip install faiss-cpu pinecone-client chromadb milvus numpy scikit-learn # 环境检查 import faiss import pinecone import chromadb import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer print("向量数据库工具配置完成")
# requirements.txt faiss-cpu>=1.7.0 pinecone-client>=3.0.0 chromadb>=0.4.0 milvus>=2.3.0 numpy>=1.21.0 scikit-learn>=1.0.0 sentence-transformers>=2.2.0
FAISS(Facebook AI Similarity Search)是Facebook开源的高性能向量相似性搜索库,特别适合研究和开发环境。
# FAISS安装 !pip install faiss-cpu # CPU版本 # 或 !pip install faiss-gpu # GPU版本(需要CUDA支持) import faiss import numpy as np import pickle from typing import List, Dict, Any import os class FAISSVectorDB: """FAISS向量数据库管理类""" def __init__(self, dimension: int = 768, metric: str = 'L2'): """ 初始化FAISS向量数据库 Args: dimension: 向量维度(如BERT的768维) metric: 距离度量(L2或IP) """ self.dimension = dimension self.metric = metric self.index = None self.data = [] self.metadata = [] # 创建索引 if metric == 'L2': self.index = faiss.IndexFlatL2(dimension) elif metric == 'IP': self.index = faiss.IndexFlatIP(dimension) else: raise ValueError("metric必须是'L2'或'IP'") def add_vectors(self, vectors: np.ndarray, metadata: List[Dict] = None): """ 添加向量到数据库 Args: vectors: 向量数组 (n x dimension) metadata: 元数据列表 """ if len(vectors) == 0: return # 确保向量维度正确 assert vectors.shape[1] == self.dimension, f"向量维度不匹配,需要{self.dimension}维" # 向FAISS索引添加向量 if self.index.ntotal == 0: self.index.add(vectors.astype(np.float32)) else: self.index.add(vectors.astype(np.float32)) # 存储原始数据和元数据 self.data.extend(vectors) if metadata: self.metadata.extend(metadata) def search(self, query_vector: np.ndarray, k: int = 5) -> List[Dict]: """ 搜索相似向量 Args: query_vector: 查询向量 (1 x dimension) k: 返回最相似的k个结果 Returns: 搜索结果列表,包含距离和元数据 """ if self.index.ntotal == 0: return []