昨天深夜调试一个RAG原型明明本地跑得好好的一上测试服务器就报numpy版本冲突。查了半天发现是transformers库依赖的numpy版本和我的向量计算模块要求不一致。这种环境依赖问题在RAG系统搭建初期特别常见——今天我们就来彻底解决它。Python环境别用系统Python新手最容易犯的错误就是直接使用系统自带的Python。上周帮同事排查一个faiss安装失败的问题根源就是Ubuntu自带的Python 3.8缺少某些底层依赖。我的建议是永远使用虚拟环境。# 强烈推荐miniconda管理不同Python版本很方便# 创建环境时指定Python版本避免后续麻烦conda create-n rag_env python3.10-y# 激活环境后第一件事升级pippip install--upgrade pip# 这个步骤能避免很多奇怪的安装错误如果你坚持用venv记得检查Python版本python--version# 确保是3.8以上3.10最稳核心依赖先装这些基础包安装顺序其实有讲究。先装数值计算基础库再装AI框架能减少很多依赖冲突。# 基础三件套按这个顺序装pip install numpy1.24.3# 固定版本避免上下游兼容问题pip install scipy1.10.1# 很多向量计算依赖它pip install pandas2.0.3# 数据处理必备# 深度学习框架选torch就对了# 去官网复制安装命令根据CUDA版本选择pip install torch torchvision torchaudio--index-url https://download.pytorch.org/whl/cu118# 没GPU的话用CPU版本但推理速度会慢很多向量数据库选型我踩过的坑去年测试了五种向量数据库简单说说实际感受。FAISSFacebook出品单机性能王者。但只支持向量检索需要自己搭元数据管理。内存模式用起来简单importfaiss dimension768# 你的向量维度indexfaiss.IndexFlatL2(dimension)# L2距离最常用# 记得normalize向量不然余弦相似度不准# 我在这里栽过跟头faiss的IndexFlatIP需要单位向量Chroma入门最友好API设计得像操作字典。适合快速原型importchromadb clientchromadb.Client()collectionclient.create_collection(docs)# 自动管理元数据但数据量大时内存有点吃紧# 生产环境需要换成持久化模式Qdrant云原生设计支持过滤查询。用Docker部署最省心dockerrun-p6333:6333 qdrant/qdrant# HTTP API很完善多语言客户端支持好# 但资源消耗比FAISS高一些Milvus功能最全也最重。适合企业级场景# 单机测试可以用Standalone模式# 生产一定要集群部署运维成本不低PGVector如果你已经在用PostgreSQL这是最自然的选择。不用维护两套存储-- 装个插件就能用CREATEEXTENSION vector;-- 查询语法和普通SQL一样学习成本低我的部署方案对于大多数中小规模RAG应用我现在的选择是开发阶段用Chroma快速迭代上线用Qdrant平衡功能和复杂度。这是我们的生产环境docker-compose片段version:3.8services:qdrant:image:qdrant/qdrant:latestports:-6333:6333volumes:-./qdrant_storage:/qdrant/storage# 资源限制很重要不然容易OOMdeploy:resources:limits:memory:4G向量维度设置有个经验值BERT系模型用768维Sentence-Transformer常用384维新一代模型可能到1024维。维度不是越大越好768维比1024维检索快30%精度损失往往不到2%。环境检查清单部署完一定要跑这个测试脚本defcheck_environment():importsysprint(fPython版本:{sys.version})# 测试关键库try:importtorchprint(fPyTorch可用, CUDA:{torch.cuda.is_available()})exceptImportError:print(警告: PyTorch未正确安装)# 向量数据库连接测试try:importchromadb clientchromadb.Client()print(Chroma连接正常)exceptExceptionase:print(f向量数据库异常:{e})# 运行检查check_environment()几条血泪经验版本锁死生产环境一定要用requirements.txt精确锁版本别用这种模糊指定容器化早用Docker早省心本地和服务器环境一致性能避免90%的部署问题资源监控向量数据库吃内存记得加监控特别是Chroma和Qdrant测试数据用真实数据量的10%做性能测试小数据跑得飞快都是假象备份方案准备一个纯文本的回退检索方案向量数据库挂掉时还能提供服务最后说个真事上个月我们线上服务突然变慢查了两天发现是向量索引没建。记住插入数据后一定要调用create_index()不然全表扫描慢如蜗牛。这种基础操作反而容易忘写个自动化脚本吧。下次我们聊Embedding模型选型——别急着用OpenAI的API本地模型可能更合适。