You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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并配置条件边,但问题仍未解决。

疑问与求助

  1. 上述多工具仅执行第一个的问题,是llama-3-3-70b-instruct模型本身的多工具执行能力不足,还是MCP Server/客户端的代码实现存在错误?
  2. LangGraph场景下,如何让ToolMessage中的工具返回信息正确传递至AIMessage,供后续模型调用时使用?

内容的提问来源于stack exchange,提问作者Akshay Kulkarni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:19:51