一文读懂如何使用MCP创建服务器
如果你对MCP(模型上下文协议)一窍不通,在阅读本篇文章之前(在获得对MCP深度认识之前),你可以理解为学习MCP就是在学习一个python工具库mcp,类似于其它python工具库一样,如numpy、sys、opencv等,你需要先安装mcp,学习mcp的两个核心功能,一个是使用mcp来创建mcp 服务器,另一个是使用mcp来创建mcp 客户端。请注意,请注意,请注意,在开源社区中,已经有很多mcp服务器和mcp客户端可用了,可以按需选择;当然,如果你最后发现没有你所需要的mcp服务器或者mcp客户端,你再进行自己创建
所以参考资料来源于MCP官方介绍文档
文章目录
- 一、为什么需要MCP?
- 二、什么是MCP?
- 三、开发者如何开发MCP服务器?
- 现成的MCP servers
- 开发自己的MCP servers
- 我们将要构建的内容
- 构建你的服务器
- 配置环境
- 导入包并设置实例
- 辅助函数
- 实施工具执行
- 运行服务器
- 使用 Claude 桌面软件客户端 测试服务器
- 添加服务
- 判断服务是否添加成功
一、为什么需要MCP?
设想一个场景,你现在有很多工具,需要调用这些工具,并且将工具响应结果拼接到提示词中,将提示词输入给大模型,大模型返回结果。很明显,普通的python API完全可以实现这个流程。但是
,几乎每个工具,你都需要写一个特定调用大模型的上述流程(因为每个工具的返回结果不同)。这就很低效。
现在有一个文件系统服务,该服务提供以下工具:移动文件、复制文件、删除文件、新建文件、文件重命名。mcp的出现可以统一不同工具和大模型的交互方式。(如何统一交互方式请耐心往下阅读)
现在还出现了另一个服务叫浏览器服务,该服务提供以下工具:打开网页、下载文件。mcp的出现可以统一不同服务不同工具和大模型的交互方式。
现在还有一个服务叫PostgreSQL 服务,该服务提供以下工具:查询数据、删除数据、新增数据、更改数据。mvp的出现可以统一不同服务不同数据源和大模型的交互方式
说得概括性一些:
数据与工具本身是客观存在的,只不过我们希望将数据连接到模型的这个环节可以更智能更统一。Anthropic公司 基于这样的痛点设计了 MCP,充当 AI 模型的"万能转接头",让 LLM 能轻松的获取数据或者调用工具。
二、什么是MCP?
MCP的定义很简单:
MCP 是一个开放协议,它标准化了应用程序如何向 LLM 提供上下文。
如何理解这个概念呢?官方给出了USB-C的例子,下面以电脑连接硬盘为例子进行类比。
电脑可以通过电脑上面的USB-C接口、USB-C线去实现连接硬盘、读取数据的功能。这里的电脑就是MCP中的mcp 客户端的概念,硬盘就是mcp 服务器的概念。有些硬盘只能支持USB-B接口,那么你就需要一个接口转换器,将USB-B转换成USB-C接口才能让硬盘和电脑进行连接。最后的结果就是,如果你想要通过USB-C接口来实现硬盘、电脑的连接,那么硬盘和电脑都必须有USB-C接口。USB-C接口统一了USB-A、USB-B、HDML等所有电脑接口。
说得概括性一些:
把 MCP 想象成人工智能应用的 USB-C 端口。就像 USB-C 提供了将设备连接到各种外设和配件的标准化方式一样,MCP 也提供了将人工智能模型连接到不同数据源和工具的标准化方式。
MCP 可帮助您在 LLM 的基础上构建Agent和复杂的工作流程。LLM 经常需要与数据和工具集成,而 MCP 可提供以下功能:
- 生态健全:预先建立的mcp服务器可以不断新增,大模型可以通过MCP简单、方便进行调用
- 大模型统一性:就算mcp 服务器不断新增和扩展,大模型提供商和类型可以随意切换, LLM 提供商和供应商之间切换的灵活性非常好
- 数据安全:mcp服务器的敏感数据保留在本地,是保护基础大模型应用架构内数据安全的最佳实践
三、开发者如何开发MCP服务器?
现成的MCP servers
并且官方也提供了非常多现成的 MCP Servers,你只需要选择你希望接入的工具,然后接入即可。现成可用的MCP servers如下:
1. awesome-mcp-servers
2. MCP Servers
3.MCP官方提供的servers
开发自己的MCP servers
开始构建您自己的服务器,以便在 Claude 桌面软件 和 其他客户端中使用。
在本教程中,我们将构建一个简单的 MCP 天气服务器,并将其连接到一个主机,主机就是Claude桌面软件。我们将从基本设置开始,然后逐步处理更复杂的应用场景。
我们将要构建的内容
许多 LLMs 目前没有获取天气预报和严重天气警报的能力。让我们使用 MCP 来解决这个问题!
我们将构建一个服务器,它暴露两个工具:get-alerts 和 get-forecast。然后我们将服务器连接到一个 MCP 主机(在这种示例中,MCP主机是Claude 桌面软件)
请注意!!!
服务器可以连接到任何客户端。我们在这里选择了 Claude桌面软件 以简化操作。如何构建MCP 客户端,请参考下节内容
最终的效果图如下,跟claude大模型咨询天气情况,大模型可以调用自定义的天气服务器的工具进行回答。
MCP 服务器可以提供三种主要功能:
- 资源 :可以被客户端读取的类似文件的数据(如 API 响应或文件内容)
- 工具 :可以被 LLM 调用的功能(需用户批准)
- 提示 : 预写好的模板,帮助用户完成特定任务
这篇教程主要将专注于工具。
构建你的服务器
需要提前安装好uv、python3.10、Python MCP SDK 1.2.0。这个服务器默认在Linux服务器上面搭建
让我们开始构建我们的天气服务器!完整代码如下,跟官网不一样,下面的代码我是在官方代码的基础上添加了中文注释
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: Junius
@Email: see619055@gmail.com
@time: 2025/5/12 17:54
@file: weather
@project: OpenAppAI
@describe: TODO
"""
from typing import Any # 导入 Any 类型,用于灵活的类型注解
import httpx # 导入 httpx 库,用于发起异步 HTTP 请求
from mcp.server.fastmcp import FastMCP # 导入 FastMCP 框架,用于构建 MCP 服务器# 初始化一个名为 "weather" 的 FastMCP 服务器实例
mcp = FastMCP("weather")# 定义 NWS(美国国家气象局)API 的基础 URL
NWS_API_BASE = "https://api.weather.gov"
# 设置 User-Agent 请求头,标识客户端身份
USER_AGENT = "weather-app/1.0"async def make_nws_request(url: str) -> dict[str, Any] | None:"""向 NWS API 发起请求,并进行错误处理"""# 设置请求头,包含 User-Agent 和 Accept 内容类型headers = {"User-Agent": USER_AGENT,"Accept": "application/geo+json"}# 使用 httpx 异步客户端发起请求async with httpx.AsyncClient() as client:try:# 向指定 URL 发起 GET 请求,设置超时时间为 30 秒response = await client.get(url, headers=headers, timeout=30.0)# 如果响应状态码表示错误(如 4xx、5xx),抛出异常response.raise_for_status()# 返回解析后的 JSON 数据return response.json()except Exception:# 如果发生任何异常,返回 None 表示请求失败return Nonedef format_alert(feature: dict) -> str:"""将警报信息格式化为可读性强的字符串"""# 提取 feature 字典中的 'properties' 部分props = feature["properties"]# 将警报信息以结构化文本形式返回,各字段使用 get 方法避免 KeyErrorreturn f"""
Event: {props.get('event', 'Unknown')} # 警报事件名称,若无则显示 Unknown
Area: {props.get('areaDesc', 'Unknown')} # 警报影响区域描述,若无则显示 Unknown
Severity: {props.get('severity', 'Unknown')} # 警报严重程度,若无则显示 Unknown
Description: {props.get('description', 'No description available')} # 警报描述,若无则提示无描述
Instructions: {props.get('instruction', 'No specific instructions provided')} # 警报应对建议,若无则提示无指令
"""# 使用 @mcp.tool() 装饰器注册 get_alerts 为 MCP 工具,用于获取天气警报
@mcp.tool()
async def get_alerts(state: str) -> str:"""获取某个美国州的天气警报。参数:state: 两位字母的美国州代码(例如 CA, NY)"""# 构造请求 URL,用于根据州代码获取警报信息url = f"{NWS_API_BASE}/alerts/active/area/{state}"# 调用 make_nws_request 异步发起 HTTP 请求获取数据data = await make_nws_request(url)# 如果返回的数据为空或不包含 features 字段,表示无法获取警报信息if not data or "features" not in data:return "Unable to fetch alerts or no alerts found."# 如果 features 是空列表,表示当前该州没有活动警报if not data["features"]:return "No active alerts for this state."# 遍历所有 feature 并使用 format_alert 格式化警报信息alerts = [format_alert(feature) for feature in data["features"]]# 将多个警报信息用 "---" 分隔后拼接成字符串返回return "\n---\n".join(alerts)# 使用 @mcp.tool() 装饰器注册 get_forecast 为 MCP 工具,用于获取天气预报
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:"""获取某个位置的天气预报。参数:latitude: 地理纬度longitude: 地理经度"""# 第一步:构造 URL 获取点位信息(包含预报网格链接)points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"# 发起异步请求获取点位数据points_data = await make_nws_request(points_url)# 如果点位数据为空,返回错误提示if not points_data:return "Unable to fetch forecast data for this location."# 从点位数据中提取详细的天气预报 URLforecast_url = points_data["properties"]["forecast"]# 发起异步请求获取具体的天气预报数据forecast_data = await make_nws_request(forecast_url)# 如果详细预报数据为空,返回错误提示if not forecast_data:return "Unable to fetch detailed forecast."# 提取各时间段的预报信息periods = forecast_data["properties"]["periods"]forecasts = []# 遍历前5个时间段,格式化输出天气信息for period in periods[:5]: # 只显示最近5个时间段forecast = f"""
{period['name']}: # 时间段名称(如 Tonight, Thursday)
Temperature: {period['temperature']}°{period['temperatureUnit']} # 温度及单位
Wind: {period['windSpeed']} {period['windDirection']} # 风速和风向
Forecast: {period['detailedForecast']} # 详细预报描述
"""forecasts.append(forecast) # 将每个时间段的预报添加到列表# 将多个时间段的预报信息用 "---" 分隔后拼接成字符串返回return "\n---\n".join(forecasts)# 如果该文件作为主程序运行,则执行以下代码
if __name__ == "__main__":# 初始化并运行 FastMCP 服务器,使用标准输入输出(stdio)作为通信协议mcp.run(transport='stdio')
配置环境
现在,让我们创建并设置我们的项目:
# 使用 uv 工具初始化一个名为 weather 的新项目目录。这会创建一个包含基础 pyproject.toml 文件的新文件夹,用于管理 Python 项目。
uv init weather
cd weather# 使用 uv 创建一个隔离的 Python 虚拟环境(virtual environment),以便该项目有独立的依赖包,不会与其他项目冲突。
uv venv
# 激活虚拟环境
source .venv/bin/activate# "mcp[cli]":表示安装 mcp 包,并额外安装其 CLI(命令行接口)相关依赖
# httpx:一个支持异步请求的 HTTP 客户端库,用于发起网络请求。
uv add "mcp[cli]" httpx# 创建服务器代码文件
touch weather.py
导入包并设置实例
将以下内容添加到 weather.py
的顶部: python weather.py:
from typing import Any # 导入 Any 类型,用于灵活的类型注解
import httpx # 导入 httpx 库,用于发起异步 HTTP 请求
from mcp.server.fastmcp import FastMCP # 导入 FastMCP 框架,用于构建 MCP 服务器# 初始化一个名为 "weather" 的 FastMCP 服务器实例
mcp = FastMCP("weather")# 定义 NWS(美国国家气象局)API 的基础 URL
NWS_API_BASE = "https://api.weather.gov"
# 设置 User-Agent 请求头,标识客户端身份
USER_AGENT = "weather-app/1.0"
FastMCP 类使用 Python 类型提示和文档字符串自动生成工具定义,使其容易创建和维护 MCP 工具。
辅助函数
接下来,让我们添加用于查询和格式化来自国家气象服务 API 的数据的辅助函数:
async def make_nws_request(url: str) -> dict[str, Any] | None:"""向 NWS API 发起请求,并进行错误处理"""# 设置请求头,包含 User-Agent 和 Accept 内容类型headers = {"User-Agent": USER_AGENT,"Accept": "application/geo+json"}# 使用 httpx 异步客户端发起请求async with httpx.AsyncClient() as client:try:# 向指定 URL 发起 GET 请求,设置超时时间为 30 秒response = await client.get(url, headers=headers, timeout=30.0)# 如果响应状态码表示错误(如 4xx、5xx),抛出异常response.raise_for_status()# 返回解析后的 JSON 数据return response.json()except Exception:# 如果发生任何异常,返回 None 表示请求失败return Nonedef format_alert(feature: dict) -> str:"""将警报信息格式化为可读性强的字符串"""# 提取 feature 字典中的 'properties' 部分props = feature["properties"]# 将警报信息以结构化文本形式返回,各字段使用 get 方法避免 KeyErrorreturn f"""
Event: {props.get('event', 'Unknown')} # 警报事件名称,若无则显示 Unknown
Area: {props.get('areaDesc', 'Unknown')} # 警报影响区域描述,若无则显示 Unknown
Severity: {props.get('severity', 'Unknown')} # 警报严重程度,若无则显示 Unknown
Description: {props.get('description', 'No description available')} # 警报描述,若无则提示无描述
Instructions: {props.get('instruction', 'No specific instructions provided')} # 警报应对建议,若无则提示无指令
"""
实施工具执行
添加工具执行处理器,工具执行处理器负责实际执行每个工具的逻辑。使用@mcp.tool()进行装饰的异步函数就是工具执行处理器。
@mcp.tool()
async def get_alerts(state: str) -> str:"""获取某个美国州的天气警报。参数:state: 两位字母的美国州代码(例如 CA, NY)"""# 构造请求 URL,用于根据州代码获取警报信息url = f"{NWS_API_BASE}/alerts/active/area/{state}"# 调用 make_nws_request 异步发起 HTTP 请求获取数据data = await make_nws_request(url)# 如果返回的数据为空或不包含 features 字段,表示无法获取警报信息if not data or "features" not in data:return "Unable to fetch alerts or no alerts found."# 如果 features 是空列表,表示当前该州没有活动警报if not data["features"]:return "No active alerts for this state."# 遍历所有 feature 并使用 format_alert 格式化警报信息alerts = [format_alert(feature) for feature in data["features"]]# 将多个警报信息用 "---" 分隔后拼接成字符串返回return "\n---\n".join(alerts)# 使用 @mcp.tool() 装饰器注册 get_forecast 为 MCP 工具,用于获取天气预报
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:"""获取某个位置的天气预报。参数:latitude: 地理纬度longitude: 地理经度"""# 第一步:构造 URL 获取点位信息(包含预报网格链接)points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"# 发起异步请求获取点位数据points_data = await make_nws_request(points_url)# 如果点位数据为空,返回错误提示if not points_data:return "Unable to fetch forecast data for this location."# 从点位数据中提取详细的天气预报 URLforecast_url = points_data["properties"]["forecast"]# 发起异步请求获取具体的天气预报数据forecast_data = await make_nws_request(forecast_url)# 如果详细预报数据为空,返回错误提示if not forecast_data:return "Unable to fetch detailed forecast."# 提取各时间段的预报信息periods = forecast_data["properties"]["periods"]forecasts = []# 遍历前5个时间段,格式化输出天气信息for period in periods[:5]: # 只显示最近5个时间段forecast = f"""
{period['name']}: # 时间段名称(如 Tonight, Thursday)
Temperature: {period['temperature']}°{period['temperatureUnit']} # 温度及单位
Wind: {period['windSpeed']} {period['windDirection']} # 风速和风向
Forecast: {period['detailedForecast']} # 详细预报描述
"""forecasts.append(forecast) # 将每个时间段的预报添加到列表# 将多个时间段的预报信息用 "---" 分隔后拼接成字符串返回return "\n---\n".join(forecasts)
运行服务器
最后,让我们初始化并运行服务器:
# 如果该文件作为主程序运行,则执行以下代码
if __name__ == "__main__":# 初始化并运行 FastMCP 服务器,使用标准输入输出(stdio)作为通信协议mcp.run(transport='stdio')
你的服务器已经完成!运行 uv run weather.py 确认一切正常。
现在从现有的 MCP 主机 Claude for Desktop 测试你的服务器。
使用 Claude 桌面软件客户端 测试服务器
Claude for Desktop 目前尚未在 Linux 上提供。Linux 用户可以继续阅读 构建客户端 教程,以构建一个连接到我们刚刚构建的服务器的 MCP 客户端。
你需要安装好 Claude 桌面软件,请从官网下载并安装最新版。
添加服务
我们需要为想要使用的任意 MCP 服务器配置 Claude for Desktop。为此,请在文本编辑器中打开您的 Claude for Desktop App 配置文件 ~/Library/Application Support/Claude/claude_desktop_config.json(软件安装在苹果系统中的路径) 。如果文件不存在,请确保创建该文件。
~/AppData\Claude\claude_desktop_config.json(window系统的配置文件路径)
然后您将在 mcpServers 键中添加您的服务器。只有在至少配置了一个服务器的情况下,MCP UI 元素才会在 Claude for Desktop 中显示。
在这种情况下,我们将像这样添加我们的单个天气服务器:
苹果系统下的配置
{"mcpServers": {"weather": {"command": "uv","args": ["--directory","/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather","run","weather.py"]}}
}
window系统下的配置
{"mcpServers": {"weather": {"command": "uv","args": ["--directory","C:\\ABSOLUTE\\PATH\\TO\\PARENT\\FOLDER\\weather","run","weather.py"]}}
}
您可能需要在 command 字段中输入 uv 可执行文件的完整路径。您可以通过在 MacOS/Linux 上运行 which uv 或在 Windows 上运行 where uv 来获取它。确保你传递的是服务器的绝对路径。
这告诉 Claude桌面软件:
- 有一个名为“weather”的 MCP 服务器
- 通过运行 uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/weather run weather.py 来启动它。
保存文件,并重启 Claude 桌面软件。
判断服务是否添加成功
让我们确保 Desktop 版本的 Claude 能够识别我们在 weather 服务器中暴露的两个工具。你可以通过查找锤子 图标来确认这一点。
点击锤子图标后,你应该看到列出的两种工具:
如果锤子图标已出现,您现在可以通过在 Claude for Desktop 中运行以下命令来测试您的服务器:
- What’s the weather in Sacramento?
- What are the active weather alerts in Texas?
下一期讲解:如何构建MCP客户端,欢迎关注~
相关文章:
一文读懂如何使用MCP创建服务器
如果你对MCP(模型上下文协议)一窍不通,在阅读本篇文章之前(在获得对MCP深度认识之前),你可以理解为学习MCP就是在学习一个python工具库mcp,类似于其它python工具库一样,如numpy、sys…...
telnetlib源码深入解析
telnetlib 是 Python 标准库中实现 Telnet 客户端协议的模块,其核心是 Telnet 类。以下从 协议实现、核心代码逻辑 和 关键设计思想 三个维度深入解析其源码。 一、Telnet 协议基础 Telnet 协议基于 明文传输,通过 IAC(Interpret As Command…...
PID与模糊PID系统设计——基于模糊PID的水下航行器运动控制研究Simulink仿真(包含设计报告)
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换) 针对水下航行器控制系统参数变化和海洋环境干扰等影响,研究水下航行器运…...
GPU SIMT架构的极限压榨:PTX汇编指令级并行优化实践
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、SIMT架构的调度哲学与寄存器平衡艺术 1.1 Warp Scheduler的调度策略解构 在NVIDIA GPU…...
spark的处理过程-转换算子和行动算子
(一)RDD的处理过程 【老师讲授,画图】 Spark使用Scala语言实现了RDD的API,程序开发者可以通过调用API对RDD进行操作处理。RDD的处理过程如图所示; RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD…...
设计杂谈-工厂模式
“工厂”模式在各种框架中非常常见,包括 MyBatis,它是一种创建对象的设计模式。使用工厂模式有很多好处,尤其是在复杂的框架中,它可以带来更好的灵活性、可维护性和可配置性。 让我们以 MyBatis 为例,来理解工厂模式及…...
职坐标IT培训:互联网行业核心技能精讲
在互联网行业高速迭代的今天,掌握全链路核心技能已成为职业发展的关键突破口。职坐标IT培训聚焦行业需求,系统拆解从需求分析到系统部署的完整能力模型,助力从业者构建多维竞争力。无论是产品岗的用户调研与原型设计,还是技术岗的…...
IBM BAW(原BPM升级版)使用教程第十二讲
续前篇! 一、用户界面:Process Portal和Workplace Process Portal 和 Workplace 都是 IBM Business Automation Workflow (BAW) 中提供的 Web 界面,供用户查看和处理流程任务、监控流程状态等,但它们之间有着不同的历史背景和功…...
2025 年福建省职业院校技能大赛网络建设与运维赛项Linux赛题解析
准备环境:系统安装及网络配置 [!TIP] 接下来将完全按照国赛评分标准进行,过程中需要掌握基础的Linux命令以及理解Linux系统,建议大家在做题前将Linux基础命令熟练运用 网络建设与运维赛项详细教程请联系主页一、X86架构计算机操作系统安装…...
Netty在Java网络编程中的应用:实现高性能的异步通信
Netty在Java网络编程中的应用:实现高性能的异步通信 在当今的分布式系统中,高效、稳定的网络通信是保障系统运行的关键。Java作为一门广泛使用的编程语言,提供了多种网络编程方式,但传统的Socket编程在面对高并发场景时往往显得力…...
[高阶数据结构]二叉树经典面试题
二叉树经典面试题:: 目录 二叉树经典面试题:: 1.根据二叉树创建字符串 2.二叉树的层序遍历 3.二叉树的层序遍历II 4.二叉树的最近公共祖先 5.二叉树与双向链表 6.从前序与中序序列构造二叉树 7.从中序与后序序列构造二叉…...
第一章 应急响应-webshell查杀
远程连接一下 我们先查找一下网站的目录,到网站页面,可以看到有很多php文件,这样我们可以大致确定黑客上传的应该是php木马 通过ls -a 查看一下隐藏文件 现在我们查看一下各个php文件的内容 可以看到shell.php是一句话木马,但没…...
残差网络(ResNet)
残差网络(Residual Network, ResNet)介绍 残差网络(ResNet)是由微软研究院的何恺明(Kai Ming He)等人于2015年提出的深度卷积神经网络架构,其核心思想是通过残差连接(Skip Connectio…...
全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
护理巡视是保障患者安全与护理质量的关键环节。现有特级、一、二、三级护理虽有明确巡视要求,但从护士手工填写记录表,均存在诸多弊端。或因需人工操作易遗忘、无法准确界定巡视人员,或因设备携带不便、需额外充电、布网复杂等,导…...
【数据结构入门训练DAY-32】LETTERS
本文介绍了一个关于使用深度优先搜索(DFS)解决字母矩阵问题的训练内容。题目要求在一个RS的大写字母矩阵中,从左上角开始移动,可以上下左右四个方向移动,但不能重复经过相同的字母,目标是找出最多能经过的不…...
Linux笔记---信号(上)
1. 信号的概念 Linux下的信号机制是一种进程间通信(IPC)的方式,用于在不同进程之间传递信息。 信号是一种异步的信息传递方式,这意味着发送信号的进程只发送由信号作为载体的命令,而并不关心接收信号的进程如何处置这…...
FanControl(电脑风扇转速控制软件) v224 中文版
FanControl是一款用于控制计算机风扇速度的软件。它能够监测计算机的内部温度,并根据温度的变化来自动调整风扇的速度,以保持计算机的散热效果和稳定运行。 软件功能 温度监测:实时监测计算机的内部温度,显示在界面上。 风扇速度控…...
推理加速新范式:火山引擎高性能分布式 KVCache (EIC)核心技术解读
资料来源:火山引擎-开发者社区 分布式 KVCache 的兴起 背景 在大模型领域,随着模型参数规模的扩大和上下文长度增加,算力消耗显著增长。在 LLM 推理过程中,如何减少算力消耗并提升推理吞吐已经成为关键性优化方向。以多轮对话场…...
2025年5月12日第一轮
1.百词斩 2.阅读 3.翻译 4.单词 radical 激进的 Some people in the US have asserted that forgiving student loan debt is one way to stimulate the economy and give assistance to those in need. 1.数学 Hainan was the second island on the Taiwan,a province whi…...
Spark目前支持的部署模式。
一、本地模式(Local Mode) 特点: 在单台机器上运行,无需集群。主要用于开发、测试和调试。所有组件(Driver、Executor)在同一个 JVM 中运行。 启动命令: bash spark-submit --master local[*]…...
如何理解“数组也是对象“——Java中的数组
在Java中,数组确实是一种特殊的对象,这一点经常让初学者感到困惑。本文将深入探讨数组的对象本质,并通过代码示例展示数组作为对象的特性。 数组是对象的证据 1. 数组继承自Object类 所有Java数组都隐式继承自java.lang.Object类ÿ…...
第二章、物理层
目录 2.1、物理层的基本概念 2.2、数据通信的基础知识 2.2.1、数据通信系统的模型 2.2.2、有关信道的几个基本概念 调制的方法 常用的编码方式 基本的带通调制 2.2.3、信道的极限容量 信道能够通过的频率范围 2.3、物理层下面的传输媒介 2.3.1、导引型传输媒体 &…...
UART16550 IP core笔记二
XIN时钟 表示use external clk for baud rate选型,IP核会出现Xin时钟引脚 XIN输入被外部驱动,也就是外部时钟源,那么外部时钟必须要满足特定的要求,就是XIN 的range范围是xin<S_AXI_CLK/2,如果不满足这个条件,那么A…...
websocketpp 安装及使用
介绍 WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的 web 程序都是属于 "一问一答" 的形式,即客户端给服务器发送了一个 HTTP 请求,服务器给客户端返回一个 HTTP 响应。这种情况下服务器是属于被动…...
【大数据】MapReduce 编程--WordCount
API 是“Application Programming Interface”的缩写,即“应用程序编程接口” Hadoop 提供了一套 基于 Java 的 API,用于开发 MapReduce 程序、访问 HDFS、控制作业等 MapReduce 是一种 分布式并行计算模型,主要用于处理 大规模数据集。它将…...
北京市通州区经信局对新增通过国家级生成式人工智能及深度合成算法备案企业给予100w、20w一次性补贴
北京市通州区经济和信息化局 关于发布支持北京城市副中心数字经济高质量发展的实施指南(第一批)的通知 各有关单位: 为培育千亿级数字经济产业集群,促进数字经济和实体经济深度融合,助推北京城市副中心产业高质量发展&…...
机器学习驱动的智能化电池管理技术与应用
在人工智能与电池管理技术融合的背景下,电池科技的研究和应用正迅速发展,创新解决方案层出不穷。从电池性能的精确评估到复杂电池系统的智能监控,从数据驱动的故障诊断到电池寿命的预测优化,人工智能技术正以其强大的数据处理能力…...
GTC2025——英伟达布局推理领域加速
英伟达GTC2025大会于今年3月18日举行,会上NVIDIA CEO黄仁勋展示了其过去所取得的成就,以及未来的布局目标——通过纵向扩展(scale out)和横向扩展(scale up)解决终极的计算问题——推理。本文将回顾NVIDIA在…...
5.12 note
Leetcode 图 邻接矩阵的dfs遍历 class Solution { private: vector<vector<int>> paths; vector<int> path; void dfs(vector<vector<int>>& graph, int node) { // 到n - 1结点了保存 if (node graph.size() - 1)…...
Java Spring Boot项目目录规范示例
以下是一个典型的 Java Spring Boot 项目目录结构规范示例,结合了分层架构和模块化设计的最佳实践: text 复制 下载 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…...
记录裁员后的半年前端求职经历
普通的人生终起波澜 去年下半年应该算是我毕业以来发生人生变故最多的一段时间。 先是 7 月份的时候发作了一次急性痛风,一个人在厦门,坐在床上路都走不了,那时候真的好想旁边能有个人能扶我去医院,真的是感受到 10 级的孤独。尝…...
学习黑客BitLocker与TPM详解
BitLocker与TPM详解:数据加密的坚固堡垒 🔐🛡️ 学习目标:掌握BitLocker加密原理、TPM工作机制及其配置方法,提升数据安全防护水平 1. 数据保护的最后防线:BitLocker与TPM简介 💼 在当今世界&a…...
综合实验二之grub2密文加密
实验二、grub2密文加密 Grub2 密文加密的作用: 保护系统安全: 防止未经授权的用户在系统启动时进入 Grub2 菜单,通过修改启动参数来绕过系统的安全机制,进而访问或篡改系统文件和数据。例如,恶意用户可能试图通过修改启…...
【Java学习】Lambda表达式
目录 一、函数式匿名 1.环境确定 2.Lambda部分实现 二、函数式书写 Lambda表达式: 三、函数式接口 1.Consumer行为接口 1.1Lambda匿名实现(核心) 1.2创建使用全过程 1.2.1创建匿名子类实例 1.2.1.1环境确定 1.2.1.2匿名实现 1.2.2向上转型 1.2.3Lamb…...
精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联
精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联 在创业和数据分析的学习旅程中,我们持续探索不同商业模式的奥秘。今天,依旧怀揣着与大家共同进步的想法,深入研读《精益数据分析》…...
人工智能100问☞第21问:神经网络如何模拟人脑结构?
目录 一、通俗解释 二、专业解析 三、权威参考 神经网络通过分层连接的人工神经元模拟人脑结构,其中输入层接收信号(模拟树突接收信息),隐藏层通过权重调整(模拟突触可塑性)进行特征提取,输出层生成结果(类似轴突传递信号),并利用反向传播机制(类比生物神…...
Vue 3 实现转盘抽奖效果
🎡 使用 Vue 3 实现转盘抽奖效果 在移动端或营销活动中,转盘抽奖是一种非常常见的互动方式。本文基于 Vue 3 TypeScript 实现一个视觉炫酷、逻辑完整的转盘抽奖功能,并支持「指定奖品必中」的逻辑。 iShot_2025-05-12_11.31.27 ᾟ…...
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本 flyfish import os import json import argparse from PIL import Image from xpinyin import Pinyinclass ImageConverter:def __init__(self, src_folder, dest_folder, target_size1024, output_format"JPEG&…...
LeRobot 项目部署运行逻辑(七)—— ACT 在 Mobile ALOHA 训练与部署
全部流程为:硬件配置 -> 环境安装 -> 遥操作数据采集 -> 数据集可视化 -> 策略训练 -> 策略评估 在之前的笔记中已经完成了绝大部分,最后再记录一下最后的训练部署,算是最简单的部分了 目录 1 ACT 训练 2 ALOHA 部署 3 更…...
【NextPilot日志移植】ULog
📚 ULog 日志系统详解 关键词:结构化日志、飞行数据记录、自描述格式、嵌入式系统、PX4、NextPilot 🧠 一、ULog 是什么? ULog(Universal Log) 是 PX4/NextPilot 飞控系统中使用的结构化日志格式ÿ…...
扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解
扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解 什么是 yarn eject?scripts 目录结构与说明各脚本说明说明 什么是 yarn eject? yarn eject 是 Create React App(简称 CRA)提供的一条命令,用于…...
Android11.0 framework第三方无源码APP读写断电后数据丢失问题解决
1.前言 在11.0中rom定制化开发中,在某些产品开发中,在某些情况下在App用FileOutputStream读写完毕后,突然断电 会出现写完的数据丢失的问题,接下来就需要分析下关于使用FileOutputStream读写数据的相关流程,来实现相关 功能 2.framework第三方无源码APP读写断电后数据丢…...
多样本整合Banksy空间聚类分析(Visium HD, Xenium, CosMx)
在空间数据分析中,传统的单细胞聚类算法,例如Seurat和Scanpy中的lovain和leiden等聚类算法,通常在处理空间数据时忽略了空间信息。然而,由于细胞状态受其周围细胞的影响,将转录组数据与细胞的空间信息结合起来进行聚类…...
【2025最新】Vm虚拟机中直接使用Ubuntu 免安装过程直接使用教程与下载
Ubuntu 是一个基于 Debian 的自由开源 Linux 操作系统,面向桌面、服务器和云计算平台广泛应用。 由英国公司 Canonical Ltd. 维护和发布,Ubuntu 强调易用性、安全性和稳定性,适合个人用户、开发者以及企业部署使用。 Ubuntu 默认使用 GNOME …...
【Leetcode】系列之206反转链表
反转链表 题目描述解决思路过程示例代码示例结果展示 总结 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 解决思路 next_node:临时存放当前指针指向下一个指针的变量;pre:存放空指针;curr࿱…...
图灵爬虫练习平台第十九题js逆向
题十九:法外狂徒 该题适合JS逆向学习的小伙伴练习,模拟国内某大型网站 数据加密设计,给大家练练手 还是先f12看看是什么加密,发现是 返回数据最后加密了 还是先堆栈分析一下,直接点进去 打上断点分析一下,…...
Ubuntu 22初始配置(root、ssh)
1.设置root密码 并启用root用户 sudo passwd root sudo passwd -u root 2.安装ssh apt install openssh-server systemctl enable --now ssh 3.支持root通过ssh登录 vim /etc/ssh/sshd_config 是sshd_config(服务端) 不是ssh_config(客户端) 最后增加一…...
css3响应式布局
css3响应式布局 响应式设计是现代网页开发的重要组成部分,它确保网页在不同的屏幕尺寸上都有良好的显示效果。 在CSS中,实现响应式布局是一种常用的技术,旨在使网页能够根据用户的设备和屏幕尺寸自动调整其布局和样式。这种技术对于确保网站…...
【DeepSeek问答记录】请结合实例,讲解一下pytorch的DataLoader的使用方法
PyTorch的DataLoader是数据加载的核心工具,可高效处理批量数据、并行加载和自动打乱。以下是一个结合实例的分步讲解: 1. 基础使用流程 import torch from torch.utils.data import Dataset, DataLoader# 自定义数据集类(必须实现__len__和…...
Codeforces Round 1024 (Div. 2)(A-D)
题面链接:Dashboard - Codeforces Round 1024 (Div. 2) - Codeforces A. Dinner Time 思路 一共n个数被分成n/p个区间,每个区间内的和是q,如果还有除构成区间外剩余的数那么就一定能构造,如果没有剩余就看所有区间的和是否等于…...