把 RAG 从 demo 推到可用系统时,最容易踩的 6 个坑:chunk 切分、检索不准、上下文污染、token 预算、本地模型、latency。结合 Synapse 的真实取舍给出可操作解法。
2026年5月9日 · 12 min read
Reading route
围绕隐私优先的 AI 记忆、RAG、模型路由和长期上下文治理。
Focus
Next
接下来我会写:离线优先同步在个人记忆系统里的取舍
RAG 最像哪类工程问题?我越来越觉得,它像“搜索系统 + prompt 工程 + 线上稳定性”揉在一起的混合体。
做 demo 的时候,RAG 看起来很简单:切 chunk、做 embedding、向量检索、把召回片段塞进 prompt,再让模型生成答案。但真正在系统里跑起来,你会发现它最难的部分从来不是“能不能跑”,而是“能不能稳定地对”。
我在做 Synapse(一个隐私优先的 AI 记忆系统)时,这一点体感特别明显:当数据变杂、问题变长、多端接入、模型混用之后,RAG 的问题会以一种很工程的方式出现。
这篇文章把我踩过的坑拆成 6 类,每一类都给一个可操作的处理方式。不是理论综述,是“真正在系统里会出问题”的那种。
RAG 的第一坑基本都从这里开始。
我一开始的直觉是“chunk 大一点,语义更完整”。结果线上表现是:召回经常不准,模型拿到上下文后更容易抓错重点,因为每个 chunk 里包含了太多无关信息。
后来我反过来切得很小,召回看似更精细了,但又出现另一个问题:上下文碎片化。模型能看见局部,但很难复原“这个片段在原文里到底在说什么”,回答会变得断裂、或者靠模型脑补把缝补起来。
最后我在 Synapse 里采用的是“按语义边界切分 + chunk 上限控制”的策略:
Chunk 切分 Checklist
先按标题/段落/列表切,再补“长度约束”,不要反过来。
需要时给 chunk 加少量 overlap,但只为保持语义连续,不要用 overlap 解决所有问题。
在向量库里保存 doc_id、段落序号、标题路径,后面做过滤/聚合会救命。
我对 chunk 的最终结论是:切分不是“预处理”,它是 RAG 系统质量的核心参数之一。
很多人遇到“检索不准”会第一时间怀疑 embedding 模型,或者怀疑向量库的相似度算法。但在真实系统里,问题常常出在更朴素的地方:你到底检索了什么、过滤了什么、以及你怎么把多次召回合成一个可用上下文。
我在 Synapse 里做了三件事来对抗“召回看起来相关,但实际上无用”:
RAG 最危险的失败模式不是“答不上来”,而是“答得很像,但其实来自错误上下文”。
我把这类问题叫上下文污染(context pollution)。常见来源有三类:
Synapse 里我做的应对策略是“先做约束,再做生成”:
一个很实用的小技巧是:把回答分两段。
这样你能很快看出污染发生在哪一步。
token 预算在 demo 里像一个技术限制,在真实系统里更像产品设计边界:你到底允许系统在一次查询里调用多少“上下文”,以及你愿意为这个问题付出多少延迟和成本。
我见过最常见的两种失败:
Synapse 的做法是把 token 当作一等公民去管理:
Token 预算 Checklist
不要把 raw chunk 直接堆进 prompt,先做结构化压缩(bullet/证据表)。
多轮检索/多轮生成必须有停止条件,否则就是无限烧 token。
强制 citations 会反过来约束模型少胡说,也能帮助定位污染来源。
在 Synapse 里,一个核心现实是:本地模型隐私好、成本低,但效果通常不如云模型,尤其是长文本总结、复杂问题推理、稳定性。
我一开始尝试全本地化,踩到的坑很典型:
最后我做了模型分流(model routing):
这个取舍让我意识到:AI 系统很多时候不是“选最强模型”,而是做整体权衡。模型只是系统的一环。
RAG 链路天然长:切分/embedding/向量检索/重排/压缩/生成。每一步都可能把延迟叠上去。你如果不主动设计,最后用户体验会变成“等 8 秒,得到一段看起来很像的答案”。
我在 Synapse 里做的延迟治理主要有三点:
如果把 RAG 当作“一个组件”,你会只盯着召回率;但如果把它当作“一个产品能力”,你必须同时盯召回率、幻觉率、成本、延迟和稳定性。
我写这篇文章的目的不是强调 RAG 多难,而是想把一个事实说清楚:
RAG 从 demo 到系统,差的不是一两个参数,而是一整套工程约束。
chunk 怎么切、检索怎么聚合、证据怎么压缩、token 怎么预算、模型怎么分流、延迟怎么治理,这些看起来分散的点,最后都会汇聚成同一个问题:
你到底在构建一个“能回答一次”的 demo,还是一个“能长期运行”的系统。
对 Synapse 来说,我更在意后者。
Keep reading
继续复盘 Synapse 的真实实现:笔记后台处理、关键词搜索、Qdrant note 级向量、对话上下文拼装、citations,以及下一步要补的 chunk 与重排。
2026年5月13日 · 13 min
结合 Synapse 当前代码,复盘模型路由的真实实现:隐私分级、本地优先阈值、对话云端优先、失败降级、运行时配置、心跳探测和成本记录。
2026年5月12日 · 13 min
我复盘 Synapse 的初衷与架构:从零摩擦输入、自动整理、语义检索、对话式查询,到本地优先的模型路由、隐私边界和数字分身愿景。
2026年4月17日 · 22 min
After reading
这个博客暂时不开放站内评论。文章如果有用,可以先收藏、转发,或者从我的 GitHub 主页继续交流。