当前位置: 首页 > article >正文

深入浅出MCP:从零开始的完整学习指南(保姆级教程)

手把手带你理解MCP是什么、怎么用、如何开发每个步骤都有详细说明写在前面很多朋友看完MCP的介绍还是一头雾水“这到底是什么跟我有什么关系我该怎么用”别急这篇文章我会用最通俗的方式一步一步带你搞懂MCP。每个概念都会配上生活化的例子每个操作都有完整的代码。第一部分先搞懂“为什么” - 需求分析问题1现在的AI有什么痛点假设你有一个AI助手你想让它帮你读取你电脑上的Excel文件搜索网络上的图片调用公司内部的API现在的问题是每个AI模型都要单独适配ChatGPT写一套代码Claude写另一套本地模型又不一样。太麻烦了问题2MCP怎么解决MCP就像一个万能插座text之前每个电器都要自己的专属插座 → 混乱 现在统一标准什么电器都能插 → 方便MCP就是AI界的USB-C接口让所有AI模型都能用统一的方式调用工具、获取数据。第二部分彻底搞懂MCP - 必知必会什么是MCP用大白话说官方定义MCPModel Context Protocol是一个开放协议用于标准化应用程序向大型语言模型提供上下文的方式。大白话解释MCP是一套通用规则规定了AI怎么“伸手要东西”请求格式工具怎么“把东西给AI”响应格式双方怎么“对话”通信方式MCP架构用餐厅比喻1. 宏观架构把MCP想象成餐厅点餐角色餐厅例子MCP世界顾客你AI模型服务员服务员MCP客户端厨房厨房MCP服务端菜单菜单工具列表流程顾客AI说要吃什么 →服务员MCP客户端记录并传给厨房 →厨房MCP服务端做菜并返回2. SDK 3层架构通俗版text┌─────────────────────────────────────┐ │ 应用层你写代码的地方 │ ← 你只需要关心这层 │ McpTool、McpResource │ ├─────────────────────────────────────┤ │ 协议层MCP自己处理 │ ← 不用你操心 │ 消息格式、交互规则 │ ├─────────────────────────────────────┤ │ 传输层MCP自己处理 │ ← 不用你操心 │ stdio、SSE、HTTP │ └─────────────────────────────────────┘3. MCP客户端谁在用客户端 “请求发起方”实际例子Cursor编辑器Claude Desktop你自己写的Java程序VS Code插件4. MCP服务端谁提供工具服务端 “提供能力的一方”实际例子文件系统服务让AI读写文件数据库服务让AI查询数据图片搜索服务让AI搜图MCP核心概念图解text┌─────────────────────────────────────────────┐ │ MCP服务端 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Tool │ │Resource │ │ Prompt │ │ │ │ 工具 │ │ 资源 │ │ 提示词 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ↓ ↓ ↓ │ │ 可执行操作 可读取数据 可用的模板 │ │ (动词) (名词) (配方) │ └─────────────────────────────────────────────┘详细解释概念通俗理解代码示例Tool工具AI能“做”的事情searchImages(),sendEmail()Resource资源AI能“看”的数据文件、数据库记录、API响应Prompt提示词预设的“对话模板”“你是一个图片搜索专家...”第三部分开始使用MCP实操从这开始第一步环境准备5分钟搞定1.1 安装Node.jsMCP工具依赖bash# Windows: 去官网下载安装包 https://nodejs.org/ # Mac: brew install node # Linux: sudo apt install nodejs npm # 验证安装 node -v # 应该显示 v18.0.0 或更高 npm -v # 显示版本号1.2 安装MCP命令行工具bash# 全局安装MCP CLI npm install -g modelcontextprotocol/cli # 验证安装 mcp --version第二步在Cursor编辑器中使用MCPCursor是什么一个集成了AI的代码编辑器类似VS Code。详细步骤下载Cursor访问 https://cursor.sh/ 下载安装打开设置Windows/Linux:Ctrl ,Mac:Cmd ,找到MCP配置在设置搜索框输入 MCP找到 MCP Servers 配置项添加服务json{ mcpServers: { filesystem: { command: npx, args: [-y, modelcontextprotocol/server-filesystem, /path/to/allowed/folder] } } }重启Cursor就可以在AI对话中使用MCP工具了第三步测试MCP是否工作bash# 1. 测试MCP连接 mcp ping # 成功返回: pong # 2. 启动一个简单的MCP服务作为测试 npx -y modelcontextprotocol/server-filesystem /tmp # 3. 在另一个终端列出工具 mcp tools list --server http://localhost:3000第四步在程序中使用MCPPython示例python# 1. 安装Python SDK pip install mcp # 2. 创建测试脚本 test_mcp.py import asyncio from mcp import ClientSession, StdioServerParameters async def main(): # 连接到MCP服务 server_params StdioServerParameters( commandnpx, args[-y, modelcontextprotocol/server-filesystem, /tmp] ) async with ClientSession(server_params) as session: # 初始化连接 await session.initialize() # 列出所有可用工具 tools await session.list_tools() print(可用工具:, [tool.name for tool in tools]) # 调用一个工具 result await session.call_tool( read_file, arguments{path: /tmp/test.txt} ) print(结果:, result) # 运行 asyncio.run(main())bash# 执行脚本 python test_mcp.py第四部分Spring AI MCP开发Java/Spring Boot如果你用的是Java技术栈这部分是你的重点MCP客户端开发调用别人的服务步骤1创建Spring Boot项目在 start.spring.io 创建项目选择Spring Web添加MCP依赖步骤2添加依赖pom.xmlxmlparent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.0/version /parent dependencies !-- Spring Boot基础 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- MCP客户端 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-client-spring-boot-starter/artifactId version1.0.0-M1/version /dependency /dependencies步骤3配置文件application.ymlyamlspring: ai: mcp: client: enabled: true # 要连接的MCP服务地址 server-url: http://localhost:8080 # 连接超时毫秒 connect-timeout: 30000 # 请求超时毫秒 request-timeout: 60000 logging: level: org.springframework.ai: DEBUG步骤4编写客户端代码javapackage com.example.mcpclient; import org.springframework.ai.mcp.McpClient; import org.springframework.ai.mcp.model.McpCallToolRequest; import org.springframework.ai.mcp.model.McpCallToolResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; RestController RequestMapping(/api/mcp) public class McpClientController { Autowired private McpClient mcpClient; GetMapping(/search) public String searchImages(RequestParam String keyword) { // 1. 构造请求 McpCallToolRequest request new McpCallToolRequest(); request.setName(image-search); // 要调用的工具名 MapString, Object args new HashMap(); args.put(keyword, keyword); args.put(limit, 5); request.setArguments(args); // 2. 发送请求 McpCallToolResult result mcpClient.callTool(request); // 3. 返回结果 return result.getContent().toString(); } GetMapping(/tools) public ListString listAvailableTools() { // 获取所有可用工具 return mcpClient.listTools() .stream() .map(tool - tool.getName()) .collect(Collectors.toList()); } }MCP服务端开发提供给别人调用步骤1创建服务端项目同样的方式创建Spring Boot项目添加服务端依赖xmldependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-server-spring-boot-starter/artifactId version1.0.0-M1/version /dependency步骤2配置文件yamlspring: ai: mcp: server: name: my-image-search-service version: 1.0.0 # 传输方式stdio标准输入输出或 sseHTTP transport-type: sse # HTTP端口使用SSE时 port: 8080 server: port: 8080步骤3启用MCP服务javapackage com.example.mcpserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.ai.mcp.server.annotation.EnableMcpServer; SpringBootApplication EnableMcpServer // 这个注解启用MCP服务能力 public class McpServerApplication { public static void main(String[] args) { SpringApplication.run(McpServerApplication.class, args); System.out.println(MCP服务已启动地址: http://localhost:8080); } }步骤4开发MCP工具javapackage com.example.mcpserver; import org.springframework.ai.mcp.server.annotation.McpTool; import org.springframework.ai.mcp.server.annotation.McpToolParam; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import java.util.List; import java.util.ArrayList; Service Slf4j public class ImageSearchService { /** * 搜索图片的工具 * McpTool 注解把这个方法暴露为MCP工具 */ McpTool( name image-search, description 根据关键词搜索图片返回图片URL列表 ) public ListImageInfo searchImages( McpToolParam(description 搜索关键词比如风景、猫、汽车) String keyword, McpToolParam(description 返回图片数量默认10张最大50) Integer limit ) { log.info(收到图片搜索请求: keyword{}, limit{}, keyword, limit); // 限制最大数量 if (limit null || limit 50) { limit 10; } // 这里是示例数据实际可以调用Unsplash、Pexels等API ListImageInfo results new ArrayList(); for (int i 0; i limit; i) { ImageInfo image new ImageInfo(); image.setId(String.valueOf(i)); image.setTitle(keyword - 图片 (i1)); image.setUrl(https://example.com/images/ keyword _ i .jpg); image.setThumbnail(https://example.com/thumbnails/ keyword _ i .jpg); results.add(image); } return results; } /** * 获取最近上传的图片 * McpResource 注解暴露资源 */ McpResource(uri image://recent/{count}) public ListImageInfo getRecentImages(McpResourcePath String count) { int num Integer.parseInt(count); return searchImages(recent, num); } } // 数据类 class ImageInfo { private String id; private String title; private String url; private String thumbnail; // getter/setter 省略 }步骤5运行服务bash# 打包 mvn clean package # 运行 java -jar target/mcp-server-1.0.0.jar服务启动后访问http://localhost:8080可以看到MCP服务信息。第五部分完整实战 - 图片搜索服务复制就能用服务端完整代码ImageSearchService.javajavapackage com.example.imagesearch; import org.springframework.ai.mcp.server.annotation.McpTool; import org.springframework.ai.mcp.server.annotation.McpToolParam; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.databind.JsonNode; import java.util.*; Service public class ImageSearchService { private final RestTemplate restTemplate new RestTemplate(); McpTool(name search-images, description 从Unsplash搜索免费图片) public ListMapString, String searchImages( McpToolParam(description 搜索关键词如mountain, cat, car) String keyword, McpToolParam(description 返回数量默认5) Integer limit ) { // 调用Unsplash API免费图片API String url https://api.unsplash.com/search/photos?query keyword per_page (limit null ? 5 : limit) client_idYOUR_UNSPLASH_ACCESS_KEY; try { JsonNode response restTemplate.getForObject(url, JsonNode.class); ListMapString, String results new ArrayList(); for (JsonNode photo : response.get(results)) { MapString, String image new HashMap(); image.put(id, photo.get(id).asText()); image.put(description, photo.get(description) ! null ? photo.get(description).asText() : keyword); image.put(url, photo.get(urls).get(regular).asText()); image.put(thumbnail, photo.get(urls).get(thumb).asText()); image.put(author, photo.get(user).get(name).asText()); results.add(image); } return results; } catch (Exception e) { // 返回模拟数据 return getMockData(keyword, limit); } } private ListMapString, String getMockData(String keyword, Integer limit) { ListMapString, String results new ArrayList(); for (int i 0; i (limit null ? 5 : limit); i) { MapString, String image new HashMap(); image.put(id, mock_ i); image.put(description, keyword 图片 (i1)); image.put(url, https://picsum.photos/id/ (i10) /800/600); image.put(thumbnail, https://picsum.photos/id/ (i10) /200/150); results.add(image); } return results; } }客户端完整代码ImageSearchController.javajavapackage com.example.imageclient; import org.springframework.ai.mcp.McpClient; import org.springframework.ai.mcp.model.McpCallToolRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; RestController RequestMapping(/api/images) public class ImageSearchController { Autowired private McpClient mcpClient; GetMapping(/search) public MapString, Object search(RequestParam String q, RequestParam(defaultValue 5) int limit) { MapString, Object response new HashMap(); response.put(keyword, q); response.put(limit, limit); try { // 调用MCP服务 McpCallToolRequest request new McpCallToolRequest(); request.setName(search-images); MapString, Object args new HashMap(); args.put(keyword, q); args.put(limit, limit); request.setArguments(args); Object result mcpClient.callTool(request); response.put(success, true); response.put(data, result); response.put(message, 搜索成功); } catch (Exception e) { response.put(success, false); response.put(message, 搜索失败: e.getMessage()); } return response; } }第六部分最佳实践避坑指南1. 工具设计原则java// ❌ 错误一个工具做太多事 McpTool(name doEverything) public String doEverything(String action, String param1, String param2, ...) // ✅ 正确每个工具职责单一 McpTool(name searchImages) public ListImage searchImages(String keyword) McpTool(name downloadImage) public String downloadImage(String imageId) McpTool(name getImageInfo) public ImageInfo getImageInfo(String imageId)2. 参数设计java// ❌ 错误参数含义模糊 McpTool(name process) public String process(String p1, String p2) // ✅ 正确参数清晰且有描述 McpTool(name searchImages, description 搜索图片) public ListImage searchImages( McpToolParam(description 搜索关键词如风景、猫) String keyword, McpToolParam(description 返回数量1-50默认10) Integer limit, McpToolParam(description 排序方式relevance/popularity/latest) String sortBy )3. 错误处理javaMcpTool(name searchImages) public ListImage searchImages(String keyword, Integer limit) { // 参数校验 if (keyword null || keyword.trim().isEmpty()) { throw new IllegalArgumentException(关键词不能为空); } if (limit ! null (limit 1 || limit 100)) { throw new IllegalArgumentException(数量必须在1-100之间); } try { // 业务逻辑 return doSearch(keyword, limit); } catch (Exception e) { log.error(搜索失败, e); // 返回空列表而不是抛异常让AI能继续工作 return Collections.emptyList(); } }第七部分部署方案方案1本地运行开发调试bash# 直接运行JAR java -jar mcp-server-1.0.0.jar # 或使用Maven mvn spring-boot:run方案2Docker部署创建DockerfiledockerfileFROM openjdk:17-jdk-slim COPY target/mcp-server-1.0.0.jar app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, /app.jar]构建和运行bash# 构建镜像 docker build -t mcp-image-search . # 运行容器 docker run -d -p 8080:8080 --name mcp-service mcp-image-search # 查看日志 docker logs mcp-service方案3云平台部署Railway示例注册 Railway.app连接你的GitHub仓库Railway会自动检测Spring Boot项目并部署获得公网URLhttps://your-service.up.railway.app第八部分安全和常见问题安全问题及解决方案风险说明解决方案命令注入恶意参数执行危险命令严格校验输入白名单限制越权访问访问不该访问的资源实现权限校验信息泄露返回敏感数据数据脱敏最小化返回DoS攻击大量请求消耗资源限流熔断安全配置示例javaConfiguration public class McpSecurityConfig { Bean public McpSecurityInterceptor securityInterceptor() { return new McpSecurityInterceptor() { Override public boolean preHandle(String toolName, MapString, Object args) { // 1. 参数长度限制 String keyword (String) args.get(keyword); if (keyword ! null keyword.length() 100) { throw new SecurityException(参数过长); } // 2. 敏感词过滤 if (containsSensitiveWords(keyword)) { throw new SecurityException(包含敏感词); } // 3. 频率限制 if (isRateLimitExceeded()) { throw new SecurityException(请求过于频繁); } return true; } }; } }

相关文章:

深入浅出MCP:从零开始的完整学习指南(保姆级教程)

手把手带你理解MCP是什么、怎么用、如何开发,每个步骤都有详细说明 写在前面 很多朋友看完MCP的介绍还是一头雾水:“这到底是什么?跟我有什么关系?我该怎么用?” 别急,这篇文章我会用最通俗的方式&#x…...

PFC2D几何操作避坑指南:geometry命令导出STL成功,DXF却报错?手把手教你排查

PFC2D几何操作避坑指南:geometry命令导出STL成功,DXF却报错?手把手教你排查 在岩土工程和颗粒流分析领域,PFC2D/3D作为一款强大的离散元分析软件,其几何操作功能是构建复杂模型的关键。许多用户在尝试使用geometry exp…...

Cursor Pro 终极破解指南:如何永久免费使用AI编程神器

Cursor Pro 终极破解指南:如何永久免费使用AI编程神器 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…...

长期使用Taotoken Token Plan套餐带来的成本控制感受

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken Token Plan套餐带来的成本控制感受 1. 从按需付费到预算规划 对于个人开发者或小型团队而言,大模型…...

工程师幽默竞赛:从技术梗到团队文化的创意表达

1. 项目概述:一场工程师的幽默竞赛如果你在电子工程行业待过一段时间,大概率在《EE Times》这样的行业媒体上,见过那种线条简洁、寓意深刻的单格漫画。漫画本身往往描绘一个充满电子元件、示波器或一脸困惑的工程师的实验室场景,但…...

先进制程重塑晶圆代工格局:从HPC需求到供应链博弈

1. 行业现状:先进制程如何重塑晶圆代工格局最近和几位在芯片设计公司负责流片的朋友聊天,大家讨论最激烈的,除了产能紧张,就是到底要不要、以及何时上更先进的工艺节点。一个普遍的共识是:7纳米和5纳米这类所谓“先进制…...

DeepSeek模型服务Kubernetes化迁移 checklist(含CRD定义、ServiceMesh适配、TLS双向认证配置)

更多请点击: https://intelliparadigm.com 第一章:DeepSeek模型服务Kubernetes化迁移全景概览 将DeepSeek系列大语言模型(如DeepSeek-V2、DeepSeek-Coder)从单机或虚拟机部署迁移至Kubernetes集群,是支撑高并发推理、…...

新手避坑指南:ICC LAB2 Design Planning 从加载设计到写出DEF的完整流程复盘

ICC LAB2 Design Planning全流程深度解析:从数据加载到DEF输出的实战避坑指南 当你第一次打开ICC工具面对LAB2的Design Planning任务时,是否感觉像被扔进了一个满是按钮的控制室?每个命令似乎都重要,但又不清楚它们如何串联成完整…...

Windows10系统V-rep安装避坑指南:从百度网盘资源到环境配置

1. 为什么选择V-rep以及准备工作 如果你是机器人学或仿真技术的初学者,V-rep(现更名为CoppeliaSim)绝对是一个值得尝试的仿真平台。它轻量级、跨平台,而且对硬件要求不高,特别适合在个人电脑上进行算法验证和教学演示…...

企业级长文档AI落地避坑指南,从PDF解析失真到语义断裂修复——Claude 2026六大隐性能力详解

更多请点击: https://intelliparadigm.com 第一章:PDF解析失真问题的根源与本质诊断 PDF 文件虽为“便携式文档格式”,但其内部结构高度异构——文本可能嵌入在图形路径中、字体被子集化或完全缺失、字符编码映射断裂,甚至存在跨…...

3PEAK思瑞浦 TPA2644-SO2R-S SOP14 运算放大器

特性 供电电压:3V至36V 偏移电压:3mV(最大值)差分输入电压范围至电源轨,可作为比较器工作 带宽:1.5MHz,斜率:0.5V/us输入轨至-Vs,无内部ESD二极管至Vs 低1/f噪声:在10Hz时为50nV/Hz 高PSRR:100kHz时60dB 开机和关机电流期间无明显输出抖动 工…...

Avogadro 2:3分钟掌握跨平台分子建模的5大核心价值

Avogadro 2:3分钟掌握跨平台分子建模的5大核心价值 【免费下载链接】avogadroapp Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, and related a…...

从电机控制到呼吸灯:用STM32CubeMX玩转TIM高级定时器的互补PWM与死区时间配置

从电机控制到呼吸灯:用STM32CubeMX玩转TIM高级定时器的互补PWM与死区时间配置 在嵌入式开发中,定时器是最基础也最强大的外设之一。对于STM32开发者来说,掌握高级定时器的互补PWM输出和死区时间配置,意味着可以解锁从电机控制到LE…...

软件需求捕获:从Therac-25悲剧到安全关键系统开发的脊柱工程

1. 项目概述:从Therac-25悲剧到现代软件安全基石上世纪90年代中期,一系列由Therac-25放射治疗机引发的致命事故,最终催生了一场由华盛顿大学Nancy Leveson教授主导的正式调查。这场调查的结论,远不止于揪出一款医疗设备的软件缺陷…...

【独家首发】Sora 2正式版未公开能力清单:原生支持3D空间锚点+时间轴语义编辑+版权水印嵌入(附OpenAI内部文档节选)

更多请点击: https://intelliparadigm.com 第一章:Sora 2正式版核心能力全景概览 多模态时序理解与生成一体化 Sora 2正式版突破性地将文本、图像、音频及物理运动参数统一编码至共享时空潜空间,支持长达120秒、1080p分辨率的连贯视频生成。…...

从CuteCom到代码:手把手教你用I.MX6ULL实现串口双向通信(附完整工程源码)

从CuteCom到代码:手把手教你用I.MX6ULL实现串口双向通信(附完整工程源码) 在嵌入式开发中,串口通信是最基础也最常用的调试手段之一。无论是简单的数据收发,还是复杂的协议交互,串口都能提供稳定可靠的通信…...

分布式系统智能告警治理:开源AIOps平台技术架构深度解析

分布式系统智能告警治理:开源AIOps平台技术架构深度解析 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 随着微服务和云原生架构的普及,分布式系统的监控告…...

2026毕业季必看!告别求职死循环,这两个高薪赛道让你稳上岸!

家人们谁都没想到,2026年毕业季求职难度直接拉满,堪称历年最难就业季!全国1270万高校毕业生扎堆涌入求职市场,岗位僧多粥少、竞争内卷到极致,无数应届生陷入一模一样的求职困境:精心打磨的简历海投出去&…...

Super IO插件:Blender文件操作效率革命,从繁琐拖拽到智能粘贴

Super IO插件:Blender文件操作效率革命,从繁琐拖拽到智能粘贴 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io Super IO是一款革命性的Blender插件,通…...

欲取全国第一先取北京第一,CSDN 博客排名现在是郑州第一

欲取全国第一先取北京第一,CSDN 博客排名现在是郑州第一 首先,必须得说,郑州第一,太牛了! 这绝对是对你技术输出和持续分享的高度认可,含金量十足。 不过,关于“欲取全国第一先取北京第一”这个…...

嵌入式开发实战:从ADC纹波故障看系统集成调试与EMC设计

1. 项目背景与问题缘起:当“新”设备遭遇“老”问题在工业设备开发领域,尤其是像线锯这类集精密机械、复杂电气和嵌入式软件于一体的复杂系统,有一个经典且令人头疼的场景:一款经过验证的成熟产品平台,在衍生出新机型或…...

别再复制粘贴了!手把手教你封装一个可复用的Qt文本编辑器核心组件类

从零封装高复用Qt文本编辑器核心类:工程化实践指南 在Qt开发中,文本编辑器是最常见的功能需求之一。许多开发者习惯将所有逻辑堆砌在MainWindow类中,导致代码臃肿、难以维护和复用。本文将带你从工程化角度重构文本编辑器,将其核心…...

詹姆斯·韦伯望远镜:344个单点故障背后的航天工程极限挑战

1. 韦伯望远镜的“生死十日”:一场价值百亿美元的太空芭蕾作为一名在航天与深空探测领域摸爬滚打了十几年的工程师,我经历过无数次地面测试的紧张,也见证过发射倒计时的屏息瞬间。但像詹姆斯韦伯空间望远镜(JWST)这样&…...

Atlas机器人:人形设计、液压驱动与救灾场景下的技术权衡

1. 项目概述:Atlas,一个充满争议的工程里程碑2013年,当波士顿动力公司为DARPA(美国国防高级研究计划局)打造的Atlas机器人首次公开亮相时,它在工程技术社区引发的震动,远不止于其令人惊叹的行走…...

Termius v7.0.1汉化踩坑实录:从修改entry.js到完美中文界面的完整流程

Termius v7.0.1深度汉化实战:从逆向分析到完美本地化的技术探索 Termius作为一款广受开发者喜爱的SSH客户端,其v7.0.1版本在功能和性能上都有显著提升。但对于中文用户而言,官方未提供完整的本地化支持始终是个遗憾。本文将带你深入Termius内…...

can消息的大小端对源码的影响

下图为小端intel型信号,其dbc文件部分源码为:BO_ 1 id_0x1: 8 Vector__XXXSG_ aaa : 0|121 (1,0) [0|0] "" Vector__XXX,这里的0代表的是起始位置为0(起始0->7,8->12为高位)如果将该信号改为大端motorola型&#…...

首次接入Taotoken时如何通过模型广场测试不同模型的响应效果

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 首次接入Taotoken时如何通过模型广场测试不同模型的响应效果 当你开始使用Taotoken平台,面对众多可选的模型&#xff0…...

可编程逻辑器件(PLD/CPLD/FPGA)核心原理、选型指南与EDA设计实战

1. 项目概述:从怀旧到硬核,聊聊可编程逻辑的“前世今生”那天在网上闲逛,本想找点微马赛克艺术(Micromosaic)的制作视频,结果算法一个拐弯,把我带回了上世纪七八十年代的《大青蛙布偶秀》&#…...

3步构建你的第二大脑:Obsidian知识管理系统实战指南

3步构建你的第二大脑:Obsidian知识管理系统实战指南 【免费下载链接】obsidian-template Starter templates for Obsidian 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-template 你是否曾为笔记杂乱无章而烦恼?是否在需要某个知识点时…...

Lumi Diary:基于OpenClaw Skill的本地AI记忆伴侣设计与实践

1. 项目概述:一个住在你设备里的记忆精灵如果你和我一样,对把生活点滴交给云端总有点不放心,但又渴望有一个能懂你、能帮你把碎片记忆编织成故事的伙伴,那么 Lumi Diary 的出现,可能正是时候。这不是又一个需要你手动打…...