很多人卡在这一步:手上有一堆自家资料,究竟是把资料喂进 RAG,还是直接找一个像豆包这样的通用大模型来问?两边都能答,但答的东西不是一回事。这篇不讲概念定义,只给判断标准和可执行动作:什么任务该走检索、什么任务该走通用模型、两者一起用的时候接口和工程量怎么分配,以及怎么用一小批样例把结论验出来。
很多人卡在这一步:手上有一堆自家资料,究竟是把资料喂进 RAG,还是直接找一个像豆包这样的通用大模型来问?两边都能答,但答的东西不是一回事。通用模型答的是它训练里见过的东西,RAG 答的是你刚塞进上下文的那几段原文。
这篇不讲定义,只给判断标准和可执行动作:什么任务该走检索、什么任务该走通用模型、两者一起用时接口和工程量怎么分,以及怎么用一小批样例把结论验出来。先把一个前提说清楚:RAG 不是另一个模型,它是一套检索流程加上一个会用上下文的模型。所以真正要比的,是「模型自带的知识」和「你临时递过去的证据」,谁更适合当前这个任务。
先分清两者提供的是两种东西
通用模型给的是语言能力和常识推理,回答依据来自训练里见过的东西,看不到你昨天的内部文档,也看不到今天刚改的口径。RAG 给的是「把你自己的资料塞进上下文」的通道,模型本身还是那个模型,变的只是证据来源。想清楚这一点,后面很多争论就自然消解了。
- 通用模型(豆包这类)
- 强在表达、推理、格式转换,弱在对企业内部事实的时效性和可溯源性
- RAG 检索方案
- 强在证据可控、可指原文、可随资料更新,弱在检索没命中时容易一本正经地胡答
- 两者共用的部分
- 最终都要靠同一个生成模型组织语言,差别只在提示词里放了什么
判断口诀:问题答案是否随时间变化、是否只存在于内部系统、是否必须能指到原文——三者中任意一个为「是」,就该考虑检索而不是裸问模型。反过来也有不适用的情况:让模型改写、总结、翻译、写代码、做格式转换,这类任务没有事实溯源需求,硬套检索只会平白增加延迟和调用量。
一张任务分流清单:哪种活交给谁
| 任务类型 | 典型场景 | 建议走法 | 验收看什么 |
|---|---|---|---|
| 纯生成 | 写文案、改语气、出代码、做结构化抽取 | 直接调通用模型 | 表达是否可用、格式是否合规 |
| 强事实 | 制度条款、报价口径、产品参数、工单历史 | 检索 + 生成,回答带出处 | 命中率、出处是否对得上原文 |
| 混合 | 先查再算、先查再写 | 把检索当成一次工具调用 | 两步的输入输出是否接得上 |
| 时效敏感 | 政策更新、库存、活动规则 | 必须检索,且资料要能刷新 | 资料更新时间与答案是否一致 |
- 纯生成类:直接调通用模型,除非需要遵守某份内部规范,那才把规范片段检索进来
- 强事实类:走检索,回答里带上出处,模型只负责组织语言,不负责提供事实
- 混合类:把检索当成一次工具调用,先拿片段再拼进提示词,顺序不能反
- 边界模糊时用一个小测试定夺:把资料从上下文里拿掉,模型还能答对吗?能,就是通用任务;不能,就必须有检索环节
真接起来要动哪几个地方
检索侧要做的事是分块、向量化、召回、重排,这几步跟用哪个对话模型无关,换对话模型不用重做,换嵌入模型才要重做。模型侧要做的事是把召回片段按固定格式拼进提示词,明确告诉模型「只根据以下片段回答,找不到就说找不到」,否则它会用训练记忆去补,补出来的东西看起来一样顺,但没法溯源。
- 定接口次数一次问答可能变成嵌入 + 召回 + 生成三次调用,超时、并发、重试的预算都要按这个倍数留;延迟基线到 /tools/speed-test 量一遍再定 SLO
- 定证据格式给每段召回内容加编号和来源标识,要求模型在答案里引用编号,方便人工抽查是否真实命中
- 定成本口径别只算生成那一次,嵌入和重排的调用量往往比生成还大;单价到 /official-api 核对当时的数字,按三块加总算总账
- 定回归方式每次改完参数,用同一批样例跑一遍,把前后结果并排看,而不是凭体感判断好坏
降级怎么设,改完怎么验
推荐顺序是:检索命中就带证据答,命中为空就退化成通用回答并明确提示「未检索到内部资料」,绝不能让它装作有依据。再往下一层,嵌入服务或向量库挂了,先降成关键词检索顶上,还不行才走纯模型,别让整条链路一起死。降级的提示话术要提前写好,别让模型自由发挥。
- 攒 20 条带标准答案的问题做固定用例,其中一半是「资料里有答案」、一半是「资料里没有」
- 重点看后一半有没有老实说不知道,这比看前一半答得好不好更能暴露问题
- 每次换模型、换分块参数、换重排策略,都拿这 20 条重跑一遍对比
- 把命中率和答案正确率分开记录,两个指标会往不同方向走,混在一起看不出是谁的问题
- 榜单和打分口径可参考 /benchmarks,但别把榜单分数直接当成你的场景结论
最后提醒一句适用范围:如果你的资料总量很小、更新极慢,而且问题都集中在几条固定条款上,那把关键内容直接写进系统提示词可能比搭一套检索更省事,这时候 RAG 属于过度设计。反过来,资料超过几十份、还在持续更新,纯靠提示词塞不下也维护不住,就必须上检索。判据是规模和维护成本,不是先进程度。
下一步去站内把当前可选的模型单价、各家中转站的可信度和延迟数据拉出来,跟你的调用次数预算对一遍,再决定这套 RAG 值不值得搭。→常见问题
有了豆包这样的通用模型,还需要自己搭 RAG 吗?
看你要答的问题依赖什么。如果答案只存在于你公司内部、且会更新,通用模型看不到这些东西,还是得把资料检索进上下文。只有当问题属于通用常识、写作、翻译、代码这类不依赖私有资料的任务时,才可以直接用现成模型,连检索层都不用碰。
两者能不能一起用,是不是多此一举?
不算多此一举,这是最常见的组合。检索负责把对的材料找出来,模型负责读懂并组织成话。要注意的是多出来的调用次数会拉长链路耗时,超时和并发预算要按多步来留,并且给检索失败留一条明确的降级路径,别让它默默用记忆答。
怎么判断回答到底是查到的还是模型编的?
最直接的办法是要求回答里带出处片段,然后人工抽几条去原文核对。另一种做法是构造「资料里确定没有」的问题,看它会不会坦白说不知道。测出问题后回到分块和召回环节排查,具体口径可以先对照 /tools/verify 的说明再动手。