最近在折腾把公司内部的RAG服务封装成MCP tool给Claude用,结果发现一个诡异的问题。单独调用RAG接口时,top5召回的结果还挺准的。但一旦通过MCP server转发,同样的query返回的chunk就变得很飘,经常混进一些不相关的内容。我对比了下日志,发现MCP这边好像把query做了二次处理?传过去的参数编码有问题?还是说MCP的tool description写得太长,影响了模型对query的理解?另外,有没有朋友遇到过MCP server超时导致RAG那边异步任务被中断的情况?求指点,在线等,挺急的。
楼主
2026-08-12
把RAG接进MCP server后,召回效果反而变差了是怎么回事?
请 登录 后发表回复
全部回复
共 62 条
2楼
2026-09-29
先抓包看下MCP转发时query有没有被截断或者转义,我上次就是编码问题导致召回全乱。
3楼
1天前
你日志里看到query被二次处理这点很关键,我怀疑大概率是MCP这边在序列化参数时对中文或者特殊字符做了转义,导致RAG那边收到的query跟原始输入已经不是一个东西了。tool description太长确实也会干扰模型对参数的抽取,尤其是描述里如果塞了一堆示例query,模型可能会自己“脑补”改写你的输入。我之前也踩过类似的坑,建议先把description精简到只保留必要字段说明,然后抓一下MCP server实际发出的payload,跟直接调RAG的请求做字节级对比,基本就能定位。超时那个问题我们也遇到过,MCP默认超时偏短,RAG异步任务还在跑但连接已经断了,结果就是返回空或者残缺,最好在tool层加个显式的timeout配置并做好重试。另外可以试试在MCP tool里加个透传字段,把原始query原封不动带过去,绕开中间任何处理逻辑,先验证是不是链路污染再说。