驯服AI野马:我的本地向量数据库搭建实战复盘

今晚,我完成了一次从理论到实践的跨越。从最初尝试将 DeepSeek、千问、豆包等大模型进行整合,到最终在本地成功跑通一个向量数据库,整个过程就像是一场充满未知的“打怪升级”。这不仅让我对 Harness(驾驭工程)有了具象的理解,更让我亲手敲开了 AI 应用开发的大门。

缘起:Harness 与 AI 的“马具”

一切的起点,源于对 Harness Engineering(驾驭工程)的好奇。在 AI 时代,大模型就像一匹力气巨大但容易跑偏的“野马”,而 Harness 就是套在它身上的缰绳与马鞍。我意识到,仅仅拥有模型是不够的,真正的核心在于构建一套系统环境、约束规则与反馈闭环,让 AI 能够精准地为业务服务。而搭建一个向量数据库,正是为这匹野马配备“记忆马鞍”的关键一步。

启程:向量数据库的选型与初探

在明确了目标后,我开始了向量数据库的选型。市面上有 Milvus、Qdrant 等众多专业级数据库,但对于想要快速跑通流程的我来说,轻量级、零配置的 Chroma 无疑是最佳的新手村装备。
我迅速在本地创建了 Python 虚拟环境,并安装了 chromadb。然而,真正的挑战才刚刚开始。当我第一次尝试初始化数据库并插入数据时,终端里跳出了漫长的模型下载进度条。由于网络原因,下载过程频繁遭遇 httpcore.ReadTimeout(网络读取超时)的报错。

破局:与网络和版本 Bug 的博弈

面对网络的阻碍,我尝试了设置国内镜像源、手动下载模型文件并放置到指定缓存目录等极客方法。但 Chroma 严格的验证机制和底层 ONNX 库的一些隐蔽 Bug(如 Preferred providers must be unique),让我屡屡碰壁。
在经历了数次 API 参数变更导致的 TypeError 和 ValueError 后,我果断调整策略,放弃了 Chroma 默认的 ONNX 模型,转而使用 AI 领域更主流、更稳定的 sentence-transformers 库来生成向量。这一招“釜底抽薪”,成功绕开了底层的兼容性泥潭。

顿悟:集合冲突与最终的胜利

就在我以为大功告成时,最后一个拦路虎出现了:ValueError: An embedding function already exists...。原来,我之前创建的集合已经绑定了默认的旧模型,当我试图用新的 sentence-transformers 模型去覆盖它时,Chroma 拒绝了这种“鸠占鹊巢”的行为。
灵光一闪,我意识到只需要为新的模型创建一个全新名字的集合即可。当我将集合名从 test_collection 改为 new_test_collection,并再次运行查询代码时,终端里终于打印出了预期的结果:
 
[['Chroma 是一个非常好用的开源向量数据库']]

 

那一刻,所有的折腾都化作了巨大的成就感。

结语:从“玩具”到“工具”的跨越

今晚的实战,让我深刻体会到 AI 工程化并非纸上谈兵。从理解 Harness 的概念,到在本地环境中解决网络、依赖、版本冲突等一系列真实问题,我不仅成功搭建了一个向量数据库,更重要的是,我掌握了与 AI 工具链“磨合”的能力。
这个小小的本地数据库,现在就像是一个初具规模的“记忆中枢”。未来,无论是批量导入海量文档,还是将其与大语言模型(如 DeepSeek)结合打造专属的 RAG(检索增强生成)智能助手,我都已经迈出了最坚实的第一步。
 
posted on 2026-07-28 01:34  溯衍  阅读(18)  评论(0)    收藏  举报