MiniCPM-o-4.5-nvidia-FlagOS插件开发指南:为谷歌浏览器打造智能阅读与摘要助手

news2026/4/3 15:08:53
MiniCPM-o-4.5-nvidia-FlagOS插件开发指南为谷歌浏览器打造智能阅读与摘要助手你是不是经常在网上冲浪时面对一篇长文感到头疼只想快速抓住核心要点或者遇到一篇外文资料需要逐句翻译才能理解又或者文章中某个专业术语让你一头雾水希望有个“随身老师”能随时解答今天我们就来动手解决这个问题。我将带你一步步为谷歌浏览器开发一个智能助手插件它能帮你智能总结网页内容、快速翻译外文、解释复杂概念让你上网冲浪的体验直接起飞。这个插件的核心就是利用MiniCPM-o-4.5-nvidia-FlagOS这个强大的模型能力。听起来有点技术别担心我会用最直白的方式从零开始手把手教你。你不需要是前端大神只要对JavaScript和浏览器扩展有点基本了解就能跟着做出来。整个过程就像搭积木我们一块一块来。1. 开发前的准备理清思路与备好工具在写第一行代码之前我们先花几分钟搞清楚我们要做什么以及需要哪些东西。简单来说我们的插件会做三件核心事情智能摘要当你点击插件图标它能分析当前网页的主要内容生成一段言简意赅的总结。一键翻译遇到外文网页可以快速将主要内容翻译成你熟悉的语言。概念解释选中网页上的任何专业术语或复杂句子右键菜单就能召唤助手为你解释。为了实现这些功能插件需要和部署好的MiniCPM-o-4.5-nvidia-FlagOS模型API进行“对话”。所以你需要提前准备好一个可以访问的模型API端点Endpoint。这通常意味着你已经通过CSDN星图镜像广场或其他方式成功部署了该模型的镜像服务并拿到了API地址和密钥如果需要的话。接下来看看我们需要准备哪些“家伙什儿”一台电脑Windows、macOS或Linux都行。谷歌浏览器这是我们的“试验田”。一个代码编辑器VS Code、Sublime Text甚至记事本都行我推荐VS Code用起来顺手。基础的Web知识了解HTML、CSS和JavaScript特别是ES6的基本语法。不需要多精通能看懂和写简单的代码片段就行。一个可用的模型API确保你的MiniCPM-o-4.5-nvidia-FlagOS后端服务已经启动并且你知道如何调用它比如API的URL、请求格式、可能的认证信息。好了思路清晰工具就位我们正式开始搭建。2. 创建你的第一个浏览器扩展项目浏览器扩展其实就是一个特殊的网页应用它有一些固定的文件来告诉浏览器“我是谁”、“我能干什么”。我们先来创建项目的基本结构。在你的电脑上找个地方新建一个文件夹名字就叫smart-reader-extension吧。然后在这个文件夹里创建以下这些核心文件smart-reader-extension/ ├── manifest.json # 扩展的“身份证”和“说明书”最重要 ├── popup.html # 点击插件图标后弹出的窗口界面 ├── popup.js # 弹出窗口的逻辑代码 ├── background.js # 在后台一直运行的“服务人员” ├── content.js # 注入到网页中与页面内容交互的“特工” └── icons/ # 存放插件图标 ├── icon16.png ├── icon48.png └── icon128.png你可以先随便找几个不同尺寸16x16, 48x48, 128x128的图片当作图标或者画个简单的后面再换。现在我们来填写最重要的“说明书”——manifest.json。用编辑器打开它输入以下内容{ manifest_version: 3, name: 智能阅读助手, version: 1.0, description: 基于MiniCPM-o模型的网页智能摘要、翻译与解释工具, permissions: [ activeTab, scripting, contextMenus, storage ], host_permissions: [ http://*/, https://*/ ], background: { service_worker: background.js }, action: { default_popup: popup.html, default_icon: { 16: icons/icon16.png, 48: icons/icon48.png, 128: icons/icon128.png } }, content_scripts: [ { matches: [all_urls], js: [content.js] } ], icons: { 16: icons/icon16.png, 48: icons/icon48.png, 128: icons/icon128.png } }我来解释一下这几个关键部分manifest_version: 必须为3这是目前最新的扩展规范。permissions: 我们申请了4个权限。activeTab获取当前标签页信息scripting允许我们执行脚本contextMenus用来创建右键菜单storage用来存储用户设置比如你的API密钥。host_permissions: 允许插件与所有网站通信这样才能获取网页内容并发送到你的API。background.service_worker: 指定后台脚本它负责处理右键菜单和与内容脚本通信。action.default_popup: 指定点击插件图标时弹出的页面。content_scripts: 告诉浏览器当访问任何网页(all_urls)时自动把content.js这个脚本注入进去。3. 构建插件用户界面界面是用户直接打交道的地方要简洁好用。我们先来打造点击插件图标后弹出的那个小窗口。创建popup.html文件!DOCTYPE html html head meta charsetutf-8 style body { width: 320px; padding: 16px; font-family: sans-serif; } .container { display: flex; flex-direction: column; gap: 12px; } h3 { margin-top: 0; color: #333; } button { padding: 10px 16px; background-color: #4285f4; color: white; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; transition: background-color 0.2s; } button:hover { background-color: #3367d6; } button:disabled { background-color: #ccc; cursor: not-allowed; } .result-area { margin-top: 10px; padding: 12px; border: 1px solid #ddd; border-radius: 4px; background-color: #f9f9f9; min-height: 60px; max-height: 200px; overflow-y: auto; white-space: pre-wrap; font-size: 14px; line-height: 1.5; } .loading { color: #666; font-style: italic; } .error { color: #d93025; border-color: #f4c7c3; background-color: #fce8e6; } .config-link { text-align: right; margin-top: 8px; } .config-link a { color: #5f6368; font-size: 12px; text-decoration: none; } .config-link a:hover { text-decoration: underline; } /style /head body div classcontainer h3智能阅读助手/h3 button idsummarizeBtn 智能摘要/button button idtranslateBtn 翻译此页/button div classresult-area idresult点击上方按钮开始分析.../div div classconfig-link a href# idsettingsLink⚙️ 插件设置/a /div /div script srcpopup.js/script /body /html这个界面很简单一个标题两个主要功能按钮摘要和翻译一个用来显示结果的区域以及一个通往设置页面的小链接。样式也尽量做得清爽一些。接下来让这个界面动起来。创建popup.js// 弹出窗口的逻辑 document.addEventListener(DOMContentLoaded, function() { const summarizeBtn document.getElementById(summarizeBtn); const translateBtn document.getElementById(translateBtn); const resultDiv document.getElementById(result); const settingsLink document.getElementById(settingsLink); // 显示加载状态 function showLoading(message 处理中请稍候...) { resultDiv.textContent message; resultDiv.className result-area loading; summarizeBtn.disabled true; translateBtn.disabled true; } // 显示结果或错误 function showResult(text, isError false) { resultDiv.textContent text; resultDiv.className result-area ${isError ? error : }; summarizeBtn.disabled false; translateBtn.disabled false; } // 与后台脚本通信执行某个动作 function performAction(action) { showLoading(); // 获取当前活跃的标签页 chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { if (!tabs[0] || !tabs[0].id) { showResult(无法获取当前标签页信息。, true); return; } // 发送消息给内容脚本让它去干活 chrome.tabs.sendMessage(tabs[0].id, {action: action}, function(response) { if (chrome.runtime.lastError) { // 可能是内容脚本还没注入或页面不允许如chrome:// showResult(无法与当前页面通信。请刷新页面或尝试在其他网页使用。, true); } else if (response response.success) { showResult(response.result); } else { showResult(response?.error || 操作失败请重试。, true); } }); }); } // 绑定按钮点击事件 summarizeBtn.addEventListener(click, () performAction(summarize)); translateBtn.addEventListener(click, () performAction(translate)); // 打开设置页面我们稍后实现 settingsLink.addEventListener(click, (e) { e.preventDefault(); chrome.runtime.openOptionsPage(); }); });这段代码做了几件事页面加载好后获取页面上的按钮和显示区域。定义了showLoading和showResult函数来控制界面状态。performAction函数是核心。当用户点击按钮时它会先找到当前打开的网页标签然后向那个标签页里注入的content.js脚本发送一条消息说“嘿用户想摘要或翻译你处理一下。”最后绑定按钮的点击事件。4. 实现核心功能与网页和AI模型交互现在来到最核心的部分如何获取网页内容并调用AI模型API。首先创建content.js。这个脚本会直接运行在用户浏览的网页里所以它能直接读取网页的文本内容。// 注入到网页中的内容脚本 (function() { // 从网页中提取主要文本内容一个简单版本 function extractPageContent() { // 更健壮的方法可以过滤掉导航栏、广告等这里用简单方法 const bodyText document.body.innerText || ; // 简单清理去除过多空白取前10000个字符防止过长 return bodyText.replace(/\s/g, ).trim().substring(0, 10000); } // 获取用户存储在插件中的配置比如API地址 function getConfig(key) { return new Promise((resolve) { chrome.storage.sync.get([key], function(result) { resolve(result[key]); }); }); } // 调用后端MiniCPM-o模型的API async function callModelAPI(prompt, content) { const apiUrl await getConfig(apiUrl); const apiKey await getConfig(apiKey); // 如果API需要密钥 if (!apiUrl) { throw new Error(请先在插件设置中配置模型API地址。); } const fullPrompt ${prompt}:\n\n${content}; // 这里需要根据你的实际API格式进行调整 // 以下是假设API接受JSON格式的示例 const requestBody { model: minicpm-o-4.5-nvidia-flagos, // 模型名称根据实际情况调整 messages: [ { role: user, content: fullPrompt } ], max_tokens: 500, temperature: 0.7 }; const headers { Content-Type: application/json, }; if (apiKey) { headers[Authorization] Bearer ${apiKey}; } const response await fetch(apiUrl, { method: POST, headers: headers, body: JSON.stringify(requestBody) }); if (!response.ok) { throw new Error(API请求失败: ${response.status}); } const data await response.json(); // 这里需要根据你的API实际返回格式来提取文本 // 例如如果返回结构是 data.choices[0].message.content return data.choices?.[0]?.message?.content || data.result || 未收到有效回复。; } // 监听来自popup或background的消息 chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { // 异步处理需要返回true表示会异步发送回应 (async () { try { const pageContent extractPageContent(); if (!pageContent) { sendResponse({success: false, error: 无法提取页面内容。}); return; } let prompt; switch (request.action) { case summarize: prompt 请用简洁的中文总结以下网页内容的核心要点列出3-5条。; break; case translate: prompt 请将以下网页内容的主要部分翻译成中文保持原意。; break; default: sendResponse({success: false, error: 未知操作。}); return; } const result await callModelAPI(prompt, pageContent); sendResponse({success: true, result: result}); } catch (error) { console.error(处理请求时出错:, error); sendResponse({success: false, error: error.message}); } })(); // 返回true表示我们会异步发送回应 return true; }); // 右键菜单功能解释选中文本 chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { if (request.action explain) { (async () { try { const selectedText request.selectedText; if (!selectedText) { sendResponse({success: false, error: 未选中文本。}); return; } const prompt 请用通俗易懂的语言解释以下文本或概念\n\n“${selectedText}”; const result await callModelAPI(prompt, ); sendResponse({success: true, result: result}); } catch (error) { sendResponse({success: false, error: error.message}); } })(); return true; // 异步回应 } }); })();这个脚本有点长我拆解一下extractPageContent: 一个简单的函数抓取网页正文的纯文本。在实际产品中你需要用更聪明的方法比如Readability算法来提取核心内容过滤噪音。getConfig: 从插件的存储中读取用户设置API地址等。callModelAPI:这是最关键的函数。它构造请求调用你部署好的MiniCPM-o模型API。请注意请求的格式requestBody和解析响应的方式data.choices[0].message.content必须根据你的API文档来调整我写的只是一个常见格式的示例。chrome.runtime.onMessage.addListener: 监听来自其他部分如popup的消息。当收到summarize或translate请求时它就提取网页内容调用API然后把结果发回去。另一个监听器专门处理explain动作这是为右键菜单准备的它处理用户选中的文本。然后我们需要一个在后台默默工作的脚本background.js它主要负责创建右键菜单。// 后台服务脚本 // 创建右键菜单 chrome.runtime.onInstalled.addListener(() { chrome.contextMenus.create({ id: explain-text, title: 智能解释%s, contexts: [selection] // 只在选中文本时显示 }); }); // 监听右键菜单点击 chrome.contextMenus.onClicked.addListener((info, tab) { if (info.menuItemId explain-text info.selectionText) { // 向当前标签页的内容脚本发送消息 chrome.tabs.sendMessage(tab.id, { action: explain, selectedText: info.selectionText }, (response) { // 这里可以处理回应比如显示通知 if (response !response.success) { console.error(解释失败:, response.error); } }); } });这个脚本很简单当插件安装或更新时创建一个右键菜单项。当用户选中网页文字并点击这个菜单时它就把选中的文本发送给当前页面的content.js去处理。5. 加载插件与基础测试代码写得差不多了是时候把它装到浏览器里看看效果了。打开谷歌浏览器在地址栏输入chrome://extensions/并回车。打开右上角的“开发者模式”开关。点击左上角的“加载已解压的扩展程序”按钮。选择你刚刚创建的smart-reader-extension文件夹。如果一切顺利你的插件就会出现在扩展列表里了。现在你可以尝试点击浏览器工具栏上的插件图标应该能看到我们设计的弹出窗口。不过现在点击按钮大概率会报错因为我们还没配置API地址。6. 添加配置页面与完善功能为了让插件真正能用我们需要让用户能设置他们自己的API地址。我们来创建一个简单的设置页面。在项目根目录创建options.html和options.js。options.html:!DOCTYPE html html head meta charsetutf-8 style body { padding: 20px; font-family: sans-serif; } .form-group { margin-bottom: 15px; } label { display: block; margin-bottom: 5px; font-weight: bold; } input[typetext], input[typepassword] { width: 100%; padding: 8px; box-sizing: border-box; border: 1px solid #ccc; border-radius: 4px; } button { padding: 10px 20px; background-color: #4285f4; color: white; border: none; border-radius: 4px; cursor: pointer; } button:hover { background-color: #3367d6; } .status { margin-top: 15px; padding: 10px; border-radius: 4px; display: none; } .success { background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; } .error { background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; } /style /head body h2智能阅读助手 - 设置/h2 div classform-group label forapiUrl模型API地址 (URL):/label input typetext idapiUrl placeholder例如: http://your-server-ip:port/v1/chat/completions psmall请填写你部署的MiniCPM-o-4.5-nvidia-FlagOS模型的完整API地址。/small/p /div div classform-group label forapiKeyAPI密钥 (可选):/label input typepassword idapiKey placeholder如果你的API需要认证请填写密钥 /div button idsaveBtn保存设置/button div idstatusMessage classstatus/div script srcoptions.js/script /body /htmloptions.js:// 设置页面逻辑 document.addEventListener(DOMContentLoaded, function() { const apiUrlInput document.getElementById(apiUrl); const apiKeyInput document.getElementById(apiKey); const saveBtn document.getElementById(saveBtn); const statusDiv document.getElementById(statusMessage); // 加载已保存的设置 chrome.storage.sync.get([apiUrl, apiKey], function(result) { if (result.apiUrl) apiUrlInput.value result.apiUrl; if (result.apiKey) apiKeyInput.value result.apiKey; }); // 保存设置 saveBtn.addEventListener(click, function() { const apiUrl apiUrlInput.value.trim(); const apiKey apiKeyInput.value.trim(); if (!apiUrl) { showStatus(请填写API地址。, error); return; } chrome.storage.sync.set({ apiUrl: apiUrl, apiKey: apiKey }, function() { showStatus(设置已保存, success); }); }); function showStatus(message, type) { statusDiv.textContent message; statusDiv.className status ${type}; statusDiv.style.display block; setTimeout(() { statusDiv.style.display none; }, 3000); } });最后别忘了在manifest.json里声明这个设置页面。在文件末尾的}前添加options_page: options.html现在回到扩展管理页面找到你的插件点击“详细信息”里面应该有个“扩展程序选项”的链接点击就能打开设置页面了。填入你部署好的模型API地址保存。7. 测试与调试你的插件配置好API地址后就可以进行完整测试了。刷新扩展在chrome://extensions/页面找到你的插件点击右下角的刷新图标确保加载了最新的代码和配置。测试摘要功能打开一篇新闻或博客文章点击插件图标点击“智能摘要”。观察弹出窗口的状态变化和结果。打开浏览器的开发者工具F12切换到“Console”标签页查看是否有错误信息。最常见的错误是API地址不对或请求格式不符需要根据错误信息调整content.js中的callModelAPI函数。测试翻译功能打开一篇英文网页点击“翻译此页”。测试右键解释在任意网页选中一个词或一句话右键点击选择“智能解释...”。这个功能可能需要刷新一下当前页面才能生效因为内容脚本是在页面加载时注入的。调试技巧查看Popup错误右键点击插件图标选择“审查弹出内容”可以打开一个针对弹出窗口的开发者工具。查看Background错误在扩展管理页面点击插件卡片下的“service worker”链接。查看Content Script日志直接在网页的开发者工具Console里看因为content.js就运行在那里。8. 打包与后续优化建议测试通过后你就可以考虑打包分享了。在扩展管理页面点击“打包扩展程序”选择你的项目根目录就可以生成一个.crx安装文件和一个.pem密钥文件务必保存好用于后续更新。当然我们现在做的只是一个功能原型。要让它更实用、更健壮你还可以考虑做很多优化更智能的内容提取用更好的库如Mozilla的Readability来提取文章正文过滤导航、广告、评论等噪音。更友好的交互比如在网页侧边栏显示结果而不是弹窗支持自定义提示词增加历史记录功能。错误处理与重试网络请求可能失败需要更完善的错误处理和重试机制。性能优化缓存一些结果避免重复请求对长文章进行分块处理。用户反馈增加“结果有帮助/没帮助”的反馈按钮用于改进。整体走下来你会发现开发一个浏览器插件并没有想象中那么复杂核心就是理清扩展各部分的职责popup, content script, background script以及如何让它们之间顺畅地通信。这个智能阅读助手插件麻雀虽小但五脏俱全涵盖了扩展开发的主要知识点。最重要的是你亲手打造了一个能切实提升自己工作效率的工具。接下来你可以根据实际使用的MiniCPM-o模型的API文档调整请求和解析响应的部分然后尽情扩展它的功能吧。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2479220.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…