引言:为什么你需要一个向量数据库?
随着大语言模型(LLM)的兴起,一个名为RAG (Retrieval-Augmented Generation,检索增强生成) 的技术正变得越来越重要。
RAG的核心思想是,在让LLM回答问题之前,先从我们自己的知识库(如PDF文档、公司内部wiki、网页等)中检索出最相关的几段信息,然后将这些信息连同问题一起交给LLM,让它基于这些“背景资料”来生成回答。这样做可以极大地提升LLM回答的准确性、时效性,并能有效减少“幻觉”(胡说八道)的产生。
而要在海量的文本资料中“检索出最相关的信息”,传统的关系型数据库力不从心。我们需要将文本转换成“向量”(可以理解为文本在数学空间中的坐标),然后比较问题向量和资料向量之间的“距离”,距离越近就越相关。
向量数据库就是专门用来高效存储、索引和查询这些“向量”的数据库。Chroma DB 因其开源、简单易用、对Python友好而成为许多开发者的入门首选。
这篇教程将告诉你,拥有一个自己的向量数据库有多简单!
方法一:Docker方式(推荐,最快)
这是在本地启动一个长期运行、可供多个应用访问的Chroma服务的最简单方式。
第1步:安装Docker
(如果你已经根据我们之前的教程安装过Docker,请跳过此步) 访问 Docker官网,下载并安装Docker Desktop。
第2步:运行Chroma容器
打开终端,执行以下命令:
docker run -d -p 8000:8000 --name my-chroma-db chromadb/chroma
-p 8000:8000
: 将本地的8000端口映射到Chroma容器的8000端口。chromadb/chroma
: 这是Chroma DB的官方Docker镜像。
第3步:在Python中连接并使用
现在,Chroma服务已经在后台运行了。我们可以编写一个Python脚本来和它交互。
首先,安装Python客户端:
pip install chromadb
然后,编写 test_chroma.py
:
import chromadb
# 连接到我们用Docker启动的Chroma服务
client = chromadb.HttpClient(host='localhost', port=8000)
# 创建一个Collection(类似数据库中的“表”)
# 如果已存在,会直接获取
collection = client.get_or_create_collection(name="my_first_collection")
# 添加数据(向量化和存储)
# Chroma会自动处理文本到向量的转换
collection.add(
documents=["这是一篇关于苹果的文章。", "这是一篇关于香蕉的文章。"],
metadatas=[{"source": "doc1"}, {"source": "doc2"}],
ids=["id1", "id2"]
)
# 查询(最关键的一步)
results = collection.query(
query_texts=["我想知道关于水果的信息"],
n_results=1 # 返回1个最相关的结果
)
print(results)
运行脚本 python test_chroma.py
,你将看到它成功查询出了与“水果”最相关的“苹果”那篇文章。
方法二:纯Python方式(最轻量)
如果你只是想在单个Python脚本或Jupyter Notebook中进行一些快速实验,你甚至不需要Docker。Chroma可以直接在内存或本地文件中运行。
第1步:安装库
pip install chromadb
第2步:修改Python脚本以持久化存储
这次,我们不使用 HttpClient
,而是创建一个持久化的客户端,它会将数据存储在本地的一个文件夹里。
import chromadb
# 创建一个持久化客户端,数据将保存在 'chroma_storage' 文件夹
client = chromadb.PersistentClient(path="chroma_storage")
# 后续代码与Docker方式完全相同!
collection = client.get_or_create_collection(name="my_local_collection")
collection.add(
documents=["这是一篇关于猫的文章。", "这是一篇关于狗的文章。"],
ids=["cat1", "dog1"]
)
results = collection.query(
query_texts=["我喜欢哪种宠物?"],
n_results=1
)
print(results)
运行这个脚本,它会创建一个 chroma_storage
目录来存放数据。下次再运行,数据依然存在。
总结
你已经成功在本地拥有并操作了一个向量数据库!无论是通过Docker启动一个共享服务,还是在Python中进行快速原型开发,Chroma都提供了极为简洁的接口。
这是你构建自己RAG应用,让LLM拥有“记忆”和“知识库”的关键第一步。现在,你可以开始尝试将自己的文档、网页数据加载进去,打造一个真正属于你的、聪明的AI应用了。
...