← 返回首页
🧠

向量数据库:LLM时代的基础设施

📂 llm ⏱ 1 min 159 words

--- title: "向量数据库:LLM时代的基础设施" description: "深入理解向量数据库的核心原理、应用场景以及主流解决方案,掌握RAG系统的关键组件" tags: ["向量数据库", "向量检索", "相似度搜索", "RAG"] category: "llm" icon: "🧠"

向量数据库:LLM时代的基础设施

什么是向量数据库

向量数据库是一种专门用于存储、管理和检索高维向量数据的数据库系统。在大语言模型时代,向量数据库成为连接非结构化数据与AI应用的关键桥梁。它通过将文本、图像等数据转换为高维向量表示,实现语义级别的相似性搜索。

传统数据库基于精确匹配进行查询,而向量数据库则通过计算向量间的距离来找到语义上最相似的结果。例如,搜索"如何学习Python"时,向量数据库能够返回"Python入门教程"、"Python学习路线"等语义相关的内容,即使这些文本不包含完全相同的关键词。

核心原理

向量嵌入

向量嵌入是将高维数据映射到低维连续向量空间的过程。使用Embedding模型(如OpenAI的text-embedding-ada-002或开源的sentence-transformers),可以将文本转换为固定长度的数值向量:

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = ["向量数据库是AI应用的基础", "相似度搜索是核心功能"]
embeddings = model.encode(sentences)
print(embeddings.shape)  # (2, 384)

相似度度量

向量数据库支持多种距离计算方式:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

索引结构

为了实现高效的近似最近邻(ANN)搜索,向量数据库采用多种索引算法:

主流向量数据库对比

Chroma

轻量级开源向量数据库,适合快速原型开发。支持Python原生API,集成简单:

import chromadb

client = chromadb.Client()
collection = client.create_collection("my_collection")

collection.add(
    documents=["文档1内容", "文档2内容"],
    ids=["doc1", "doc2"]
)

results = collection.query(query_texts=["查询文本"], n_results=2)

Pinecone

全托管的云原生向量数据库,支持实时索引和自动扩缩容。提供毫秒级查询延迟,适合生产环境:

import pinecone

pinecone.init(api_key="YOUR_API_KEY", environment="us-west1-gcp")
index = pinecone.Index("my-index")

index.upsert(vectors=[("id1", embedding.tolist(), {"metadata": "value"})])
results = index.query(vector=query_embedding.tolist(), top_k=5)

Weaviate

开源的AI原生向量数据库,支持混合搜索(向量+关键词)。内置多种向量izer模块:

import weaviate

client = weaviate.Client("http://localhost:8080")
result = client.query.get("Article", ["title", "content"])
         .with_near_text({"concepts": ["人工智能"]})
         .with_limit(5)
         .do()

RAG系统中的应用

向量数据库是检索增强生成(RAG)系统的核心组件。典型流程:

  1. 文档处理:将文档分块并转换为向量
  2. 索引构建:将向量存入向量数据库
  3. 查询检索:根据用户问题检索最相关的文档块
  4. 生成回答:将检索结果作为上下文输入LLM
# 简单的RAG检索流程
def rag_retrieve(query, vector_db, top_k=3):
    query_embedding = embed_model.encode(query)
    results = vector_db.search(query_embedding, top_k=top_k)
    context = "\n".join([r.text for r in results])
    return context

性能优化建议

向量数据库作为LLM应用的基础设施,将持续演进以满足更复杂的AI应用需求。