v4.9.6 工作流中使用mcp工具调用返回内容有问题
例行检查
- [x] 我已确认目前没有类似 issue
- [x] 我已完整查看过项目 README,以及项目文档
- [x] 我使用了自己的 key,并确认我的 key 是可正常使用的
- [x] 我理解并愿意跟进此 issue,协助测试和提供反馈
- [x] 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭
你的版本
- [] 公有云版本
- [x] 私有部署版本, 具体版本号: v4.9.6
问题描述, 日志截图,配置文件等 工作流中,配置工具调用,选择高德的mcp服务调用,提问的时候,实际返回的不是工具调用的结果:
但是实际单独调试高德地图mcp服务时,又是没问题的:
大模型型号:Qwen2.5-32B 使用的mcp服务:高德地图mcp服务
复现步骤
1、创建一个简单工作流 2、在流程开始节点后,连线添加工具调用模块,在工具调用下方选择工具连接高德mcp工具 3、点击运行,输入提问:杭州天气怎么样
预期结果
按照你们官方网站这个示例的工作流案例:https://doc.fastgpt.cn/docs/guide/dashboard/mcp_tools/
预期结果是这样的,实际并没有达到这个效果:
你的模型不支持tool call或者function call吧?
你的模型用什么框架部署的
你的模型不支持tool call或者function call吧?
看着是支持的,工具调用那一步,调试返回的结果是 <tool_call> {"name": "qrmlzD", "arguments": {"city": "杭州"}} </tool_call> 代表模型function call选择对了查询的工具,但是fastgpt并没有发起调用mcp工具的动作,这块怎么排查原因?
@lijiajun1997 我们是这样测试的:简单应用,工具调用这里选了高德mcp工具集,然后提问杭州明天天气怎么样,但是看调试过程,工具调用回复的结果是参数,而不是调用结果:
看了下调试的链路,ai回复的也是调用参数:
function call 压根不这么返回,你这个接口没进行格式化
function call 压根不这么返回,你这个接口没进行格式化
试了下,通过下面这个消息体,直接请求我们大模型的api接口,返回的tool_call结果是正常的:
{"model": "Default", "messages": [ { "role": "user", "content": "明天杭州天气" } ], "tools": [ { "type": "function", "function": { "name": "j0KUOo", "description": "根据城市名称或者标准adcode查询指定城市的天气", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称或者adcode" } }, "required": [ "city" ] } } }, { "type": "function", "function": { "name": "lu7XgG", "description": "关键字搜索 API 根据用户输入的关键字进行 POI 搜索,并返回相关的信息", "parameters": { "type": "object", "properties": { "keywords": { "type": "string", "description": "查询关键字" }, "city": { "type": "string", "description": "查询城市" }, "citylimit": { "type": "boolean", "description": "是否限制城市范围内搜索,默认不限制" } }, "required": [ "keywords" ] } } } ], "tool_choice": "auto", "temperature": 0.12, "max_tokens": 2000, "top_k": 50, "top_p": 0.8, "repetition_penalty": 1.2, "stream": false}
返回结果是json格式:{"id":"153447","object":"chat.completion","created":1748598424,"choices":[{"index":0,"message":{"role":"assistant","content":"","tool_calls":[{"id":null,"type":"function","function":{"name":"j0KUOo","arguments":"{"city": "杭州"}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":304,"total_tokens":328,"completion_tokens":24}}
为什么fastgpt会转成xml格式呢
function call 压根不这么返回,你这个接口没进行格式化
试了下,通过下面这个消息体,直接请求我们大模型的api接口,返回的tool_call结果是正常的:
{"model": "Default", "messages": [ { "role": "user", "content": "明天杭州天气" } ], "tools": [ { "type": "function", "function": { "name": "j0KUOo", "description": "根据城市名称或者标准adcode查询指定城市的天气", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称或者adcode" } }, "required": [ "city" ] } } }, { "type": "function", "function": { "name": "lu7XgG", "description": "关键字搜索 API 根据用户输入的关键字进行 POI 搜索,并返回相关的信息", "parameters": { "type": "object", "properties": { "keywords": { "type": "string", "description": "查询关键字" }, "city": { "type": "string", "description": "查询城市" }, "citylimit": { "type": "boolean", "description": "是否限制城市范围内搜索,默认不限制" } }, "required": [ "keywords" ] } } } ], "tool_choice": "auto", "temperature": 0.12, "max_tokens": 2000, "top_k": 50, "top_p": 0.8, "repetition_penalty": 1.2, "stream": false}
返回结果是json格式:{"id":"153447","object":"chat.completion","created":1748598424,"choices":[{"index":0,"message":{"role":"assistant","content":"","tool_calls":[{"id":null,"type":"function","function":{"name":"j0KUOo","arguments":"{"city": "杭州"}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":304,"total_tokens":328,"completion_tokens":24}}
为什么fastgpt会转成xml格式呢
fastgpt 并没有操作任何内容,你的接口实际返回就是你看到的 xml,你这是非流,看不出东西。