llama-3-3-70b-instruct对接Multi MCP Tool Servers多工具执行异常
问题:Llama-3.3-70B-Instruct模型在MCP多工具执行中的异常问题
问题概述
基于MCP框架开发多工具代理,使用独立托管的llama-3-3-70b-instruct模型时遇到异常:自定义了约5个工具的MCP Server,执行代码时仅能运行第一个工具,剩余工具仅在模型回复中提及执行,但实际并未触发调用。切换到GPT-4o模型无此问题,但当前托管环境不支持该模型,且无法从其他环境调用。
示例提示:
Retrieve the data. If 'Column1' status is 'Not Completed' then write to text file.
模型会正确调用第一个工具获取数据,但第二个写入文本文件的工具仅在回复中说明要执行,实际无文件生成。例如返回数据为[{"Column1":"Not Completed"},{"Column1":"Completed"}]时,仅提示写入操作但无实际文件产出。
MCP Server工具代码示例
getdata_mcp_server.py
from mcp.server.fastmcp import FastMCP import requests # 注:原代码的response应为requests,属于笔误 mcp = FastMCP("GetData") @mcp.tool() def getdata(): """Retrieves Data""" data = requests.get("https://example.com").text return {"result" : data} if __name__ == "__main__": mcp.run(transport="stdio")
writetext_mcp_server.py
from mcp.server.fastmcp import FastMCP mcp = FastMCP("WriteText") @mcp.tool() def writetext(data: dict): """Writes Data""" with open("filename.txt", "w") as f: # 注:原代码的w缺少引号,属于语法错误 f.write(str(data)) # 注:data为dict类型,直接write会报错,需转为字符串 return {"result" : f"Successfully written to text file the data : {data}"} if __name__ == "__main__": mcp.run(transport="stdio")
注:即使将所有工具合并到同一个.py文件中,问题仍然存在。
额外问题:LangGraph场景下ToolMessage无法传递至AIMessage
使用langchain_mcp_adapters搭配LangGraph的StateGraph时,所有工具均能执行,但工具返回的信息仅存在于ToolMessage中,无法传递至AIMessage。相关代码示例:
from langchain_mcp_adapters.client import MultiServerMCPClient from langgraph.graph import StateGraph, MessagesState, START from langgraph.prebuilt import ToolNode, tools_condition from langchain_openai import ChatOpenAI model = ChatOpenAI(model="llama-3-3-70b-instruct", api_key="...", base_url="...") client = MultiServerMCPClient( { "getdata_writetext": { "command": "python", "args": ["getdata_mcp_server.py", "writetext_mcp_server.py"], "transport": "stdio", }, } ) tools = await client.get_tools() def call_model(state: MessagesState): response = model.bind_tools(tools).invoke(state["messages"]) return {"messages": response} builder = StateGraph(MessagesState) builder.add_node("call_model", call_model) builder.add_node("tools", ToolNode(tools)) builder.add_edge(START, "call_model") builder.add_conditional_edges( "call_model", tools_condition, ) builder.add_edge("tools", "call_model") graph = builder.compile() math_weather_response = await graph.ainvoke({"messages": "Retrieve the data. If 'Column1' status is 'Not Completed' then write to text file."})
已尝试添加should_continue节点、自定义ToolNode并配置条件边,但问题仍未解决。
疑问与求助
- 上述多工具仅执行第一个的问题,是
llama-3-3-70b-instruct模型本身的多工具执行能力不足,还是MCP Server/客户端的代码实现存在错误? - LangGraph场景下,如何让ToolMessage中的工具返回信息正确传递至AIMessage,供后续模型调用时使用?
内容的提问来源于stack exchange,提问作者Akshay Kulkarni
相关产品推荐
相关产品推荐

