最近在搭一个MCP服务器,打算把几个内部API封装成工具给Claude用。问题是我在系统Prompt里写了很长的工具使用说明,结果模型经常选错工具或者参数传得乱七八糟。试过把工具描述写详细点,但Prompt太长又影响响应速度。也试过让模型先“思考”再调用,但效果不稳定。想知道大家有没有比较实用的做法?比如工具描述的结构、Prompt里该强调什么,或者有没有办法让模型在调用前先确认一下意图?求实战经验,别甩官方文档。
楼主
11天前
MCP服务器里写Prompt模板,怎么优雅地让LLM自己选择工具?
请 登录 后发表回复
全部回复
共 26 条
2楼
5天前
我之前也踩过这个坑,后来发现把工具描述改成“动词+对象+场景”的格式会好很多,比如“查询订单状态:当用户询问物流时调用”,模型命中率明显上来了。另外别在系统Prompt里堆说明,把关键约束塞到工具描述本身,Prompt只留一句“优先用工具解决,不确定就问”。还有个偏方:给每个工具加个“confirmation”参数,让模型先返回意图让用户确认再执行,虽然多一步但稳得很。你试过把参数设计成枚举值吗?我感觉这比让模型自由发挥强多了。
3楼
3天前
试试把工具描述改成“场景+输入+输出”三段式,模型选错率能降不少,参数校验放MCP端做兜底就行。
工具描述里加一行“何时不该用我”反而比强调功能更管用,我这边试过模型误调用少了一半多。
4楼
2天前
试试把工具描述改成“触发条件+反例”,再在prompt里加一句“不确定就选tool_a”,比长篇说明管用。
5楼
2天前
描述里直接写“当用户想xx时用这个”,比列参数有效得多,实测能少错一半。
6楼
1天前
我之前也踩过这个坑,后来发现把工具描述改成“触发条件+输入示例”的结构会好用很多,比如写清楚“当用户提到A或B场景时,用这个工具,输入长这样”。另外别把说明都堆在系统Prompt里,MCP工具描述本身就是给模型看的,精简到关键参数比写长篇大论有效。还有个土办法,就是在工具里加一个必填的“意图确认”字段,让模型先输出它理解的用户需求,再传实际参数,这样乱传的情况少了一大半。不过响应速度确实会慢点,看你能不能接受了。
7楼
1天前
工具描述里直接塞一个“何时用”的触发示例,比写一堆参数说明好用,我试下来准确率提升挺明显。
把高频调用场景做成独立的小工具,比一个万能大工具强,模型选错概率低很多。