4
最近更新:11个月前

通过与函数调用进行比较来解释MCP

函数调用 vs MCP 服务器

本存储库旨在说明大型语言模型(LLM)函数调用和模型上下文协议(MCP)之间的区别。函数调用已经存在了一段时间,而 MCP 是一种新的标准化尝试。通过比较这两种方法可以展示 MCP 的价值及其如何在函数调用的基础上构建。

此存储库包含两个示例:

  • /func-calling:使用 OpenAI 的函数调用来控制 Home Assistant 灯光的命令行应用程序
  • /mcp-server:用 Node.js 实现的 MCP 服务器,向使用 MCP 协议的 LLM 暴露 control_lights 功能

想知道它具体表现?请查看我在 YouTube 上的演示视频:MCP vs. 函数调用 - 使用 Cursor 控制我的办公室灯光

Home Assistant

Home Assistant 是一个开源的家庭自动化平台。我在家里的树莓派上运行它。
Home Assistant 控制我的灯光,并且可以通过 Home Assistant WebSocket API 控制。

一段时间前,我构建了 ./data-manager./hass-ws-client 工具来玩弄 Home Assistant。我认为这是一个有趣的例子,可以应用于外部工具。然而,Home Assistant 的代码并不是这个存储库的主要焦点。

函数调用

OpenAI 函数调用文档

函数调用让 AI 助手可以调用预定义的函数或工具。这些函数运行在助手的环境中,可以执行从文件搜索到 API 调用的各种操作。LLM 以 JSON 格式接收函数描述,并指定调用哪个函数以及传递什么参数。应用程序随后处理执行。

-> 函数存在于你的 LLM 应用代码中。

MCP 服务器

MCP 文档

MCP 服务器将 AI 应用与第三方服务连接起来。它们通过标准化的协议暴露功能,任何兼容 MCP 的 LLM 都可以使用。虽然函数调用是本地进行的,但 MCP 服务器单独进行外部服务通信、认证和命令执行。

-> MCP 服务器是独立的应用程序,任何兼容 MCP 的 LLM 都能使用。

设置 MCP 服务器

  1. mcp-server 目录中创建一个 .env 文件:
bash 复制代码
cp mcp-server/.env.example mcp-server/.env
  1. 将你的 Home Assistant API 密钥添加到 .env 文件中:
bash 复制代码
HOME_ASSISTANT_API_TOKEN=<你的-homeassistant-api-token>
  1. 构建 MCP 服务器:
bash 复制代码
bun i
bun run build
  1. 将 MCP 服务器添加到你的 LLM 应用配置中(例如,Cursor):
json 复制代码
{
  "name": "home-assistant",
  "command": "node /Users/andrelandgraf/workspaces/mcps/mcp-server/dist/index.js"
}

完成!你的 LLM 应用现在可以通过 MCP 服务器控制 Home Assistant 灯光。