课程定位:承接 L2-08B 的“解析 → Chunk(把长文切成小段)→ Embedding(把文字变成可比较的数字)→ 混合检索(用多种方法一起找资料)→ Rerank(把找到的资料重新排队)→ 生成 → 评测”,进一步回答两个生产问题:一台本地设备怎样跑得稳、多人同时使用时怎样扩展且不形成单点故障。
你把公司的制度、课程资料、产品说明和客户项目文件放在电脑里,然后问 AI:
“客户项目延期以后,应该按照什么流程汇报?”
普通大模型可能不知道你公司的内部流程。它只能根据以前学过的公开内容回答,有时还会把不确定的内容说得很像真的。
RAG 解决的就是这个问题:先让 AI 去你指定的资料里找证据,再根据找到的证据回答。
可以把它理解成两种考试:
| 回答方式 | 像什么 | 可能出现的问题 |
|---|---|---|
| 普通大模型直接回答 | 闭卷考试,只能依靠以前记住的内容 | 不知道内部资料;资料可能过时;有时会猜答案 |
| RAG 回答 | 开卷考试,先翻指定教材,再写答案并标出页码 | 如果教材本身错误、搜索没找到正确段落,答案仍可能出错 |
RAG 是 Retrieval-Augmented Generation
的缩写,中文常叫“检索增强生成”。
一句话记忆:
RAG = 先找资料,再让 AI 根据资料回答。
把 RAG 想成一位图书管理员:你提出问题后,他不会凭记忆乱答,而是先跑到正确的书架,找出几页最相关的内容,放到桌上,再根据这些页面回答你,并告诉你书名和页码。
| 场景 | 放入什么资料 | 可以向 AI 问什么 | 得到什么帮助 |
|---|---|---|---|
| 课程学习 | 讲义、书籍、课堂笔记、练习题 | “这节课的三个重点是什么?” | 总结、复习、出题,并找到对应章节 |
| 企业制度 | 员工手册、审批制度、报销流程 | “出差报销需要准备哪些材料?” | 根据当前制度回答并引用条款 |
| 产品客服 | 产品说明、常见问题、售后规则 | “这个错误代码应该怎么处理?” | 找到对应说明,生成客服答复草稿 |
| 项目管理 | 会议纪要、合同、计划、风险记录 | “项目延期会影响哪些里程碑?” | 汇总多个文件中的事实和风险 |
| 销售支持 | 产品资料、案例、报价规则 | “这个客户适合哪个方案?” | 找相关案例和产品信息,辅助准备方案 |
| 个人知识库 | 收藏文章、研究资料、工作记录 | “过去关于这个主题做过哪些决定?” | 从个人资料中找回历史信息 |
在企业里,RAG 通常不是一个只会聊天的机器人。它更像一名数字资料助理:每天接收新文件、整理资料、帮助员工查找信息、起草答案,并把使用反馈变成下一轮改进依据。
| 企业工作 | RAG 实际在做什么 | 给员工带来的帮助 | 必须由人负责什么 |
|---|---|---|---|
| 接收和整理资料 | 接收 PDF、Word、表格、扫描件;识别重复版本并建议分类 | 少做重复的搬运和归档工作 | 确认资料归属、保密级别和最终分类 |
| 建立企业知识库 | 解析文件、切成小段、生成向量并建立搜索索引 | 让大量资料变成“可以快速翻查的图书馆” | 决定哪些资料可以进入知识库 |
| 内部制度问答 | 从员工手册、流程和制度中找证据后回答 | 快速查询报销、请假、采购和审批要求 | 人事、财务等负责人确认正式规则 |
| 客服和售后辅助 | 查产品手册、故障案例和服务政策,生成回复草稿 | 客服更快找到处理办法,减少漏项 | 客服人员检查语气、承诺和特殊情况 |
| 销售与项目支持 | 跨合同、会议纪要、案例和产品资料做比较与总结 | 准备方案、风险清单和会议材料更快 | 负责人判断商业条件并批准对外内容 |
| 经验复用 | 从历史项目中找相似问题、解决办法和复盘记录 | 新员工不必从零开始摸索 | 专家判断旧经验是否仍适用于当前情况 |
| 质量持续优化 | 记录“有用 / 没用”反馈,找到漏检和错检案例 | 搜索结果会随着真实使用不断改善 | 业务人员提供真实问题并设定验收标准 |
| 权限、版本和审计 | 按部门过滤资料,记录谁问了什么、引用哪个版本 | 降低越权查看和引用过期资料的风险 | 管理员配置权限、保存期限和审计规则 |
企业中的日常工作循环,可以记成五步:
企业落地的关键:AI 负责“搬资料、找资料、写草稿”,人负责“定权限、验事实、做决定”。涉及合同承诺、人事决定、财务付款、安全操作和对外发布时,不能只凭 RAG 自动完成。
“本地”表示资料解析、搜索、向量库和模型可以在自己的电脑或公司内网运行,资料不必发送到外部云服务。
它适合:
但“放在本地”不等于自动安全。仍然需要设置账号权限、文件权限、日志、备份和人工确认。
准备资料
→ 解析 PDF / Word / 图片
→ 清理重复、乱码和过期内容
→ 把长文切成小段
→ 把每段文字转换成向量
→ 保存到可以搜索的知识库
→ 用户提出问题
→ 找出相关资料并重新排序
→ AI 根据证据回答并给出引用
→ 用真实问题评测并持续优化
这节加餐后面的“量化、负载、并发和企业部署”,都是为了让这套流程在本地设备上跑得更省资源、更稳定,并能同时服务更多人。
第一次读时,可以把下面这些技术词直接替换成右侧的话。后文再次出现时,不再重复写长解释。
| 技术词 | 初中生也能懂的解释 |
|---|---|
| RAG | AI 回答前先去指定资料库找证据,再根据证据回答,像“开卷考试”。 |
| LLM / 大语言模型 | 负责读文字、理解问题和组织答案的 AI 模型。 |
| 量化 / Q4 / Q8 | 把模型里的数字记得更简略,让它占更少内存;Q4 更省,Q8 通常更接近原模型。 |
| token | AI 读写文字时使用的小单位,一个汉字有时约占一个或多个 token。 |
| 上下文 | 这一次提问时,AI 能同时看到的问题、资料和历史对话。 |
| Chunk | 从长文档中切出来的一小段,方便搜索和引用。 |
| Embedding / 向量 | 把一段文字转换成一串数字;意思越接近,两串数字通常越接近。 |
| Dense 检索 | 按“意思像不像”找资料,例如“退款”和“退费”也可能被认为相近。 |
| Sparse / BM25 检索 | 按关键词是否出现来找资料,特别适合编号、名称、型号和精确词。 |
| Reranker | 把第一轮找到的资料再精读一次,重新排出更可靠的前几名。 |
| Top-K | 搜索后先取前 K 条结果;Top-10 就是先看最相关的 10 条。 |
| Recall@K | 正确资料有没有出现在前 K 条里;越高说明越不容易漏掉。 |
| KV Cache | 模型生成答案时使用的“临时记忆区”,对话越长、同时回答的人越多,占用越大。 |
| batch / 批处理 | 把多个小任务凑成一批一起算,像一次洗一桶衣服,而不是一件一件洗。 |
| 并发 / slots | 同一时间有多少任务正在处理;slot 可以理解成模型的“服务窗口”。 |
| TTFT | 从点击发送到 AI 出现第一个字的等待时间。 |
| TPOT / tokens/s | AI 开始回答以后,后面的字出来得快不快。 |
| p95 | 100 次请求里,大约有 95 次不会比这个时间更慢,用来观察大多数人的真实体验。 |
| QPS / RPM | 每秒 / 每分钟来了多少个请求,表示系统有多忙。 |
| 背压 | 系统忙不过来时,让新任务排队或稍后重试,而不是继续硬塞直到崩溃。 |
| 降级 / 熔断 | 某个高级功能出问题时改用简单方案,或暂时停止调用故障服务。 |
| 影子索引 | 在不影响旧知识库的地方先建一套新版,测试通过后再切换。 |
| collection / alias | collection 是一套向量资料;alias 是指向当前正式版本的“快捷名称”。 |
| ACL | 谁能看哪些资料的权限名单。 |
| SLO | 系统答应达到的服务目标,例如“95% 的请求在 3 秒内开始回答”。 |
| RPO / RTO | RPO 是最多允许丢多久的数据;RTO 是故障后最多允许多久恢复。 |
| HNSW | 向量数据库为了更快找相似资料而建立的“近路地图”。 |
| CPU / GPU | CPU 像通用员工,什么都能做;GPU 像大量并排的计算员工,特别适合模型计算。 |
| RAM / VRAM | RAM 是整台电脑的工作台;VRAM 是显卡自己的高速工作台。 |
| FP16 / INT8 / INT4 | 保存模型数字的精细程度;数字越小越省空间,但可能损失质量。 |
| GGUF / AWQ / GPTQ | 不同的本地模型压缩和保存格式;选哪种取决于设备与推理软件。 |
| ONNX | 一种方便模型在不同设备和软件中运行的通用格式。 |
| OCR | 把扫描图片里的文字识别成可搜索文本。 |
| API / API Gateway | API 是软件之间说话的接口;Gateway 是统一接待、鉴权和限流的前台。 |
| Load Balancer / LB | 负载均衡器,把请求分给多台机器,避免所有人都挤到一台。 |
| 副本 / 分片 | 副本是多存一份防故障;分片是把大知识库分成几块分别保存。 |
| 无状态服务 | 服务本身不独占用户记录,换一台相同服务也能继续处理请求。 |
| Kubernetes / Pod / HPA | Kubernetes 管理许多服务;Pod 是一个运行单元;HPA 会根据忙闲自动增加或减少 Pod。 |
| 租户 | 共用一套系统的不同公司、部门或客户,彼此资料和配额需要隔离。 |
| 快照 | 某个时间点的完整备份,出问题时可以恢复。 |
| 幂等 | 同一个任务重复执行,也不会产生重复资料或破坏结果。 |
| 技术概念 | 可以想成什么 |
|---|---|
| Chunk | 把一本很厚的书做成一张张知识卡片;每张卡片要保留标题和页码,不能剪成看不懂的碎纸。 |
| Embedding | 把所有知识卡片放到一张“意思地图”上;意思接近的卡片会住在同一个街区。 |
| Dense + Sparse | Dense 像按意思问图书管理员;Sparse 像拿着准确书名、编号去查目录。两种方法一起用更稳。 |
| Reranker | 第一位同学先拿来一叠可能相关的资料,第二位老师再认真检查,把最有用的几张放到最上面。 |
| 量化 | 像把冬天的大棉被压进真空袋,变小以后更容易放进行李箱,但压得太狠可能让细节变差。 |
| KV Cache | 像做题时的草稿纸;题目越长、同时做题的人越多,需要的桌面和草稿纸越大。 |
| batch | 像校车凑齐一批学生一起出发,比每个学生单独叫一辆车更省资源。 |
| 并发 slots | 像食堂的打饭窗口;窗口越多,同时服务的人越多,但每个窗口都要占用工作人员和空间。 |
| 背压 | 像热门餐厅先发号码牌;厨房忙不过来时先排队,而不是让所有人一起冲进厨房。 |
| 影子索引 | 像演出前在排练厅搭一套新舞台,确认没问题后,才把正式舞台切换成新版。 |
| 副本与分片 | 副本像同一本书在不同分馆各放一本;分片像把一套百科全书分别放在几个书柜。 |
| RPO / RTO | 像游戏存档:RPO 决定最多退回多久以前的存档,RTO 决定坏掉后多久能重新进入游戏。 |
本地 RAG 里至少有三类量化(把数字用更省空间的方式保存),它们优化的对象不同,不能只说“把模型改成 4 bit”。
| 位置 | 量化对象 | 主要收益 | 主要风险 | 先验证什么 |
|---|---|---|---|---|
| 生成模型 | LLM 权重、激活、KV Cache(生成时的临时记忆区) | 降低模型常驻内存,让更大模型或更多并发进入设备 | 回答质量、长上下文稳定性、工具调用格式可能下降 | 业务测试集通过率、首字延迟、输出速度 |
| Embedding / Reranker | 编码器权重与推理精度 | 提高批处理吞吐(单位时间完成的任务量),降低嵌入与重排服务占用 | 相似度排序和召回率下降 | Recall@K(正确资料是否进入前 K 条)、MRR / nDCG(正确资料排得是否靠前)、任务命中率 |
| 向量数据库 | 已存向量的 Scalar / Product / Binary Quantization | 降低向量内存和磁盘占用,提高缓存命中与扫描速度 | 近邻排序发生偏移,需要原向量重打分 | Recall@K、p95 检索延迟、索引体积 |
关键判断:量化不等于一定更快。格式与硬件内核不匹配时,虽然模型更小,反量化开销或内存搬运仍可能让延迟变差。最终结论必须来自目标设备上的压测。
生活比喻:把高清照片压缩成小图片,文件会变小、传得更快,但压缩太狠就看不清细节。模型量化也是一样:省下的内存和速度,必须拿真实问题检查有没有损失重要信息。
权重占用 ≈ 参数量 × 每参数 bit ÷ 8 × 运行时系数
运行时系数可先按 1.10~1.25
做规划,用来容纳元数据、量化分组和运行时开销。例如 8B 模型采用 4
bit,裸权重约 4 GB,但不要把“4 GB 模型文件”等同于“只需要 4 GB
内存”。
单请求 KV Cache(近似)
≈ 2 × 层数 × KV heads × head_dim × 上下文 token 数 × 每元素字节数
具体值受模型结构、GQA / MQA、KV 数据类型、分页缓存和推理框架影响,应以服务启动日志和监控数据校准。上下文从 4K 增至 16K,KV 占用通常也会接近线性增加;并发会让多条活动序列共同占用 KV 空间。
生活比喻:KV Cache 就像桌上的草稿纸。一个人做一道短题,只需要一小块;四个人同时做长题,就需要四张更大的桌子。电脑内存不够时,不是大家“挤一挤”就行,而是会明显变慢甚至停下来。
总占用 ≈ 模型常驻 + 活动请求 KV + 批处理工作区
+ Embedding / Reranker + 向量索引 + 服务进程 + 操作系统预留
课堂起始建议(是容量规划经验值,不是硬性标准):
| 设备与场景 | 建议起点 | 并发策略 | 不建议做法 |
|---|---|---|---|
| 16 GB Apple Silicon / 个人知识库 | 3B~8B 的 Q4 / Q5;Embedding 单独小批处理 | 生成活动槽位从 1 开始,检索可并发 2~4 | 一开始就开 16K/32K 上下文和多个生成槽位 |
| 32~64 GB Apple Silicon / 小团队 | 7B~14B 的 Q4 / Q5,视质量测试选型 | llama-server 从 2~4
slots(同时服务窗口)压测,入口队列限长 |
只看模型能加载,不测多人长回答 |
| 单张 16~24 GB NVIDIA GPU | AWQ / GPTQ / FP8 等须先核对 GPU 和推理框架兼容表 | vLLM 连续批处理;以活动 token 和 KV 使用率限流 | 因为量化更小就盲目复制多个模型实例 |
| CPU 服务器 / 内网轻负载 | GGUF Q4~Q8;Embedding 使用 ONNX / CPU 优化 | 控制线程数,避免推理与向量索引争抢全部核心 | 把线程数直接设成逻辑核心数并无限接收请求 |
以上范围只是压测起点,最终模型大小和并发数由业务质量门槛、上下文长度和目标 SLO(系统承诺达到的服务目标)决定。
用户请求
→ 入口并发(鉴权、限流、排队)
→ 检索并发(解析、Embedding、向量/BM25、Rerank)
→ 生成并发(活动序列、连续批处理、KV Cache)
→ 后台并发(文档导入、重建索引、备份、评测)
| 指标 | 含义 | 为什么重要 |
|---|---|---|
| QPS / RPM(每秒 / 每分钟请求量) | 单位时间进入多少请求 | 决定入口压力,但不能单独代表推理压力 |
| TTFT(等到第一个字的时间) | 从请求到首个 token 的时间 | 直接反映排队、Prefill(先读完问题和资料)和检索体验 |
| TPOT / tokens/s(开始回答后的输出速度) | 每个后续 token 延迟或生成速度 | 反映 Decode(逐步生成答案)阶段体验 |
| p95 / p99 总延迟(绝大多数人的最慢体验) | 95% / 99% 请求完成需要多久 | 平均值会掩盖峰值拥堵 |
估算所需并发槽位可先用 Little's Law:
所需在途并发 ≈ 到达率(请求/秒)× 平均处理时间(秒)
例如平均每秒 0.5 个请求、一次请求平均占用 12 秒,则系统平均约有 6 个在途请求。但“在途”不等于 6 个都必须同时生成,可以让 2~4 个活动生成,其余进入有上限的等待队列。
生活比喻:食堂来了 20 名学生,并不需要马上开 20 个打饭窗口。可以开 4 个窗口稳定服务,其余学生排队;如果队伍太长,就提前告诉后来的人稍后再来。
top_k、过滤范围和超时;索引线程不能吞掉生成所需的全部
CPU。一个稳定的本地服务一定会说“现在太忙”,而不是无限堆积直到崩溃。
生活比喻:背压像餐厅取号,降级像招牌菜卖完后改为供应简单套餐,熔断像发现煤气故障后先关闭厨房。它们的目的不是“少服务”,而是避免整个系统一起出事故。
| 触发条件 | 推荐动作 |
|---|---|
| 活动生成槽位已满 | 新请求进入有界队列,不直接创建更多推理任务 |
| 队列超过长度或等待超时 | 返回 429 / 503 和 Retry-After,记录拒绝次数 |
| KV Cache 或显存达到高水位 | 暂停接收长上下文;降到短上下文或小模型路由 |
| Reranker 超时 | 降级为混合检索排序,并在响应元数据标记降级 |
| 向量库不可用 | 对低风险场景降级到本地 BM25;高风险场景停止回答 |
| 生成服务异常 | 熔断(暂时停止调用故障服务)、健康探测,切换备份实例或返回“稍后重试” |
本地设备不应该全天按同一种负载运行。更有效的方式是把任务分成三个优先级,再用“业务时段 + 实时资源水位”共同调度。
| 优先级 | 任务 | 忙时策略 | 闲时策略 |
|---|---|---|---|
| P0 在线交互 | 用户问答、检索、权限校验、流式生成 | 保证 TTFT 和 p95;预留推理槽位;必要时拒绝低优先级请求 | 正常服务,允许更长上下文或高质量模型 |
| P1 近线任务 | 报告生成、批量摘要、评测、低优先级 Agent | 限制并发、缩短上下文、进入队列或暂停 | 提高批量与并发,利用连续批处理吃满设备 |
| P2 后台任务 | 文档解析、Embedding、索引重建、压缩、备份 | 可抢占、可断点;只使用剩余资源 | 全速执行,完成索引优化、快照和质量回归 |
top_k、Rerank
候选数和活动序列数。进入忙时保护:
在线队列最老等待 > 2s
OR TTFT p95 连续 3 个窗口超标
OR KV / VRAM > 80%
OR 在线活动槽位使用率 > 75%
退出忙时保护:
以上指标连续 10~15 分钟回落
AND 无高优先级积压
阈值只是课堂起点,必须用目标设备压测校准。进入和退出条件要采用不同阈值与稳定窗口,避免任务在忙 / 闲模式之间反复抖动。
doc_id、版本、最后完成批次与索引目标。| 资源 | 忙时 | 闲时 | 说明 |
|---|---|---|---|
| LLM 在线推理 | 60%~80% | 20%~60% | 忙时为交互保留,闲时可借给评测和批量生成 |
| Embedding / Rerank | 10%~25% | 40%~80% | 忙时小批低延迟,闲时大批高吞吐 |
| 文档解析 / OCR | 0%~15% | 50%~90% CPU | 在线拥堵时可完全暂停 |
| 索引构建 / 优化 | 仅增量 | 使用剩余 IOPS | 全量重建必须走影子索引 |
| 内存 / 显存余量 | 至少 20% | 至少 10%~15% | 闲时也必须为突发请求和运行时波动留空间 |
百分比表示容量规划目标,不是所有设备都能严格切分。macOS 统一内存应重点观察系统 memory pressure 与 swap;独立 GPU 应同时观察显存、KV Cache、功耗和温度。
生活比喻:忙时像学校午餐时间,厨房优先出餐,不安排大扫除;闲时像放学以后,再集中清洗设备、盘点仓库和准备第二天的食材。算力也应该把重任务安排到空闲时间。
更新日期:2026-07-22。 模型版本、推理框架兼容性和许可条款会变化,部署前必须复核官方模型卡,并用自己的中文业务评测集比较。
| 模型 | 规模与上下文 | 向量维度 | 中文与能力特点 | 本地设备起点 | 推荐场景与注意点 |
|---|---|---|---|---|---|
Qwen/Qwen3-Embedding-0.6B |
0.6B;32K | 32~1024,支持 MRL(可缩短向量长度) | 100+ 语言、长文本、代码、指令感知 | 16 GB RAM / 统一内存可作为测试起点;GPU 更适合批量 | 当前中文本地 RAG 的优先候选;先用 512 / 768 / 1024 维做质量与存储对照 |
Qwen/Qwen3-Embedding-4B |
4B;32K | 最高 2560,支持 MRL | 更高质量档,支持任务指令 | 建议 32 GB+ 或独立 GPU,从低并发开始 | 高价值知识库、代码与跨语言检索;不要只因维度高就直接全量使用 |
Qwen/Qwen3-Embedding-8B |
8B;32K | 最高 4096,支持 MRL | 系列质量优先档 | 建议服务器 GPU 或 64 GB 级设备评测 | 适合质量收益能够覆盖成本的项目;向量体积和重建时间显著增加 |
BAAI/bge-m3 |
约 0.6B;8192 | 1024 | 多语言;统一 Dense、Sparse、ColBERT 多向量能力 | 16 GB 级设备可测试,批量生产优先 GPU | 需要一套模型同时实验稠密、稀疏与多向量检索时很实用 |
Alibaba-NLP/gte-multilingual-base |
305M;8192 | 128~768 | 70+ 语言;Encoder-only;支持弹性 Dense 与 Sparse | CPU / 16 GB 设备的轻量候选 | 资源有限、需要较高 Embedding 吞吐时优先对照;使用自定义代码前做安全审查 |
| 模型 | 规模与上下文 | 本地化特点 | 推荐用法 |
|---|---|---|---|
Qwen/Qwen3-Reranker-0.6B |
0.6B;32K;100+ 语言 | Apache-2.0;可本地部署;支持任务指令 | 中文 / 代码 / 长文本优先候选;先将混合检索 Top-20~50 重排到 Top-5~10 |
Qwen/Qwen3-Reranker-4B/8B |
4B / 8B;32K | 质量档更高,计算和显存成本明显增加 | 只用于高价值或困难查询,忙时可路由回 0.6B |
BAAI/bge-reranker-v2-m3 |
约 0.6B;最长约 8192 | Apache-2.0;多语言;成熟轻量 | 资源有限或已有 BGE-M3 管线时的稳健候选 |
Reranker(重新排序模型)不负责生成向量归档,而是对“查询—候选文档对”直接打相关性分。它通常比继续扩大向量
top_k(多取更多条)更有效,但候选数会直接影响耗时,因此很适合忙闲动态路由。
| 模型 | 规模 / 上下文 | 本地格式与授权 | 设备起点(Q4 仅作估算起点) | 适合角色 |
|---|---|---|---|---|
Qwen/Qwen3-4B |
4B;原生 32K | Apache-2.0;可用 GGUF 等本地格式 | 16 GB 设备先测 1~2 活动槽位 | 忙时默认问答、摘要、轻量 Agent |
Qwen/Qwen3-8B |
8.2B;原生 32K | Apache-2.0;官方有 GGUF / FP8 等版本 | 16~32 GB 设备从 Q4、短上下文、单并发开始 | 中文 RAG 主模型;质量与本地成本较平衡 |
Qwen/Qwen3-14B |
14.8B;原生 32K | Apache-2.0;支持本地推理框架 | 32~64 GB 或服务器 GPU 起步 | 闲时高质量报告、复杂推理和重要任务升级路由 |
openbmb/MiniCPM4-8B |
8B;面向端侧效率 | Apache-2.0;官方提供 GGUF、vLLM / SGLang 路径 | 16~32 GB 设备做 GGUF Q4 实测 | 中文端侧与高效率备选,适合与 Qwen3-8B 对照 |
google/gemma-3-4b-it |
4B;128K;多模态 | 可本地运行,但需接受并复核 Gemma 使用条款 | 16 GB 设备从短上下文开始 | 需要图文输入、多语言和轻量生成时对照;中文专项必须实测 |
设备起点不是保证值。实际占用由量化格式、上下文、KV 类型、batch、并发和推理框架共同决定;即使模型支持 32K / 128K,也不代表本地生产应默认开放最大上下文。
| 层级 | 保存内容 | 存储位置 | 何时使用 | 恢复方式 |
|---|---|---|---|---|
| 热数据 | 当前原文、Chunk、向量、Sparse、payload(跟随资料保存的附加信息)、ACL(访问权限名单) | 在线向量库 SSD / 内存缓存 | 日常在线检索 | 直接查询,保持副本与快照 |
| 温数据 | 上一版本 collection、量化向量、索引快照、评测结果 | 本地大盘 / NAS / 对象存储 | 回滚、低频历史查询 | 恢复快照或临时挂载只读实例 |
| 冷数据 | 原始文件、解析结果、Chunk 清单、内容 hash、模型与指令版本 | 版本化对象存储 + 离线 / 异地备份 | 审计、灾备、重新建库 | 重新解析或从中间产物重建向量 |
必须归档的版本字段:
embedding_model:
model_revision:
embedding_dimension:
normalize_embeddings:
query_instruction_version:
chunker_version:
corpus_version:
vector_quantization:
collection_or_alias:
created_at:
content_hash:原则:原文、结构化 Chunk 和版本配置是主资产;向量与 HNSW 等索引是可重建派生物(可以根据原文重新制作的内容)。只备份向量、不备份原文和模型版本,不能算可恢复的归档。
生活比喻:原文像课本原件,Chunk 和向量像你做的目录卡与索引。目录卡丢了还能根据课本重做;如果只留下目录卡、把课本丢了,就无法真正恢复知识库。
| 档位 | Embedding | Reranker | 生成模型 | 适用设备与策略 |
|---|---|---|---|---|
| 轻量个人版 | gte-multilingual-base 或
Qwen3-Embedding-0.6B |
可先不启用 / bge-reranker-v2-m3 |
Qwen3-4B Q4 |
16 GB;生成并发 1;归档放闲时 |
| 中文质量平衡版 | Qwen3-Embedding-0.6B 768 / 1024 维 |
Qwen3-Reranker-0.6B |
Qwen3-8B Q4 / Q5 |
32 GB 或单 GPU;忙时小模型路由,闲时批量重排评测 |
| 部门生产版 | Qwen3-Embedding-0.6B/4B 对照后定型 |
0.6B 默认,4B 只处理困难查询 | Qwen3-8B 主池 + Qwen3-14B 高质量池 |
服务池分离;在线和归档队列隔离;影子索引切换 |
真实业务通常不是“准备好一份干净 Markdown”,而是一次丢入多个 PDF、Word、扫描件和历史版本。学员需要理解:文件进入系统后,不是立刻“喂给大模型”,而是经过一条可检查、可评测、可回退的工程链路。
批量拖入文件
→ 安全扫描 / OCR / 版面解析
→ AI 建议分类、标签、知识库和权限
→ 人工确认低置信度与敏感资料
→ Chunk 预览与解析质量抽查
→ 构建影子索引
→ 用真实问题做 A/B 召回实验
→ 反馈相关 / 不相关
→ 达到门槛后切换生产 alias
| 阶段 | AI / 系统做什么 | 人负责什么 | 必须阻止什么 |
|---|---|---|---|
| 1. 文件接收 | 登记文件、去重、病毒扫描、识别格式和语言 | 确认资料来源、所有者和允许用途 | 加密、损坏、恶意或来源不明文件直接进入知识库 |
| 2. 分类与权限 | 建议分类、标签、目标知识库、ACL(谁可以查看)、保留期限和置信度 | 确认低置信度、敏感资料、跨部门资料和历史版本 | AI 单独决定财务、人事、合同等资料权限 |
| 3. 解析与清洗 | PDF / DOCX 解析、OCR、表格恢复、页眉页脚清理 | 抽查原文与解析结果,处理乱码、漏页和表格错位 | 解析质量未通过就继续向量化 |
| 4. Chunk 与向量化 | 按结构切块、补元数据、生成 Dense / Sparse 向量 | 选择拆分规则,检查标题路径、页码和上下文是否保留 | 新旧模型、维度或 Chunk 版本混入同一向量空间 |
| 5. 检索与生成 | ACL 过滤、召回、融合、Rerank、上下文装配、生成与引用 | 用真实问题判断证据是否正确,确认高风险回答 | 只看最终答案、不检查原始召回证据 |
| 6. 评测与发布 | 比较基线和候选、构建影子索引、记录版本和指标 | 决定发布、继续优化或回滚 | 未通过质量、权限和恢复测试就覆盖生产索引 |
推荐使用“建议 + 置信度 + 人工确认”:
category、tags、target_kb、acl、retention,但每个字段都应可编辑。固定:同一批文档 + 同一组问题 + 同一权限身份
改变:每轮只改一个变量
比较:Recall@K(有没有漏掉正确资料)、MRR/nDCG(正确资料排得够不够靠前)、p95(大多数人的最慢体验)、Top-K 证据、最终回答
决定:保存为候选 / 设为新基线 / 放弃并记录原因
评测中每条召回结果都应记录“相关 / 不相关 / 应排更高 / 权限错误 /
版本过期”。反馈不能只变成主观评价,而要形成带
query_id、chunk_id、配置版本和评测人的测试记录。
| 工作层 | 典型输入 | 典型输出 | 失败时先查什么 | | --- | --- | | 资料层 | PDF、Word、扫描件、Markdown | 可追溯原文、解析文本、文档元数据 | 来源、版本、权限、OCR / 解析质量 | | 检索层 | 用户问题、身份、过滤条件 | Top-K Chunk、相关分数、来源和版本 | ACL、Chunk、Embedding、Sparse、融合与 Rerank | | 生成层 | 问题与检索上下文 | 带引用的回答、拒答或人工确认请求 | 上下文是否正确、提示词、生成模型与引用验证 | | 评测层 | 问题集、相关文档、预期行为 | Recall@K、MRR、Groundedness(回答是否真的有资料依据)、坏例清单 | 测试集是否覆盖真实问题和风险场景 | | 运维层 | 日志、指标、版本、快照 | 更新、告警、回滚、容量和审计记录 | 队列、资源水位、索引健康、模型版本和恢复流程 |
业务资料进入
→ AI 辅助分类与解析
→ 人确认知识边界和权限
→ 系统切块、向量化并建立索引
→ 用户问题触发检索、重排和生成
→ 人用真实问题反馈召回质量
→ 系统形成评测集并优化参数
→ 候选索引通过验收后发布
→ 持续监控、增量更新和必要时回滚
这条链路的核心不是“让 AI 自动做完”,而是让 AI 负责高频处理,让人负责资料边界、权限、坏例判断和发布决策。
生活比喻:AI 像认真但经验不足的图书助理,擅长搬书、分类和初步查找;人像负责老师,决定哪些书能公开、判断资料是否正确,并在正式发布前签字。
客户端
→ API Gateway(鉴权、限流、请求 ID)
→ 有界任务队列
→ RAG Orchestrator
├─ Embedding 微批处理器
├─ 本地向量库 + BM25
├─ Reranker(可降级)
└─ LLM Server(连续批处理 / slots)
→ 日志、指标、追踪
文档原件 → 解析队列 → 影子索引 → 验收 → 索引别名切换
launchd,Linux
可用 systemd 或 Docker restart policy。llama-server \
-m /models/model-Q4_K_M.gguf \
-c 8192 \
-np 2 \
--host 127.0.0.1 \
--port 8080 \
--metrics-np 2 只应作为两个并行 slots
的压测起点。上下文总预算、模型结构和版本参数应以当前
llama-server --help 为准。先测
np=1,再逐级增加,并记录 TTFT、单用户
tokens/s、总吞吐和峰值内存。
生活比喻:增加 slots 就像增加服务窗口。窗口太少会排长队;窗口太多又会让工作人员争抢同一间厨房。最合适的数量不是越多越好,而是要通过高峰测试找到。
┌─ 身份认证 / 租户配额
用户 → 双入口 LB/WAF ├─ API Gateway × 2+
└─ 请求队列 / 优先级 / 熔断
│
RAG Orchestrator × 2+
├─ Embedding 服务池
├─ Rerank 服务池
├─ LLM 推理池(小/中/大模型路由)
└─ Prompt / Response Cache
│
┌───────────────────────┴───────────────────────┐
向量数据库集群 元数据数据库主从/集群 对象存储/文档原件
分片 + 副本 + LB 版本、权限、审计 版本化 + 异地备份
└───────────────────────┬───────────────────────┘
Metrics + Logs + Traces + Alert + Audit
| 层 | 企业级做法 | 不能只做什么 |
|---|---|---|
| 入口 | 至少两个网关副本,负载均衡与健康探测 | 只给单台推理机绑一个固定 IP |
| 编排 | 无状态副本;会话与任务状态放外部存储 | 把会话只放某进程内存 |
| 推理 | 按模型建独立池;至少两个可用副本;滚动 / 金丝雀发布 | 一套大模型承担所有任务且无备用 |
| 队列 | 高可用消息队列或可恢复任务表;幂等键和死信队列 | 请求失败后无限自动重试 |
| 向量库 | 分片 + 副本,所有节点前放负载均衡;定期快照演练 | 有副本但所有流量仍进入一个节点 |
| 文档原件 | 对象存储版本化、校验和、异地或离线备份 | 只备份不可解释的向量索引 |
| 配置与密钥 | 集中密钥管理、最小权限、轮换与审计 | 把密钥写进镜像或课程代码 |
| 监控 | 指标、日志、Trace 统一关联 request ID | 只看 GPU 利用率 |
生活比喻:企业级部署像连锁图书馆。负载均衡负责把读者分到不同分馆,副本保证某个分馆关门时还有书可看,分片把大量图书分开存放,监控则像总馆的值班大屏。
| 方式 | 解决什么 | 适用条件 | 注意点 |
|---|---|---|---|
| 单实例连续批处理 | 同一模型服务更多并发序列 | 单 GPU 已能容纳模型与 KV | 优先调好批处理,再决定是否复制实例 |
| 模型并行(Tensor / Pipeline Parallel) | 一个模型放不进单卡 | 多 GPU、互联带宽足够 | 它解决“模型装不下”,不自动等于高并发 |
| 数据并行 / 多副本 | 横向增加请求吞吐和容错 | 单副本可独立服务,请求可路由 | 需要负载均衡、健康探测、模型版本一致性 |
适合进入扩缩容决策的指标包括:
Kubernetes HPA 可使用 CPU、内存或自定义指标扩展无状态服务;LLM 实例启动和模型加载通常较慢,应配置预热、最小副本数、缩容稳定窗口和就绪探针,避免流量过早打到尚未加载完模型的 Pod。
| 阶段 | 用户量与目标 | 推荐实现 | 通过门槛 |
|---|---|---|---|
| P0:离线个人版 | 1 人,资料不出设备 | llama.cpp / 本地推理 + 本地向量库 + CLI / Web UI | 50 道业务题质量达标;无并发也不崩溃 |
| P1:单机服务版 | 2~10 人,低并发 | API 网关 + 有界队列 + 2~4 活动 slots + 监控 + 自动拉起 | 峰值压测 30 分钟,无 OOM;p95 与拒绝策略达标 |
| P2:部门高可用版 | 10~100 人,业务时段使用 | 双网关、双编排副本、推理池、向量副本、集中日志 | 任意一个无状态实例下线仍能服务;恢复目标演练通过 |
| P3:企业多租户版 | 多部门、分级权限与审计 | K8s / 调度平台、模型路由、租户配额、分片副本、灾备 | 容量、隔离、安全、审计、RPO / RTO 与 SLO 全部验收 |
不要从 P0 直接跳到 P3。先让业务测试集、容量模型和故障演练在小规模成立,再扩展基础设施。
每轮只改变一个变量:
| 类别 | 指标 |
|---|---|
| 质量 | Answer pass rate、Groundedness、Citation correctness、Recall@K、MRR / nDCG |
| 体验 | TTFT p50 / p95、TPOT、总延迟 p95 / p99、流式中断率 |
| 吞吐 | 请求/分钟、输入 token/s、输出 token/s、Embedding 条目/s |
| 资源 | RAM / VRAM 峰值、KV Cache 使用率、CPU / GPU 利用率、磁盘 IOPS |
| 稳定性 | OOM、超时、429 / 503、队列最老等待时间、错误重试次数 |
quality:
answer_pass_rate: ">= 90%"
retrieval_recall_at_10: ">= baseline - 2pp"
performance:
ttft_p95: "<= 3s"
total_latency_p95: "<= 20s"
stability:
error_rate: "< 1%"
oom: 0
sustained_test: "30min"
capacity:
max_active_generation: 4
max_queue: 20
queue_timeout: "15s"安全并发上限应取以下条件中最先触发的那个:质量跌破门槛、TTFT / p95 超标、单用户生成速度不可接受、内存越过高水位、或错误率升高。生产配置再从该上限保留 20%~30% 余量。
上线前至少演练:
RPO / RTO 不是技术团队单方面决定,应由业务风险、合规要求和成本共同确定。
生活比喻:如果游戏每 15 分钟自动存档一次,机器坏掉时最多损失 15 分钟进度,这接近 RPO;从故障发生到重新打开游戏用了 30 分钟,这接近 RTO。
请填写:
# 本地 RAG 容量与并发决策
- 业务场景:
- 使用人数 / 峰值请求:
- 设备:CPU / GPU / RAM / VRAM:
- 生成模型与量化:
- Embedding / Reranker 与量化:
- 向量数据库与向量量化:
- 最大输入 / 输出 token:
- 活动生成槽位 / 等待队列:
- TTFT p95 / 总延迟 p95 目标:
- 质量门槛:
- 降级顺序:
- 单点清单与消除方案:
- 备份、RPO、RTO:
- 压测结果与最终安全并发:以下链接用于课后核对当前版本参数,部署前应再次阅读目标版本文档:
版本提醒:量化内核、硬件兼容性和服务参数更新较快。本课给出的是决策方法和架构边界,命令行参数必须以部署当天使用版本的官方文档和
--help输出为准。