函数调用与模型上下文协议 (MCP):深入解析大型语言模型集成的两大关键阶段

大型语言模型(LLM)通过一个两阶段的过程,将自然语言输入与企业系统连接起来:

大型语言模型集成的两大阶段

阶段一:将提示分解为函数调用指令
函数调用负责将自然语言提示转换为结构化的函数调用指令,这些指令可以被面向工具的系统(例如 MCP 服务器)理解并执行。此阶段专注于为工具或 API 生成精确的指令。

阶段二:执行函数调用指令
MCP 通过在一个标准化的框架中管理工具发现、调用和响应处理,来负责执行这些指令。这确保了生成的函数调用能够在不同的企业系统中得到一致且有效地执行。

通过这种方式划分职责,LLM 可以与广泛的工具集成,从 CRM(客户关系管理系统)和 ERP(企业资源规划系统)到工作流自动化系统。

阶段一:函数调用 —— 生成函数调用指令

函数调用是 LLM 将用户提示转换为可操作指令的机制。例如,如果用户提问:“苹果公司当前的美元股价是多少?”,LLM 会生成一个函数调用,指明期望的操作(例如,获取股票数据)和所需参数(例如,公司名称和货币格式)。

函数调用格式示例

目前,函数调用指令没有统一的标准格式,每个 LLM 供应商都有自己的方法。以下是一些示例:

OpenAI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"name": "get_current_stock_price",
"arguments": "{\n \"company\": \"Apple Inc.\",\n \"format\": \"USD\"\n}"
}
]
},
"finish_reason": "tool_calls"
}

Claude

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "<thinking>To answer this question, I will: …</thinking>"
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_current_stock_price",
"input": {"company": "Apple Inc.", "format": "USD"}
}
]
}

Gemini

1
2
3
4
5
6
7
8
9
{
"functionCall": {
"name": "get_current_stock_price",
"args": {
"company": "Apple Inc.",
"format": "USD"
}
}
}

Llama

1
2
3
4
5
6
7
8
9
10
11
{
"role": "assistant",
"content": null,
"function_call": {
"name": "get_current_stock_price",
"arguments": {
"company": "AAPL",
"format": "USD"
}
}
}

这些示例突显了尽管 LLM 在概念上的工作方式相同,但它们使用不同的 JSON 结构来表示函数调用。虽然函数调用的标准可以减少这种差异,但像 LangChain 这样的当前框架提供了抽象来有效地处理这些差异。

阶段二:MCP —— 函数调用指令的标准化执行

一旦 LLM 生成了函数调用指令,就必须执行这些指令以交付结果。这就是 MCP 发挥作用的地方。MCP 提供了一个标准化的框架来管理执行过程,包括工具发现、调用和响应处理。

MCP 在执行中的作用

MCP 使工具能够以一致且可扩展的方式运行,弥合了 LLM 生成的指令与企业系统之间的鸿沟。为实现这一点,MCP 使用其自己的请求格式,这要求应用程序将 LLM 的输出转换为与 MCP 兼容的结构。以下是 MCP 格式的一个示例:

MCP 请求格式

1
2
3
4
5
6
7
8
9
10
11
12
{
"jsonrpc": "2.0",
"id": 129,
"method": "tools/call",
"params": {
"name": "get_current_stock_price",
"arguments": {
"company": "Apple Inc.",
"format": "USD"
}
}
}

应用程序充当中间媒介,将 LLM 的输出转换为与 MCP 兼容的请求。然后,MCP 确保这些请求由适当的工具正确执行,并返回 LLM 可用于响应用户的结果。

函数调用与 MCP:互补关系

尽管函数调用和 MCP 都是将 LLM 连接到企业系统的组成部分,但它们解决了不同的挑战:

  • 函数调用专注于将提示转换为可操作的指令。它由 LLM 驱动,并且因供应商而异,目前尚无通用标准。
  • MCP 则标准化这些指令的执行,从而实现了跨数千种工具的可扩展性和互操作性。

这两个阶段共同确保 LLM 不仅能够解释自然语言提示,还能通过利用企业工具交付有意义的结果。

结论

函数调用和 MCP 在将 LLM 连接到企业系统方面扮演着截然不同但至关重要的角色。函数调用将提示转换为可操作的指令,而 MCP 确保这些指令能够可靠且大规模地执行。它们共同为自然语言驱动的企业系统奠定了基础,助力企业在其工作流程中充分释放 LLM 的潜力。随着 MCP 的不断发展,它将重新定义 LLM 与企业工具的交互方式,使集成更具可扩展性、灵活性和效率。


原文如下:LLM Function-Calling vs. Model Context Protocol (MCP)