ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

全本地 RAG 栈实战:数据不出门,私有化部署一条龙

全本地 RAG 栈实战:数据不出门,私有化部署一条龙
个人主页: > for_ever_love__ <(欢迎各位大佬莅临😊)
其他栏目: > 大模型开发从0到1 <
其他栏目: > iOS项目总结大全 <
其他栏目: > 我想学python了 <
其他栏目: > iOS UI <

文章目录

  • 全本地 RAG 栈实战:数据不出门,私有化部署一条龙
    • 一、全本地栈的组件清单
    • 二、Embedding 本地化
    • 三、生成模型本地化:Ollama 最省心
    • 四、向量库本地化:Qdrant / Chroma
    • 五、硬件与性能现实
    • 六、和云方案的取舍
    • 七、落地 checklist
    • 小结

全本地 RAG 栈实战:数据不出门,私有化部署一条龙

很多企业的硬约束是:数据不能出内网。医疗病历、金融研报、军工文档,一旦上传到公有云 embedding / LLM API,合规就过不了。这时候需要一套全本地 RAG 栈——从向量库到 embedding 到生成模型,全部跑在自己机器上,数据零出网。

本文给你一套经过验证的本地栈选型 + 部署要点,照着搭就能跑。

一、全本地栈的组件清单

一个最小可用的本地 RAG,需要四块都能本地化:

组件作用本地选型
向量数据库存向量 + 检索Milvus / Qdrant / Chroma(单机)
Embedding 模型文本向量化bge-large-zh / bge-m3(本地推理)
生成模型读文档答问题Qwen / DeepSeek / Llama 系列(本地推理)
推理框架跑上面两个模型Ollama / vLLM / Llama.cpp

全部开源、可离线安装,不依赖任何外部 API。

二、Embedding 本地化

下载一个开源中文友好的 embedding 模型(如BAAI/bge-m3),用本地推理框架加载:

fromsentence_transformersimportSentenceTransformer model=SentenceTransformer("BAAI/bge-m3")# 离线加载本地权重vec=model.encode("如何配置负载均衡")

要点:

  • 模型权重提前下载到内网,部署时指定本地路径,不要运行时去 HuggingFace 拉。
  • bge 系列需要在 query 前加Represent this sentence for searching relevant passages:前缀(官方约定),召回率差异显著,别忘了。
  • 维度一般在 1024~1536,建库时向量索引参数要对齐。

三、生成模型本地化:Ollama 最省心

Ollama 是本地跑开源大模型最顺手的工具,一条命令拉起:

ollama pull qwen2.5:14b# 中文友好、14B 够用ollama serve# 起本地服务,默认 11434 端口

代码里直接调本地端点,和调 OpenAI API 几乎一样:

fromopenaiimportOpenAI client=OpenAI(base_url="http://localhost:11434/v1",api_key="ollama")resp=client.chat.completions.create(model="qwen2.5:14b",messages=[{"role":"user","content":prompt}])

如果需要高并发,换 vLLM(吞吐高、支持连续批处理),代价是部署复杂一点。

四、向量库本地化:Qdrant / Chroma

小团队单机用 Chroma 最轻(纯 Python,文件级存储);要上规模用 Qdrant(Rust 写,性能好,支持过滤)。

importchromadb client=chromadb.PersistentClient(path="/data/chroma")# 落盘,重启不丢col=client.get_or_create_collection("kb")col.add(ids=ids,embeddings=vecs,documents=docs,metadatas=metas)hits=col.query(query_embeddings=[qvec],n_results=5,where={"tenant":"A"})# 本地也能做元数据过滤

五、硬件与性能现实

全本地最大的成本是显卡:

  • 7B~14B 模型:一张 24G 显存卡(如 RTX 4090)能跑,embedding 和生成可共用。
  • 32B 模型:需要 48G+ 显存(A100 / 多卡)。
  • 纯 CPU 跑 Llama.cpp 也能用,但延迟高,只适合低并发。

如果显卡紧张,常见折中:embedding 和 rerank 用本地小模型(不吃显存),生成用稍大模型按需加载。或者 embedding 本地、生成走内网部署的推理集群。

六、和云方案的取舍

全本地不是银弹:

  • 优点:数据零出网、无 API 账单、无外部依赖、可离线。
  • 缺点:要自己养显卡和运维、模型效果上限受限于开源模型、迭代慢。

经验法则:有强合规 / 数据保密要求 → 全本地;无合规压力、追求效果和省心 → 公有云 API + 私有数据脱敏。

七、落地 checklist

  1. 模型权重、依赖全部离线打包,部署机禁外网;
  2. embedding / 生成模型本地路径加载,禁止运行时联网;
  3. 向量库落盘 + 定期备份;
  4. 显存 / 内存预算算清楚,压测并发;
  5. 本地也要做降级(生成模型挂了有兜底),别以为本地就永远不挂。

小结

全本地 RAG 栈 = 开源 embedding(bge-m3)+ 本地生成模型(Qwen/DeepSeek via Ollama/vLLM)+ 本地向量库(Qdrant/Chroma)。核心是「权重离线、推理本地、数据不出网」。代价是显卡和运维,换来的是合规无忧。照着上面的选型和 checklist,一天就能搭起一个能跑的私有化 RAG。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进