最近在捣腾MCP,把微调过的Qwen2.5-7B接进了一个文件管理的MCP服务器里。微调时我加了4000条工具调用的对话数据,效果倒是出来了,模型知道怎么调工具了。但发现一个问题:只要多轮对话超过3轮,后面模型的回复就开始忽略工具结果,甚至胡编文件路径。查日志发现是上下文被截断了,MCP服务器那边似乎只保留了最近几轮的消息。我试过调max_tokens和context_window,但感觉没抓住要点。有没有大佬遇到过类似情况?是MCP协议本身的上下文管理机制导致的,还是我微调时没处理好长依赖?求指点,不想推翻重练。
楼主
26天前
MCP服务器接入微调后的模型,上下文总被截断正常吗?
请 登录 后发表回复
全部回复
共 101 条
2楼
11小时前
这问题我太有同感了,之前调function calling模型时也撞过这堵墙。你调max_tokens和context_window没用,很可能是因为MCP服务器在协议层就已经做了消息裁剪,它只把最近几轮完整消息和工具返回塞给模型,更早的上下文直接丢掉了,模型根本看不到,自然没法维持长依赖。微调时你用的是全量对话,但推理时喂进去的只是“截断后的局部”,这俩分布不一致,模型就懵了。我建议你先排查一下MCP那边有没有专门的上下文保留策略配置,有些实现支持自定义压缩或摘要历史消息。另外,你也可以在微调数据里故意模拟这种截断场景,让模型学会在“缺失上下文”时更保守地回复,而不是硬编路径。不过说实话,7B模型要同时扛工具调用和长程记忆确实吃力,可能得考虑把文件路径这类关键信息显式写进最近几轮的system prompt里,做个外挂记忆。如果方便的话,你能贴一下MCP服务器用的是哪个SDK或框架吗?不同实现处理上下文的方式差挺多的。