创建你的第一个MCP服务
创建你的第一个MCP服务
Model Context Protocol (MCP) 中国天气查询服务创建教程
什么是 Model Context Protocol (MCP)
Model Context Protocol (MCP) 是一种开放标准协议,允许大型语言模型(LLM)如 Claude 与外部系统和数据源进行交互。通过 MCP,Claude 可以:
- 访问实时信息和数据
- 执行特定的计算和操作
- 调用专业工具和 API
- 为用户提供更准确、更及时的回答
MCP 赋予 AI 以"工具使用"能力,使其突破固有知识库的限制,能够获取最新信息并执行具体任务,大大提升了 AI 的实用性。
MCP 的工作原理
MCP 的核心是一套简单但强大的通信协议:
- 工具注册:开发者定义工具,描述其功能和参数
- 工具调用:Claude 确定需要使用工具并发出请求
- 工具执行:MCP 服务器接收请求,执行操作,返回结果
- 结果解析:Claude 解析结果并将其整合到回答中
整个过程对用户来说是无缝的,用户只需提出问题,MCP 在后台自动处理工具调用。
创建中国天气查询 MCP 服务教程
Git 地址 : https://github.com/lovelyqun/MCP/tree/main/weather-mcp
下面我们将一步一步创建一个中国天气查询 MCP 服务。
第一步:环境准备
首先,确保你的系统安装了 Node.js 和 npm。然后创建项目:
mkdir weather-mcp
cd weather-mcp
npm init -y
第二步:安装依赖
编辑 package.json 文件,添加必要的依赖:
{"name": "weather-mcp-node","version": "1.0.0","description": "基于Node.js的中国天气查询MCP服务","main": "weather.js","type": "module","scripts": {"start": "node weather.js","test:weather": "echo '{\"name\":\"get_china_weather\",\"parameters\":{\"city\":\"北京\"}}' | node weather.js"},"keywords": ["mcp", "weather", "claude", "china"],"author": "","license": "MIT","dependencies": {"@modelcontextprotocol/sdk": "^1.11.2","moment": "^2.30.1","zod": "^3.22.4"}
}
然后安装依赖:
npm install
第三步:实现 MCP 服务
创建 weather.js 文件,作为我们的主程序:
// 导入所需模块
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import moment from 'moment';
import { z } from 'zod';// 提供的城市和省份映射(简化版,实际可以包含更多城市)
const CITY_PROVINCE = {"北京": "北京市","上海": "上海市","广州": "广东省","深圳": "广东省","杭州": "浙江省","南京": "江苏省"
};// 城市地理信息(经纬度)
const CITY_LOCATIONS = {"北京": {"lat": 39.9042, "lon": 116.4074},"上海": {"lat": 31.2304, "lon": 121.4737},"广州": {"lat": 23.1291, "lon": 113.2644},"深圳": {"lat": 22.5431, "lon": 114.0579},"杭州": {"lat": 30.2741, "lon": 120.1551},"南京": {"lat": 32.0584, "lon": 118.7965}
};// 初始化MCP服务器
const server = new McpServer({name: "china_weather",version: "1.0.0",capabilities: {tools: {}}
});// 辅助函数:获取当前季节
function getSeason() {const month = moment().month() + 1;if ([3, 4, 5].includes(month)) return "春季";else if ([6, 7, 8].includes(month)) return "夏季";else if ([9, 10, 11].includes(month)) return "秋季";else return "冬季";
}// 辅助函数:生成随机整数
function getRandomInt(min, max) {return Math.floor(Math.random() * (max - min + 1)) + min;
}// 为城市生成模拟天气数据
function generateWeatherData(city) {if (!CITY_PROVINCE[city]) return null;const season = getSeason();const today = moment();const forecastData = [];// 根据季节设定温度范围let tempRange;switch (season) {case "春季": tempRange = [15, 25]; break;case "夏季": tempRange = [25, 35]; break;case "秋季": tempRange = [15, 25]; break;case "冬季": tempRange = [0, 15]; break;}// 设定可能的天气类型const weatherTypes = ["晴", "多云", "小雨", "阴"];// 生成5天的天气数据for (let i = 0; i < 5; i++) {const date = moment(today).add(i, 'days');const dateStr = date.format('YYYY-MM-DD');const weekDay = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"][date.day()];const weatherType = weatherTypes[Math.floor(Math.random() * weatherTypes.length)];const tempHigh = getRandomInt(tempRange[0], tempRange[1]);const tempLow = getRandomInt(tempRange[0], tempHigh - 2);forecastData.push({date: dateStr,week: weekDay,weather: weatherType,temp_day: tempHigh,temp_night: tempLow,wind_direction: "东南风",wind_power: `${getRandomInt(1, 5)}级`});}return {city: city,province: CITY_PROVINCE[city],data: forecastData};
}// 将天气数据格式化为可读字符串
function formatChinaWeather(data) {if (!data) return "无法获取天气数据。";const city = data.city || "未知城市";const province = data.province || "";const forecasts = [];for (const day of data.data) {const dayInfo = `
日期: ${day.date} ${day.week}
天气: ${day.weather}
温度: ${day.temp_day}°C ~ ${day.temp_night}°C
风力: ${day.wind_direction} ${day.wind_power}
`;forecasts.push(dayInfo);}const header = province ? `📍 ${province} ${city}` : `📍 ${city}`;return `${header}\n\n` + forecasts.join("\n---\n");
}// 注册天气查询工具
server.tool("get_china_weather","查询中国城市的天气预报。",{city: z.string().describe('中国城市名称(例如"北京"、"上海"、"广州")')},async ({ city }) => {const weatherData = generateWeatherData(city);if (!weatherData) {return {content: [{type: "text",text: `无法获取${city}的天气信息。请提供准确的中国城市名称(如北京、上海、广州等)。`}]};}const result = formatChinaWeather(weatherData);return {content: [{type: "text",text: result}]};}
);// 注册城市信息查询工具
server.tool("get_china_city_info","获取中国城市的基本信息和地理位置。",{city: z.string().describe('中国城市名称(例如"北京"、"上海"、"广州")')},async ({ city }) => {if (!CITY_PROVINCE[city]) {return {content: [{type: "text",text: `未找到城市:${city}。请提供准确的中国城市名称(如北京、上海、广州等)。`}]};}const province = CITY_PROVINCE[city];const location = CITY_LOCATIONS[city];const result = `
📍 ${city}
所在地区: ${province}
经度: ${location.lon}
纬度: ${location.lat}
`;return {content: [{type: "text",text: result}]};}
);// 运行服务器
async function main() {const transport = new StdioServerTransport();await server.connect(transport);console.error("中国天气MCP服务器已启动,使用stdio传输...");
}main().catch(error => {console.error("服务器运行错误:", error);process.exit(1);
});
第四步:创建配置文件
为了在 Cursor 或 Claude Desktop 中使用,创建一个 config-example.json 文件:
{"mcpServers": {"china_weather": {"command": "npm","args": ["start","--prefix","/Users/你的用户名/路径/到/weather-mcp"],"env": {}}}
}
第五步:测试服务
运行服务进行测试:
npm start
或使用预定义的测试命令:
npm run test:weather
第六步:与 Cursor 集成
- 打开 Cursor 应用
- 进入设置 (Settings)
- 找到 MCP 设置部分
- 添加新的 MCP 服务,名称为 “china_weather”
- 设置命令为:
npm start --prefix /你的完整路径/weather-mcp
- 保存设置
第七步:使用 MCP 工具
在 Cursor 中,可以直接调用天气查询工具:
请问今天北京的天气怎么样?
Claude 会自动调用我们的 MCP 服务,并返回格式化的天气信息。
MCP 设计最佳实践
创建高质量的 MCP 服务,应当遵循以下最佳实践:
- 简洁明了的工具描述:确保描述清晰表达工具的功能和用途
- 严格的参数验证:使用 zod 等库验证输入参数
- 友好的错误处理:提供有意义的错误信息
- 合理的功能拆分:每个工具只做一件事,功能不要过于复杂
- 优雅的响应格式:返回结构化且易读的数据
- 高效的执行性能:避免不必要的延迟
- 良好的文档:提供详细的安装和使用说明
扩展和优化
可以考虑对天气服务进行以下扩展:
- 接入真实的天气 API(如和风天气、高德天气等)
- 增加更多功能,如空气质量指数查询
- 支持更多城市和地区
- 添加历史天气数据查询
- 增加可视化内容(如天气图标)
结语
MCP 为 AI 提供了与外部世界交互的能力,大大拓展了 Claude 等大型语言模型的应用场景。通过本教程,你不仅学会了如何创建一个基本的 MCP 服务,还了解了 MCP 的工作原理和设计理念。
希望这个中国天气查询服务能为你提供实用的功能,同时也作为你开发更多 MCP 工具的起点。随着 MCP 生态的不断发展,我们期待看到更多创新的应用出现。
相关文章:
创建你的第一个MCP服务
创建你的第一个MCP服务 Model Context Protocol (MCP) 中国天气查询服务创建教程 什么是 Model Context Protocol (MCP) Model Context Protocol (MCP) 是一种开放标准协议,允许大型语言模型(LLM)如 Claude 与外部系统和数据源进行交互。通…...
说一说Node.js高性能开发中的I/O操作
众所周知,在软件开发的领域中,输入输出(I/O)操作是程序与外部世界交互的重要环节,比如从文件读取数据、向网络发送请求等。这段时间,也指导项目中一些项目的开发工作,发现在Node.js运用中&#…...
小白入门:GitHub 远程仓库使用全攻略
一、Git 核心概念 1. 三个工作区域 工作区(Working Directory):实际编辑文件的地方。 暂存区(Staging Area):准备提交的文件集合(使用git add操作)。 本地仓库(Local…...
Protobuf3协议关键字详解与应用实例
一、核心语法与基础关键字 syntax 声明协议版本,必须为文件的第一行非空、非注释内容。 syntax "proto3"; // 显式指定proto3语法,否则编译器默认使用proto2message 定义消息类型,包含一组结构化字段。支持嵌套消息定义ÿ…...
阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)
上一篇文章介绍了如何通过topic操作命令实现与机器人的交互,本篇我们介绍如何通过Message(即topic的下一级)实现与机器人的交互。 和topic一样,首先在一个终端通过ssh命令登录机器人、启动机器人,然后打开另外一个终端…...
Leetcode刷题 | Day63_图论08_拓扑排序
一、学习任务 拓扑排序代码随想录 二、具体题目 1.拓扑排序117. 软件构建 【题目描述】 某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依…...
[Harmony]获取资源文件中.txt文件中的字符串
txt文件 src/main/resources/rawfile/userInfo.txt {"Code": 200,"Msg": "登录成功","RetData": {"Name": "shq","Phone": "18511111111","PostName": "按摩技师",&qu…...
matlab多项式
1. 多项式表示 多项式用行向量表示,按降幂排列系数。例如,多项式 3x22x1 表示为 [3 2 1]。 2. 创建多项式 直接输入系数:如 p [1 -3 3 -1] 表示 x3−3x23x−1。由根创建:使用 poly 函数。例如,根为 [1, 1, 1]&…...
手搓传染病模型(SEI - SEIAR )
在传染病防控的前沿研究中,构建精准的数学模型对于理解疾病传播机制、预测疫情走势以及制定有效干预策略至关重要。SEI - SEIAR 模型(易感媒介 \(S_m\) - 潜伏媒介 \(E_m\) - 感染媒介 \(I_m\) - 易感人群 S - 潜伏人群 E - 有症状感染者 I - 无症状感染…...
Ubuntu 安装 Redis
1. 下载 redis 下载地址:https://github.com/redis/redis 2. 解压 redis 把下载的软件包,上传到服务器的 /usr/local 目录中,执行解压命令 tar -zxvf redis-8.0.1.tar.gz 3. 安装 redis 安装依赖 sudo apt-get updatesudo apt-get ins…...
【QGIS二次开发】地图显示与交互-03
系列目录: 【QGIS二次开发】地图显示与交互-01_qgis二次开发加载地图案例-CSDN博客 【QGIS二次开发】地图显示与交互-02_setlayerlabeling-CSDN博客 3. 地图符号与色表 3.1 矢量图层符号设置 任务要求:双击图层树节点,实现图层中图元的符…...
28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
"在数字世界的夹缝中,存在着连接现实与虚拟的魔法纽带——这便是 Framer Motion 的时空秘术。" ——《前端魔法师手札卷七》 一、时空裂隙动画 - FLIP量子跃迁术 1. FLIP时空扭曲原理 <motion.divlayout // 开启时空裂隙transition{{type: "spr…...
Ken Thompson 和 Dennis Ritchie
Ken Thompson(肯汤普逊)和Dennis Ritchie(丹尼斯里奇)是计算机科学领域的两位传奇人物,他们对现代计算机技术的发展产生了深远影响。以下是关于他们的详细介绍: 1. Ken Thompson 出生&am…...
SQL:MySQL函数:条件函数(Conditional Functions)
目录 什么是条件函数? 常用 MySQL 条件函数总览表 1️⃣ IF() – 条件判断函数(If Statement) 2️⃣ IFNULL() – 空值判断与替代函数(If Null) 3️⃣ NULLIF() – 相等返回 NULL(Null If Equal&#…...
初识Linux · IP分片
目录 前言: IP分片 分片vs不分片 如何分片 分片举例 三个字段 前言: 前文IP协议上和IP协议下我们已经把IP协议的报头的大多数字段介绍了,唯独有三个字段现在还有介绍,即16位标识,8位协议,13位片偏移…...
TCP 粘包
一、粘包问题详解 1. 粘包的概念 定义: 指在 TCP 通信中,由于发送方和接收方的读写速度、数据量不一致,导致多个数据包被错误地合并成一个数据包处理的现象。产生原因: TCP 是流式协议(无边界)࿰…...
第一个优化
agent项目 tool 调用外部服务时 选择了指数回避的重试机制 优化点:延迟时间那 加了一个随机的时间抖动 指数回避 我第一眼看到 这不就是 tcp重连机制吗 其实就是 如果当时网络波动 网况不好 || 服务正忙 ,可以不急着在这个时候选择多次重试,…...
LabVIEW的CAN通讯测试程序
该程序是基于 NI LabVIEW 平台开发的 CAN(Controller Area Network,控制器局域网)通讯测试程序。主要功能是对 CAN 通讯过程进行模拟、数据传输与验证,确保 CAN 通讯的正常运行和数据的准确传输。 程序详细说明 接口选择ÿ…...
视频质量分析时,遇到不同分辨率的对照视频和源视频,分辨率对齐的正确顺序。
背景 我们平时在做视频转码后,会用VMAF/PSNR得评分工具进行视频对比的评分,但是这几种客观评分方式都有一个要求就是分辨率要一模一样,因为这样才对像素点做数学运算。 但是分辨率对齐其实有两种选择,例如源视频是1080P…...
Kotlin并发请求的一些知识记录
private suspend fun fetchDataConcurrently(list: MutableList<MyType>,onRequestResult: (Int, List<MyType>?) -> Unit //高阶函数回调) {val deferredList mutableListOf<Deferred<MyType?>>()// 设定任务超时时间为12秒,并使用 …...
Ubuntu 编译SRS和ZLMediaKit用于视频推拉流
SRS实现视频的rtmp webrtc推流 ZLMediaKit编译生成MediaServer实现rtsp推流 SRS指定某个固定网卡,修改程序后重新编译 打开SRS-4.0.0/trunk/src/app/srs_app_rtc_server.cpp,在 232 行后面添加: ZLMediaKit编译后文件存放在ZLMediakit/rele…...
typora免费获取序列号
这个方法不是唯一,但是所需要的时长很短。废话不多说 1.下载网盘文件 通过网盘分享的文件:typora破解 链接: https://pan.baidu.com/s/1KQnSUV3V0uBGpLc_iz2UFQ?pwdetc4 提取码: etc4 2.把解压下来的文件放到装软件的文件夹 3. 打开cmd,…...
C++23 新增的查找算法详解:ranges::find_last 系列函数
文章目录 引言C Ranges 库简介ranges::find_last、ranges::find_last_if 和 ranges::find_last_if_not 概述ranges::find_last示例代码代码解释 ranges::find_last_if函数签名参数解释示例代码代码解释 ranges::find_last_if_not示例代码代码解释 使用场景总结 引言 在 C 的发…...
11.基础IO(上)
一、文件概念 对文件归类认知: 对于 0KB 的空文件是占用磁盘空间的 文件是文件属性(元数据)和文件内容的集合(文件 属性(元数据) 内容) 所有的文件操作本质是文件内容操作和文件属性操作。 …...
本地部署Firecrawl+Dify调用踩坑记录
最近自己研究Dify,使用到Firecrawl这个比较好用的工具。用Firecrawl官网的不知道为什么总是卡住得不到结果,于是我打算自己去本地部署一个。好家伙真给我人搞麻了,太多问题了。 我是在京东云上面租的一台服务器。 首先就是docker的安装&…...
硬盘坏了电脑会出现哪些明显现象?机械和固态可不一样
机械硬盘(HDD)损坏的常见表现 >启动异常:如果是启动盘,可能会遭遇系统无法启动,提示“No Bootable Device”“Operating System not found”或“Sector not found”等错误;以及BIOS无法识别硬盘&#x…...
数据驱动下的具身智能进化范式
数据驱动技术与挑战...
使用Python与正则表达式高效提取Excel中的票号数据
使用Python与正则表达式高效提取Excel中的票号数据 一、需求 本文将介绍如何利用Python的Pandas库和正则表达式,快速实现票号这一数据清洗任务,并将结果整理为规范的表格结构。 在数据处理场景中,从非结构化文本里提取特定格式的信息是常见…...
MySQL 迁移至 Doris 最佳实践方案
在数据架构不断演进的背景下,从 MySQL 迁移至 Doris 成为许多企业提升数据处理效率的关键选择。本文将深入剖析三种经过实践验证的 MySQL 迁移至 Doris 的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于 CDC(Change Data Capture&#x…...
2025长三角杯数学建模A题思路模型代码:智能手机产品设计优化与定价问题
2025长三角杯数学建模A题思路模型代码,详细内容见文末名片 一、问题背景 在 2025 年第五届长三角高校数学建模竞赛中,赛题 A 聚焦于智能手机产品设计优化与定价这一极具现实意义的问题。如今的智能手机市场,可谓是一片硝烟弥漫的“战场”&a…...
【hadoop】Kafka 安装部署
一、Kafka安装与配置 步骤: 1、使用XFTP将Kafka安装包kafka_2.12-2.8.1.tgz发送到master机器的主目录。 2、解压安装包: tar -zxvf ~/kafka_2.12-2.8.1.tgz 3、修改文件夹的名字,将其改为kafka,或者创建软连接也可࿱…...
网络安全EN18031-1,EN18031-2,EN18031-3三个标准对应的测试项目
EN18031-1,EN18031-2,EN18031-3三个标准有什么区别 EN18031-1、EN18031-2和EN18031-3三个标准分别针对不同的安全要求和应用场景,具体区别如下: EN18031-1:主要关注网络安全防护,特别是防止DDoS攻击和确保安全通信协议的…...
React与Docker中的MySQL进行交互
完整结构 1. 项目结构设置 首先创建项目: npm create vitelatest . --template react cd . npm install2. 设置Docker中的MySQL 创建docker-compose.yml文件(与之前相同): version: 3.8 services:mysql:image: mysql:8.0conta…...
量子隧穿:PROFINET到Ethernet ip的无损耗协议转换方案转
在本季度的生产工作中,我们成功实现了仓储物流自动化分拣系统中的关键技术突破。我们面临的主要挑战是将采用EtherNet/IP协议的输送带控制器与PROFINET协议的上位系统进行有效通信。通过引入ethernet IP转PROFINET网关倍讯科技BX-606-EIP,我们实现了输送…...
W1R3S: 1.0.1靶场
W1R3S: 1.0.1 来自 <W1R3S: 1.0.1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.249 3,对靶机进行端口…...
pycharm中qthread中的run函数debug不上的问题
先说结论 在风和日丽的一天,我尝试把我mac上的代码拿到windows修改。突然遇到了个bug,然后想着对几个线程内部的run函数逐一debug。 结果一开线程,整个线程仍然继续报错,run函数的第一行都不停断点。甚至,我加了个pr…...
深度解析IP静态的工作原理,IP静态的应用场景又哪些?
一、什么是IP静态? 当我们谈到“IP静态”时,大家可能首先想到的是与“动态IP”相对的概念。确实如此,静态IP是一种固定分配的IP地址,也就是说,在特定时间内,分配给你的IP地址不会有所更改——无论你完成多…...
Electron 应用的升级机制详解
在产品分发给用户之后,进入迭代周期是不可避免的过程。开发者需要为产品增加新功能、修复Bug,并推出新版本。如何将这些更新有效地分发给用户,是产品经理和开发人员共同关注的问题。本节将从开发者的角度出发,详细介绍Electron应用的两种常见升级方式:全量升级与增量升级。…...
Java 开源报表系统全解析:免费工具、企业案例与集成实践
在企业级数据可视化与报表开发中,选择一款功能强大且完全免费的开源报表系统至关重要。本文深度剖析 5 款经过权威验证的免费开源 Java 报表工具,涵盖图表展示、定制化及第三方集成能力,附企业级案例与技术实践,助您高效选型。 一…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]: 注意“回车换行“的跨平台使用.
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现
分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现 目录 分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现ABC-…...
Java中的设计模式
一、工厂方法模式 1.1 简单工厂模式 1.1.1 案例引入 比方说我们要设计一个披萨店的点单程序,披萨店有水果披萨,有芝士披萨,两种类型,选择哪个披萨,只需要创建那个类型的披萨对象即可。 package org.example;import…...
NSSCTF [GFCTF 2021]where_is_shell
889.[GFCTF 2021]where_is_shell(system($0)64位) [GFCTF 2021]where_is_shell (1) 1.准备 motalymotaly-VMware-Virtual-Platform:~$ file shell shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.s…...
有关知名分析品牌默克Supelco®的前世今生
因在仪器设备和实验室产品方面的卓越贡献,Supelco品牌的创立者Nicholas Pelick与Walter Supina获颁2019年匹兹堡文化遗产奖(2019 Heritage Award),入选匹兹堡名人堂(Pittcon Hall of Fame)。 目前ÿ…...
钉钉数据与金蝶云星空的无缝集成解决方案
钉钉数据与金蝶云星空的无缝集成解决方案 钉钉数据集成到金蝶云星空的技术案例分享 在企业信息化建设中,数据的高效流动和准确对接是业务成功的关键。本文将分享一个具体的系统对接集成案例:如何通过transfer-新转账单(银行转账)…...
商业架构 2.0 时代:ZKmall开源商城前瞻性设计如何让 B2B2C 平台领先同行 10 年?
在数字化转型加速的今天,传统 B2B2C 平台面临用户体验割裂、数据孤岛严重、业务扩展困难等挑战。ZKmall 开源商城通过 “业务中台 数据中台 技术中台”的三位一体架构设计,结合“插件化扩展 分布式服务 智能决策”*三大核心能力,构建起具…...
Android开发-使用内容组件获取通讯信息
在Android开发中,访问和处理用户的通讯信息(如联系人、通话记录等)是一项常见的需求。通过使用Android的内容提供者(ContentProvider),开发者可以方便地查询这些数据,并将其集成到自己的应用中。…...
Elasticsearch 分片机制高频面试题(含参考答案)
🧠 Elasticsearch 分片机制高频面试题(含参考答案) 本篇聚焦 分片机制(Shard),涵盖基础概念、实践经验、问题排查与场景设计,适合中高级开发工程师及架构师面试复习使用。 📚 目录 …...
从代码学习深度学习 - 风格迁移 PyTorch版
文章目录 前言方法 (Methodology)阅读内容和风格图像预处理和后处理抽取图像特征定义损失函数内容损失 (Content Loss)风格损失 (Style Loss)全变分损失 (Total Variation Loss)总损失函数初始化合成图像训练模型总结前言 大家好!欢迎来到我们的深度学习代码学习系列。今天,…...
模糊综合评价模型建立
模糊综合评价模型建立 一、整体流程 二、代码实现(含大量注释) #程序文件ex14_4.py import numpy as npa np.loadtxt(data14_4.txt) # 使用定义匿名函数的形式来定义各个评价指标的隶属函数 f1 lambda x: x/8800 f2 lambda x: 1-x/8000 f3 lambda x: (x<5.5)(8-x)/(8-…...