最近在搞一个内部知识库的RAG,用的向量检索,但老是召回一些语义沾边但没啥用的chunk,精排也救不回来。看到MCP最近挺火,突然有个想法:能不能把MCP当成一个工具层,让LLM在召回前先通过MCP调外部API(比如数据库、搜索引擎)做几轮过滤或者补全,再进向量库?这样是不是能少点垃圾chunk?有佬实际这么搞过吗?还是说MCP更适合做agent的动作执行,跟RAG管线其实不太搭?求指点,别喷,真在纠结。
MCP能不能用来救一下RAG的召回?还是我想多了?
全部回复
共 4 条说实话我觉得这个思路有点绕远了,MCP本质是给agent调工具用的,你把它塞进RAG前置流程里,等于自己又包了一层协议和网络开销,延迟和稳定性都得打问号。与其这样,不如先查查是不是chunk切分策略或者embedding模型选型的问题,召回垃圾往往是这两个环节没调好。真要加过滤,写个简单的rerank或者基于规则的预筛都比MCP直接,毕竟你内部知识库的场景大概率不需要外部API的实时数据。当然你要是想接外部数据源做query改写,那MCP可能还有点用,但那就不是救召回而是扩召回了。
说实话你这个思路有点绕了,MCP本质是给agent调工具用的,硬塞进RAG前置流程里,等于给检索又加了一层LLM决策延迟,成本上不划算。我试过类似的,效果不如直接在召回前加一层rerank或者用混合检索(BM25+向量)来得直接。但如果你说的“补全”是指用MCP调外部知识源补充查询词,那倒可以小规模实验下,别指望它解决chunk质量问题,根源还是切分和embedding。
说实话我觉得这个思路有点绕远路了,MCP本质上是给agent调工具用的,硬塞进RAG前置流程里反而会增加链路延迟和不确定性。你真正的问题可能出在chunk切分和embedding模型的选择上,不如先试试换更细粒度的切分策略或者引入rerank模型。不过如果真想用MCP,倒是可以做query理解那一步的外部知识补全,但直接让它过滤召回结果,我猜效果不会比传统规则好多少。
这个思路其实挺靠谱的,MCP做召回前的预过滤确实能砍掉不少噪音。我试过类似的路子,让LLM先通过工具查一下关键词或者元数据,再拿过滤后的query去向量库检索,垃圾chunk少了很多。不过MCP本身不解决召回语义匹配的问题,它更像是帮你把query改得更准或者缩小检索范围。要是知识库本身chunk切得烂,那还是白搭,得先看看是不是分块策略有问题。