说在前面

大家在使用dify接入mcp服务时可能会遇到类似报错:

Exception: read llm model failed: request failed: [tongyi] Error: req_id: 
db6c8ce0bb PluginInvokeError: {"args":{"description":"[models] Error: 
'description'"},"error_type":"InvokeError","message":"[models] Error: 'description'"}

目前dify mcp智能体策略使用最多的就是
dify-plugin-agent-mcp_sse
假如你使用的是插件的Function Calling策略,可能就会出现这种报错。

开门见山

问题最终定位是由于我本地启动的mcp服务,没有给参数设置description,导致dify后台直接报错。无关插件,无关大模型。

历程

大模型问题

遇到这个问题之后,根据提示,我以为是大模型报错了,还有req_id信息,我直接联系了百炼的官方技术支持,最终得到的反馈是,这个请求并没有发送到他们那边,言外之意,这个错误是dify发出的。

更换ReAct策略

当策略更换之后,报错信息消失了,整个智能体是可以完成从工具的判断到调用再到最终结果的返回的,只不过消息的回复没办法做到流式返回,这个在之前的文章有解释过原因。
但是单凭这点信息也没办法定位到具体原因。

调试

目前其实已经没有更好的办法了,因为dify和插件都是封装好的,没有办法看到内部更详细的日志信息。
具体的过程不多说了,官网都有详细的介绍,直接说一下最后的结果。
我打印了能成功调用的工具描述:

{'name': 'weekday', 'description': '计算指定日期为星期几的工具。', 'parameters': 
{'type': 'object', 
'properties': 
{'year': {'type': <ToolParameterType.NUMBER: 'number'>, 'description': ''}, 
'month': {'type': <ToolParameterType.NUMBER: 'number'>, 'description': ''}, 
'day': {'type': <ToolParameterType.NUMBER: 'number'>, 'description': ''}}, 
'required': ['year', 'month', 'day']}}, 

这是从本地mcp server获取的工具描述(报错):

{'name': 'get_book_info', 'description': '获取图书信息', 'parameters': {
'properties': {'book_name': {'title': 'Book Name', 'type': 'string'}}, 
'required': ['book_name'], 
'title': 'get_book_infoArguments', 'type': 'object'}}

通过数次调试,最终问题定位在了这里,经过分析,我感觉应该是2个可能。

  • 自己定义的mcp-server没有成功传递参数的description
  • 参数的type信息必须要是dify官方提供的,比如用'type': <ToolParameterType.NUMBER: 'number'来代替type: 'number'

第一个解决起来比较简单,通过修改插件,给不存在description的情况加默认赋值空字符串,问题到此也就解决了。
因为中间解决思路有点离开主线,所以整个过程耗时将近3天。

问题解决思路

添加参数描述信息

这个是最简单的办法,需要对mcp服务进行改造。

修改插件

strategies\function_calling.py _init_prompt_mcp_tools方法,遍历parameters,当
description 不存在时设置为空字符串

for tool in mcp_tools: 
	parameters = tool.get("inputSchema") 
	for key, value in parameters['properties'].items(): 
	   if 'description' not in value: value['description'] = ""

说到最后

问题解决了,请你思考一下,为什么使用ReAct策略时不会报错?
可以尝试看下源码,思考思考,答案见评论区。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐