Chroma 向量数据库入门:从 Embedding 到最小 RAG 问答
导读:这篇要带你做什么? 如果你听说过 RAG(检索增强生成) 但不知道数据到底存在哪——答案就是向量数据库。它不存普通的文本或表格,而是把文字转成一串数字坐标点(叫作 Embedding / 嵌入向量),然后通过"距离近就相似"的规则找到最相关的文档片段。 本文将围绕 Chroma 这款开源向量数据库展开——它只需几行 Python 就能跑起来,不需要 Docker、不需要外部服务。我们从"向量到底是什么"的白话讲起,一步步完成安装 → Collection CRUD(增删改查)→ Embedding 自定义 → 相似检索,最终拼出一个最小 RAG 问答系统:用户提问 → 在向量库里找到相关文档 → 喂给大语言模型 → 得到答案。 💡 本文示例默认使用本地免费模型做 Embedding,零配置即可跑通全文代码。如果你后面需要 LLM 能力来回答用户问题(RAG 部分),可以接入任何 OpenAI 兼容的云端 API——脚本里会提供配置引导。 一、向量是什么?白话版 想象你有一堆书。你想找"如何做番茄炒蛋"的食谱。 传统搜索方式是关键词匹配——你的查询里有"番茄"和"炒蛋"吗?有就返回。但如果一篇教程写的是"西红柿鸡蛋做法",因为字不一样就没命中。 向量搜索的思路完全不同: 把每段文字通过一个模型(Embedding 模型)变成一组数字。比如:“如何做番茄炒蛋” → [0.12, -0.35, 0.87, ..., 0.04](通常 384 维或更高)。 这组数字就是这段文字的"坐标点"(也叫向量)。语义相近的文字,生成的坐标点在空间里也会挨得很近。 当用户问"西红柿怎么做菜"时,同样把它变成向量,然后计算它和库里所有向量的距离——离得最近的那几条就是你想要的结果。 "番茄炒蛋" "西红柿鸡蛋做法" ●──────────────● ← 这两个语义接近,距离近 ● ● ← "机器学习入门"距离很远 这就是向量数据库要做的事:存向量、查最近邻。 ⚠️ 术语速记 Embedding / 嵌入向量:把文字变成坐标点的过程及其结果。 Collection(集合):Chroma 中数据的容器,类似数据库中的"表"。 Query(检索):传入一段文字,返回语义最相似的 N 条记录。 二、安装 Chroma Chroma 是一个 Python 库,直接 pip 即可安装(Python 3.9+): ...