在这里插入图片描述

从0到1搭建RAG开发环境:Python版本选不对、依赖库装不上、API密钥泄露、向量库跑不动……这篇避坑指南,学长用一路踩坑的血泪史,帮你把路铺得平平整整!全文围绕RAG开发环境搭建的五大核心战场,手把手带你搞定Python环境隔离、核心依赖安装、向量数据库选型、API安全配置和开发工具链打磨。看完这篇,环境不再是劝退你的那道高墙,而是你稳稳迈出RAG实战第一步的坚实台阶。

RAG开发环境搭建:Python、依赖库和API配置

Python环境管理

核心依赖库安装

向量数据库选型

API密钥管理

开发工具链

虚拟环境隔离

版本选择策略

LangChain与LLM SDK

向量与解析库

镜像源与版本锁定

轻量级Chroma

本地FAISS方案

持久化配置

环境变量配置

安全防泄漏

多模型BaseURL

Jupyter交互调试

VSCode断点追踪

文字目录

  • Python环境管理:虚拟环境隔离与版本选择策略
  • 核心依赖库安装:LangChain与LLM SDK、向量与解析库、镜像源与版本锁定
  • 向量数据库选型:轻量级Chroma、本地FAISS方案与持久化配置
  • API密钥管理:环境变量配置、安全防泄漏与多模型BaseURL
  • 开发工具链:Jupyter交互调试与VSCode断点追踪

嗨,大家好呀,我是你的老朋友精通代码大仙。接下来我们一起学习 《大模型RAG生成式AI开发实战》10.[第1章 RAG基础概念] RAG开发环境搭建:Python、依赖库和API配置

老话说得好,“磨刀不误砍柴工”。可问题是,如果你拿块磨刀石都不会用,反而容易把手给割了。学RAG也是这样。我看到太多小伙伴,满怀激情地想要学大模型应用开发,结果刚迈出第一步——搭环境——就直接摔了个大马趴。Python装不对,pip报红字,API密钥不知道怎么配,向量数据库更是听着就头大。今天这篇,咱们不聊高深的算法,不聊什么检索策略优化,就聊最接地气、最实在的环境搭建。这关过不去,后面的“生成式AI实战”全是空中楼阁。坐稳了,学长带你一步一步,把这五个核心战场全给拿下来!

Python环境管理——你的“地盘”必须先划清楚

RAG这套技术栈,本质上是一个“大杂烩”。大模型SDK、向量检索库、文档解析工具、各种网络请求库,全都搅在一起。它们对Python版本的要求各不相同,依赖关系盘根错节。如果你不先做环境隔离,就像把川菜、粤菜、日料全倒进一个锅里煮,最后端出来的东西,闻着都窜味。

新手最容易栽的第一个跟头,就是“全局安装综合征”。打开终端,不管三七二十一,pip install直接往系统自带的Python环境里怼。今天跟着A教程装了一套RAG库,明天跟着B项目装了一个老版本的Numpy,后天运行C代码的时候,突然发现某个包提示AttributeError,或者更经典的ImportError: cannot import name 'XXX' from 'YYY'。这时候你整个人都是懵的:我啥也没干啊,昨天还好好的呢?

还有一种情况,特别让人绝望。你的系统里可能同时存在Python 3.8、3.9、3.10,甚至是Python 2.7的残留。你在终端里输入python,指向的是3.8;输入python3,指向的又是3.10。pip装到了A版本,代码却用B版本运行,报错信息云山雾罩,根本找不到北。

说到版本,RAG生态对Python版本是非常敏感的。比如LangChain的新版本普遍要求Python 3.9及以上,很多向量库的二进制包在3.12上甚至都还没编译好。你拿着一个3.8的环境去跑,看到的不会是正常的运行结果,只会是一大片刺眼的红色报错。

更隐蔽的是操作系统差异。Windows用户照着Linux教程敲source venv/bin/activate,终端直接报“不是内部或外部命令”;macOS用户升级系统后,自带的Python链接被重置,之前装的全局包全部“失联”。这些环境搭建期的细碎折磨,足够浇灭一个初学者全部的热情。

小李是个勤奋的孩子,看到一篇标题很炸裂的RAG教程《十分钟搭建你的第一个知识库》,立马打开电脑,在Windows的CMD里输入:

pip install langchain openai chromadb

结果,屏幕瞬间被红色 error 淹没。最上面一行冷冰冰地写着:Python 3.8.5 detected, but this package requires Python >= 3.9. 小李当时就懵了,Python还有这么大的代沟吗?他不去升级环境,反而去搜“怎么强制安装高版本包到旧版Python”,然后在全局环境里一通魔改,最后不仅LangChain没装上,连原来能跑的爬虫项目也废了,pip本身都开始抽风报错。

听学长一句劝,RAG开发,环境隔离是铁律,没有任何商量余地。

首先,检查你的Python版本。打开终端,输入:

python --version

如果显示的是3.8或者更低,别犹豫,先去装一个新的。RAG开发目前最稳的区间是 Python 3.9、3.10 或者 3.11。3.12太新,很多依赖还没适配,新手千万别当尝鲜的小白鼠。

接下来,选择你的“隔离方案”。我推荐两条路,二选一即可:

方案一:venv(Python自带,轻量级)。 适合“我就跑这一个项目”的场景。在项目文件夹里执行:

# 创建虚拟环境
python -m venv rag-env

# Windows 激活
rag-env\Scripts\activate

# macOS/Linux 激活
source rag-env/bin/activate

激活成功后,你的命令行前面会出现(rag-env)这样的前缀。这就像是给这个项目发了一张“专属门禁卡”,你在这里面pip install的所有东西,都只会待在这个小房间里。

方案二:Conda / Miniconda(强烈推荐)。 如果你经常在不同项目间切换,或者需要管理多个Python版本,Conda是你的救星。去装一个Miniconda,别装Anaconda完整版,太大了没必要。然后:

# 创建一个Python 3.10的隔离环境
conda create -n rag-dev python=3.10 -y

# 激活它
conda activate rag-dev

# 确认一下路径对不对
which python  # Windows用 where python

看到路径指向的是Miniconda目录下的python,那就对了。

用Conda有一个巨大的好处:万一你把这个环境搞烂了,直接删了重建就行,不会影响你电脑里其他任何项目。就像打游戏开了个存档,玩崩了读档重来,毫无心理压力。

另外,在Windows下,尽量不要用系统自带的Python或者从微软商店装的Python,坑特别多。要么用Conda,要么从Python官网下载安装包,安装时记得勾选“Add Python to PATH”。还有,别在路径里放中文和空格,这是很多C++扩展包编译报错的元凶。

RAG开发的第一步,不是写代码,而是画地为牢。虚拟环境就是你的“结界”,也是你项目的“保险箱”。守住这道边界,后面的依赖安装、代码运行,才有稳定的根基。记住,在全局环境里折腾,无异于在雷区里跳广场舞。

核心依赖库安装——别一上来就“全家桶”乱炖

环境建好了,接下来该往里面装“弹药”了。RAG开发需要哪些库?大模型交互的OpenAI SDK、编排框架LangChain、向量库、文档解析库……名单不短。但安装这件事,绝对不是把名字复制下来一键回车那么简单。这里面的顺序、版本、系统兼容性,全是门道。

新手看到教程里列了一串库名,心里的想法往往是:“全装上,总没错。”于是打开终端,复制粘贴,一气呵成:

pip install langchain langchain-openai openai chromadb faiss-cpu pypdf unstructured tiktoken sentence-transformers

然后就开始了漫长的等待,以及更漫长的报错。

RAG相关的库,很多底层依赖C++扩展。比如unstructured,它在解析PDF和图片时,需要系统级的libmagicpoppler-utils;Windows下直接pip install unstructured,大概率会挂,因为它找不到这些系统工具。再比如faiss-gpu,如果你没装CUDA,或者CUDA版本和PyTorch对不上,装都装不上。

还有一个隐形杀手:LangChain的[all]额外依赖。有些教程偷懒,让你直接pip install langchain[all]。这一下子会把LangChain连接的各种搜索引擎、数据库、云服务SDK全给你装上,几十上百个依赖包,安装时间长不说,一旦其中某一个编译失败,整个安装过程直接中断,留下一地鸡毛。

LangChain生态里还有个著名的“噩梦”:某个版本的langchain-community要求numpy>=1.24,但你另一个数据分析库却要求numpy<1.24。全局环境里这种冲突几乎无解,但在虚拟环境里,你可以为RAG项目单独维护一个兼容的numpy版本,别的项目完全不受影响。

另外,国内网络环境访问PyPI官方源,速度慢得让人怀疑人生。中途网络波动,下载断了,又得从头再来。很多人就在这个“下载-失败-重试”的循环里,把学习热情全磨光了。

小张是个急性子,看到一篇RAG入门文章末尾列了依赖清单,想一步到位,于是执行:

pip install langchain[all] unstructured[all-docs]

这一行命令,宛如打开了潘多拉魔盒。终端开始疯狂下载,磁盘占用蹭蹭往上涨。五分钟后,屏幕上开始出现Failed building wheel for python-magicERROR: Could not build wheels for ...。他试图手动去装Microsoft Visual C++ Build Tools,结果又陷入另一个安装地狱。三个小时过去了,他的RAG项目还是一行代码都没跑通。他开始怀疑人生:是不是我不适合学这个?

安装依赖,讲究的是分批、按需、锁版本

第一步,先解决下载速度问题。配置国内镜像源,清华、阿里、豆瓣都行:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

如果你用的是Conda,也可以配Conda的镜像,这里就不展开了,搜一下很容易找到。

第二步,先装RAG的“铁三角”核心库,把最基础的通路跑通:

pip install langchain langchain-openai openai

这三个包一装,你就能和OpenAI的模型对话了,这是RAG的“喉舌”。

第三步,根据你的向量存储方案来装。新手我强烈推荐先用Chroma,因为它纯Python实现,不需要额外服务:

pip install chromadb

如果你后续想试试Meta的FAISS(本地文件存储,非常轻量),就装CPU版:

pip install faiss-cpu

千万别一上来就挑战faiss-gpu,除非你确定自己的NVIDIA驱动、CUDA、cuDNN全都配好了。对新手来说,CPU版先把逻辑跑通,比什么都重要。

第四步,文档解析库按需安装。如果你只需要读PDF,装pypdf就够了:

pip install pypdf

unstructured确实强大,能解析PPT、图片、HTML,但它对系统环境要求极高。等你把RAG主链路跑通了,再回头攻克它不迟。

第五步,也是最关键的一步:锁定版本。RAG这个圈子,库的版本迭代非常快,尤其是LangChain,API经常变。昨天还能跑的代码,今天升级后就报错,太常见了。

在项目根目录创建一个requirements.txt文件,把你装好且验证通过的版本写进去:

langchain==0.1.20
langchain-openai==0.1.6
openai==1.30.0
chromadb==0.4.24
pypdf==4.2.0
python-dotenv==1.0.0
tiktoken==0.7.0

以后无论是在新机器上部署,还是发给队友,只需要一行命令:

pip install -r requirements.txt

就能复现出一模一样的环境。这是从“玩具项目”走向“正经开发”的分水岭。

装完任何一个阶段的库,都记得验证一下。打开Python交互式解释器:

import langchain
import openai
import chromadb
print(langchain.__version__)

如果没报错,说明这一批弹药成功入库。

装依赖不是逛超市,看见什么就往车里扔。分批按需、换源加速、锁定版本,这三板斧下去,你就能优雅地避开那个让人血压飙升的红色报错地狱。记住,慢就是快,稳扎稳打才能走得更远。

向量数据库选型与安装——别为了存向量,先去学K8s

RAG的全称是检索增强生成。这里面的“检索”,核心就是把你的文档切成片段,转成向量,存到一个专门的地方。这个“专门的地方”,就是向量数据库或者向量库。但新手往往在这一步就被吓退了,因为选型实在是太多了。

打开搜索引擎,输入“向量数据库”,你会看到Milvus、Pinecone、Weaviate、Qdrant、Chroma、FAISS、Redis、PostgreSQL with pgvector……五花八门的名字,再加上各种“云原生”、“分布式”、“十亿级向量”的宣传语,很容易让人产生一种错觉:是不是我必须先学会Docker Compose,甚至Kubernetes,才有资格玩RAG?

还有一些“伪大佬”教程,一上来就教你用Docker部署Milvus集群,配置文件写了一堆,网络端口映射讲得天花乱坠。你作为一个只想在本地跑通Demo的新手,跟着折腾了两天,电脑风扇狂转,内存爆满,最后发现你真正需要写的向量检索代码,其实只有不到十行。这种环境搭建上的“过度工程”,是很多初学者从入门到放弃的直接原因。

另外,就算是轻量级的方案,也有坑。比如Chroma,如果你在使用时不显式指定persist_directory,它默认会把数据存在一个临时目录里。你兴冲冲地存了几百篇文档,关了程序再打开,发现检索结果空空如也。这不是Chroma的错,是你没告诉它“把家安在哪里”。

很多新手不理解,为什么非要向量数据库?我直接用关键词匹配不行吗?关键词匹配(比如BM25)确实有用,但大模型的威力在于语义理解。“电脑”和“计算机”在关键词匹配里是两回事,但在向量空间里,它们的距离非常近。Embedding就是把文字变成这种高维向量的技术。向量数据库就是帮你快速做“找相近向量”这件事的。

小王是个有“工程洁癖”的人,他觉得既然要做RAG,就得用“企业级”的方案。于是他找了篇标题为《基于Milvus构建生产级RAG系统》的教程,开始在自己的Windows笔记本上实践:

docker-compose up -d milvus-standalone etcd minio

这三个容器一启动,他的8G内存笔记本直接卡成了PPT。他又去研究WSL2的内存限制、Docker Desktop的资源分配,折腾了整整一个周末。最后,当他终于把Milvus跑起来,却发现自己连基础的Python连接代码都写不明白,热情被彻底浇灭。而其实他当下的需求,只是想验证一下“把这三篇论文向量化后能不能搜到相关内容”而已。

新手选型,只需要记住四个字:够用就好

你的目标是在本地把RAG的完整链路跑通,不是直接扛住百万并发。在这个阶段,你需要的是“随手可用”,而不是“无所不能”。

方案A:Chroma(新手最友好)。 Chroma是纯Python写的向量数据库,没有独立服务,不需要Docker,pip装完就能用。它支持持久化到本地文件,非常适合学习和中小规模项目。

正确姿势:

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# 关键点:显式指定 persist_directory,别把数据放临时目录!
db = Chroma(
    persist_directory="./my_chroma_db",  # 放在项目目录下,随时能看见
    embedding_function=OpenAIEmbeddings()
)

# 添加文本
db.add_texts([
    "RAG是一种结合检索和生成的技术。",
    "向量数据库用于存储高维向量。"
])

# 主动持久化到磁盘
db.persist()

这里面的./my_chroma_db是核心。它是一个普通的文件夹,你的向量数据、元数据全在里面。你可以用Git忽略它,可以备份它,也可以随时删掉它重来。下次启动时,Chroma会自动加载这个目录下的数据。

方案B:FAISS(更底层,更轻量)。 如果你连Chroma的“数据库”概念都觉得重,可以试试Facebook(Meta)出品的FAISS。它不算是传统数据库,更像是一个高效的向量索引库,存出来就是几个二进制文件。

from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

# 创建索引
db = FAISS.from_texts(
    ["RAG是一种结合检索和生成的技术。", "向量数据库用于存储高维向量。"],
    OpenAIEmbeddings()
)

# 保存到本地文件夹
db.save_local("faiss_index")

# 以后加载
db = FAISS.load_local("faiss_index", OpenAIEmbeddings())

FAISS不依赖任何后台进程,几个文件走天下。如果你对“向量相似度搜索”本身很感兴趣,FAISS能让你更贴近底层原理。

那什么时候才需要Milvus、Qdrant这些“重武器”?当你出现以下需求时:需要多客户端并发访问;数据量达到百万、千万级别,本地内存存不下;需要复杂的权限管理、多租户隔离;要部署到生产集群,要求高可用。

在那之前,请安心用你的Chroma或者FAISS。别用高射炮打蚊子。

向量存储的本质,是给Embedding向量一个“家”。新手阶段,Chroma的“单身公寓”或者FAISS的“移动硬盘”完全够用。等你的业务真正长大了,再搬去Milvus的“大别墅”也不迟。千万别在Hello World阶段,就逼自己去考K8s的“房产证”。

API密钥管理与环境变量配置——别把钥匙贴在脑门上

RAG系统离不开大模型。无论是调用OpenAI的GPT-4,还是国内的各种大模型API,你都需要一个API Key来验证身份。这个看起来只是一串字符的小东西,管理不好,轻则代码泄露,重则钱包大出血。这不是危言耸听,学长见过太多血淋淋的教训。

很多新手在写第一行调用大模型的代码时,会毫不犹豫地这么写:

from openai import OpenAI

client = OpenAI(
    api_key="sk-1234567890abcdef...",
    base_url="https://api.openai.com/v1"
)

看起来直观,跑起来也没问题。但问题来了:这段代码你往哪放?如果你把它传到了GitHub、GitLab,或者发到了技术交流群,这串Key就相当于暴露在全网面前。

你可能觉得,我代码里藏得挺深的,谁看得见?太天真了。GitHub上有无数个爬虫机器人,24小时不间断地扫描仓库,专门用正则表达式匹配sk-开头的字符串。一旦匹配到,马上就会有人拿你的Key去批量调用API,可能是去生成垃圾内容,可能是去倒卖额度。等你收到账单通知的时候,可能几百甚至几千美元已经没了。OpenAI对于这种泄露通常是不退款的。

还有一种痛苦,是国内开发者特有的网络问题。直接访问OpenAI的官方API,经常遇到超时、连接失败。很多人知道要改base_url到中转地址,却不知道怎么改才优雅,只能在代码里到处硬编码,换一个环境就改一次代码,烦不胜烦。

另外,.env文件很多人都知道,但总有人忘了把它加进.gitignore。结果.env跟着代码一起提交了,该泄露的还是泄露,只是换了个文件名字而已。

小陈写了个RAG问答小Demo,功能挺酷,能把公司内部的FAQ文档接上大模型自动回答。他很兴奋,把代码推到了GitHub上展示自己的学习成果。三天后,他收到了OpenAI的邮件,提示账号存在异常流量。登录后台一看,账单多了200多美元,调用记录里全是乱七八糟的Prompt,明显不是他发的请求。他这才想起来,代码里有一行硬编码的api_key="sk-..."。他的密钥被爬虫扫到了。虽然及时撤销了密钥,但损失已经造成,更重要的是,这件事给他留下了巨大的心理阴影,好长一段时间都不敢碰API相关的开发。

核心原则只有一条:代码里永远、永远不要出现明文的API Key。

具体怎么做?分三步,简单粗暴但极其有效。

第一步,在项目根目录创建一个.env文件。

OPENAI_API_KEY=sk-your-actual-key-here
OPENAI_BASE_URL=https://api.openai.com/v1

如果你有多个模型,比如还用了智谱AI或者通义千问,可以继续往下加:

ZHIPU_API_KEY=yyy.yyyyy
DASHSCOPE_API_KEY=sss-ssssss

这个文件是你的“密码本”,里面只放密钥和配置,不放任何业务逻辑。

第二步,创建/更新.gitignore文件,确保.env被Git忽略。

# 环境变量文件
.env

# Python缓存
__pycache__/
*.pyc

# 向量数据库本地文件
chroma_db/
faiss_index/

这一步是重中之重!很多新手就是栽在这里。提交代码前,用git status看一眼,确认.env不在待提交列表里。

第三步,代码里用python-dotenv读取环境变量。

先装一下这个库(很小,无依赖):

pip install python-dotenv

然后代码这样写:

from dotenv import load_dotenv
import os

# 加载.env文件到环境变量
load_dotenv()

# 从环境变量中读取
api_key = os.getenv("OPENAI_API_KEY")
base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")

# 初始化客户端
from openai import OpenAI
client = OpenAI(api_key=api_key, base_url=base_url)

# 测试调用
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)

看到没有?代码里干干净净,没有任何敏感信息。你把这套代码发到任何地方,哪怕是全网公开,别人也拿不到你的Key。

关于base_url,如果你用的是国内的中转代理,或者本地部署的Ollama、vLLM,只需要修改.env文件里的OPENAI_BASE_URL,代码完全不用动。比如:

OPENAI_BASE_URL=https://your-proxy-domain.com/v1

这就是环境变量配置的优雅之处——配置与代码分离。

如果你是在团队里开发,还可以进一步使用“密钥分级”策略。开发环境用一个额度受限的Key,测试环境用另一个,生产环境再单独管理。这样即使开发机的Key不小心泄露了,损失也可控。

API Key就是你的“数字钱包”,甚至可以说是你的“身份证”。把它硬编码在代码里,无异于把家门钥匙贴在脑门上逛街。请一定把它关进.env的保险柜,再配上一把.gitignore的锁。这样做不仅安全,还能让你的代码在不同环境、不同机器之间无缝迁移。

开发工具链与调试环境——别拿记事本打Boss

环境搭好了,依赖装齐了,密钥也配置安全了。现在问题来了:你用什么写代码?怎么调试?别觉得这个问题幼稚,工具链选得不趁手,写代码的效率能差出十倍。RAG开发尤其如此,因为它是一个高度“探索性”的过程,你需要反复和大模型、向量库、文档解析器交互,观察中间结果。

有些新手真的用系统自带的记事本,或者最基础的文本编辑器写Python。写完之后保存,切换到终端,输入python main.py,出错了就回到编辑器,加一行print("到这里了"),保存,再切换到终端运行……这种“原始人式”的开发方式,在RAG这种需要频繁观察复杂返回数据的场景下,简直就是折磨。

RAG的调试对象可不是简单的数字和字符串。检索返回的Document对象里,有page_contentmetadatasource等各种字段;大模型返回的响应是嵌套了好几层的JSON结构;向量本身是一个768维或者1536维的浮点数组。在黑白命令行里用print输出这些东西,简直就是让眼睛受刑。

还有Jupyter Notebook的环境问题。很多人装了Jupyter,启动后在浏览器里写代码,却发现自己刚pip install的包import不了。这是因为Jupyter的Python内核(kernel)绑定的是系统默认的Python,而不是你刚配好的虚拟环境。你在A环境里装了一堆武器,Jupyter却打开了B仓库的门,手里空空如也。这种“薛定谔的依赖”最让人抓狂。

小赵同学用VSCode写RAG检索功能,为了搞明白retriever.get_relevant_documents()到底返回了什么,他的代码里写满了这样的“调试逻辑”:

docs = retriever.get_relevant_documents("什么是RAG?")
print("===============")
print(docs)
print("===============")
print(type(docs))
print("===============")
print(docs[0])

终端里输出了一堆对象地址和换行符,他眯着眼睛看了半天,还是搞不清docs[0]里面具体的文本内容和来源文件名。他又尝试把docs[0].__dict__打印出来,格式一团糟。就这样,他花了整整一个下午,只是为了看清楚数据结构,而真正的业务逻辑一行都没推进。如果他有一个交互式环境,能直接输入docs[0].page_content并立刻看到结果,这本来只需要两分钟。

RAG开发的黄金工具组合,我推荐:VSCode + Jupyter插件

为什么不是PyCharm?PyCharm当然也很好,但Jupyter插件在VSCode里的集成体验,对于数据分析和大模型交互来说,是无敌的。为什么不是纯脚本?因为RAG开发不是流水线,是实验室,你需要随时观察、随时调整。

第一步,确保你的虚拟环境里装了Jupyter和ipykernel。

pip install jupyter ipykernel

第二步,把你的虚拟环境注册成Jupyter的一个内核。

这一步超级关键!否则Jupyter找不到你的包。

python -m ipykernel install --user --name=rag-dev --display-name "Python (rag-dev)"

--name是内核的内部标识,--display-name是你在VSCode里看到的名字。建议你取一个和conda环境或venv文件夹对应的名字,方便辨认。

第三步,在VSCode里安装官方插件。 去插件市场搜索并安装:

  • Python(Microsoft)
  • Jupyter(Microsoft)

装完后,新建一个.ipynb文件(Jupyter Notebook),在VSCode右上角点击“选择内核”,选中你刚才注册的Python (rag-dev)

现在,你就可以像拼积木一样开发RAG了:

# 单元格 1:加载配置
from dotenv import load_dotenv
load_dotenv()
# 单元格 2:初始化Embedding和向量库
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

embeddings = OpenAIEmbeddings()
db = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)
# 单元格 3:测试检索
query = "RAG的核心原理是什么?"
docs = db.similarity_search(query, k=3)

# 直接输出,VSCode会美化显示
docs

你把光标放在docs所在的单元格里,按Shift + Enter,下面立刻就会展开一个漂亮的渲染结果。你可以逐层展开列表,查看每个Document对象的属性,鼠标悬停就能看到完整的字符串内容。这种“所见即所得”的调试体验,比print舒服一百倍。

再教你们一个小技巧:在Jupyter Notebook里,如果一个单元格执行时间很长(比如加载大模型或索引大量文档),你可以在前面加个%%time魔法命令,它能精确告诉你这段代码跑了多久。优化RAG性能的时候,这个数据非常关键。

断点调试也要用起来。 在VSCode左侧行号旁边点一下,出现红点,然后按F5运行调试。程序执行到这一行会暂停,左侧变量窗口会实时显示所有变量的值。你想看docs[0].metadata里有没有source字段?不需要print,直接在变量区展开看就行。

还有一些提升幸福感的习惯:把向量库文件夹(如chroma_dbfaiss_index)加进.gitignore,避免误提交数据;在Notebook开头固定一个load_dotenv()单元格,确保每次重启内核配置都在;用Markdown单元格写注释和实验记录,你的Notebook就是最好的实验笔记。

RAG开发不是工厂流水线,而是实验室里的反复试验。你需要一套顺手的交互式装备,来观察那些复杂的文档结构、向量检索结果和模型响应。VSCode配合Jupyter,就是你在RAG战场上的高倍显微镜和手术刀。别再用记事本和print去硬刚Boss了,那真打不过。

写在最后

看到这儿,恭喜你,你已经把RAG开发环境这道“新手劝退关”给稳稳地踏过去了。咱们一起回顾了一下:用虚拟环境守住Python的边界,分批次按需安装核心依赖并锁定版本,用Chroma或FAISS轻装上阵解决向量存储,把API Key藏进.env保险箱,再配上一套VSCode+Jupyter的交互式开发装备。这五个要点,每一个都是学长曾经摔过跤、踩过坑的地方。

我知道,搭环境这件事,听起来远没有“调Prompt让大模型写出诗”那么性感,也没有“部署一个Agent”那么有成就感。但它是一切的地基。地基打得扎实,你后面学检索策略、学Agent编排、学多模态RAG,才能心无旁骛,一飞冲天。

编程这条路,从来都不是百米冲刺,而是一场漫长的马拉松。环境搭建只是你热身的那几百米,可能会觉得枯燥,可能会觉得有点繁琐,但每一个正确的配置,每一次对报错的耐心排查,都在悄悄地锻造你作为工程师的基本功。

所以,别急着一口吃成胖子。先把这套环境跑通,写出一个最简单的“导入文档 -> 向量检索 -> 调用大模型回答”的Demo。那个Demo或许很简陋,但它会是你RAG征途上的第一个里程碑。保持好奇,保持耐心,持续学习,你一定能在这个大模型的时代,找到属于自己的那片天地。加油,咱们下篇见!

关注私信备注:“资料代找获取”,全网计算机学习资料代找:例如:
《课程:2026 年多模态大模型实战训练营》
《课程:AI 大模型工程师系统课程 (22 章完整版 持续更新)》
《课程:AI 大模型系统实战课第四期 (2026 年开课 持续更新)》
《课程:2026 年 AGI 大模型系统课 23 期》
《课程:2026 年 AGI 大模型系统课 21 期》
《课程:AI 大模型实战课 8 期 (2026 年 2 月最新完结版)》
《课程:AI 大模型系统实战课三期》
《课程:AI 大模型系统课程 (2026 年 2 月开课 持续更新)》
《课程:AI 大模型全阶课程 (2025 年 12 月开课 2026 年 6 月结课)》
《课程:AI 大模型工程师全阶课程 (2025 年 10 月开课 2026 年 4 月结课)》
《课程:2026 年最新大模型 Agent 开发系统课 (持续更新)》
《课程:LLM 多模态视觉大模型系统课》
《课程:大模型 AI 应用开发企业级项目实战课 (2026 年 1 月开课)》
《课程:大模型智能体线上速成班 V2.0》
《课程:Java+AI 大模型智能应用开发全阶课》
《课程:Python+AI 大模型实战视频教程》
《书籍:软件工程 3.0: 大模型驱动的研发新范式.pdf》
《课程:人工智能大模型系统课 (2026 年 1 月底完结版)》
《课程:AI 大模型零基础到商业实战全栈课第五期》
《课程:Vue3.5+Electron + 大模型跨平台 AI 桌面聊天应用实战 (2025)》
《课程:AI 大模型实战训练营 从入门到实战轻松上手》
《课程:2026 年 AI 大模型 RAG 与 Agent 智能体项目实战开发课》
《课程:大模型训练营配套补充资料》

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐