最近自己在搭一个简单的RAG系统,用的开源embedding和LLM。看了不少教程都说要把用户query先做一下改写或者优化,比如提取关键词、补全上下文,再丢给LLM。但我试了几次,发现直接拿用户原话拼上检索到的文档片段,回答准确率反而更高,尤其是那种比较口语化的长尾问题。改写过后的prompt有时会丢失一些细节,或者LLM理解歪了。想请教一下大佬们,是不是我改写的方法不对?还是说对于某些场景,不改写反而更好?这背后有没有什么通用的经验规则?求指点。
楼主
2026-07-19
RAG里把用户问题直接拼进prompt,效果反而比改写后更好?
请 登录 后发表回复
全部回复
共 142 条
2楼
3天前
我也有类似感受,query改写不是万能药。像口语化长尾问题,原话里那些模糊词和语气其实带着上下文线索,改写模型一压缩反而丢了。但如果是多轮对话里指代特别多的query,不补全又容易检索跑偏。感觉关键看你的检索器和LLM谁的语义理解更强,检索强就少改,LLM强可以多给它点原始信息。另外改写prompt里最好保留原始query,让模型自己判断怎么用。
3楼
2天前
我踩过类似的坑,后来发现query改写这事真不是无脑套就好。你那个口语化长尾问题效果更好,我觉得一个关键原因是原话里自带了很多隐式上下文,改写模型一压缩反而把信号丢了。尤其是用户问“那个报错咋回事”这种,改写后可能变成“如何解决报错”,检索出来的东西反而更泛。我现在做法是分场景:事实型短query可以改写补全,闲聊式或带具体细节的长query基本不动。另外你可以试试把原query和改写query分别检索,取并集再重排,比二选一稳。还有一点,改写模型本身如果比生成模型弱太多,它理解歪了后面全歪。通用规则我不敢说,但经验是改写只做“扩展”不做“替换”,别让它替你总结。如果你手头有评测集,跑个A/B对比,大概率会发现不同query类型最优策略不一样。