Jensen的个人学习小站

🏷️难度:进阶 ⏱️预计阅读:20 分钟 📅更新时间:2026-02-28

向量数据库入门:为 AI 打造长期记忆

目录
  1. 什么是向量数据库?
  2. 文本到向量的转换 (Embedding)
  3. 实战:使用 Chroma 搭建本地知识库
  4. 相似度检索 (Similarity Search)
  5. RAG 系统架构纵览

传统的数据库(如 MySQL, MongoDB)基于精确的关键字匹配或复杂的 SQL 查询进行数据检索。但当我们面对大语言模型时,我们更需要根据"语义"来搜索内容,这就是向量数据库诞生的意义。

1. 什么是向量数据库?

向量数据库专门用于存储、管理和检索高维向量(Embeddings)。当我们在搜索引擎中搜 "苹果公司的手机",虽然文中可能只写了 "iPhone",但由于它们的语义相近(在向量空间中距离很近),向量数据库就能找到这些相关内容。

2. 文本到向量的转换 (Embedding)

要将文档存入向量数据库,首先需要将它们转化为 Embedding 向量。目前最常用的是 OpenAI 的 text-embedding-3-small 模型或者是开源宇宙中的 BGE-m3 等。

from langchain.embeddings import OpenAIEmbeddings

# 初始化 Embedding 模型
embeddings = OpenAIEmbeddings()

# 将一段文字转化为向量
text = "人工智能正在改变世界。"
vector = embeddings.embed_query(text)

print(f"生成的向量维度: {len(vector)}") # 通常是 1536 维

3. 实战:使用 Chroma 搭建本地知识库

Chroma 是一个开源的轻量级向量数据库,非常适合本地开发和测试。我们将结合 LangChain 来演示。

pip install chromadb langchain openai
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter

# 1. 加载本地文档
loader = TextLoader("my_knowledge.txt")
documents = loader.load()

# 2. 拆分文档 (长文档必须切分成 Chunk 才能获得更好的检索效果)
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)

# 3. 初始化 Embedding 模型
embeddings = OpenAIEmbeddings()

# 4. 创建并持久化向量数据库
db = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db")
db.persist()
💡 为什么要 Chunk 分块?

如果将一整本书转化为一个向量,其语义会被严重稀释。将长文档切割成一小段一小段的 Chunk,能确保每个 Chunk 的向量精准表达其本身的内容,从而提高检索的召回率。

数据写入后,我们就可以通过自然语言来查询它了:

# 加载现有的数据库
db = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)

# 执行相似度检索 (找回最相关的 3 个段落)
query = "公司明年的战略规划是什么?"
results = db.similarity_search(query, k=3)

for doc in results:
    print(doc.page_content)
    print("---")

5. RAG 系统架构纵览

将上述检索结果作为提示词的上下文喂给 ChatGPT,这就是大名鼎鼎的 RAG (Retrieval-Augmented Generation, 检索增强生成)

# 简单的 RAG 伪代码
context = "\n".join([doc.page_content for doc in results])
prompt = f"基于以下参考信息回答问题。\n信息:\n{context}\n\n问题:{query}"
response = llm(prompt)

总结

向量数据库为 LLM 提供了外挂的大脑(长期记忆)。精通文档的分块策略 (Chunking)、Embedding 模型的选择,以及多路召回/重排等高级技巧,是打造高质量 RAG 应用的关键。