文章目录
-
- [1. RAG 调参这件事,到底有多折磨人](#1. RAG 调参这件事,到底有多折磨人)
-
- [1.1 你以为你在调参,其实你在抽奖](#1.1 你以为你在调参,其实你在抽奖)
- [1.2 前辈们的解法,听着玄,做起来还是那套](#1.2 前辈们的解法,听着玄,做起来还是那套)
- [2. ETH Zurich 憋了个新招](#2. ETH Zurich 憋了个新招)
-
- [2.1 两个角色,一个看病一个开方](#2.1 两个角色,一个看病一个开方)
- [2.2 考卷是怎么出的](#2.2 考卷是怎么出的)
- [3. 数字摆出来,确实有点东西](#3. 数字摆出来,确实有点东西)
-
- [3.1 基准测试的成绩单](#3.1 基准测试的成绩单)
- [3.2 成本实验才是真惊喜](#3.2 成本实验才是真惊喜)
- [4. 等等,反转来了](#4. 等等,反转来了)
-
- [4.1 消融实验:谁在裸泳?](#4.1 消融实验:谁在裸泳?)
- [4.2 价目表才是隐藏 MVP](#4.2 价目表才是隐藏 MVP)
- [5. 放到更大的趋势里看](#5. 放到更大的趋势里看)
-
- [5.1 什么变了,什么没变](#5.1 什么变了,什么没变)
- [5.2 这份考卷,真的能代表用户吗?](#5.2 这份考卷,真的能代表用户吗?)
- [6. 还有一个被漏掉的角落](#6. 还有一个被漏掉的角落)
- [7. 我的判断](#7. 我的判断)
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看, 传送门https://blog.csdn.net/HHX_01
1. RAG 调参这件事,到底有多折磨人
1.1 你以为你在调参,其实你在抽奖
配一条 RAG 管线,说出来轻描淡写。真上手了你才知道什么叫牵一发而动全身。
切块方式要选吧?embedding 模型要挑吧?索引类型、检索深度、reranker、查询扩展、生成模型------每一个都不是独立选项,它们是一串互相拽着对方的连体婴。
小块切得细,你就得往深了检索才能凑齐证据;大块切得粗,一次检索倒是够了,噪声又跟着翻倍。你刚调好一组切块参数,换个 embedding 模型,最优解的位置直接搬家。
更绝的是,你想知道这组配置好不好使,得把整条管线从头到尾在测试集上跑一遍。
这就像你想换个水龙头,结果发现换完水龙头得把整个厨房重新装一遍------橱柜高度、水管位置、台面尺寸,全得跟着调。
1.2 前辈们的解法,听着玄,做起来还是那套
现在业界主流的做法,名字一个比一个唬人:AutoRAG 的逐节点贪心、多臂老虎机、MO-TPE 多目标贝叶斯优化、遗传搜索。
你听完是不是觉得特别高级?
但剥开外壳看内核,它们干的事都一样:把一次试验压成一个汇总分数,然后根据分数往下一轮试。
至于为什么这道题错了?是检索没找到正确的文档块,还是找到了但生成模型瞎编?不管。分数就是分数,黑箱进去,分数出来,下一轮继续。
这就像你考试考砸了,老师不看你错题,直接在卷子上写个总分,然后说"下次加油"。你连自己是数学差还是语文差都不知道,加油加个寂寞。
2. ETH Zurich 憋了个新招
2.1 两个角色,一个看病一个开方
ETH Zurich 这篇 Agentic AutoRAG,盯上的就是上面这个漏洞:每次试验跑完,系统其实已经记下了检索到了哪些块。那好,我们来看看------含答案的 gold span 到底有没有被检出来?
检出来了但答案还是错了?那锅在生成模型。
没检出来?那锅在检索环节。
就这么简单一步,每道错题就有了归属。
系统由两个 LLM 角色接力跑:
第一个叫 Diagnoser。它读当前这次试验的全部证据------总准确率多少、检索成功那部分题目上的准确率多少、失败在检索和生成之间怎么分摊的,再挑一批覆盖不同失败类型的错题出来,最后压成一段短诊断。
注意,它不开处方。它只写病历,不递药。
第二个叫 Proposer。它读这份诊断、看一眼搜索空间有多大、翻翻历史配置跑过什么,再加上一份知识库------Artificial Analysis 的模型排名、MTEB 的 embedding 分数、LiteLLM 每 token 多少钱------然后给出下一个配置和理由。
在成本感知模式下,它还会直接盯着当前的准确率-成本前沿,决定往成本轴哪一段去探。
python
# Agentic AutoRAG 伪代码
diagnoser = Diagnoser(llm="gpt-4o")
proposer = Proposer(llm="gpt-4o", knowledge_base=model_marketplace)
for trial in range(30):
config = proposer.propose(
diagnosis_history=diagnoses,
config_history=configs,
cost_frontier=current_pareto
)
result = run_rag_pipeline(config, test_set=frozen_exam)
diagnosis = diagnoser.diagnose(
accuracy=result.total_acc,
retrieval_only_acc=result.retrieval_success_acc,
failure_split=result.failure_attribution,
sampled_wrong=result.picked_errors
)
2.2 考卷是怎么出的
评分用的是一份冻结的考卷。流程挺讲究:从语料里按 TF-IDF 邻域起草多跳问题,带上逐字的 gold span,经过充分性 oracle 过滤,最后用四个分布在搜索空间两端的探针配置筛题------所有探针都答对的题,直接丢掉。
为啥要丢掉全对的题?因为这种题太简单了,区分不出配置好坏,留着也是浪费精力。
搜索空间大得吓人:13 个 embedding 模型、5 种 reranker 选项、35 个生成模型(还带推理开关)。每种方法给 30 次试验预算,跑 10 个种子。
3. 数字摆出来,确实有点东西
3.1 基准测试的成绩单
在 HotpotQA、MuSiQue 和 MultiHop-RAG 三个多跳基准上,300 题留出集的 LLM 裁判准确率分别是 0.825、0.330 和 0.790,全部高于随机搜索和两个 MO-TPE 变体。
更狠的是只看前 10 次试验的最佳配置------已经追平甚至超过了统计基线跑满 30 次的成绩:
· HotpotQA:0.817 对 0.786
· MultiHop-RAG:0.773 对 0.731
· MuSiQue:0.303 对 0.301,打平
十次试验,顶别人三十次。
这效率就像你隔壁室友天天泡图书馆,你考前刷了一晚上题,结果你们俩分数差不多------区别是人家的图书馆卡是真金白银办的,你那晚上还是免费的。
而且它打赢的对手里,有一个用随机搜索 30 次结果做了暖启动的 MO-TPE。什么概念?那个对手实际上吃了 60 次评估的信息量,还是被它按在地上摩擦。
3.2 成本实验才是真惊喜
真实部署场景用的是 UniDoc-Bench 的医疗子集,250 份带表格和扫描页的文档。
成本感知模式下,智能体的中位曲线以每次查询 0.000741 美元 达到 77% 准确率。
最强基线呢?暖启动 MO-TPE 峰值 71.5%,要花 0.001284 美元。
算笔账:智能体用了约 58% 的成本,拿到了更高的准确率。
要达到 71.5% 呢?它只需要 0.000288 美元,约为对方的 22%。
十个种子全部够到 71.5%。暖启动 MO-TPE 只有五个够到。随机搜索?只有两个。
还有一笔账更直观:它在每个数据集上只消耗 1100 万到 1600 万 embedding token。随机搜索要 4600 万到 7900 万。为啥?因为它早早认定几个强 embedder 之后就一直复用缓存索引,不瞎折腾了。
4. 等等,反转来了
4.1 消融实验:谁在裸泳?
上面这些数字,如果你只看摘要,结论大概是:"按失败归因驱动的搜索打败了黑箱优化。"
论文标题也是这个调调------Agentic AutoRAG,听起来就是智能体看着错题本一步步调参。
但原文自己的消融实验,指向的是另一件事。
他们做了个消融版本:把知识库和逐题诊断全去掉,只剩一个能看到分数轨迹和历史配置的 LLM 优化器。
结果呢?这个"啥都不知道"的版本,在 best-so-far 曲线上离完整版最近。
作者自己都承认了:早期效率大部分来自"让语言模型来提配置"这件事本身。知识库加诊断带来的提升,在轨迹上很小。
在 MultiHop-RAG 上,消融版的 exact match 和 F1 跟完整版完全一样,只在裁判分上略输一点。
这就好比你请了个私教,一对一带你练了三个月,身材确实好了。结果有一天你发现,私教请假那两周你自己练,效果居然没差多少。你才反应过来------原来不是私教多厉害,是你本来就有练的天赋,私教只是在旁边喊"再来一组"。
4.2 价目表才是隐藏 MVP
更关键的是,这个消融把知识库和诊断一起拿掉了,从来没有单独拆开测过。
所以标题里那个最新颖的机制------逐题判定检索失败还是生成失败------在这篇论文里,没有一个独立的效应量。它到底贡献了多少?不知道。
到了真正体现差距的成本实验,作者给出的解释也不是诊断。
智能体之所以能直奔"小而够用"的生成模型,是因为它在花掉一次试验之前,就已经拿着价目表和排行榜给候选排好序了。
成本实验里也没有跑消融。
所以我读到这条线,真正承重的是:模型本身的先验,加上一份公开市场行情的快照。诊断回路?锦上添花而已。至少眼下,拿不出证据说它不止于此。
5. 放到更大的趋势里看
5.1 什么变了,什么没变
这件事放在更长的趋势里看就清楚了。
RAG 配置搜索正在从"花算力试出来"变成"查表加推理就差不多知道"。十次试验抵三十次,这个说法本身就在讲------搜索预算正在塌缩。
就像以前你买个手机要跑遍整条街的手机城,一家一家问价、一家一家对比参数。现在呢?打开什么值得买,排行榜、价目表、用户评价全在那儿,你花半小时就能做出差不多的决策。
没被删掉的是什么?是考卷。
之前那篇 Rust 优化的研究,把智能体能稳定取胜的范围划在"目标函数能被廉价重复判定"之内。冻结考卷,正是为 RAG 造出这样一个廉价可判定的标量。
但造它有成本,而且它决定了优化器能看见什么。
5.2 这份考卷,真的能代表用户吗?
这份医疗考卷 100 道题里,有 98 道的 span 全落在同一份文档内,只有 2 道跨文档。
探针筛题保留下来的,是能区分这四个探针配置的题,而不是用户真实会问的题。
成本实验报告的准确率,就是在这份被优化过的考卷上量出来的。原文没有给出这部分的留出集评估。
所以 77% 对 71.5% 这组最贴近部署的数字,量的是"对这份考卷拟合得多好",不一定等于"对这个语料的真实查询有多好"。
这就像高考模拟题你刷了三年,模拟考分数一次比一次高。真上了考场发现,题路完全不一样------因为你练的那些题,本身就是为了区分学生出的,不是为了考查真实能力出的。
6. 还有一个被漏掉的角落
还有一个缺口,跟之前那篇 D-RAC 的研究首尾相接。
D-RAC 指出,摄取层里唯一改写内容的那一级转换------也就是文档解析------从未被计价,也没有审计。
在这篇 Agentic AutoRAG 里,解析这一步被明确放在搜索空间之外。所有试验共用 Docling 一次解析的缓存,因为每次重解析会压垮单次试验的挂钟时间。
两篇合起来看:RAG 管线里最上游、最可能悄悄丢信息的那一段,同时游离在成本核算和配置搜索两张账之外。
对表格和扫描页很多的医疗 PDF 来说,这未必是小事。
你想啊,解析的时候表格歪了、扫描页糊了、跨页的内容被切断了------这些信息在第一步就丢了,后面你 embedding 选得再贵、reranker 调得再精细,也是在一堆残缺的碎片里挑宝藏。
就像盖房子,地基是别人一次性打好的,你只管在上面装修。装修风格你研究得明明白白,可万一地基歪了两厘米呢?
7. 我的判断
把这些放在一起,我的判断是:
RAG 的部署成本,正在从调参算力转成两样东西------一份冻结考卷的质量,和一份会过期的模型行情快照。
后者的保质期,原文自己就承认:排名和单价是五月份的快照。厂商会重排、下架、调价,Proposer 的依据随时间退化。reranker 那一栏四个里只有一个有公开分数。
这意味着这类优化器的竞争力,会越来越取决于谁维护的模型知识库更新、更全,而不是搜索算法本身。
当然,这个判断依赖一个前提:成本优势确实来自知识库而非诊断。而原文恰好没拆开这两者。
能推翻我的结果很具体:在成本感知模式下,分别只去掉诊断、只去掉知识库,各跑一次消融。如果只去掉诊断时成本前沿明显后退,那失败归因就是真承重的,我这篇的读法就错了。
另一个检验是在 UniDoc 上补一份与考卷不相交的留出集,看那组 77% 还剩多少。
如果两者都站得住,这篇就不只是"LLM 带着价目表调参",而是 RAG 调优第一次真正学会了读自己的错题。
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01