ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

mcp-for-beginners 实战:在 Python 中运行带 LLM 的 MCP 客户端(03-llm-client 示例详解)

mcp-for-beginners 实战:在 Python 中运行带 LLM 的 MCP 客户端(03-llm-client 示例详解) 教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载本文围绕 mcp-for-beginners 开源课程 03-llm-client 小节 的 Python 解决方案展开完整讲解如何搭建运行环境、安装依赖、配置 Microsoft Foundry 模型并逐行剖析 client.py 与 server.py 的源码调用链让读者掌握「MCP 客户端 LLM 工具调用」从环境准备到端到端运行的全过程。一、示例定位给客户端装上一个「会思考的大脑」在前面的课程中客户端都是显式调用服务器自己列出工具、资源、提示词再自己决定调用哪个。这种方式对最终用户并不友好——用户并不关心你用的是不是 MCP他们只希望用自然语言和系统对话。03-llm-client这一课的核心思路就是在客户端里接入一个 LLM让用户用一句话例如「Add 2 to 20」就能触发服务器上的add工具。整体交互流程分为四步与 MCP 服务器建立连接列出服务器的能力resources、tools、prompts并保存其 schema把 MCP 工具转换成 LLM 能理解的 function-calling 格式把用户提示词连同工具定义一起交给 LLM再由客户端执行 LLM 建议调用的工具。Python 解决方案位于 solution/python 目录包含三个文件文件作用server.py基于 FastMCP 的演示服务器暴露add工具与greeting动态资源client.py通过 stdio 连接服务器的 MCP 客户端内置 LLM 工具调用逻辑README.md运行该示例的分步操作指南即本文主体二、第 0 步创建 Python 虚拟环境示例建议使用uv管理依赖但这并非必需你也可以直接用venv。运行前先创建一个独立的虚拟环境避免污染全局 Python 环境python -m venv venvuv是可选的加速工具如果本机已安装也可以直接用uv venv创建环境、用uv pip install安装依赖其余流程保持一致。三、第 1 步激活虚拟环境激活命令随操作系统不同而不同WindowsPowerShell / CMDvenv\Scripts\activateLinux / macOSsource venv/bin/activate激活后命令行提示符前会出现(venv)前缀说明后续的pip install与python client.py都将运行在隔离环境中。原文档中写作venv\Scrips\activate这是 Windows 路径下Scripts目录的笔误实际目录名为Scripts。四、第 2 步安装依赖pip install mcp[cli] pip install openai pip install azure-ai-inference三个包各司其职mcp[cli]MCP 官方 Python SDK[cli]额外安装mcp命令行工具。它是 client.py 中ClientSession、StdioServerParameters、stdio_client的来源也是启动服务器所用命令mcp run server.py的来源openaiOpenAI 官方 Python 客户端。示例用它连接 Azure OpenAI / Microsoft Foundry 的 OpenAI 兼容端点完成 function-calling 请求client.pyazure-ai-inferenceAzure AI Inference SDK可用于访问 Foundry 部署的模型示例将其一并装入环境供扩展使用。依赖安装后确保mcp命令可用mcp --help。因为StdioServerParameters的command字段直接指定了可执行文件mcpclient.py若mcp不在 PATH 中客户端将无法拉起服务器进程。五、第 3 步配置 Microsoft Foundry 模型运行示例前必须有一个可用的 LLM 部署。按照父课程 03-llm-client/README.md 的说明在 Microsoft Foundry 中部署一个当前活跃的模型例如gpt-5.1然后设置以下环境变量export AZURE_OPENAI_ENDPOINThttps://resource-name.openai.azure.com export AZURE_OPENAI_API_KEYapi-key export AZURE_OPENAI_DEPLOYMENTgpt-5.1关键点AZURE_OPENAI_DEPLOYMENT是部署名可能与底层模型名不同API 调用时用的是部署名选择模型前建议查阅 Microsoft Foundry 的模型退役计划model retirement schedule避免选中已停用或即将停用的模型client.py 中os.getenv(AZURE_OPENAI_DEPLOYMENT, gpt-5.1)表明即使不设置该变量也会回退到默认值gpt-5.1但AZURE_OPENAI_ENDPOINT与AZURE_OPENAI_API_KEY是硬性要求未设置会直接抛KeyError。六、第 4 步运行示例并解读输出python client.py正常运行时输出与下面的日志结构一致LISTING RESOURCES Resource: (meta, None) Resource: (nextCursor, None) Resource: (resources, []) INFO Processing request of type ListToolsRequest server.py:534 LISTING TOOLS Tool: add Tool {a: {title: A, type: integer}, b: {title: B, type: integer}} CALLING LLM TOOL: {function: {arguments: {a:2,b:20}, name: add}, id: call_BCbyoCcMgq0jDwR8AuAF9QY3, type: function} [05/08/25 21:04:55] INFO Processing request of type CallToolRequest server.py:534 TOOLS result: [TextContent(typetext, text22, annotationsNone)]这段日志完整对应了 client.py 的执行顺序LISTING RESOURCESsession.list_resources()列出服务器资源。示例服务器上注册的是greeting://{name}动态资源因此返回的resources列表为空仅打印分页元数据meta、nextCursorLISTING TOOLSsession.list_tools()列出工具。服务器通过 FastMCP 暴露了一个add(a: int, b: int) - int工具server.py所以这里打印出工具名add及其输入 schema{a: {title: A, type: integer}, b: {title: B, type: integer}}CALLING LLM客户端把提示词Add 2 to 20与转换后的工具定义一起交给 LLMTOOLLLM 返回一个 function callnameadd、arguments{a:2,b:20}TOOLS result客户端通过session.call_tool(add, arguments{a:2,b:20})调用服务器工具得到TextContent(text22)即2 20 22。日志中server.py:534一行来自 MCP SDK 内部的日志输出INFO Processing request of type ListToolsRequest / CallToolRequest表明服务器端确实接收并处理了客户端的协议请求可用于观察 stdio 传输的实时交互。七、源码级原理客户端是如何「指使」LLM 调用工具的7.1 服务器端FastMCP 声明式定义server.py 只有 20 行左右用 FastMCP 声明了两个能力mcp FastMCP(Demo) mcp.tool() def add(a: int, b: int) - int: Add two numbers return a b mcp.resource(greeting://{name}) def get_greeting(name: str) - str: Get a personalized greeting return fHello, {name}!mcp.tool()装饰器会把 Python 函数的类型注解与 docstring 自动转换为 MCP 协议中的inputSchemaJSON Schema这正是客户端list_tools()返回properties的直接来源mcp.resource(greeting://{name})则注册了一个模板化动态资源。这也解释了为什么上一步日志中工具的 schema 里a、b被标记为type: integer。7.2 客户端从「列工具」到「调工具」的完整调用链client.py 的关键链路建立 stdio 连接StdioServerParameters(commandmcp, args[run, server.py])定义子进程启动方式stdio_client()启动服务器进程并返回读写流ClientSession在initialize()后完成协议握手client.py能力枚举list_resources()、list_tools()分别拉取服务器资源与工具client.pyschema 转换convert_to_llm_tool(tool)把 MCP 工具包装成 OpenAI 兼容的 function 定义——type: function、name、description、parameters取自inputSchema[properties]client.pyLLM 决策call_llm(prompt, functions)用 OpenAI 客户端调用chat.completions.create将toolsfunctions传给模型随后解析response_message.tool_calls把模型建议的工具名与参数json.loads解析 arguments收集到functions_to_call列表client.py执行工具遍历functions_to_call逐个session.call_tool(f[name], argumentsf[args])回传服务器执行并打印结果内容client.py。值得注意的细节OpenAI 客户端的base_url由os.environ[AZURE_OPENAI_ENDPOINT].rstrip(/) /openai/v1/拼成client.py即先去除端点尾部的斜杠再追加/openai/v1/这是 Azure OpenAI / Foundry 的 OpenAI 兼容路由约定max_completion_tokens1000限制单次生成的最大 token 数。7.3 同源多语言实现同一套「列出 → 转换 → LLM 决策 → 执行」的流程在仓库中还有 TypeScript、.NET、JavaLangChain4j、Rust 版本TypeScript 方案solution/typescript/src/client.ts.NET 方案solution/dotnet/Program.csJava 方案solution/java/src/main/java/com/microsoft/mcp/sample/client/LangChain4jClient.javaRust 方案solution/rust/src/main.rsJava 与 Rust 版本还展示了进阶做法Java 通过 LangChain4j 的McpToolProvider自动发现与转换工具Rust 通过process_llm_response把工具结果回填消息历史后继续与 LLM 多轮对话直到模型不再请求工具调用。相比之下Python 示例刻意保持最小化便于初学者聚焦理解核心概念。八、常见问题排查mcp: command not foundmcp[cli]未安装成功或虚拟环境未激活重新执行激活与安装步骤KeyError: AZURE_OPENAI_ENDPOINT环境变量未设置。确认已按第五节执行export且在同一终端会话中运行python client.py模型选择错误AZURE_OPENAI_DEPLOYMENT填的是 Foundry 中的部署名而非模型名且需选择仍在退役计划有效期内的活跃模型输出中没有CALLING LLM说明程序在 LLM 调用前异常退出优先检查网络连通性与 API Key 权限Windows 激活失败确认路径是venv\Scripts\activate注意是Scripts而非Scrips或改用venv\Scripts\activate.bat。九、小结与延伸通过这个示例你可以完整掌握「MCP 客户端 LLM」的最小可用实现虚拟环境搭建、依赖安装、Foundry 模型配置、四步调用工作流以及 MCP 工具 schema 与 OpenAI function-calling 格式之间的转换。这正是课程 Key Takeaways 强调的两点——给客户端加 LLM 能极大改善用户体验以及必须把 MCP 服务器的返回格式转换为 LLM 能理解的工具定义。完成本示例后可以继续挑战课程的 Assignment给服务器追加更多工具并用不同的自然语言提示词验证客户端能否动态触发对应工具也可以前往 04-vscode 学习如何在 Visual Studio Code 中消费 MCP 服务器或参考 samples/python 查看更完整的 Python 计算器示例。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐N_m3u8DL-RE 完整指南HLS/DASH/MSS 流媒体一键下载、加密解密与直播录制N_m3u8DL RE 完整指南HLS/DASH/MSS 流媒体一键下载、加密解密与直播录制 N_m3u8DL RE 是一款跨平台命令行流媒体下载工具用于下教程文档人工智能MCP Sampling 实战在 Python 服务端中借助客户端 LLM 生成内容mcp-for-beginners 第 14 课MCP Sampling 实战在 Python 服务端中借助客户端 LLM 生成内容mcp for beginners 第 14 课 本文基于 mcp f教程文档人工智能mcp-for-beginners 实战使用 .NET 构建接入 LLM 的 MCP 客户端mcp for beginners 实战使用 .NET 构建接入 LLM 的 MCP 客户端 在本篇指南中你将基于 mcp for beginners 开源教程文档人工智能上一篇终极Windows游戏分屏指南轻松实现单机多人游戏本地合作下一篇GBKtoUTF-8中文编码转换的终极解决方案彻底告别乱码时代创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表