兰州市做网站的企业有哪些沈阳核工业建设工程总公司网站
兰州市做网站的企业有哪些,沈阳核工业建设工程总公司网站,织梦dedecms女性时尚门户网站模板,成都网站建设推Model Context Protocol#xff08;MCP#xff0c;模型上下文协议#xff09;彻底改变了大语言模型#xff08;LLM#xff09;与外部工具、数据源和服务的交互方式。但传统上#xff0c;从零搭建 MCP 服务端需要处理大量复杂的样板代码#xff0c;还要吃透协议规范。Fas…Model Context ProtocolMCP模型上下文协议彻底改变了大语言模型LLM与外部工具、数据源和服务的交互方式。但传统上从零搭建 MCP 服务端需要处理大量复杂的样板代码还要吃透协议规范。FastMCP 扫清了这一障碍它提供基于装饰器、符合 Python 习惯的框架让开发者用极少代码就能构建生产级 MCP 服务端与客户端。接下来我们将使用 FastMCP 构建 MCP 服务端与客户端。FastMCP 内容完整、自带错误处理对新手和中级开发者都非常友好。环境准备开始本教程前请确保你已准备好• Python 3.10 或更高版本推荐 3.11异步性能更好• pip 或 uv推荐使用 uv 部署 FastMCPCLI 工具也依赖它• 代码编辑器本文使用 VS Code你可任选• 熟悉终端/命令行用于运行 Python 脚本有以下基础会更有帮助• 扎实的 Python 编程知识函数、装饰器、类型注解• 了解 async/await 语法非必需但对高级示例有帮助• 熟悉 JSON 与 REST API 概念• 基本的命令行操作能力在 FastMCP 出现之前开发 MCP 服务端需要你深入理解 MCP JSON-RPC 规范、编写大量协议处理样板代码、手动管理连接与传输、实现复杂的错误处理与校验逻辑。 FastMCP 用直观的装饰器和简洁的 Pythonic API 解决了这些问题让你专注业务逻辑而非协议实现。什么是 Model Context ProtocolMCPMCP 是由 Anthropic 推出的开放标准它为 AI 应用提供了一套通用接口用于安全连接外部工具、数据源与服务。 MCP 统一了 LLM 与外部系统的交互方式就像 Web API 统一了网络服务通信一样。MCP 核心特性•标准化通信基于 JSON-RPC 2.0实现可靠、结构化的消息传输•双向交互支持客户端→服务端请求与服务端→客户端响应•安全性内置认证与授权模式支持•灵活传输兼容任意传输方式stdio、HTTP、WebSocket、SSEMCP 架构服务端与客户端MCP 采用清晰的客户端–服务端架构•MCP 服务端对外暴露能力工具、资源、提示词可理解为专为 LLM 集成设计的后端 API。•MCP 客户端嵌入在 AI 应用如 Claude Desktop、Cursor IDE 或自定义应用中连接 MCP 服务端并使用其资源。MCP 核心组件MCP 服务端主要暴露三类能力•Tools工具LLM 可调用的可执行函数用于查询数据库、调用 API、计算或触发工作流。•Resources资源只读数据客户端可获取并作为上下文使用如文件内容、配置数据、动态内容。•Prompts提示词可复用的消息模板用于引导 LLM 行为为多步骤操作或专业推理提供统一指令。什么是 FastMCPFastMCP 是一个高层 Python 框架用于简化 MCP 服务端与客户端的开发。它的设计目标是降低开发成本主要特点•基于装饰器的 API使用mcp.tool、mcp.resource、mcp.prompt消除样板代码•类型安全完整的类型注解与校验基于 Python 类型系统•异步支持现代化 async Python支持高性能操作•多传输协议支持 stdio、HTTP、WebSocket、SSE•内置测试无需子进程即可轻松测试客户端–服务端交互•生产就绪自带错误处理、日志、配置等生产级功能FastMCP 设计理念FastMCP 遵循三大核心原则高层抽象更少代码更快开发简洁易用极少样板代码专注功能而非协议Pythonic符合 Python 习惯对 Python 开发者友好安装依赖推荐使用 uv 安装 FastMCP 及依赖。uv pip install fastmcp如果没有安装 uv先安装pip install uv也可以直接用 pip 安装pip install fastmcp验证安装python -c from fastmcp import FastMCP; print(FastMCP installed successfully)构建 MCP 服务端我们将创建一个实用的 MCP 服务端演示工具、资源、提示词三大能力。以计算器服务端为例提供数学运算、配置资源与指令提示。步骤 1项目结构初始化创建项目目录并进入mkdir fastmcp-calculatorcd fastmcp-calculator使用 uv 初始化项目指定 Python 3.11uv init --python 3.11步骤 2编写 MCP 服务端在项目中创建calculator_server.py代码如下import loggingimport sysfrom typing import Dictfrom fastmcp import FastMCP# 日志输出到 stderr对 MCP 协议完整性至关重要logging.basicConfig( levellogging.DEBUG, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, streamsys.stderr)logger logging.getLogger(__name__)# 创建 FastMCP 服务端实例mcp FastMCP(nameCalculatorServer)服务端导入 FastMCP 并将日志定向到 stderr。MCP 协议要求除协议消息外所有输出必须走 stderr避免破坏通信。FastMCP(nameCalculatorServer)会自动处理所有协议管理。接下来定义工具mcp.tooldefadd(a: float, b: float) - float: 两数相加 Args: a: 第一个数 b: 第二个数 Returns: a 与 b 的和 try: result a b logger.info(fAddition performed: {a} {b} {result}) return result except TypeError as e: logger.error(fType error in add: {e}) raise ValueError(fInvalid input types: {e})mcp.tooldefsubtract(a: float, b: float) - float: a 减 b Args: a: 被减数 b: 减数 Returns: a 与 b 的差 try: result a - b logger.info(fSubtraction performed: {a} - {b} {result}) return result except TypeError as e: logger.error(fType error in subtract: {e}) raise ValueError(fInvalid input types: {e})mcp.tooldefmultiply(a: float, b: float) - float: 两数相乘 Args: a: 第一个数 b: 第二个数 Returns: a 与 b 的积 try: result a * b logger.info(fMultiplication performed: {a} * {b} {result}) return result except TypeError as e: logger.error(fType error in multiply: {e}) raise ValueError(fInvalid input types: {e})mcp.tooldefdivide(a: float, b: float) - float: a 除以 b Args: a: 被除数 b: 除数 Returns: 商 Raises: ValueError: 除零时抛出 try: if b 0: logger.warning(fDivision by zero attempted: {a} / {b}) raise ValueError(Cannot divide by zero) result a / b logger.info(fDivision performed: {a} / {b} {result}) return result except (TypeError, ZeroDivisionError) as e: logger.error(fError in divide: {e}) raise ValueError(fDivision error: {e})四个被mcp.tool装饰的函数对外暴露数学运算。每个工具都包含• 参数与返回值类型注解• 完整文档字符串MCP 会将其作为工具描述• try-except 错误处理• 日志记录• 输入校验接下来定义资源mcp.resource(config://calculator/settings)defget_settings() - Dict: 提供计算器配置与可用操作 logger.debug(Fetching calculator settings) return { version: 1.0.0, operations: [add, subtract, multiply, divide], precision: IEEE 754 double precision, max_value: 1.7976931348623157e308, min_value: -1.7976931348623157e308, supports_negative: True, supports_decimals: True }mcp.resource(docs://calculator/guide)defget_guide() - str: 计算器使用指南 logger.debug(Retrieving calculator guide) guide 1. **add(a, b)**: 返回 a b 示例add(5, 3) 82. **subtract(a, b)**: 返回 a - b 示例subtract(10, 4) 63. **multiply(a, b)**: 返回 a * b 示例multiply(7, 6) 424. **divide(a, b)**: 返回 a / b 示例divide(20, 4) 5.0## 错误处理- 除零会抛出 ValueError- 非数值输入会抛出 ValueError- 所有输入必须是合法数字int / float## 精度说明计算器使用 IEEE 754 双精度浮点数运算部分运算可能存在微小舍入误差。 return guide两个被mcp.resource装饰的函数提供静态/动态数据•config://calculator/settings返回计算器元信息•docs://calculator/guide返回格式化使用指南资源 URI 遵循约定类型://分类/资源名。接下来定义提示词mcp.promptdef calculate_expression(expression: str) - str: 生成数学表达式计算指令 Args: expression: 待计算的数学表达式 Returns: 指导 LLM 分步计算的提示词 logger.debug(fGenerating calculation prompt for: {expression}) prompt f请分步计算以下数学表达式表达式{expression}计算步骤1. 将表达式拆分为单个运算2. 使用对应计算器工具完成每一步3. 遵循运算优先级括号 → 乘除 → 加减4. 展示所有中间步骤5. 给出最终结果可用工具add、subtract、multiply、divide.strip() return prompt最后添加服务启动代码if __name__ __main__: logger.info(Starting Calculator MCP Server...) try: # 使用 stdio 传输Claude Desktop 默认 mcp.run(transportstdio) except KeyboardInterrupt: logger.info(Server interrupted by user) sys.exit(0) except Exception as e: logger.error(fFatal error: {e}, exc_infoTrue) sys.exit(1)mcp.prompt用于创建指令模板引导 LLM 完成复杂任务。 本文包含的错误处理最佳实践• 精准捕获异常TypeError、ZeroDivisionError• 对用户友好的错误信息• 详细日志便于调试• 优雅的异常传播步骤 3编写 MCP 客户端创建calculator_client.py演示如何与上面的计算器服务端交互import asyncioimport loggingimport sysfrom typing importAnyfrom fastmcp import Client, FastMCPlogging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, streamsys.stderr)logger logging.getLogger(__name__)asyncdefmain(): from calculator_server import mcp as server logger.info(Initializing Calculator Client...) try: asyncwith Client(server) as client: logger.info(✓ 已连接到计算器服务端) # 1. 发现服务端能力 print(\n *60) print(1. 发现服务端能力) print(*60) tools await client.list_tools() print(f\n可用工具{len(tools)}) for t in tools: print(f • {t.name}: {t.description}) resources await client.list_resources() print(f\n可用资源{len(resources)}) for r in resources: print(f • {r.uri}: {r.name or r.uri}) prompts await client.list_prompts() print(f\n可用提示词{len(prompts)}) for p in prompts: print(f • {p.name}: {p.description}) # 2. 调用工具 print(\n *60) print(2. 调用工具) print(*60) print(\n测试 115 27) res await client.call_tool(add, {a: 15, b: 27}) val extract_tool_result(res) print(f 结果15 27 {val}) print(\n测试 2100 / 5) res await client.call_tool(divide, {a: 100, b: 5}) val extract_tool_result(res) print(f 结果100 / 5 {val}) print(\n测试 3除零错误异常处理) try: res await client.call_tool(divide, {a: 10, b: 0}) print(f 意外成功{res}) except Exception as e: print(f ✓ 正确捕获错误{str(e)}) # 3. 读取资源 print(\n *60) print(3. 读取资源) print(*60) print(\n获取计算器配置...) settings await client.read_resource(config://calculator/settings) print(f 配置信息{settings[0].text}) print(\n获取计算器指南...) guide await client.read_resource(docs://calculator/guide) print(f 指南预览{guide[0].text[:200]}...) # 4. 链式调用 print(\n *60) print(4. 多步运算链式调用) print(*60) print(\n计算(10 5) * 3 - 7) print( 步骤 110 5) step1 extract_tool_result(await client.call_tool(add, {a: 10, b: 5})) print(f 结果{step1}) print( 步骤 215 * 3) step2 extract_tool_result(await client.call_tool(multiply, {a: step1, b: 3})) print(f 结果{step2}) print( 步骤 345 - 7) final extract_tool_result(await client.call_tool(subtract, {a: step2, b: 7})) print(f 最终结果{final}) # 5. 使用提示词模板 print(\n *60) print(5. 使用提示词模板) print(*60) expr 25 * 4 10 / 2 print(f\n表达式{expr}) prompt_res await client.get_prompt( calculate_expression, {expression: expr} ) print(f 提示词模板\n{prompt_res.messages[0].content.text}) logger.info(✓ 客户端运行完成) except Exception as e: logger.error(f客户端错误{e}, exc_infoTrue) sys.exit(1)添加结果提取工具函数def extract_tool_result(response: Any) - Any: 从工具响应中解析真实结果 try: ifhasattr(response, content) and response.content: content response.content[0] ifhasattr(content, text) and content.text isnotNone: import json txt content.text try: parsed json.loads(txt) ifisinstance(parsed, dict) andresultin parsed: return parsed[result] return parsed except json.JSONDecodeError: try: returnfloat(txt) if.in txt elseint(txt) except: return txt ifhasattr(content, json): import json try: j content.json() ifcallable(content.json) else content.json parsed json.loads(j) ifisinstance(j, str) else j ifisinstance(parsed, dict): res parsed.get(result) or parsed.get(text) or parsed ifisinstance(res, str): try: returnfloat(res) if.in res elseint(res) except: return res return res return parsed except: pass return response except Exception as e: logger.warning(f无法解析结果{e}) return responseif __name__ __main__: logger.info(Calculator Client Starting...) asyncio.run(main())客户端使用async with Client(server)安全管理连接自动处理建立与清理。核心方法说明•await client.list_tools()获取所有工具元信息•await client.list_resources()发现可用资源•await client.list_prompts()发现可用提示词模板•await client.call_tool()调用工具传入工具名与参数字典•extract_tool_result()解开 MCP 响应包装拿到真实值链式调用演示了如何将一个工具的输出作为下一个工具的输入实现复杂计算。 错误处理会捕获工具异常如除零并优雅记录不会崩溃。步骤 4运行服务端与客户端打开两个终端终端 1 启动服务端python calculator_server.py终端 2 运行客户端python calculator_client.py你将看到完整的运行日志与输出。FastMCP 高级模式计算器示例只用到基础逻辑FastMCP 可支撑复杂生产场景。扩展时可使用•异步操作对数据库、API 等 I/O 密集型工具使用async def•动态资源资源支持参数如resource://users/{user_id}动态获取指定数据•复杂类型校验使用 Pydantic 或复杂类型注解确保 LLM 传入格式严格匹配•自定义传输除 stdio 外还支持 SSE 等用于 Web 集成与自定义 UI写在最后FastMCP 在复杂的 MCP 协议与 Python 开发者期望的简洁装饰器开发体验之间架起了桥梁。它去掉了 JSON-RPC 2.0 与手动传输管理的样板代码让你专注真正重要的事情构建让 LLM 更强大的工具。无论你是开发简单工具还是复杂的数据编排层FastMCP 都提供最“Pythonic”的路径帮你快速搭建生产级 Agentic 生态系统。想入门 AI 大模型却找不到清晰方向备考大厂 AI 岗还在四处搜集零散资料别再浪费时间啦2026 年AI 大模型全套学习资料已整理完毕从学习路线到面试真题从工具教程到行业报告一站式覆盖你的所有需求现在全部免费分享扫码免费领取全部内容一、学习必备100本大模型电子书26 份行业报告 600 套技术PPT帮你看透 AI 趋势想了解大模型的行业动态、商业落地案例大模型电子书这份资料帮你站在 “行业高度” 学 AI1. 100本大模型方向电子书2. 26 份行业研究报告覆盖多领域实践与趋势报告包含阿里、DeepSeek 等权威机构发布的核心内容涵盖职业趋势《AI 职业趋势报告》《中国 AI 人才粮仓模型解析》商业落地《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》领域细分《AGI 在金融领域的应用报告》《AI GC 实践案例集》行业监测《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。3. 600套技术大会 PPT听行业大咖讲实战PPT 整理自 2024-2025 年热门技术大会包含百度、腾讯、字节等企业的一线实践安全方向《端侧大模型的安全建设》《大模型驱动安全升级腾讯代码安全实践》产品与创新《大模型产品如何创新与创收》《AI 时代的新范式构建 AI 产品》多模态与 Agent《Step-Video 开源模型视频生成进展》《Agentic RAG 的现在与未来》工程落地《从原型到生产AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。二、求职必看大厂 AI 岗面试 “弹药库”300 真题 107 道面经直接抱走想冲字节、腾讯、阿里、蔚来等大厂 AI 岗这份面试资料帮你提前 “押题”拒绝临场慌1. 107 道大厂面经覆盖 Prompt、RAG、大模型应用工程师等热门岗位面经整理自 2021-2025 年真实面试场景包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题每道题都附带思路解析2. 102 道 AI 大模型真题直击大模型核心考点针对大模型专属考题从概念到实践全面覆盖帮你理清底层逻辑3. 97 道 LLMs 真题聚焦大型语言模型高频问题专门拆解 LLMs 的核心痛点与解决方案比如让很多人头疼的 “复读机问题”三、路线必明 AI 大模型学习路线图1 张图理清核心内容刚接触 AI 大模型不知道该从哪学起这份「AI大模型 学习路线图」直接帮你划重点不用再盲目摸索路线图涵盖 5 大核心板块从基础到进阶层层递进一步步带你从入门到进阶从理论到实战。L1阶段:启航篇丨极速破界AI新时代L1阶段了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理、关键技术以及大模型应用场景。L2阶段攻坚篇丨RAG开发实战工坊L2阶段AI大模型RAG应用开发工程主要学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3阶段跃迁篇丨Agent智能体架构设计L3阶段大模型Agent应用架构进阶实现主要学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造Agent智能体。L4阶段精进篇丨模型微调与私有化部署L4阶段大模型的微调和私有化部署更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。L5阶段专题集丨特训篇 【录播课】四、资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容2026 年想抓住 AI 大模型的风口别犹豫这份免费资料就是你的 “起跑线”