PrivateGPT 是开源的本地私有文档问答系统,2023 年 5 月由独立开发者 Iván Martínez 发布,以“文档不出本机、直接对私有文档提问”迅速成为热门项目;2024 年完成 v2.0 全面重写,从依赖 LangChain 的脚本式应用演进为 FastAPI 服务 + Angular Web UI 的完整产品形态,项目随后移交 zylon-ai 组织维护。它解决的核心问题是:企业内部合同、制度、技术文档等敏感资料无法上传公有云,而自建 RAG(检索增强生成:先检索相关文档片段,再把片段与问题一起交给大模型生成答案)链路工程成本高。PrivateGPT 将「文档导入 → 切片 → 向量化 → 检索 → 生成」打包成开箱即用的服务,提供 REST API 与 Web 界面,支持 Ollama 完全本地推理,也可接 OpenAI 兼容的远程模型。本文围绕 2.x 版本展开:速览卡、安装配置、快速上手、核心能力、生产部署、版本迭代、典型场景、常见误区与面试题,0.x 仅作对照提及。

岗位关联

掌握 PrivateGPT 意味着掌握一套可直接交付的私有化 RAG 范式:从文档导入、向量检索到服务化部署全链路。这是企业 AI 落地中需求量大、见效直接的工程技能。

目录
  1. 为什么需要 PrivateGPT:企业文档问答的本地化刚需
  2. 安装与环境配置:4 步就绪
  3. 快速上手:10 分钟跑通第一个文档问答
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
本地私有文档问答系统(RAG 应用,开源)
开发商
zylon-ai(原 imartinez 个人项目)
开源协议
MIT(可商用)
GitHub Stars
主要语言
Python(后端)/ TypeScript(Web UI)
当前版本
2.x(2024 年全面重写)
安装方式
`pip install "privategpt[server]"` 或 Poetry + 源码构建
上手难度
★★★☆☆(中等)
适合人群
数据/NLP 工程师、企业 IT 与信息安全团队
同类工具
LangChain · LlamaIndex · AnythingLLM
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 PrivateGPT:企业文档问答的本地化刚需

企业内部知识大量沉淀在 PDF、Word、Markdown 文档中。传统做法是人工翻阅,或依赖关键词全文搜索,无法回答“2023 年哪些供应商合同包含竞业条款”这类语义问题。把文档交给公有云 LLM(大语言模型)则有三条硬伤:法务、财务、研发文档高度敏感,数据出域有合规风险;通用模型不掌握企业内部上下文,直接提问只能得到泛泛回答;从零搭建 RAG 管线(切分、嵌入、检索、生成)涉及大量工程细节,普通团队动辄数周。

PrivateGPT 把这条管线打包成开箱即用的服务:上传文件后自动完成文本解析、切片(chunking,将长文档按语义拆成小块)、向量化(嵌入模型把文本转为语义向量)与存储;提供 OpenAI 兼容的 /v1/chat/completions 接口,回答时基于检索到的原文片段生成,并返回引用来源(sources)。部署形态上,既可以用 Ollama 让数据和推理全部留在内网,也可以接 OpenAI 兼容的远程模型以节省算力——隐私边界由你自己决定。配套的 Web UI 让非技术同事无需写代码即可使用。

与 LangChain、LlamaIndex 这类“组件库”不同,PrivateGPT 是“成品”,装完即有 API 和界面;与 AnythingLLM 这类桌面工具相比,它本质是一个服务,更适合内网多用户访问与二次开发。代价是定制自由度和组件生态不如框架型工具,特殊管线需求需要自己改代码。

安装与环境配置:4 步就绪

前置条件:Python 3.10 以上;源码方式需要 make 与 Poetry;使用本地推理模式需要先安装 Ollama(本地大模型运行工具)。

步骤一、选择安装路径。只调用 API 用 pip install "privategpt[server]";需要内置 Web UI 则克隆源码并用 Poetry 安装(UI 为 Angular 前端,源码方式会自动构建)。步骤二、配置模型模式。默认以 mock 模式启动(不调用真实模型,用于验证链路);做真实问答需切换到 ollama(本地)或 openai(远程兼容)模式,并通过环境变量或 settings.yaml 配置模型名。Ollama 模式要预先拉取对话模型与嵌入模型。步骤三、启动服务。源码方式执行 make run,然后访问 http://localhost:8001;纯 API 方式用 uvicorn 启动。步骤四、验证安装。请求健康检查接口返回 ok,并确认 Swagger 文档可访问。

bash20 行
# ① 安装(两条路径任选其一)pip install "privategpt[server]"                       # 仅 API 服务git clone https://github.com/zylon-ai/private-gpt      # 含 Web UI 的源码cd private-gpt && poetry install --with ui,local,server # ② 本地模式(Ollama)先拉取模型,再配置模式ollama pull llama3ollama pull nomic-embed-textexport PRIVATEGPT_LLM_MODE=ollamaexport PRIVATEGPT_LLM_MODEL=llama3export PRIVATEGPT_EMBEDDINGS_MODE=ollamaexport PRIVATEGPT_EMBEDDINGS_MODEL=nomic-embed-text # ③ 启动(源码方式推荐 make run,访问 http://localhost:8001)make run# 或纯 API 方式:# uvicorn privategpt.server.app:app --port 8001 # ④ 验证curl http://localhost:8001/v1/health

快速上手:10 分钟跑通第一个文档问答

最小闭环只有三步:导入文档、提问、核对引用来源。建议先用 PDF 或 Markdown 测试,避开复杂格式。接口方式适合开发集成,UI 方式适合非技术用户,两者共用同一套文档与问答能力。

  • 步骤一:启动服务,确认 http://localhost:8001/v1/health 返回 ok。
  • 步骤二:调用 POST /v1/ingest 上传一份测试文档(multipart 格式)。
  • 步骤三:调用 POST /v1/chat/completions,将 use_context 设为 true 后提问。
  • 步骤四:在响应的 sources 字段中核对模型引用的原文片段,确认回答确实来自文档而非模型自由发挥。

以下为 API 方式的完整可运行示例:

运行后,回答会基于刚导入的文档内容生成,sources 列出模型实际引用的段落与来源文件。进阶技巧:通过 context_filter.docs_ids 限定只在指定文档集内检索;开启 stream 参数获得流式输出;未导入文档就提问时,模型可能给出无关的通用回答,属预期行为。

python24 行
import requests BASE = "http://localhost:8001" # 1) 导入文档(multipart 上传)with open("policy.pdf", "rb") as f:    r = requests.post(        f"{BASE}/v1/ingest",        files={"files": ("policy.pdf", f)},    )print("导入返回:", r.json()) # 2) 基于文档上下文提问,并要求返回引用来源r = requests.post(    f"{BASE}/v1/chat/completions",    json={        "messages": [{"role": "user", "content": "公司对远程办公有什么规定?"}],        "use_context": True,        "include_sources": True,    },)data = r.json()print("回答:", data["choices"][0]["message"]["content"])print("来源:", data.get("sources"))

核心能力详解:4 大支柱

支柱一、文档摄取与管理。POST /v1/ingest 接收 multipart 文件,后台完成文本抽取、切片、向量化并写入向量库(存储文档语义向量、用于相似度检索的数据库);GET /v1/ingest 列出已导入文档,DELETE /v1/ingest/{doc_id} 按 ID 删除。原生支持 PDF、TXT、Markdown 等文本类格式,扫描件与复杂表格需先做 OCR 或格式转换。注意默认内存向量库不持久化,服务重启后需重新导入文档。

支柱二、检索增强问答。/v1/chat/completions 请求体采用 OpenAI 兼容的 messages 格式。三个关键参数:use_context 决定是否把检索结果拼入提示词(设为 true 即“回答仅基于文档”);include_sources 让响应携带引用片段与元数据,支持溯源核对;context_filter 按已导入文档 ID 集合限定检索范围,实现“只在这个文档集里问”。多轮对话时需自行维护历史消息列表。

支柱三、多后端灵活切换。LLM 与嵌入模型独立配置,各有本地(Ollama/本地嵌入模型)与远程(OpenAI 兼容)模式,另有 mock 模式用于无模型联调。这带来三种典型组合:推理与嵌入全本地=数据完全不出内网;推理走云模型、嵌入留本地=混合架构;mock 模式=只验证 API 链路,不产生真实回答。切换模式只需改环境变量或 settings.yaml,无需改业务代码。

支柱四、Web UI 与 API 一体化。同一服务端口同时输出 Angular 前端、REST API 与 Swagger 文档(http://localhost:8001/docs)。UI 提供文档上传、对话问答与 Sources 引用查看,非技术用户可直接使用;API 面向系统集成,便于对接内部 OA、工单系统。二者共享同一配置与向量存储,部署一套即可。

生产部署与监控:从上线到运维

部署方式一、systemd + uvicorn 托管纯 API 服务。适合只需被业务系统调用的场景:编写 systemd 单元文件托管 uvicorn 进程,实现开机自启与崩溃拉起;日志经 journalctl 统一采集;在服务配置中启用 server.auth(Bearer Token 鉴权)保护内网接口,前端通过 Nginx/Caddy 终结 TLS。

部署方式二、Docker 容器化 + 反向代理。仓库内置 Dockerfile,可构建镜像并映射 8001 端口;文件卷(已导入文档)与向量库目录必须挂载到宿主机,避免容器重建导致数据丢失;前端网关配置内网域名、TLS 与访问控制。多用户场景注意并发:推理在本地 GPU 时,多路并发会排队,建议按用户组拆分实例或限制请求频率。

可观测性。GET /v1/health 返回 ok,供负载均衡或监控探活;uvicorn 访问日志与应用日志记录请求与异常;对 ingest 与 chat 接口自行埋点统计耗时与成功率,Ollama 侧可观察推理时间。系统本身不内置指标面板,生产环境建议接入 Prometheus + Grafana 或自建日志平台。关键指标:导入成功率、问答响应耗时、检索命中率(回答中引用来源的合理性)。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>默认内存向量库不持久化:v2.x 默认把向量存在进程内存,服务重启后检索索引全部丢失,需重新导入。生产环境应配置持久化向量库(如官方支持的 Chroma 方案)或做文档自动重导。</li><li>首次运行需联网下载嵌入模型:使用 sentence-transformers 本地嵌入时,首次会从 Hugging Face 拉取模型文件(如 all-MiniLM-L6-v2)。严格离线环境要提前缓存模型,或改用 Ollama 嵌入模式。</li><li>网上教程大量停留在 0.x:0.x 的 privateGPT.py、ingest.py、.env、GGML 模型等用法在 v2.0 后全部废弃,照抄旧教程会报模块找不到或参数不识别,先确认教程对应的版本分支。</li></ul>

维度PrivateGPTLangChainLlamaIndexAnythingLLM
定位开箱即用的本地文档问答系统(API+UI)通用 LLM 应用开发框架RAG 数据框架(索引/查询抽象)面向终端用户的本地 RAG 桌面/Web 工具
编排范式固定 RAG 流水线,配置驱动链/代理自由编排,代码驱动索引与查询器抽象,代码驱动固定流程,界面驱动
类型约束成品应用:不写代码可用,也可调 REST API代码框架:需编程才能使用代码框架:需编程才能使用成品 App:桌面安装包开箱即用
学习曲线★★★☆☆ 中等★★★★☆ 较陡★★★☆☆ 中等★★☆☆☆ 平缓
生态集成API 化可嵌入其他系统,无组件市场组件/工具/Agent 生态最全数据连接器丰富(数据库/文件/API)内置多向量库与 LLM 连接,偏消费级
生产部署自托管服务(uvicorn/Docker),适合内网库,部署方式由你决定库,部署方式由你决定桌面应用或自托管 Server
LicenseMITMITMITMIT
适合谁想快速落地私有文档问答的团队需要高度定制 Agent/链的开发者需深度控制 RAG 管线与数据源的团队个人/小团队想要免运维本地知识库

选型建议:短平快交付“内网文档问答”选 PrivateGPT;需要把 RAG 深度嵌入自有业务逻辑(多数据源、复杂 Agent 编排)选 LlamaIndex 或 LangChain;非技术用户个人使用选 AnythingLLM。

版本迭代

PrivateGPT 2023 年 5 月由独立开发者发布,以“文档不用上传、全部本地跑”迅速走红;2023 年夏因与商业站点 private-gpt.com 的商标争议短暂改名,事件平息后恢复。0.x 期间还有 0.2 及此后多个小版本,主要围绕模型兼容与工程细节。2024 年项目转入 zylon-ai 组织并重写,v2.0 起从脚本式应用变为服务化产品,官方不再维护 0.x。本文版本信息截至 2024 年 11 月的 v2.2.1,此后请以 GitHub Releases 为准。

版本时间变化提升
v0.1.02023-05首个公开版本基于 LangChain + llama.cpp 的全本地文档问答脚本;默认 Vicuna-7B GGML 量化模型;提供 ingest.py 导入与命令行问答入口
v2.0.02024-08架构全面重写服务化重构:FastAPI REST API + Angular Web UI;支持 Ollama/OpenAI 兼容多后端;流式输出与 Sources 溯源;默认内存向量库
v2.2.12024-11稳定性与兼容性迭代修复 UI 与 API 已知问题,完善多后端配置、部署文档与依赖兼容
结论

从 0.x 到 2.x 的核心变化是产品形态——脚本 + LangChain + GGML 模型 → 服务化 API + Web UI + 多模型后端。选型上新项目一律用 2.x,存量维护才需考虑旧版。PrivateGPT 本身不发布模型评测分数,问答质量取决于所选 LLM 与嵌入模型;衡量此类 RAG 应用应自建文档级问答评测集,而非直接套用模型基准。

AI 应用场景

企业敏感文档的私有化问答

阶段:RAG 管道构建 / 文档智能

解决的问题:合同、制度、财务文档含敏感数据,公有云 LLM 存在数据出域与合规风险;人工翻阅检索效率低。PrivateGPT 全本地部署(Ollama 推理 + 本地嵌入),数据与推理均不出内网。

具体案例:某企业法务团队将数千份合同导入内网 PrivateGPT,律师用自然语言查询“2023 年哪些合同包含违约金条款”。典型部署反馈中,单条条款的定位从人工约 30 分钟降至 1 分钟内,且回答附带原文出处便于复核。

研发团队内部知识库问答

阶段:知识库检索增强生成

解决的问题:技术文档、事故复盘、架构决策记录分散在 wiki 与共享盘中,新人检索成本高。PrivateGPT 提供统一问答入口,并可用 context_filter 限定只检索指定文档集。

具体案例:某团队将 API 文档与历史事故复盘导入系统,新人在排查问题时直接提问“上次数据库连接池耗尽是怎么处理的”。常见反馈是常用问题定位耗时下降约 50%,减少反复翻 wiki 与打扰老员工。

隔离网络的离线文档问答

阶段:本地推理 + RAG

解决的问题:政务、医疗、军工等隔离网络无法访问公网,也不能使用 SaaS 服务;需在完全断网环境提供文档问答能力。

具体案例:提前在有网环境拉取 Ollama 模型(对话模型 + 嵌入模型)与依赖包,离线导入后断网运行。单机 16GB 显存即可服务内部 PDF 问答,数据全程不经过任何外部节点。

常见误区

误区我以为 PrivateGPT 必须全程断网、必须用自己的 GPU 才能跑,公司没有算力就用不了。

正解2.x 支持多种 LLM 后端:可以接 Ollama 等本地推理,也可以接 OpenAI 兼容的远程 API。隐私边界由配置决定——想数据不出本机就选本地模式(ollama + 本地嵌入);想省算力就接云模型。另外默认配置下首次运行会联网下载嵌入模型,所以“完全离线”是需要显式配置的。

为何常见:早期 0.x 是纯本地脚本,宣传主打“本地化”,很多人只记住了离线这一种形态。

误区我装好后问它“今天天气怎么样”,回答很烂,是不是工具不行?

正解PrivateGPT 是 RAG 文档问答系统,默认在检索到的文档片段上生成回答(use_context=True),超出文档内容的知识它没有;它也不做工具调用、不联网搜索。通用闲聊应关闭上下文(use_context=False),但那是脱稿的模型原生能力,与文档无关。

为何常见:界面长得像 ChatGPT,容易默认它是通用助手;官方演示也主要展示文档问答场景。

误区我复制网上的教程运行 privateGPT.py 却报模块找不到,是不是我环境没装好?

正解0.x 与 2.x 是两种完全不同的产品形态:0.x 用 LangChain + GGML 脚本式(privateGPT.py、ingest.py、.env 配置),2.x 是 FastAPI 服务 + Angular UI(settings 配置、uvicorn 启动、REST API)。判断教程版本看两个信号:出现 privateGPT.py/ggml,或安装命令带 langchain——都是旧版。官方已停止维护 0.x。

为何常见:项目 2023 年爆火,大量教程诞生于那时;2024 年重写后标题没变,搜索引擎仍优先推送旧文。

误区我导入文档后重启了服务,再提问就说找不到内容,我以为只是需要重新加载。

正解2.x 默认使用内存向量库,检索索引只存在于进程内存中,服务重启即丢失,必须重新导入文档。生产环境应配置持久化向量库(如 Chroma),或将文档导入做成可重放的启动流程。这是官方文档明确说明的默认行为,不是 Bug。

为何常见:原始文件确实被服务保存了,用户误以为检索索引也一并持久化;界面操作又是“上传即绑定”,更强化了这种错觉。

误区反正本地跑,直接换 70B 大模型,效果肯定最好。

正解本地推理受显存/内存限制,70B 量化模型需要大内存且生成极慢;文档问答效果还取决于切片策略、嵌入模型与检索质量。检索不到正确片段时,换多大模型都答不对。建议先在 7B~14B 级别把链路跑通、验证检索命中率,再评估是否升级模型。

为何常见:人们凭直觉认为“模型大小决定效果”,忽略了 RAG 中检索环节才是回答质量的瓶颈。

面试题

Q1. PrivateGPT 的核心定位是什么?

单选题 · easy

  • A.通用聊天机器人应用框架
  • B.私有化部署的文档问答系统← 正确答案
  • C.大模型微调与对齐工具
  • D.开源向量数据库服务

答案:B。PrivateGPT 的核心是“基于私有文档的问答”,本质是一套 RAG 应用。聊天机器人框架是 LangChain 这类工具的定位;它不做模型微调,本身也不是向量数据库(Chroma 等才是)。

Q2. PrivateGPT 的开源协议是?

单选题 · easy

  • A.Apache 2.0 协议
  • B.GPL 3.0 协议
  • C.MIT 协议可商用← 正确答案
  • D.仅限个人免费试用

答案:C。仓库采用 MIT 协议,允许商用、修改与再分发,这也是企业内网部署无需担心授权费的原因。Apache 2.0 与 GPL 3.0 都不是本项目使用的协议,项目也没有“仅限个人”的限制。

Q3. v2.x 架构中,后端 REST API 基于哪个框架?

单选题 · mid

  • A.Flask(同步 WSGI)
  • B.Django(全栈框架)
  • C.FastAPI(异步框架)← 正确答案
  • D.Express(Node 框架)

答案:C。v2.0 重写后后端采用 FastAPI,提供自动化的 OpenAPI 文档(/docs)、异步支持与流式响应能力。Flask、Django 虽是 Python 常用框架但不是本项目所用;Express 是 Node.js 框架,与 Python 后端无关。

Q4. 向 PrivateGPT 上传文档应调用哪个接口?

单选题 · easy

  • A.获取服务健康状态
  • B.上传并导入文档← 正确答案
  • C.发起对话问答
  • D.删除已导入文档

答案:B。文档导入走 POST /v1/ingest,以 multipart 形式上传文件,服务端完成解析、切片与向量化。健康检查、问答、删除分别是 /v1/health、/v1/chat/completions、DELETE /v1/ingest/{doc_id}。

Q5. 想让问答严格基于已导入文档而非模型自由发挥,应设置哪个参数?

单选题 · mid

  • A.开启流式输出 stream 参数
  • B.开启检索上下文 use_context← 正确答案
  • C.调高随机性 temperature 值
  • D.限制最大输出 token 数

答案:B。use_context=True 会把检索到的文档片段拼入提示词,让回答基于文档生成;stream 只改变输出方式,temperature 控制随机性,max_tokens 限制长度,都不影响是否使用检索上下文。

Q6. PrivateGPT v2.x 默认的向量存储方式是?

单选题 · easy

  • A.持久化数据库存储引擎
  • B.内存向量库(重启即清空)← 正确答案
  • C.本地 JSON 文件存储
  • D.必须搭配外部向量数据库

答案:B。v2.x 出于简化默认使用内存向量库,向量只存在进程内存中,重启后检索索引丢失。生产环境应配置持久化向量库方案,或建立重启后自动重导文档的机制。

Q7. 旧版 0.x 中负责批量导入文档的脚本文件名是?

单选题 · hard

  • A.privateGPT.py 脚本
  • B.ingest.py 导入脚本← 正确答案
  • C.server.py 服务脚本
  • D.main.py 主入口脚本

答案:B。0.x 架构中 ingest.py 负责文档导入与向量化,privateGPT.py 负责问答交互;v2.0 重写后这两个脚本被废弃,功能由 /v1/ingest 与 /v1/chat/completions 接口替代。看到这类脚本名即可判断教程属于旧版。

Q8. PrivateGPT v2.x 支持的 LLM 后端模式包括?

多选题 · mid

  • A.Ollama 本地推理← 正确答案
  • B.OpenAI 兼容接口← 正确答案
  • C.内置 Mock 调试模式← 正确答案
  • D.必选官方云 GPU 平台

答案:ABC。v2.x 支持 ollama(本地推理)、openai(OpenAI 兼容接口)等模式,并提供 mock 模式在无模型时验证 API 链路。它不绑定任何官方云平台,D 不正确。

Q9. 关于 PrivateGPT v2.x,下列说法正确的是?

多选题 · hard

  • A.提供 REST API 与 Web UI← 正确答案
  • B.问答响应可返回引用来源← 正确答案
  • C.服务重启后内存向量数据保留
  • D.与 0.x 配置方式完全兼容

答案:AB。v2.x 是服务化产品,同一端口提供 REST API 与 Angular Web UI;include_sources=True 时响应携带引用来源(A、B 正确)。默认内存向量库重启即丢失(C 错误);v2.0 全面重写,与 0.x 的脚本、配置完全不兼容(D 错误)。

Q10. 要让 PrivateGPT 完全本地运行(不依赖公网模型 API),正确的做法包括?

多选题 · mid

  • A.安装并启动本地 Ollama 服务← 正确答案
  • B.拉取对话与嵌入模型到本机← 正确答案
  • C.将 LLM 与嵌入模式均设为 ollama← 正确答案
  • D.配置 OpenAI 云密钥并保持联网

答案:ABC。完全本地运行需要三要素:Ollama 推理服务、本地对话与嵌入模型、模式配置(PRIVATEGPT_LLM_MODE=ollama 与 PRIVATEGPT_EMBEDDINGS_MODE=ollama)。配置 OpenAI 云密钥并联网恰恰是走外部服务的做法,与“完全本地”矛盾。

参考来源