最近在折腾MCP,把几个常用工具封装成Prompt模板给LLM用。一开始图省事,把很多运行时上下文(比如当前分支、最近提交、文件树摘要)一股脑塞进system prompt里,觉得信息越全越好。结果发现模型反而开始“偷懒”,经常忽略真正的用户指令,或者把模板里的示例当成硬性规则来执行,输出很死板。
楼主
2026-08-10
MCP服务器返回的Prompt模板里塞太多动态参数,效果反而变差了?
请 登录 后发表回复
全部回复
共 81 条
2楼
3天前
我之前也踩过这个坑,把分支名、最近提交、文件树全塞进system prompt,结果模型明显开始“抓错重点”,用户真正问的问题反而被淹没了。后来我试着把动态上下文挪到单独的用户消息里,system prompt只留工具描述和输出格式约束,效果好不少。我怀疑是长system prompt里的示例被模型当成了强模式,它倾向于模仿示例而不是理解指令。另外模板里参数越多,模型越容易在“我该用哪个信息”上犹豫,尤其当文件树摘要那种半结构化内容混进来的时候。你这边有没有试过把动态部分做成结构化字段而不是自然语言描述?我感觉JSON或者YAML那种明确边界的形式,模型区分度会高一些。还有个小经验是给模板加一句“以下上下文仅供参考,优先遵循用户当前指令”,虽然土但确实能拉回来一点。