LLM Function-Calling与模型上下文协议 (MCP):构建智能企业系统的双重引擎

将大型语言模型 (LLM) 集成到企业系统正在改变企业与其工具和工作流程交互的方式。通过使用自然语言 (NL) 输入来控制复杂操作,LLM 简化了对企业功能的访问,使其更加直观和高效。然而,这种集成需要一个结构良好的方法来处理将提示转换为可操作指令以及执行这些指令。LLM Function-Calling 和模型上下文协议 (MCP) 应运而生,它们各自提供独特且互补的功能。

LLM 集成的两个阶段:

LLM 通过两个阶段的过程连接自然语言输入和企业系统:

  • 第一阶段:通过 Function-Calling 将提示分解为指令

    Function-Calling 负责将自然语言提示转换为结构化的函数调用指令,面向工具的系统(如 MCP 服务器)可以理解并执行。此阶段侧重于为工具或 API 生成精确的指令。

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

    MCP 管理工具发现、调用和响应处理,提供了一个标准化框架来执行这些指令。这确保了生成的函数调用在不同的企业系统中一致且有效地执行。

通过这种责任划分,LLM 可以与各种工具集成,从 CRM 和 ERP 到工作流自动化系统。

Function-Calling:生成函数调用指令

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

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

  • OpenAI
{
  "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
{
  "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
{
  "functionCall": {
    "name": "get_current_stock_price",
    "args": {
      "company": "Apple Inc.",
      "format": "USD"
    }
  }
}
  • Llama
{
  "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 请求格式

{
  "jsonrpc": "2.0",
  "id": 129
  "method": "tools/call",
  "params": {
    "name": "get_current_stock_price",
    "arguments": {
      "company": "Apple Inc.",
      "format": "USD"
    }
  },
}

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

Function-Calling 与 MCP:互补关系

虽然 Function-Calling 和 MCP 对于桥接 LLM 和企业系统都至关重要,但它们解决了不同的挑战:

  • Function-Calling 侧重于将提示转换为可操作的指令。它是 LLM 驱动的,并且因供应商而异,目前还没有通用标准。
  • MCP 标准化了这些指令的执行,从而实现了数千种工具的可扩展性和互操作性。

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

结论

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