MCP协议实践:构建AI助手与IDE间的通信中继

news2026/5/12 5:18:51
1. 项目概述IDE与AI助手间的“通信中继”最近在折腾AI编程助手时发现一个挺有意思的痛点像Cursor、Claude Desktop这类IDE插件或独立应用它们内置的AI助手能力很强但很多时候我们希望能让它们访问到IDE之外的一些资源或服务。比如我想让AI帮我分析一下服务器上的实时日志或者查询一下项目依赖库的最新版本信息又或者操作一下本地的数据库。这些操作AI助手本身是“够不着”的因为它被限制在了IDE这个沙盒环境里。这时候andeya/ide-relay-mcp这个项目就进入了我的视野。简单来说它是一个“通信中继”服务器。你可以把它理解为一个翻译官和信使专门负责在IDE以及其内部的AI助手和外部各种工具、服务之间搭建桥梁。它的核心协议是MCPModel Context Protocol这是由Anthropic提出的一套标准旨在为AI模型提供结构化、安全的工具调用和上下文访问能力。而这个项目就是一个MCP服务器的具体实现它让AI助手能够通过标准的MCP协议安全、可控地调用开发者预先配置好的各种功能。对我而言它的价值在于将AI助手的“思考”能力与外部世界的“执行”能力连接了起来。我不再需要手动复制粘贴错误信息去问AI或者把AI生成的命令再手动到终端执行。通过配置这个中继AI助手能直接“看到”并“操作”我允许它接触的资源极大提升了人机协作的流畅度和自动化水平。无论你是想构建一个更智能的研发助手还是仅仅想提升日常编码效率理解并部署这样一个MCP中继都是迈向下一代开发工作流的关键一步。2. 核心架构与协议解析2.1 MCP协议AI的“标准外设接口”要理解ide-relay-mcp必须先搞懂它赖以生存的MCP协议。你可以把MCP想象成电脑的USB接口标准。在没有USB之前每个外设打印机、鼠标、U盘都需要自己的专用接口和驱动混乱且麻烦。USB协议出现后定义了一套通用的电气信号、数据格式和连接规范所有外设只要遵循USB标准就能即插即用。MCP协议之于AI模型就类似于USB之于电脑。它定义了一套AI模型如Claude、GPT与外部工具、数据源进行安全、结构化交互的标准方式。这套协议主要规定了三样东西工具Tools模型可以调用的函数。每个工具都有明确的名称、描述、参数列表JSON Schema格式。例如一个“查询天气”的工具会定义需要传入“城市名”这个参数。资源Resources模型可以读取的上下文信息。资源由URI标识可以是文件、数据库查询结果、API响应等。协议定义了如何列出、读取这些资源。提示Prompts可复用的对话模板或指令集方便模型快速进入特定任务上下文。MCP服务器如ide-relay-mcp就是实现了这套协议的“外设”。它向AI客户端宣告“我这里提供了这些工具和资源你可以按照MCP协议规定的格式来调用和访问。” AI客户端如Claude Desktop则作为MCP客户端发现并连接这些服务器从而扩展自身能力。2.2ide-relay-mcp的架构角色在这个生态中ide-relay-mcp扮演着承上启下的核心角色对下外部世界它通过插件化或模块化的方式集成各种功能。比如它可以集成一个shell模块来执行本地命令集成一个http模块来调用外部API或者集成一个自定义的database模块来查询数据。项目本身可能提供了一些基础模块更大的可能性是它设计了一个良好的扩展框架允许开发者用任何语言常见的是TypeScript/Python/Go编写自己的工具模块并注册进来。对上AI客户端它暴露出一个标准的MCP服务器接口。这个接口通常基于stdin/stdout或WebSocket进行通信使用JSON-RPC格式的消息。AI客户端通过这个接口发送标准的MCP请求如tools/call调用工具中继服务器收到后将其分发给对应的底层模块执行然后将执行结果封装成MCP响应格式返回给AI客户端。这种架构的优势非常明显安全性AI模型不直接接触系统所有操作都经过中继服务器。服务器可以实施权限控制、输入校验、操作审计。标准化无论底层工具多么千奇百怪暴露给AI的都是统一的MCP接口。AI客户端无需为每个工具单独适配。灵活性开发者可以按需编写工具模块不断丰富AI的能力边界。2.3 与常见IDE插件的区别很多人可能会混淆IDE里不是已经有GitHub Copilot、Cursor Agent这些插件了吗它们和MCP中继有什么区别关键在于“能力边界”和“控制权”。传统IDE插件其能力是固化的、由插件开发者定义的。例如一个代码补全插件它的核心能力就是分析代码和生成补全建议。用户无法让它突然去执行一个系统命令或查询远程API除非插件本身内置了这些功能。MCP中继它提供的是一个能力扩展平台。你作为开发者可以决定AI助手拥有哪些“超能力”。你可以自己写一个工具来“重启Docker容器”或者“发送钉钉通知”。只要这个工具被注册到MCP中继并且AI客户端连接了该中继AI助手就能调用它。控制权从插件开发者手中转移到了你——终端开发者手中。这就好比以前你只能使用软件商店里下载的现成AppIDE插件而现在你可以自己编写小程序并让手机AI助手直接运行它们通过MCP中继。3. 部署与配置实战理解了原理接下来我们动手让这个中继服务器跑起来。这里我假设一个典型的场景在本地开发机上部署ide-relay-mcp并配置一个简单的工具让AI助手能查询当前系统时间。3.1 环境准备与项目获取首先你需要一个Node.js环境假设项目是基于Node.js的这是MCP服务器的常见实现语言。建议使用Node.js 18或更高版本以及配套的npm或yarn包管理器。# 检查Node.js环境 node --version npm --version接下来获取项目代码。通常这类项目会发布在npm上也可能需要从源码构建。# 方式一如果项目已发布为npm包假设包名为 andeya/ide-relay-mcp npm install -g andeya/ide-relay-mcp # 方式二从GitHub克隆源码进行开发或自定义 git clone https://github.com/andeya/ide-relay-mcp.git cd ide-relay-mcp npm install # 或 yarn install注意实际包名或仓库地址请以项目官方文档为准。这里andeya/ide-relay-mcp是一个示例占位符。在操作前务必查阅项目的README或官方文档确认正确的安装方式。3.2 核心配置文件解析MCP服务器的行为通常由一个配置文件驱动比如mcp-server-config.json或config.yaml。这个文件定义了服务器启动哪些模块、每个模块的配置参数以及全局设置。让我们创建一个基础的配置文件config.json{ server: { transport: stdio, // 通信方式也可以是 websocket host: localhost, port: 3000 // 如果transport是websocket则需要配置端口 }, modules: [ { name: system-info, // 模块名称 type: builtin, // 类型内置、自定义脚本等 config: { allowedCommands: [date, uptime] // 该模块允许执行的命令 } }, { name: custom-tools, type: script, path: ./my-tools.js // 指向自定义工具模块的路径 } ], security: { allowedOrigins: [claude-desktop://*], // 允许连接的客户端这里是Claude Desktop enableAuth: false // 是否启用认证生产环境建议开启 } }关键配置项解读transport: 定义了MCP客户端与服务器如何通信。stdio通过标准输入输出通信。这是最简单的方式通常用于与本地AI客户端如Claude Desktop集成客户端会以子进程方式启动服务器。websocket通过网络WebSocket通信。这种方式更灵活服务器可以独立运行允许多个远程客户端连接。modules: 这是核心定义了加载哪些功能模块。每个模块需要指定其名称、类型和配置。type可以是builtin服务器内置、script外部脚本文件、packagenpm包等。security: 安全配置至关重要。allowedOrigins限制了可以连接的客户端防止未授权的访问。在生产环境中强烈建议启用认证enableAuth: true并配置令牌。3.3 编写第一个自定义工具模块配置文件中的custom-tools模块指向了./my-tools.js。现在我们来创建这个文件实现一个简单的工具。// my-tools.js /** * 一个简单的MCP工具模块示例。 * 该模块向MCP服务器注册一个名为 get_current_time 的工具。 */ // 工具定义必须符合MCP的Tool接口 const getCurrentTimeTool { name: get_current_time, // 工具名称AI调用时使用 description: 获取服务器的当前系统日期和时间。, // 工具描述AI根据描述决定是否调用 inputSchema: { type: object, properties: { // 这个工具不需要输入参数所以properties为空对象 }, required: [] // 没有必填参数 } }; // 工具的执行函数 async function getCurrentTime() { // 这里是工具的实际逻辑 const now new Date(); return { content: [ { type: text, text: 当前服务器时间是${now.toLocaleString()} (时区${Intl.DateTimeFormat().resolvedOptions().timeZone}) } ] }; } // 模块导出必须遵循MCP服务器约定的格式 module.exports { // 初始化函数服务器启动时调用 initialize: async (context) { // 向服务器注册工具 context.registerTool({ tool: getCurrentTimeTool, handler: getCurrentTime // 绑定执行函数 }); console.log(自定义工具模块已加载get_current_time); }, // 可选的清理函数 cleanup: async () { console.log(自定义工具模块正在清理...); } };代码要点解析工具定义对象name、description和inputSchema是必须的。inputSchema使用JSON Schema定义输入参数这帮助AI模型理解如何构造调用请求。我们这个工具不需要参数。执行函数getCurrentTime是实际执行业务逻辑的地方。它返回一个符合MCPToolResult格式的对象其中content数组包含要返回给AI的内容。模块接口模块必须导出initialize函数。服务器在加载模块时会调用它并传入一个context对象用于注册工具、资源等。3.4 启动服务器与连接客户端配置和模块都准备好了现在启动服务器。如果通过全局安装# 假设启动命令是 ide-relay-mcp并通过-c指定配置文件 ide-relay-mcp --config ./config.json如果通过源码运行# 在项目根目录下 node src/server.js --config ./config.json # 或者查看package.json中的scripts通常会有 npm start 或 npm run dev服务器启动后会在控制台看到类似日志MCP Server started. Transport: stdio Loaded modules: system-info, custom-tools Registered tools: get_current_time, ... 等待客户端连接...接下来配置你的AI客户端以Claude Desktop为例打开Claude Desktop设置Settings。找到“开发者设置”或“MCP服务器”相关选项。添加一个新的MCP服务器配置名称My Local Relay命令node或ide-relay-mcp如果全局安装参数/path/to/your/ide-relay-mcp/src/server.js--config/path/to/your/config.json如果使用stdio传输配置方式大致如此如果是websocket则需要填写服务器URL保存并重启Claude Desktop。重启后在Claude的对话界面你应该能发现AI助手多了一些能力。你可以尝试输入“请告诉我现在的系统时间。” AI应该会识别并调用get_current_time工具然后将中继服务器返回的结果呈现给你。4. 高级功能与自定义扩展基础功能跑通后我们可以探索更强大的用法打造真正属于自己的AI助手“瑞士军刀”。4.1 集成复杂外部系统MCP中继的真正威力在于集成。假设你的团队使用Jira进行项目管理你可以创建一个jira-tool模块。// jira-tools.js const axios require(axios); const jiraTool { name: search_jira_issues, description: 根据JQL语句在Jira中搜索问题。, inputSchema: { type: object, properties: { jql: { type: string, description: Jira查询语言语句例如project PROJ AND status In Progress }, maxResults: { type: number, description: 返回的最大结果数默认50, default: 50 } }, required: [jql] } }; async function searchJiraIssues({ jql, maxResults }, context) { // 从环境变量或安全存储中读取Jira配置 const JIRA_BASE_URL process.env.JIRA_BASE_URL; const JIRA_API_TOKEN process.env.JIRA_API_TOKEN; const JIRA_USER_EMAIL process.env.JIRA_USER_EMAIL; try { const response await axios({ method: get, url: ${JIRA_BASE_URL}/rest/api/3/search, auth: { username: JIRA_USER_EMAIL, password: JIRA_API_TOKEN }, params: { jql, maxResults }, headers: { Accept: application/json } }); const issues response.data.issues.map(issue ({ key: issue.key, summary: issue.fields.summary, status: issue.fields.status.name, assignee: issue.fields.assignee?.displayName || 未分配 })); return { content: [{ type: text, text: 找到 ${issues.length} 个问题\n issues.map(i - ${i.key}: ${i.summary} (状态: ${i.status}, 负责人: ${i.assignee})).join(\n) }] }; } catch (error) { // 错误处理很重要需要将友好的错误信息返回给AI return { content: [{ type: text, text: 查询Jira失败${error.response?.data?.errorMessages?.join(, ) || error.message} }], isError: true }; } } module.exports { initialize: async (context) { // 可以注册多个工具 context.registerTool({ tool: jiraTool, handler: searchJiraIssues }); // 还可以注册一个创建issue的工具... } };关键点安全凭证切勿将密码、令牌硬编码在代码中。使用环境变量process.env或安全的配置管理服务。错误处理网络请求可能失败API可能返回错误。工具必须捕获异常并返回结构化的错误信息isError: true让AI能理解并告知用户。结果格式化将原始的API响应通常是复杂的JSON转换成AI和人类易于理解的文本格式这是提升体验的关键。4.2 实现资源Resources提供除了工具MCP另一个核心概念是资源Resources。工具用于“执行操作”资源用于“提供信息”。例如你可以将项目的package.json文件或最近的日志文件作为资源暴露给AI。// file-resource-provider.js const fs require(fs).promises; const path require(path); module.exports { initialize: async (context) { // 注册一个资源列表函数告诉客户端有哪些资源可用 context.registerResourceListHandler(async () { // 假设我们暴露项目根目录的 package.json 作为资源 const resources [ { uri: file:///project/package.json, // 资源的唯一标识URI name: 项目 package.json, description: 当前项目的NPM依赖配置文件, mimeType: application/json }, { uri: file:///logs/app.log, name: 应用日志最新, description: 应用程序的最新日志文件, mimeType: text/plain } ]; return { resources }; }); // 注册一个资源读取函数当客户端请求某个URI时调用 context.registerResourceHandler(file, async (uri) { // 解析URI获取文件路径 const filePath uri.pathname; // 从 file:///project/package.json 中提取 /project/package.json const fullPath path.join(process.cwd(), filePath); // 转换为绝对路径示例逻辑 try { const content await fs.readFile(fullPath, utf-8); return { contents: [{ uri: uri.href, mimeType: uri.pathname.endsWith(.json) ? application/json : text/plain, text: content }] }; } catch (error) { throw new Error(无法读取资源 ${uri.href}: ${error.message}); } }); } };配置文件中加入这个模块后AI客户端就能“发现”这些资源。当你在对话中提到“看看我们项目的依赖”AI可以主动建议或直接读取package.json资源将其内容作为上下文进行分析而无需你手动复制粘贴。4.3 权限控制与安全最佳实践将系统能力暴露给AI安全是重中之重。ide-relay-mcp项目本身或你的配置必须包含严格的安全措施。最小权限原则每个工具模块只授予其完成功能所需的最小权限。例如一个“查询日志”的工具只应被允许读取特定的日志目录而非整个文件系统。输入验证与净化对所有来自AI客户端的输入进行严格验证。特别是对于执行命令shell模块、访问文件系统、拼接数据库查询语句等操作必须防范注入攻击。// 反面例子危险 const userInput args.command; // AI传来的命令 execSync(userInput); // 直接执行极度危险 // 正面例子安全白名单 const ALLOWED_COMMANDS [date, pwd, ls -la ./src]; if (!ALLOWED_COMMANDS.includes(args.command)) { throw new Error(命令 ${args.command} 不在允许列表中。); }认证与授权传输层如果使用WebSocket务必启用TLSWSS加密通信。应用层在服务器配置中启用认证如JWT令牌、API Key。客户端连接时必须提供有效的凭证。// config.json 安全部分 security: { enableAuth: true, authMethod: bearer_token, tokens: [your-secure-long-token-here-123456] }审计日志记录所有工具调用和资源访问的日志包括时间、调用者客户端标识、工具名、输入参数、执行结果可脱敏等。这便于事后审查和问题排查。网络隔离生产环境的MCP服务器应运行在受控的内部网络仅允许特定的、可信的AI客户端IP或网络段访问。5. 故障排查与性能调优在实际使用中你可能会遇到各种问题。这里记录一些常见坑点和解决思路。5.1 连接与通信故障问题现象可能原因排查步骤AI客户端无法发现/连接服务器1. 服务器未启动。2. 传输方式配置错误客户端配成websocket服务器是stdio。3. 安全配置如allowedOrigins阻止了连接。4. 命令或路径错误。1. 检查服务器进程是否在运行查看控制台日志。2. 核对客户端和服务器配置文件中的transport设置是否匹配。3. 检查服务器日志中的连接尝试和错误信息。4. 在终端手动运行服务器启动命令看是否能正常启动。工具调用失败返回“Tool not found”1. 工具名称拼写错误。2. 工具模块未正确加载或初始化失败。3. 工具未在MCP服务器中注册。1. 在AI客户端查看服务器提供的工具列表核对名称。2. 查看服务器启动日志确认目标模块是否加载成功有无初始化错误。3. 检查自定义工具模块的代码registerTool调用是否执行。工具执行超时或无响应1. 工具函数执行时间过长如网络请求慢。2. 工具函数陷入死循环或阻塞。3. 服务器资源不足。1. 在工具函数中添加超时逻辑或使用MCP服务器配置中的全局超时设置。2. 检查工具逻辑确保所有异步操作都有正确的错误处理和终止条件。3. 监控服务器CPU/内存使用情况。实操心得连接问题最常见。一个高效的调试方法是启用MCP协议的详细日志。许多MCP服务器和客户端都支持设置环境变量如NODE_DEBUGmcp*或DEBUGmcp*来打印出所有进出的JSON-RPC消息。通过观察这些原始消息你可以清晰地看到握手过程、工具列表交换以及具体的调用请求和响应定位问题会快很多。5.2 工具逻辑错误与调试当工具能调用但结果不对时问题出在工具实现本身。参数解析错误AI传递的参数格式可能与你的inputSchema预期不符。在工具处理函数开头打印接收到的args确保其结构正确。异步操作未处理确保所有异步操作都使用了async/await或正确返回Promise。一个未等待的Promise可能导致函数提前返回空结果。外部依赖失败网络请求、数据库连接、子进程调用都可能失败。必须用try-catch包裹核心逻辑并返回格式化的错误信息而不是让异常冒泡导致整个MCP调用失败。async function myTool(args, context) { console.log(工具收到参数, JSON.stringify(args)); // 调试日志 try { const result await someAsyncOperation(args); return { content: [{ type: text, text: 成功${result} }] }; } catch (error) { console.error(工具执行失败, error); // 返回错误信息而不是抛出异常 return { content: [{ type: text, text: 操作失败原因${error.message} }], isError: true }; } }5.3 性能优化建议随着工具增多性能可能成为问题。模块懒加载检查ide-relay-mcp是否支持模块懒加载。即只有在工具第一次被调用时才加载和初始化对应的模块而不是启动时全部加载可以加快服务器启动速度。连接池与缓存对于需要连接数据库、外部API的工具在模块初始化时建立连接池而不是每次调用都新建连接。对于频繁读取且变化不快的资源如项目配置可以实现简单的内存缓存。优化工具描述description字段要清晰准确。模糊的描述会导致AI模型无法正确理解工具用途从而错误调用或频繁询问用户澄清变相降低效率。批量操作工具如果AI经常需要执行一系列关联操作可以考虑设计一个“批量工具”。例如一个“部署预览环境”的工具内部依次执行“拉取代码、安装依赖、构建、启动服务”等多个步骤比AI分别调用四个独立工具更高效。部署和运行ide-relay-mcp这类项目本质上是为你和AI助手之间铺设了一条双向高速公路。它解耦了AI的“智能”与“执行”将执行能力的设计权和掌控权交还给了开发者。从简单的系统查询到复杂的集成工作流你可以像搭积木一样不断扩展这条高速公路上的“服务区”工具模块。我个人的体会是初期投入一些时间配置和开发基础工具模块会在后续的日常开发中带来持续的效率回报。当AI助手能一键帮你重启服务、查询线上错误、生成数据库变更脚本时那种流畅感是传统交互方式无法比拟的。开始可以从一个最常用、最手动化的任务入手将其工具化感受一下MCP带来的变化然后再逐步扩大其能力边界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2605416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…