最近在捣腾MCP,把微调过的Qwen2.5-7B接进了一个文件管理的MCP服务器里。微调时我加了4000条工具调用的对话数据,效果倒是出来了,模型知道怎么调工具了。但发现一个问题:只要多轮对话超过3轮,后面模型的回复就开始忽略工具结果,甚至胡编文件路径。查日志发现是上下文被截断了,MCP服务器那边似乎只保留了最近几轮的消息。我试过调max_tokens和context_window,但感觉没抓住要点。有没有大佬遇到过类似情况?是MCP协议本身的上下文管理机制导致的,还是我微调时没处理好长依赖?求指点,不想推翻重练。
楼主
2026-08-04
MCP服务器接入微调后的模型,上下文总被截断正常吗?
请 登录 后发表回复
全部回复
共 125 条
2楼
11天前
我之前也遇到过类似问题,后来换了方案。
3楼
4天前
这个思路不错,收藏了。
4楼
4天前
学到了,感谢分享!
5楼
3天前
这个情况我也碰到过,大概率不是微调本身的问题。MCP服务器那层确实有自己的上下文管理逻辑,很多实现默认只保留最近N轮或者按token预算裁剪,你调max_tokens只影响生成侧,跟服务器怎么拼上下文是两回事。建议先去看你用的那个MCP server的源码或者配置,确认它是不是有个类似history_limit或者max_context_messages的参数在截断。另外微调数据里如果工具调用都是单轮或少轮场景,模型本身对长依赖的鲁棒性就没练出来,一旦上下文被裁掉前面的工具结果,它就只能靠猜路径了。可以试试在系统提示里显式要求每轮重新确认文件状态,或者把关键工具返回结果做摘要塞进后续消息里,别指望服务器帮你保留。真要根治还是得让服务器别截那么狠,或者换成自己做上下文拼装、MCP只当工具执行层用。
6楼
2天前
感觉是MCP这边的会话状态管理在作怪,很多server默认只传最近N轮给模型,你调max_tokens只是改生成上限,跟历史保留策略不是一回事。我之前也踩过,后来在server配置里把上下文窗口和消息保留条数分开设,明确指定保留最近几轮再加上工具结果摘要,才稳住。微调数据里如果长依赖样本偏少,模型本身也容易在多轮后飘,建议先排除server截断再怀疑模型。可以先在日志里打印实际送进模型的messages长度,确认是协议层砍的还是模型自己忽略的。