大模型最大的短板是"不知道你的事":公司制度、产品文档、技术笔记,它一概没学过。RAG(检索增强生成)就是标准解法——把你的文档变成可检索的知识,回答时先查再答。这篇从原理到部署完整讲透。模型层部署见Ollama 本地大模型部署。
一、RAG 是什么:一句话原理
不用微调,让大模型"开卷考试"。
普通问答:你问「报销流程是什么」→ 模型凭训练记忆瞎猜 → 一本正经地胡说(幻觉)。
RAG 问答:你问「报销流程是什么」→ 系统先在你的文档里检索相关段落 → 把段落 + 问题一起塞给模型 → 模型基于检索到的内容回答,并附出处。
用户问题 ──> 嵌入模型(向量化) ──> 向量库检索 Top-K 相关文档块
│
▼
问题 + 文档块 ──> 大模型 ──> 有据可查的回答关键认知:RAG 解决的是"知识注入",不是"模型变聪明"。模型该不会的数学题还是不会,但它不知道的你的私有知识,从此有据可查。
二、硬件与方案选型
硬件需求:比想象中低
| 组件 | 需求 | 说明 |
|---|---|---|
| 对话模型 | Ollama + 7B Q4 | 6G+ 内存,见AI 应用选型 |
| 嵌入模型 | bge-m3 或 nomic-embed-text | 约 1–2G 内存,CPU 也跑得动 |
| 向量库 | 内置或 Chroma/Qdrant | 轻量场景不用单独部署 |
| 磁盘 | 文档量 × 2 | 原文 + 向量索引 |
一台 4核8G 的 NAT 型服务器就能跑完整 RAG 栈——文档嵌入是一次性计算,日常问答只吃内存,公网 IP 完全不参与。这也是 RAG 被称为"最适合普通云服务器的 AI 应用"的原因。
软件方案对比
| 方案 | 定位 | 适合谁 |
|---|---|---|
| AnythingLLM | 开箱即用,文档上传即问答 | 个人/小团队,首选 |
| MaxKB | 中文友好,国产开源 | 国内团队,中文文档为主 |
| Dify | 完整 LLM 应用平台 | 要把 RAG 做成产品/多应用 |
| RAGFlow | 深度文档解析强 | PDF/扫描件为主的严肃场景 |
| 自建(LangChain+Chroma) | 完全可控 | 开发者,要定制管线 |
这篇以 AnythingLLM + Ollama 为主线——这套组合零外部依赖、全私有、一小时能跑通,是自托管 RAG 的性价比之选。
三、实战:AnythingLLM + Ollama 全流程
第 1 步:确认 Ollama 就绪
# Ollama 装好并拉好模型(教程见前文)
ollama pull qwen2.5:7b-instruct-q4_K_M # 对话模型
ollama pull bge-m3 # 嵌入模型(中文效果好)
curl -sS http://127.0.0.1:11434/api/tags # 确认服务活着第 2 步:部署 AnythingLLM
docker run -d --name anything-llm \
--restart unless-stopped \
--add-host=host.docker.internal:host-gateway \
-v /data/anythingllm/storage:/app/server/storage \
-p 127.0.0.1:3001:3001 \
mintplexlabs/anythingllm--add-host 那行是让容器里的服务能通过 host.docker.internal:11434 访问宿主机的 Ollama——Docker 网络的基础操作,见Docker 数据卷与网络详解。
第 3 步:界面配置(三处设置)
浏览器开 http://127.0.0.1:3001,进设置:
- LLM 提供商:选 Ollama,URL 填
http://host.docker.internal:11434,模型选qwen2.5:7b-instruct-q4_K_M - 嵌入模型:选 Ollama,填
bge-m3——工作区建好后不能换嵌入模型,选了再建区 - 向量数据库:默认的 LanceDB 就行,小规模不用换
第 4 步:建工作区 + 传文档
工作区(Workspace)是知识的基本单位,按主题建:「公司制度」「产品文档」「我的笔记」……
传文档支持 PDF/Word/Markdown/网页链接等,上传后自动切片、向量化。传完问一句文档里明显有的内容,能答上来说明链路通了。
第 5 步:对外服务
和 Ollama/SD 一样的套路:反代 + HTTPS + 鉴权,参考Stable Diffusion 对外服务里的 Nginx 配置,把端口换成 3001,删掉 WebSocket 段即可。
四、效果调优:RAG 的生死线
「部署很简单,效果看调优」。按影响力排序:
1. 文档切片(Chunk)大小——影响最大
| 切片大小 | 适合 | 风险 |
|---|---|---|
| 256 字符 | 短问答、事实型文档 | 上下文被切断,答非所问 |
| 512–1024 字符 | 通用甜点区 | 平衡 |
| 1500+ | 长上下文模型 + 叙述性文档 | 检索噪声大,token 消耗高 |
切片之间要有重叠(overlap 10–20%),防止一句话正好被切在两段里、两边都检索不全。
2. 检索数量 Top-K
检索回来的文档块,取前 K 个喂给模型。K 太小漏知识,太大掺噪声还费 token。从 4 开始试,漏答案就加到 6–8。
3. 嵌入模型必须匹配语言
中文文档用英文嵌入模型(如老版 text-embedding-ada)是经典悲剧——语义空间对不上,检索全跑偏。中文场景用 bge-m3(中英俱佳)或 gte-large-zh,英文为主用 nomic-embed-text。
4. 提示词里要求"基于资料回答"
AnythingLLM 默认会带这句,自建管线务必自己加:
请严格基于以下资料回答。如果资料里没有答案,明确说"资料中未提及",不要编造。
资料:
{检索结果}这一句能把幻觉率打下来一个数量级。
5. 表格和扫描件是重灾区
PDF 里的表格解析出来常常是一团乱码——先转 Markdown 再喂。扫描件要走 OCR。文档质量决定 RAG 上限,花半小时把文档格式整干净,胜过调半天参数。
五、常见问题排查
| 症状 | 原因 | 解决 |
|---|---|---|
| 答非所问、开始自由发挥 | 检索没命中,模型在硬编 | 换关键词问;检查嵌入模型语言匹配;调大 Top-K |
| 「资料中未提及」但文档里明明有 | 切片切断语义 / 表格乱码 | 调大 chunk + overlap;文档转 Markdown |
| 上传后一直"处理中" | 嵌入模型没配对、内存不够 | 确认嵌入模型选的是 bge-m3;free -h 看内存 |
| 回答慢 | 7B CPU 推理的固有速度 | 正常 10–30 tokens/s;要快加配置或换小模型 |
| 换嵌入模型后检索全废 | 向量库用旧模型编码,空间不兼容 | 删工作区重建,重新向量化 |
| 磁盘一直涨 | 每次传文档都留版本 | 清理 storage 里旧文档版本 |
系统化的服务器排查方法论见服务器故障排查完全手册,内存吃紧的应急见Swap 分区与内存优化。
六、从能用到好用:进阶方向
跑通基础问答后,这几个方向值得投入:
- 接入对话界面:AnythingLLM 自带聊天界面,也可以把 Ollama 的 API 接给 LobeChat,知识库用 AnythingLLM 管
- 自动化更新知识库:文档放 Git/网盘,用 n8n 工作流定时同步 + 重新向量化,知识永不过期
- 多工作区隔离:不同部门/主题分开建,提问时指定工作区,避免知识串味
- 升级到 Dify/RAGFlow:当知识库要开放给全公司、要管权限、要做成产品时再迁,数据可以导出迁移
- 备份向量库:
/data/anythingllm/storage定期备份,重新向量化一次要几十分钟,见数据备份体系完全手册
结语
RAG 是当前最务实的大模型落地方式:不动模型权重,不买 GPU,一台 4核8G 的 CPU 服务器 + Ollama + AnythingLLM,就能把散落的文档变成一个随问随答的私有专家。效果上限取决于文档质量和切片调优,而不是机器配置——这是少数"用心比花钱更重要"的 AI 场景。
需要搭知识库的服务器,可以看看财富云计算:NAT 型云服务器内存档位全(4G 到 32G+)、支持热升级,SSD 系统盘 + 数据盘放文档和向量库,价格比独立 IP 机型省一半以上——RAG 这种"吃内存不吃公网 IP"的场景,NAT 型刚好对症。
延伸阅读
- Homepage 个人仪表盘:把散落各处的服务收进一个首页
- SSL 证书完全指南:免费证书、自动续期与不过期监控
- 数据备份体系完全手册:从随手拷到 3-2-1,让数据永远丢不了
- 压测与容量规划:上线前就知道你的服务器能扛多少人
- AdGuard Home 内网 DNS:全家去广告、防劫持、内网解析一站解决
- Hugo 静态博客搭建:秒开的博客,部署只要一个目录
- 安全应急响应完全手册:服务器被入侵后,按这个流程走
- 游戏服运营完全手册:从开服到停服,把一台服务器运营成百年老店

[...]lobehub/lobe-chat注意两个细节:--add-host:如果 Ollama 跑在宿主机,容器里要用 host.docker.internal 访问,先加:--add-host=host.docker.internal:host-gateway-p 127.0.0.1:3210:只听本地,对外走反代(第五节)访问 http://服务器IP:3210 就能用。想直接绑到域名+HTTPS [...]
2026-10-19 回复
[...]}));节点 4:发通知(SMTP / 企业微信 Webhook / Telegram,按你有啥用啥)点右上角 Execute Workflow 手动跑一次,每个节点点开都能看到输入输出数据——调试极其直观。跑通了点 Active 激活,以后每天自动执行。四、核心概念:四类节点走天下类型作用常用节点触发器什么条件下启动Schedule(定时)、Webhook(HTTP 触发)、App 事件(邮件到[...]
2026-10-19 回复
[...]-H "Authorization: Bearer $TOKEN"有了这个,玩法就多了:浏览器书签小工具:看到好网页,点书签 = 一键存标题+链接到 MemosiOS 快捷指令:分享菜单 → 直接存 Memos,比打开 App 快三步服务器告警入笔记:监控告警时自动记一条,形成"运维日志"五、自动化:接 n8n 玩出花单有 API 是被动存取,接上 n8n 工作流就是主动流转:[...]
2026-10-19 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-19 回复