Vector Database

Vector Database 和 RAG 的关系

1. RAG 是框架,Vector DB 是“中枢组件”
  • RAG(Retrieval-Augmented Generation):框架/流程 → “先检索,再生成”。
  • Vector Database:存储和高效检索 文档的向量表示(embedding)。
    👉 在 RAG 里,Vector DB 就是负责“检索”那一步。
2. 流程关系(简化版)
  1. 数据准备:把金融文档(10-K、Basel 协议、AML手册…)切分 chunk → 转 embedding。
  1. 存储:embedding + 原文 + metadata 存进 Vector DB。
  1. 检索:用户提问 → embedding → 向量搜索(Top-k 最相似 chunk)。
  1. 生成:把检索到的 chunk 拼进 Prompt,交给 LLM 生成答案。
➡️ 没有 Vector DB,RAG 就缺了“找对文档”这步。
3. 为什么不是普通数据库?
  • 普通数据库(SQL/关键词搜索) → 基于精确匹配(难以理解语义)。
  • Vector DB → 基于 embedding 的 语义检索(“银行资本充足率”≈“CET1 ratio”)。
  • RAG 需要 语义级 recall,所以必须用 Vector DB 来存 embedding 并做相似度搜索。
4. 金融应用举例
  • 投研助手:向量库存 10-K,问“微软 2024 年研发费用多少”,检索正确段落,RAG 输出带出处的答案。
  • 合规助手:向量库存 Basel III/反洗钱法规,问“LCR最低要求是多少”,保证答案可追溯。
  • 模型监控:交易日志 embedding 存入向量库,检索“相似可疑交易”,做 fraud detection。
数据库
定位
适用场景
Chroma
开源轻量,本地存储
个人项目 / PoC / 小团队
FAISS
Facebook 开源库,超快检索,但不含数据库功能
离线批量检索 / 嵌入分析
Pinecone
云原生 SaaS,扩展性强
企业级、百万+向量、线上高可用
Weaviate
开源分布式数据库
中大型项目,可自建或用云托管
Milvus
工业级分布式向量数据库
超大规模、AI企业场景

Chroma(Vector Database)

1. 定义
Chroma 是一个开源的 向量数据库(Vector Database),主要用于存储和检索 文本/图片等嵌入向量(embeddings)。
  • 常见应用场景:RAG(Retrieval-Augmented Generation)。
  • 它和 Pinecone、Weaviate、FAISS 类似,但更轻量、开箱即用,特别适合个人项目或 PoC。
2. 核心功能
  1. 向量存储(Vector Storage)
      • 支持存储高维 embedding(如 OpenAI embeddings、SentenceTransformers)。
      • 每条记录可附带 metadata(文档ID、来源、标签)。
  1. 相似度检索(Similarity Search)
      • 支持 最近邻检索(k-NN),常用指标是余弦相似度。
      • 用于“找和这个问题最相关的文档”。
  1. 集合(Collection)管理
      • 类似数据库里的表。
      • 可以创建、删除、更新 collection,按项目/任务分隔。
  1. 持久化
      • 默认是内存数据库,也可以选择持久化到磁盘(SQLite + Parquet)。
  1. 集成性
      • 原生支持 Python/JavaScript。
      • 与 LangChain、LlamaIndex 集成度很高。
3. 快速上手(Python Demo)
# pip install chromadb sentence-transformers (选一个嵌入模型;或用OpenAI Embeddings) import chromadb from chromadb.utils import embedding_functions # 1) 嵌入函数:可用本地模型(示例用 MiniLM) ef = embedding_functions.SentenceTransformerEmbeddingFunction( model_name="all-MiniLM-L6-v2" ) # 2) 创建持久化客户端 client = chromadb.PersistentClient(path="./chroma_store") # 3) 建collection(相当于一个索引) col = client.get_or_create_collection( name="kb_finance", embedding_function=ef, # 也可在add/query传入embeddings手算 metadata={"hnsw:space": "cosine"} # 距离度量: cosine / l2 / ip ) # 4) 写入数据(id 要唯一;metadatas/ids/documents一一对齐) docs = [ "CET1 ratio is a key capital adequacy metric.", "Expected Shortfall (ES) replaces VaR under FRTB.", "PD, LGD, EAD are core components of credit risk." ] col.add( ids=["d1","d2","d3"], documents=docs, metadatas=[{"topic":"capital"}, {"topic":"market_risk"}, {"topic":"credit_risk"}] ) # 5) 相似度检索 res = col.query( query_texts=["What replaces VaR under FRTB?"], n_results=2, where={"topic": {"$in": ["market_risk","capital"]}} # 元数据过滤 ) print(res["ids"], res["documents"], res["distances"])
🔹 输出会返回最相关的 documents + metadata,常用于把结果拼进 RAG 的 prompt。
4. Chroma 的优缺点
优势
  • 开源 & 免费,部署简单(本地、Docker 都行)。
  • 轻量级,适合个人项目、快速实验。
  • 和 LangChain 集成非常顺畅。
  • 支持 metadata filter(比如按“来源=10-K”过滤)。
劣势
  • 扩展性有限:大规模场景(>百万文档)性能不如 Pinecone、Weaviate、Milvus。
  • 高可用性不足:企业级集群、分布式能力弱。
  • 社区还不如 Pinecone/Weaviate 成熟。
5. 典型应用场景(金融方向)
  • 财报问答助手(10-K/10-Q RAG):
    存 embeddings → 用户问“Revenue of JPMorgan in 2024”,检索相关段落拼给 LLM。
  • 合规助手(法规 Q&A):
    存 Basel III / SR 11-7 条文 → 让 AI 回答并带出处。
  • 模型验证文档库:
    存 Validation Reports → 内部验证员问 “如何解释 drift test?”。
6. 和其他向量数据库的对比(面试可用)
✅ 一句话总结(适合你面试用):
“Chroma is an open-source lightweight vector database, great for prototyping RAG systems in finance. It allows me to store document embeddings with metadata and run similarity search, but for production-scale financial applications with millions of filings or compliance docs, I’d consider Pinecone or Weaviate for scalability.”
要不要我帮你写一份 “Chroma 在金融风控 RAG 项目中的最佳实践清单”(比如如何做文档分块、如何结合 metadata filter、如何监控 hit-rate)?

FAISS

  • 由 Meta(Facebook AI)开源的 相似度搜索库,用来在 大规模向量集合(百万~上亿条 embedding)中快速找到最近邻。
  • 用 C++ 写的,提供 Python 接口;支持 GPU 加速(CUDA)。
  • 常用于 向量检索、聚类、推荐系统、RAG 检索加速。

⚡ 核心特点

  1. 高性能最近邻搜索
      • 精确搜索(Brute-force, Flat Index)
      • 近似搜索(HNSW, IVF, PQ, OPQ, ScaNN-like 算法)
  1. 支持超大规模:亿级向量检索(可以内存/磁盘分片)。
  1. GPU加速:比纯CPU快一个数量级。
  1. 索引类型丰富:
      • IndexFlatL2:暴力精确搜索,适合小数据集。
      • IndexIVF:倒排文件,适合大规模 + 近似搜索。
      • IndexHNSW:基于图的近邻搜索。
      • IndexPQ/OPQ:产品量化,降低存储和计算成本。

🚀 快速上手示例

import faiss import numpy as np # 1) 生成样本数据 d = 128 # 向量维度 nb = 10000 # 向量库大小 nq = 5 # 查询数 xb = np.random.random((nb, d)).astype('float32') xq = np.random.random((nq, d)).astype('float32') # 2) 建立索引(精确搜索,L2 距离) index = faiss.IndexFlatL2(d) index.add(xb) # 向索引中添加向量 print("总向量数:", index.ntotal) # 3) 查询 k = 3 # topK distances, indices = index.search(xq, k) print("最近邻索引:", indices) print("对应距离:", distances)

🏦 在金融 RAG/AI 应用中的用法

  • 文档向量检索:把 10-K、合规手册切 chunk → embedding → 存 FAISS 索引 → 检索相似 chunk → 送给 LLM。
  • 混合检索:FAISS(语义) + BM25(关键词)结合,提高 recall。
  • 低延迟问答:用 GPU 加速应对高并发查询。
  • 模型监控:可以存模型 embedding(比如交易行为),做异常点检索。

🔍 对比其他库

  • FAISS:最经典、单机向量索引库,性能好但缺少服务化/元数据过滤。
  • Chroma:轻量级、带元数据存储,适合小型原型。
  • Milvus / Weaviate / Pinecone:分布式、云原生、支持复杂过滤,适合企业级生产。

🎯 面试话术

“FAISS 是最常用的向量索引库,适合做大规模 embedding 的最近邻搜索。它的优势在于高性能和 GPU 支持,但缺少服务层和元数据管理。在金融 RAG 应用中,我会用 FAISS 做向量检索引擎,同时在外层数据库存 metadata,必要时结合 BM25 做 hybrid retrieval,以保证既有 recall 又能满足监管下的可解释性要求。”
要不要我帮你做一张 “FAISS vs Chroma vs Pinecone” 对比表,你面试时就能快速回答“为什么选某个向量库”?