【大模型】到底什么是Function Calling和MCP,以及和ReAct推理的关系是什么?

文章目录

背景:什么是Agent?

《LLM Powered Autonomous Agents》中有这样一张图,描述了Agent和tool、planning、action、memory的关系。

Agent是一个智能体,具备自主决策和执行任务的能力。比如Agent可以根据用户的需求,自动选择合适的工具和数据源来完成特定的任务。Agent也可以被看作是一个"项目经理",负责协调和管理各种资源和工具,确保任务能够高效地完成。比如一个旅游规划Agent可以利用MCP 调用航班查询、酒店预订、天气API等服务,为用户规划个性化的旅行行程。

背景:为什么需要Function Calling或者MCP?

预训练大模型是具有知识的时效性的,所以超过其知识范围的问题会无法回答。此时如果允许去调用外界的函数(比如在线查询天气),那大模型就具有了回答这些问题的能力。

Function Calling和MCP在用户请求中的整体流程

总体流程如下,用户提出请求,传到服务器,服务器会将用户请求&可用工具列表一起发送给大模型(或API),大模型会返回选择调用的工具给服务器,然后服务器会进一步调用该工具,返回工具执行结果给大模型做最后的答案整理。

值得注意的是,下面蓝框是Function Calling,红框是MCP:

  • Function Calling:指大模型具有"解析工具列表、挑选工具名称并给出工具参数、解析工具执行结果"的这一系列能力!所以说Function Calling是定义了大模型的一种能力。
  • MCP:定义了一套规范的、可以更好地让大模型调用工具的协议,与大模型无关

当然红框中也可以不用MCP,这里直接用https协议或者SDK去联网查询天气信息即可。MCP将在后文中讲解。

Function Calling(函数/工具调用)

Function Calling的基础实现如下,整个流程和上述一致,注意所有的上下文信息都被存储到了self.history这个列表中。

python 复制代码
def process_user_query(self, query):

	self.history.append({"role": "user", "content": query})
	
	first_model_response = self.call_model()
	
	first_model_message = first_model_response["choices"][0]["message"]
	self.history.append(first_model_message)
	
	# 检查模型是否需要调用工具
	if "tool_calls" in first_model_message and first_model_message["tool_calls"]:
	    tool_call = first_model_message["tool_calls"][0]
	    tool_name = tool_call["function"]["name"]
	    tool_args = json.loads(tool_call["function"]["arguments"])
	
	    result = self.execute_tool(tool_name, tool_args)
	
	    self.history.append({
	        "role": "tool",
	        "tool_call_id": tool_call["id"],
	        "name": tool_name,
	        "content": result
	    })
	
	    second_response_data = self.call_model_after_tool_execution()
	
	    final_message = second_response_data["choices"][0]["message"]
	    self.history.append(final_message)
	
	    return {
	        "tool_name": tool_name,
	        "tool_parameters": tool_args,
	        "tool_executed": True,
	        "tool_result": result,
	        "final_response": final_message["content"],
	    }
	else:
	    return {
	        "final_response": first_model_message["content"],
	    }

MCP (Model Context Protocol)

MCP实现的效果也是让大模型具有借助外界工具解决问题的能力。

在MCP中,有一个实体叫做"MCP Host"(比如Cursor、Cline),还有一个实体叫做"MCP Server"(不是服务器!而是一个程序,其中包含了一系列可以使用的工具)。在下面的例子中,MCP Host用的Cline,MCP Server是天气程序,提供了天气预测和预警的两个工具。

所以可以看到,我们希望MCP具有什么外部功能,是由MCP Server这个程序所决定的,其中包含了具体可调用的工具。那么MCP Server如何实现呢?

  1. 第一种方式是自己手写代码实现(这个比较复杂,可以调用Python的FastMCP库去实现);
  2. 第二种方法是去找别人写好的MCP Server,直接安装即可!下面给了三个常用的MCP Server网站,可以实现想要的功能(比如查询天气、网页内容抓取):

到这里我们更加可以意识到一个事情:MCP协议是和大模型无关的,或者说大模型无需感知到MCP协议的。而Function Calling则是定义的大模型可以去挑选工具的一种能力,是和大模型自身息息相关的。(如果理解有误,请大家指正出来🙏)

ReAct (Reasoning and Action)

ReAct框架是基于思维链(CoT)实现的,总共有三个流程:Reasoning => Action => Observation 。最基本的要求是这个大模型要具备CoT的能力。

通过在prompt中告诉大模型有哪些工具可以调用(工具列表),以及每一个工具的作用是什么(工具说明书),然后要求大模型在输出的时候一步一步思考,是否需要调用提供的工具,如果需要调用工具,那么要求模型输出固定的格式,再通过编写代码的方式来调用。

下图对比了不同的大模型的设计模式,ReAct算是过程最完整的一种模式:

我理解ReAct是一种大模型的设计模式,整个过程中都是这个大模型在进行持续的Reasoning => Action => Observation 过程,而没有被打断后重新去调用大模型的情况。核心就是要在prompt中提前定义清楚工具列表和工具说明书,让大模型在思考过程中去自主使用,并且action也是基于生成的代码去执行。而Function Calling和MCP应该会因为调用工具所以被打断调用,需要得到工具执行结果后重新调用大模型。最后,ReAct和Function Calling、MCP可以兼容使用。

(上面这段理解我很不确定,需要check,如有错误,欢迎指出🙏)

7.5更正:上面的说法应该不太对,ReAct虽然可以不断地Reasoning => Action => Observation 去reflect,但是一旦调用了外部的工具,那肯定还是会被打断的,也就是需要将工具执行的结果拼接到上下文中,重新输入给大模型去推理。或者说是interleaved的间断过程。但如果说考虑另一种情况,某个工具只是单纯想让模型根据函数的代码内容去执行一些简单逻辑(比如文本匹配),这个工具就只需要定义清楚参数和功能,prompt里给清楚这个工具的说明,当模型挑选到这个工具时,就可以直接通过模型自身去执行了,这种情况不会被打断,上下文是存在了KV cache中。

(这么说正确吗?还需要check这里的后一种情况)

参考资料

相关推荐
我就是全世界5 小时前
TensorRT-LLM:大模型推理加速的核心技术与实践优势
人工智能·机器学习·性能优化·大模型·tensorrt-llm
文浩(楠搏万)9 小时前
用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!
大模型·音视频·tts·wav·obs·声音克隆·语音录制
李师兄说大模型16 小时前
KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
人工智能·深度学习·机器学习·语言模型·自然语言处理·大模型·deepseek
Sherlock Ma16 小时前
百度开源文心一言4.5:论文解读和使用入门
人工智能·百度·自然语言处理·开源·大模型·文心一言·多模态
喜欢吃豆17 小时前
目前最火的agent方向-A2A快速实战构建(二): AutoGen模型集成指南:从OpenAI到本地部署的全场景LLM解决方案
后端·python·深度学习·flask·大模型
喜欢吃豆18 小时前
快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
服务器·人工智能·python·深度学习·大模型·github·fastmcp
一 铭1 天前
AI领域新趋势:从提示(Prompt)工程到上下文(Context)工程
人工智能·语言模型·大模型·llm·prompt
静心问道1 天前
self-consistency:自洽性提升语言模型中的链式思维推理能力
人工智能·语言模型·大模型
胡耀超1 天前
标签体系设计与管理:从理论基础到智能化实践的综合指南
人工智能·python·深度学习·数据挖掘·大模型·用户画像·语义分析