AI RAG开发学习:用Python和Chroma搭建本地知识库问答

RAG(检索增强生成)的核心不是训练新模型,而是让大模型在回答前先检索你提供的资料,把检索到的片段拼进提示词。
这样回答有依据、能引用私有文档,也方便更新知识。
本文用 Python 本地跑通一个最小可用的 RAG 流程,不依赖付费 API,适合零基础跟做。

先明确你要准备什么

动手前需要一台能装 Python 的电脑或服务器,建议 Python 3.9 以上。
本文用 sentence-transformers 生成向量,用 Chroma 做本地向量库,大模型部分可以先接一个本地或在线模型,但流程重点是检索环节。

安装依赖:

python -m venv rag-env
source rag-env/bin/activate
pip install sentence-transformers chromadb

Windows 下激活命令换成 rag-env\Scripts\activate。
如果下载模型慢,先设置镜像或手动下载模型目录,后面会讲。

把文档切成能检索的小块

RAG 第一步不是写提示词,而是把资料切成大小合适的片段。
切太大,检索不精准;
切太小,上下文丢失。
建议每段 300~500 字,保留段落边界。

下面示例读取一个纯文本文件并按段落切分:

from pathlib import Path

def load_chunks(path, max_len=400):
    text = Path(path).read_text(encoding='utf-8')
    paragraphs = [p.strip() for p in text.split('\n') if p.strip()]
    chunks = []
    for p in paragraphs:
        if len(p) <= max_len:
            chunks.append(p)
        else:
            for i in range(0, len(p), max_len):
                chunks.append(p[i:i+max_len])
    return chunks

实际项目中还要处理 PDF、Word 和网页,但先跑通纯文本,确认检索效果后再扩展格式。

生成向量并写入 Chroma

向量化就是把文本变成一组数字,语义相近的文本向量距离更近。
这里用 all-MiniLM-L6-v2 模型,体积小、适合本地测试。

from sentence_transformers import SentenceTransformer
import chromadb

model = SentenceTransformer('all-MiniLM-L6-v2')
client = chromadb.Client()
collection = client.create_collection('my_docs')

chunks = load_chunks('docs.txt')
embeddings = model.encode(chunks).tolist()
collection.add(
    documents=chunks,
    embeddings=embeddings,
    ids=[str(i) for i in range(len(chunks))]
)

运行后没有报错,说明向量库写入了。
如果提示模型下载失败,检查网络或提前把模型缓存到本地目录,再用本地路径加载。

检索并拼装提示词

用户提问时,先把问题向量化,再到 Chroma 中查最相似的片段,最后把片段和问题一起交给大模型。

question = 'RAG 的切片大小怎么定?'
q_emb = model.encode([question]).tolist()
results = collection.query(query_embeddings=q_emb, n_results=3)
context = '\n'.join(results['documents'][0])
prompt = f'根据以下资料回答问题:\n{context}\n\n问题:{question}'
print(prompt)

这段代码只完成检索和提示词拼装,真正生成回答需要再接一个模型接口。
重点检查 results['documents'][0] 是否包含与问题相关的段落,如果不相关,先调整切片大小或换向量模型,而不是急着改提示词。

避坑与效果验证

切片不要按固定字数硬切,尽量保留段落和标题边界,否则检索到的片段可能缺上下文。

向量模型和查询模型要一致,入库和检索必须用同一个模型,否则向量空间不对应,结果会乱。

验证检索质量:准备 5 个已知答案的问题,看返回的前 3 个片段是否包含答案。
如果经常不包含,优先检查文档切片和向量模型,再考虑增加召回数量。

不要一开始就上大模型,先把检索环节调通,确认能返回正确片段,再接入生成模型,排错会简单很多。

RAG 开发学习的关键是理解“先检索、再生成”这条链路。
按本文步骤跑通本地最小流程后,再逐步替换文档解析、向量库和生成模型,就能扩展到自己的知识库问答场景。

分享到:
上一篇
AI Agent开发学习:用Python写一个能调用工具的智能体
下一篇
AI微调实战学习:用LoRA在消费级显卡上跑通一次完整微调
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意