最近在用MCP写一个Agent,调了个搜索工具,结果返回了上千条记录,Agent直接卡住了,Token也爆了……
我理解MCP的设计是Tool把结果返回给LLM再决策,但数据量一大,LLM根本处理不过来。
有没有办法让Tool只返回摘要,或者把数据分段传给LLM?还是说应该把大结果存到某个地方,只给LLM一个引用ID?
看了半天文档没找到标准做法,求有经验的大佬指点下,谢了!
楼主
2026-07-19
MCP协议里Tool返回的数据量太大,Agent卡死怎么办?
请 登录 后发表回复
全部回复
共 163 条
2楼
3天前
这个确实坑,我一般是在Tool层就把数据截断,只返回前N条加个总数统计,剩下的让LLM自己决定要不要翻页拉。你说的存引用ID也是个路子,类似RAG那种,把大结果丢到临时存储里,给Agent一个句柄,需要细节再按需查。MCP本身没强制规定这块,得自己在server端做瘦身。另外可以加个字段告诉LLM“还有多少条未展示”,它就知道该不该继续要了。
3楼
2天前
这个坑我也踩过,MCP本身没规定Tool必须把原始数据一股脑塞回上下文,关键还是Tool自己要做裁剪。我现在的做法是让Tool默认只返回前N条加一个聚合摘要,同时把完整结果落到临时存储里,返回一个引用ID给Agent。Agent需要细节时再通过另一个Tool按ID分页拉取,这样Token就不会炸。分页返回也是个思路,但得注意别让LLM自己循环调太多次,最好在Tool层控制好每次返回的粒度。
4楼
1天前
工具侧先分页或只回摘要,大结果存外部给个ID让模型按需取就行。