Day24:向量数据库 Chroma_FAISS 入门

Day24:向量数据库 Chroma/FAISS 入门

引言:

上期咱们搞定了 Embedding 向量化,把文字变成了机器能懂的数字向量。但很多同学把向量生成后就 "乱扔",导致检索慢、找不到、甚至丢失! 今天咱们就给向量找个 "智能豪宅"------ 向量数据库!Chroma 新手友好,FAISS 性能炸裂,保姆级教程 + 完整代码,看完直接写进简历!

🎯 今日核心任务(人话翻译)

  1. 搞懂向量数据库:为什么不用 Excel 存向量?它到底牛在哪?

  2. Chroma 入门实战:创建数据库→插入向量→智能检索,新手零压力

  3. FAISS 初体验:感受一下什么叫 "闪电般的检索速度"

  4. 双版本代码:通义千问在线版,直接复制就能跑

🧠 一、向量数据库:大白话秒懂(拒绝晦涩)

❌ 劝退式定义(别看)

向量数据库是专门用于存储、索引、查询高维稠密向量的数据库系统,通过近似最近邻搜索(ANN)实现毫秒级检索...

✅ 人话版讲解(醍醐灌顶)

把向量数据库当成 "智能图书馆管理员"

  • 普通数据库(MySQL/Excel):只会按 "书名" 找书,你问 "讲 LPR 利率的书在哪",它直接懵圈

  • 向量数据库:不仅存书,还懂每本书的 "内容语义",你问 "讲 LPR 的书",它一秒给你找出最相关的 3 本!

核心优势

  1. 毫秒级检索:百万级向量库,0.1 秒出结果

  2. 语义匹配:不是找关键词,是找 "意思最像" 的内容

  3. 自动索引:不用你手动建索引,它自动帮你优化

🛠️ 二、环境一键安装(复制即跑)

打开终端,执行命令:

shell 复制代码
# 核心依赖:Chroma轻量向量库 + FAISS高性能向量库 + 通义千问
pip install langchain langchain-community chromadb faiss-cpu dashscope sentence-transformers -i https://pypi.tuna.tsinghua.edu.cn/simple/
  • chromadb:新手首选,轻量易上手

  • faiss-cpu:Facebook 开源,性能炸裂(有 N 卡可装faiss-gpu

💻 三、实战一:Chroma 入门保姆级(新手闭眼冲)

Chroma 是 LangChain 官方推荐的新手向量库,零配置、开箱即用,适合学习和小规模项目。

完整代码(通义千问版)
python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Day24:Chroma向量数据库入门实战(通义千问版)
import os
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import TextLoader

# ===================== 核心配置 =====================
os.environ["DASHSCOPE_API_KEY"] = "sk-你的通义千问API Key"
PERSIST_DIRECTORY = "./chroma_library"  # 向量库存储路径(智能图书馆)

# ===================== 1. 准备"图书"(文档) =====================
# 加载测试文档(替换成你的LPR公告/金融知识)
loader = TextLoader("lpr_2026.txt", encoding="utf-8")
docs = loader.load()

# 智能分块(把厚书拆成薄册子)
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=300,
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", "!", "?"]
)
split_docs = text_splitter.split_documents(docs)
print(f"✅ 准备了{len(split_docs)}本"小书"")

# ===================== 2. 初始化"智能图书馆"(Chroma) =====================
print("🔧 正在建造智能图书馆...")
embedding = DashScopeEmbeddings(model="text-embedding-v3")

# 创建Chroma向量库,自动持久化到本地
vector_db = Chroma.from_documents(
    documents=split_docs,
    embedding=embedding,
    persist_directory=PERSIST_DIRECTORY
)
vector_db.persist()
print("🎉 智能图书馆建造完成!向量已入库")

# ===================== 3. 智能检索(找书) =====================
print("\n" + "="*60)
user_question = "2026年3月的1年期LPR是多少?"
print(f"🤖 正在图书馆找书:{user_question}")

# 相似度搜索:找出最相关的3个文本块
results = vector_db.similarity_search(user_question, k=3)

print("\n📚 找到最相关的3本"小书":")
for i, doc in enumerate(results):
    print(f"\n--- 第{i+1}本 ---\n{doc.page_content}")
print("="*60)

💻 四、实战二:FAISS 初体验(感受闪电速度)

FAISS 是 Facebook AI Research 开源的高性能向量库检索速度是 Chroma 的 5-10 倍,适合百万级以上向量库。

完整代码(通义千问版)
python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Day24:FAISS向量数据库初体验(通义千问版)
import os
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import TextLoader

# ===================== 核心配置 =====================
os.environ["DASHSCOPE_API_KEY"] = "sk-你的通义千问API Key"
FAISS_SAVE_PATH = "./faiss_index"

# ===================== 1. 文档加载+分块 =====================
docs = TextLoader("lpr_2026.txt", encoding="utf-8").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)
split_docs = text_splitter.split_documents(docs)

# ===================== 2. FAISS向量库构建 =====================
print("⚡ 正在构建FAISS闪电向量库...")
embedding = DashScopeEmbeddings(model="text-embedding-v3")
vector_db = FAISS.from_documents(documents=split_docs, embedding=embedding)

# 保存FAISS索引到本地
vector_db.save_local(FAISS_SAVE_PATH)
print("🎉 FAISS闪电库构建完成!")

# ===================== 3. 闪电检索 =====================
user_question = "2026年3月的5年期LPR是多少?"
print(f"\n⚡ 闪电检索中:{user_question}")
results = vector_db.similarity_search(user_question, k=2)

print("\n📚 闪电找到结果:")
for i, doc in enumerate(results):
    print(f"\n--- 结果{i+1} ---\n{doc.page_content}")

📊 五、Chroma vs FAISS:新手怎么选?

维度 Chroma FAISS
上手难度 ⭐ 超级简单,零配置 ⭐⭐⭐ 需要了解索引
检索速度 ⭐⭐ 适合万级向量 ⭐⭐⭐⭐⭐ 百万级毫秒级
持久化 ✅ 原生支持,自动保存 ⚠️ 需手动保存索引
适用场景 学习、小规模项目、原型验证 生产环境、大规模向量库

⚠️ 六、新手避坑指南

  1. 路径问题persist_directory 必须是文件夹,不是文件

  2. Embedding 混用 :建库和检索必须用同一个 Embedding 模型

  3. FAISS 保存 :FAISS 索引必须手动save_local,否则重启就没了

  4. 分块不合理:别把句子砍断,坚持用递归分块

🎯 今日总结

今天咱们给向量安了家!

  • 学会了 Chroma:新手友好,零配置入门

  • 体验了 FAISS:性能炸裂,感受闪电速度

  • 完成了向量入库 + 智能检索,RAG 全链路打通!

相关推荐
OpenBayes贝式计算1 小时前
教程上新|低门槛部署英伟达最新 Physical AI 模型,覆盖人形机器人/人体运动生成/扩散模型微调等
人工智能·深度学习·机器学习
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB创建、更新和删除文档(3)
数据库·学习·mongodb
3DVisionary2 小时前
突破3C质检产能瓶颈:XTOM蓝光扫描仪配合自动化转台实现精密件批量检测
运维·人工智能·自动化·xtom扫描仪·自动化检测·消费电子质检·良率控制
西红市杰出青年2 小时前
MCP 的三种数据传输模式教程(stdio / SSE / Streamable HTTP)
网络·网络协议·http·ai
chehaoman2 小时前
MySQL的索引
android·数据库·mysql
子木HAPPY阳VIP2 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪
cm6543202 小时前
用Python破解简单的替换密码
jvm·数据库·python
机器之心2 小时前
英伟达革了自己的命:智能体自主进化7天,干掉所有算子工程师、GPU专家
人工智能·openai
Luke Ewin2 小时前
Linux中部署Qwen3.5大模型
linux·运维·服务器·ai·llm·qwen3.5