【翻译、转载】使用 LLM 构建 MCP

资料来源:

https://modelcontextprotocol.io/tutorials/building-mcp-with-llms

本文仅仅是翻译。
在这里插入图片描述

使用 LLM 构建 MCP

利用 Claude 等大型语言模型(LLM)加速您的 MCP 开发!

本指南将帮助您使用 LLM 来构建自定义的模型上下文协议(Model Context Protocol, MCP)服务器和客户端。本教程将重点关注 Claude,但您也可以使用任何前沿的 LLM 来完成。

准备文档

在开始之前,请收集必要的文档以帮助 Claude 理解 MCP:

  1. 访问 https://modelcontextprotocol.io/llms-full.txt 并复制完整的文档文本。
  2. 导航至 MCP TypeScript SDKPython SDK 代码仓库
  3. 复制 README 文件和其他相关文档。
  4. 将这些文档粘贴到您与 Claude 的对话中。

描述您的服务器

提供文档后,清晰地向 Claude 描述您想要构建什么样的服务器。具体说明:

  • 您的服务器将公开哪些资源
  • 它将提供哪些工具
  • 它应该提供哪些提示
  • 它需要与哪些外部系统交互

例如:

构建一个 MCP 服务器,它:
- 连接到我公司的 PostgreSQL 数据库
- 将表结构作为资源公开
- 提供运行只读 SQL 查询的工具
- 包含用于常见数据分析任务的提示

与 Claude 协作

在与 Claude 合作开发 MCP 服务器时:

  1. 首先实现核心功能,然后迭代添加更多特性。
  2. 让 Claude 解释您不理解的代码部分。
  3. 根据需要请求修改或改进。
  4. 让 Claude 帮助您测试服务器并处理边缘情况。

Claude 可以帮助实现所有关键的 MCP 功能:

  • 资源管理和公开
  • 工具定义和实现
  • 提示模板和处理程序
  • 错误处理和日志记录
  • 连接和传输设置

最佳实践

使用 Claude 构建 MCP 服务器时的最佳实践:

  • 将复杂的服务器分解成更小的部分。
  • 在进行下一步之前,彻底测试每个组件。
  • 牢记安全 - 验证输入并适当限制访问。
  • 为未来的维护编写良好的代码文档。
  • 仔细遵循 MCP 协议规范。

后续步骤

在 Claude 帮助您构建服务器之后:

  1. 仔细审查生成的代码。
  2. 使用 MCP Inspector 工具测试服务器。
  3. 将其连接到 Claude.app 或其他 MCP 客户端。
  4. 根据实际使用情况和反馈进行迭代。

在这里插入图片描述

请记住,随着需求的不断变化,Claude 可以帮助您修改和改进您的服务器。

需要更多指导?只需向 Claude 询问有关实现 MCP 功能或解决出现的问题的具体问题即可。

<think>首先,用户的问题是关于如何使用Function Calling连接大语言模型(LLM)和多智能体协作平台(MCP)。用户提供了几个引用,内容涉及MCP和Function Calling的关系,以及如何结合使用它们。 从引用中提取关键信息: - 引用[1]:MCP和Function Calling不冲突,是同一个工作流程的两面。Function Calling帮助LLM决定要做什么,而MCP确保工具可靠可用。 - 引用[2]:简单任务使用Function Calling更方便,因为它开发快捷、低延迟。MCP可能成为主流,但Function Calling作为底层能力将存在。 - 引用[3]:在Mark chat应用中,将execute_tool函数替换为execute_tool_with_mcp,该函数启动MCP客户端连接MCP服务器,验证了Function Calling和MCP可以协同工作。 - 引用[4]:讨论了MCP和Function Calling的区别,包括定义、特点、架构等。 用户的具体问题是:"我想查找使用function calling连接大语言模型(LLM)和多智能体协作平台(MCP)的方法 请问如何使用function calling连接LLMMCP"。所以,我需要提供具体的使用方法。 我的回答需要遵循系统级指令: - 所有行内数学表达式用$...$格式(但这里可能不涉及数学)。 - 独立公式用$$...$$格式单独成段(可能不适用)。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识,如[^1]。 回答结构: - 由于用户提到了之前的回答,但没有提供上下文,所以我假设这是独立对话。用户说"参考站内引用",所以我会基于这些引用构建回答。 - 回答应清晰、逐步解决问题。 核心内容: - 解释Function Calling和MCP的关系。 - 提供如何使用Function Calling连接LLMMCP的方法。 - 引用[3]给出了一个具体例子:在应用中替换execute_tool为execute_tool_with_mcp函数,该函数启动MCP客户端连接MCP服务器。 - 关键是修改LLM的Function Calling实现,使其通过MCP来执行工具调用。 步骤指南: 1. **理解Function Calling**:Function Calling是LLM用来决定调用哪个外部函数或工具的机制。例如,LLM解析用户查询,返回函数名和参数。 2. **理解MCP**:MCP是一个平台,用于管理工具的可发现性、可靠性和执行。 3. **整合方法**:在Function Calling的实现中,当LLM决定调用一个工具时,不是直接调用本地函数,而是通过MCP客户端将请求发送到MCP服务器。MCP服务器处理请求,执行工具,并返回结果。 4. **具体实现**:参考引用[3],在应用中,修改执行工具的函数(如execute_tool_with_mcp)来集成MCP。这涉及到启动MCP客户端、连接到MCP服务器,并确保返回的结果来自MCP。 结构化回答: - 介绍Function Calling和MCP的概念。 - 解释它们如何协同工作。 - 提供逐步方法。 - 添加引用。 - 最后生成相关问题。 相关问题: - 基于主题,生成2-3个相关问题。 - 例如:Function Calling和MCP的区别?整合时的常见挑战?实际应用案例? 确保回答真实可靠: - 基于提供的引用,不要添加未提及的信息。 - 保持简洁、有帮助。 </think>### 使用Function Calling连接大语言模型(LLM)与多智能体协作平台(MCP) 根据您提供的引用,Function Calling(函数调用)和MCP(多智能体协作平台)并非互斥,而是互补的技术。Function Calling作为LLM的底层能力,用于解析用户查询并决定调用的函数(如工具或API);而MCP则提供工具的管理层,确保工具的可靠性、可发现性和执行效率。整合它们可以让LLM更高效地访问外部工具,同时利用MCP的集中化优势。下面我将基于引用内容,一步步解释如何实现这种连接。 #### 1. **理解Function Calling与MCP的关系** - **Function Calling的作用**:LLM使用Function Calling来解析用户输入,识别需要调用的函数名和参数(例如,`get_weather(city="北京")`或`calculate(expression="3+5")`)。它相当于LLM的“决策层”,决定要执行什么操作[^1][^2]。 - **MCP的作用**:MCP提供工具的执行框架,包括工具注册、发现和监控。它确保工具调用可靠、可扩展,无需为每个工具自定义集成(例如,通过MCP服务器处理请求)[^1][^3]。 - **协同工作流程**:LLM通过Function Calling生成工具调用请求,但实际执行由MCP处理。这样,LLM专注于意图解析,而MCP确保工具执行的可靠性和一致性。两者协同能降低开发复杂度和延迟[^2][^3]。 #### 2. **如何连接LLMMCP:具体步骤** 基于引用[3],连接的核心是修改LLM的Function Calling实现,使其通过MCP客户端路由工具调用请求。以下是逐步方法(以Python示例为基础): ##### 步骤1: 定义Function Calling的解析逻辑(LLM端) 在LLM应用中,Function Calling负责解析用户查询并生成工具调用指令。您需要确保LLM能正确识别函数名和参数。 ```python # LLM Function Calling解析示例 def parse_user_input(user_query): # 使用LLM API解析用户输入,返回函数名和参数 # 例如,输入"北京天气怎么样?" -> 返回 {"function": "get_weather", "parameters": {"city": "北京"}} response = call_llm_api(user_query) # 调用LLM API处理查询 return response.get("function_call") # 提取函数调用信息 ``` - **关键点**:LLM必须支持Function Calling能力(如OpenAI的API),并能正确返回JSON格式的调用指令[^1][^3]。 ##### 步骤2: 实现MCP客户端集成(替换直接工具执行) 在原始Function Calling流程中,工具调用通常是本地执行的(如直接调用`get_weather`函数)。您需要通过修改执行函数,将其连接到MCP服务器。 - 原始Function Calling执行方式: ```python def execute_tool(function_name, parameters): # 直接执行本地工具函数 if function_name == "get_weather": return weather_api(parameters["city"]) # ...其他工具处理 ``` - **修改为MCP集成方式**(引用[3]中的`execute_tool_with_mcp`): ```python def execute_tool_with_mcp(function_name, parameters): # 启动MCP客户端,连接MCP服务器 mcp_client = MCPClient(server_url="http://mcp-server.example.com") # 配置MCP服务器地址 # 构建MCP请求:包含函数名和参数 request = { "tool": function_name, "args": parameters, "caller": "llm_app" # 标识调用来源 } # 发送请求到MCP服务器,等待响应 response = mcp_client.execute(request) return response["result"] # 返回MCP处理后的结果 ``` - **实现逻辑**:`execute_tool_with_mcp`函数作为桥梁,它将LLM解析出的函数调用信息转发给MCP服务器。MCP服务器负责实际执行工具(如查询天气API),并返回带标识的结果(例如,包含执行状态和数据的JSON)[^3]。 - **效果验证**:修改后,应用应能正常返回结果,并在日志中显示工具调用来自MCP服务器(例如,"Tool executed via MCP: get_weather"),证明链路集成成功[^3]。 ##### 步骤3: 整合到LLM工作流 在主应用中,将上述步骤串联起来: ```python def main(user_query): # Step 1: LLM解析用户输入 func_call = parse_user_input(user_query) # 解析生成函数调用信息 if func_call: # Step 2: 通过MCP执行工具 result = execute_tool_with_mcp(func_call["function"], func_call["parameters"]) # Step 3: 将结果返回给用户或LLM return format_response(result) else: return "No function call detected." ``` - **优势**:这种方法保持了Function Calling的低延迟和开发便捷性,同时利用MCP确保工具的高可用性和可扩展性(例如,MCP可以处理工具注册、负载均衡等)[^2][^3]。 - **注意事项**: - 确保MCP服务器已部署并注册了所需工具(如`get_weather`),否则调用会失败[^3]。 - Function Calling的解析准确性是关键——如果LLM无法正确生成函数名和参数,MCP可能无法执行(引用[3]提到Function Calling能力差会影响解析)[^3]。 #### 3. **最佳实践和注意事项** - **场景适用**:适合需要可靠工具调用的复杂应用,如聊天机器人、自动化工作流。简单任务(如单次计算)可直接使用Function Calling,避免MCP开销;复杂或多工具场景则优先用MCP[^2][^4]。 - **性能优化**:通过缓存常用工具结果或异步调用减少延迟。引用[2]强调Function Calling的单次请求-响应模式能维持低延迟,而MCP添加了协议层开销(但提升了可靠性)[^2]。 - **错误处理**:在`execute_tool_with_mcp`中添加重试机制和日志监控,以处理MCP服务器故障或工具超时[^3]。 综上,连接LLMMCP的核心是**将Function Calling的决策输出路由到MCP执行层**,通过修改工具执行函数来实现。这允许LLM专注于意图理解,而MCP确保工具生态的健壮性[^1][^3][^4]。 如果您有具体的开发环境(如使用LLM框架或MCP平台),我可以提供更针对性的代码示例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值