大多数人搭 RAG,第一步就错了

大多数工程师搭 RAG 系统,第一步就去研究选哪个 embedding 模型。这其实是反的。

我见过不止一个团队,在 text-embedding-ada-002bge-m3 之间来回横跳,跑了无数次 benchmark,最后发现系统效果不好------问题压根不在 embedding,在 chunking。


那个把两周时间烧在 embedding 选型上的工程师

去年有个朋友在做内部知识库 RAG,产品要求"用户问什么都能答"。他把前两周全用在了这件事上:

  • 跑了 OpenAI、Cohere、BGE、Jina 四家 embedding 的对比
  • 搭了评测脚本,统计 top-k 召回率
  • 换了三次向量数据库(Pinecone → Qdrant → pgvector)

最终 top-3 召回率到了 78%,他觉得差不多了。

上线两周后,用户反馈"答非所问"的 ticket 不断涌入。他去翻 log,发现命中的 chunk 虽然语义相关,但内容是文档的某个孤立段落------没有上下文,模型根本无法给出有用的回答。

问题不是 embedding 不准,是 chunk 切得太碎,上下文完全割断了。


Embedding 选型的收益边际在递减

这是一个经常被忽视的现实:主流 embedding 模型之间的性能差距,在通用文本任务上已经非常小。

2025 年的 MTEB 榜单前 10 名,top-3 召回率差距普遍在 3% 以内。而一个糟糕的 chunking 策略,能把这个指标直接打掉 20%。

换句话说,你花两周做 embedding 选型,收益可能是 +3%;而花两天优化 chunking 策略,收益可能是 +20%。

这不是说 embedding 不重要,而是优先级错了


真正的三个瓶颈

1. Chunking 策略

固定长度切分(fixed-size chunking)是最常见的起点,也是最快到达瓶颈的选择。

几个实测中收益更稳定的策略:

  • 句子级 + 滑动窗口:保留上下文连续性,适合叙述型文档
  • 按语义分段:用小模型做段落边界检测,适合结构化报告
  • 父子 chunk:检索时用小 chunk,送给 LLM 时附上父 chunk,兼顾精度和上下文

没有银弹,关键是要有评估集来量化不同策略的差异,而不是凭感觉换。

2. 评估闭环

这是大多数 RAG 项目最缺的一环。

没有评估集,你就是在用眼睛观测一个黑盒。改了 chunking 是更好还是更差?改了 retrieval 策略有没有回归?你不知道。

一个最小可行的评估闭环:

  1. 从真实用户问题中抽取 50-100 个代表性 case
  2. 人工标注每个问题的"理想 chunk"(ground truth)
  3. 每次改动后跑一次,对比 Recall@3 和 MRR

工具层面,RAGAS 框架可以半自动化这个流程,值得一试。

3. 检索质量:别只用向量检索

纯向量检索有一个经典失效场景:精确词匹配。

用户搜"Claude Sonnet 4.6 的 context window 是多少",向量检索很可能把语义相近的"Claude 3.5 context window"排在前面。

混合检索(BM25 + 向量)在这类场景下表现更稳。pgvector 0.7+ 已经支持混合检索,实现成本不高,效果提升显著。


一个可以参考的迭代顺序

  1. 先用固定 chunking + 任意主流 embedding 跑通 pipeline,别在这两步卡太久
  2. 搭最小评估集,给自己一把尺
  3. 优化 chunking 策略,用评估集量化每次改动
  4. 加混合检索
  5. 调 reranker(可选,收益视场景而定)
  6. 这时候再考虑换 embedding 模型是否有额外收益

RAG 系统的效果,80% 在数据处理和检索质量,20% 在模型选择。

相关推荐
元Y亨H2 小时前
LangGraph 与状态机架构深度介绍
llm
江畔柳前堤3 小时前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go
元Y亨H4 小时前
深度解析 Agent 的 CLI 能力
llm
世界哪有真情4 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
冬奇Lab5 小时前
MCP 系列(07):企业级部署——安全、认证与版本管理
人工智能·llm·mcp
树獭非懒6 小时前
七、智能体的Reflection机制:让AI学会三省吾身
人工智能·llm·agent
Csvn6 小时前
Day 3:LIKE 与模式匹配 — 让查询学会"模糊搜索"
后端·sql
Hazenix8 小时前
Go 指南:一篇文章速通 Golang
开发语言·后端·golang
灯澜忆梦8 小时前
GO_复合类型---指针
开发语言·后端·golang
IT_陈寒8 小时前
SpringBoot自动装配坑了我一天,原来问题出在这
前端·人工智能·后端