Jupyter Notebook远程访问安全配置:密码保护与SSL加密实战指南
1. 项目概述为什么你的Jupyter Notebook需要一把“锁”如果你在Linux服务器上跑过Jupyter Notebook大概率经历过这样的场景为了图省事直接用jupyter notebook命令启动然后通过http://服务器IP:8888在本地浏览器访问。看起来一切顺利但你可能没意识到你的整个工作环境——包括所有代码、数据、甚至运行中的内核——都像一间没上锁的房间暴露在公网或内网中。任何一个知道服务器IP和端口的人都能直接走进来查看、修改甚至删除你的工作成果。这绝不是危言耸听我见过太多因为默认配置导致数据泄露、模型被篡改甚至服务器被植入挖矿脚本的案例。今天要聊的就是如何给你的Jupyter Notebook装上最关键的“门锁”和“监控”密码保护与安全的远程访问配置。这不仅仅是加个密码那么简单。它涉及到从配置文件生成、密码哈希计算、SSL加密通信到防火墙策略的一整套组合拳。对于数据科学家、机器学习工程师或者任何在Linux服务器上进行交互式编程的朋友来说这是一项必须掌握的基础安全技能。无论你是用个人云服务器做实验还是在公司内网部署数据分析服务一个配置得当的Jupyter Notebook环境能让你在享受其交互式便利的同时高枕无忧。接下来我会基于多年的运维和开发经验带你一步步拆解每个环节不仅告诉你怎么做更会解释为什么这么做以及踩过哪些坑。2. 安全配置的核心思路与架构设计在动手修改任何配置之前我们必须先理清Jupyter Notebook的安全体系是如何构建的。很多人一上来就找教程改配置文件但如果不理解背后的逻辑很容易配置出错或者留下安全死角。2.1 Jupyter Notebook的安全模型解析Jupyter Notebook本身是一个基于Web的交互式计算环境其安全核心围绕两个层面身份认证和通信加密。身份认证决定了“谁可以进来”。默认情况下Jupyter使用基于Token的认证。每次启动服务终端都会打印一串长长的Token如http://localhost:8888/?tokenabc123...。用户首次访问时需输入此Token之后浏览器Cookie会保存会话。这种方式的问题在于Token可能通过日志泄露且没有用户管理的概念。因此我们的目标是将认证方式升级为密码认证并生成一个强密码的哈希值存入配置避免明文存储。通信加密决定了“路上说的话是否会被偷听”。当你通过HTTP而非HTTPS远程访问时所有数据包括你输入的密码、执行的代码、加载的数据都是以明文形式在网络中传输。这意味着同一网络下的任何设备都可能通过抓包工具窃取信息。因此我们必须为Jupyter配置SSL/TLS证书强制使用HTTPS协议对传输通道进行加密。此外还有一个常被忽略的层面服务暴露范围。默认配置下Jupyter Notebook服务会绑定到localhost127.0.0.1这意味着它只接受来自本机的连接。当我们为了远程访问而将其绑定到0.0.0.0所有网络接口时就等于向整个网络敞开了大门。此时前面两项安全措施密码和SSL就成为了必须的“门锁”。2.2 配置文件一切安全的起点Jupyter的所有行为都由其配置文件控制主要是jupyter_notebook_config.py。这个文件通常不存在于初始安装中需要我们手动生成和定制。理解其中几个关键参数是安全配置的基石c.NotebookApp.ip 服务绑定的IP地址。localhost仅限本机0.0.0.0则监听所有网络接口。安全原则在配置好密码和SSL之前绝对不要将其设置为0.0.0.0。c.NotebookApp.port 服务监听的端口默认8888。可以考虑更改为不常见的端口避免被端口扫描工具轻易发现。c.NotebookApp.password 这里存放的不是你的明文密码而是密码的SHA256哈希值。Jupyter在认证时会将你输入的密码用同样的算法计算哈希再与这里存储的值比对。这意味着即使有人拿到了你的配置文件也无法反向破解出原始密码。c.NotebookApp.certfile与c.NotebookApp.keyfile 分别指向你的SSL证书文件.crt或.pem和私钥文件.key的路径。这是启用HTTPS的关键。c.NotebookApp.open_browser 启动时是否自动打开浏览器。在无图形界面的服务器上务必设置为False。c.NotebookApp.allow_root 是否允许以root用户运行。强烈不建议以root身份运行Jupyter这会导致严重的安全风险。应以普通用户运行。我们的配置策略将遵循“最小权限原则”和“纵深防御原则”先在本机环境生成密码哈希和测试SSL确认认证和加密工作正常后再谨慎地开放远程访问并辅以系统防火墙规则。3. 逐步实操从零构建安全环境理论清晰后我们进入实战环节。假设你已经在Linux服务器如Ubuntu 20.04/22.04或CentOS 7/8上安装好了Jupyter Notebook。我们将以一个名为data_user的普通用户身份进行操作。3.1 步骤一生成Jupyter配置文件首先我们需要生成默认的配置文件模板。Jupyter提供了一个便捷的命令jupyter notebook --generate-config执行后它会在用户家目录下的.jupyter文件夹中创建配置文件~/.jupyter/jupyter_notebook_config.py。注意如果你之前已经生成过此文件上述命令会提示你是否覆盖。如果已有重要配置请先备份。对于首次配置直接生成即可。3.2 步骤二创建并配置访问密码这是最关键的一步。我们将使用Jupyter内置的工具来生成密码哈希。启动Python交互环境在终端输入python或python3取决于你的系统默认版本。导入工具并生成哈希在Python解释器中依次执行以下命令from notebook.auth import passwd password_hash passwd()执行passwd()函数后它会提示你输入并确认密码。请务必设置一个强密码包含大小写字母、数字和特殊字符长度大于12位。复制生成的哈希值输入密码后终端会输出一个长字符串格式类似于argon2:$argon2id$v19$m10240,t10,p8$...。完整地复制这个字符串包括两端的单引号。这就是你的密码哈希。编辑配置文件用文本编辑器如vim、nano打开之前生成的配置文件。nano ~/.jupyter/jupyter_notebook_config.py配置密码哈希在配置文件中找到c.NotebookApp.password这一行大概在110行左右。默认它是被注释掉的以#开头。取消注释并将值设置为你刚才复制的哈希字符串。# 将原本的注释行 # c.NotebookApp.password # 修改为 c.NotebookApp.password argon2:$argon2id$v19$m10240,t10,p8$...你的完整哈希字符串实操心得千万不要在多个地方使用同一个密码。为Jupyter Notebook单独生成一个高强度密码并使用密码管理器保存。生成的哈希值一旦存入配置就不要再在其他地方使用明文密码了。3.3 步骤三生成并使用SSL证书实现HTTPS没有SSL的远程访问等于“裸奔”。我们有三种获取证书的方式自签名证书适合测试/内网、Let‘s Encrypt免费证书适合公网服务、或购买商业证书。对于个人或内部项目自签名证书是最快捷的选择尽管浏览器会提示“不安全”但通信本身是加密的。使用OpenSSL生成自签名证书mkdir -p ~/.jupyter/ssl cd ~/.jupyter/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem执行命令时会交互式地询问一些信息国家、省份等这些可以按回车键跳过或随意填写。但“Common Name”这一项非常重要应该填写你访问服务器时使用的域名或IP地址。如果使用IP访问就填服务器的公网IP或内网IP。生成后你会在~/.jupyter/ssl/目录下得到两个文件mycert.pem证书和mykey.key私钥。配置Jupyter使用SSL证书 再次编辑jupyter_notebook_config.py文件找到并修改以下两行# 取消注释并修改为你的证书路径 c.NotebookApp.certfile /home/data_user/.jupyter/ssl/mycert.pem c.NotebookApp.keyfile /home/data_user/.jupyter/ssl/mykey.key注意事项私钥文件mykey.key的权限必须严格设置确保只有所有者可读。可以使用命令chmod 600 ~/.jupyter/ssl/mykey.key进行修改防止私钥泄露。3.4 步骤四配置远程访问与基础优化现在我们可以安全地开放远程访问了。绑定IP地址在配置文件中找到c.NotebookApp.ip将其值改为0.0.0.0以监听所有网络接口。c.NotebookApp.ip 0.0.0.0修改默认端口可选但推荐找到c.NotebookApp.port可以将其从默认的8888改为其他未被占用的端口例如9999。这能避免一些针对默认端口的自动化扫描。c.NotebookApp.port 9999禁止自动打开浏览器在无界面的服务器上这个选项必须关闭。c.NotebookApp.open_browser False设置工作目录你可以指定Jupyter启动后的根目录默认是启动命令所在的当前目录。建议设置为你的项目目录。c.NotebookApp.notebook_dir /home/data_user/projects3.5 步骤五配置系统防火墙以UFW为例仅仅配置Jupyter还不够我们还需要在系统层面控制访问。如果你的服务器启用了防火墙如Ubuntu的UFW需要放行我们设定的Jupyter端口。# 允许特定端口例如我们设置的9999 sudo ufw allow 9999/tcp # 启用UFW如果尚未启用 sudo ufw enable # 检查规则 sudo ufw status verbose对于更严格的安全要求可以结合ufw的allow from规则只允许特定IP段访问该端口这在内网环境中非常有效。3.6 步骤六启动与验证服务所有配置完成后保存并退出配置文件。现在你可以启动Jupyter Notebook服务了。# 最简单的方式在前台启动 jupyter notebook # 更好的方式使用nohup或tmux在后台运行避免终端关闭后服务停止 nohup jupyter notebook ~/jupyter.log 21 启动后在另一台机器的浏览器中访问https://你的服务器IP地址:9999。注意这里必须是https://开头而不是http://。浏览器会因为自签名证书而显示“不安全”警告在Chrome中可能是“您的连接不是私密连接”。这是正常现象点击“高级”-“继续前往不安全”即可。随后页面会跳转到密码输入框输入你之前设置的密码即可成功登录。4. 进阶配置与生产环境考量基础的密码SSL配置已经能抵御大部分风险但对于生产环境或团队协作我们还需要考虑更多。4.1 使用Let‘s Encrypt免费SSL证书自签名证书的警告会影响体验。对于拥有域名的公网服务器强烈建议使用Let‘s Encrypt的免费证书。你可以使用Certbot工具自动化获取和续签。# 以Ubuntu为例安装Certbot sudo apt update sudo apt install certbot # 获取证书假设你的域名是 notebook.yourdomain.com sudo certbot certonly --standalone -d notebook.yourdomain.com获取成功后证书和私钥通常存放在/etc/letsencrypt/live/notebook.yourdomain.com/目录下。然后将Jupyter配置中的certfile和keyfile指向对应的fullchain.pem和privkey.pem即可。别忘了设置自动续期。4.2 配置JupyterHub进行多用户管理单个Jupyter Notebook实例只适合个人使用。如果需要为团队提供Jupyter服务JupyterHub是官方推荐的解决方案。它可以管理多个用户每个用户拥有独立的、受保护的工作空间。JupyterHub的配置更为复杂涉及用户认证如PAM、OAuth、资源隔离DockerSpawner、KubeSpawner等是构建企业级数据科学平台的基础。4.3 结合反向代理Nginx/Apache直接暴露Jupyter服务到公网并非最佳实践。更优雅的方式是使用Nginx或Apache作为反向代理。这样做的好处很多统一端口可以让Jupyter和其他Web服务共享443HTTPS端口。负载均衡未来扩展多实例时更方便。静态文件服务由更高效的反向代理处理静态资源。附加安全层可以在Nginx层面添加额外的访问控制、限流、WAFWeb应用防火墙规则。一个简单的Nginx配置示例如下server { listen 443 ssl; server_name notebook.yourdomain.com; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; location / { proxy_pass http://127.0.0.1:9999; # 指向本地Jupyter服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 以下两行对WebSocket连接至关重要 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }配置后用户只需访问https://notebook.yourdomain.com无需记忆端口号且由Nginx处理SSL卸载Jupyter本身的配置可以简化甚至可以不用配置SSL。5. 常见问题排查与实战技巧即使按照步骤操作你也可能会遇到一些问题。这里汇总了一些高频问题和解决方法。5.1 连接与访问问题排查表问题现象可能原因排查步骤与解决方案浏览器无法连接提示“无法访问此网站”或“连接被拒绝”1. Jupyter服务未启动。2. 防火墙阻止了端口。3. IP绑定错误。1. 在服务器上执行 ps aux访问HTTPS链接浏览器提示“不安全”或证书错误使用了自签名证书。这是预期行为。点击“高级”-“继续前往”即可。若想消除警告需部署受信任的证书如Let‘s Encrypt。能打开登录页但输入密码后无法登录或反复跳回登录页1. 密码哈希配置错误。2. 浏览器Cookie或缓存问题。3. 配置文件未生效。1.最常见原因哈希字符串复制不完整或两端的单引号丢失。重新执行passwd()仔细复制整个字符串包括引号并粘贴到配置文件中。2. 尝试使用浏览器的无痕模式访问。3. 确认修改的是正确的配置文件~/.jupyter/jupyter_notebook_config.py并重启了Jupyter服务。登录后页面空白或无法创建新Notebook1. SSL证书配置错误尤其是密钥不匹配。2. 工作目录权限问题。3. WebSocket代理配置错误如果用了反向代理。1. 检查证书和密钥文件路径是否正确以及私钥文件权限是否为600。2. 检查c.NotebookApp.notebook_dir指向的目录是否存在且当前运行Jupyter的用户对其有读写权限。3. 如果使用了Nginx确保配置中包含了对WebSocket的代理设置见4.3节。服务启动失败报错“Address already in use”默认端口8888已被其他进程占用。1. 使用 netstat -tlnp5.2 性能与稳定性优化技巧后台运行与日志管理不要在前台直接运行jupyter notebook。使用nohup、systemd服务或tmux会话将其放在后台。同时将输出重定向到日志文件便于排查问题。# 使用nohup示例 nohup jupyter notebook --config ~/.jupyter/jupyter_notebook_config.py /var/log/jupyter.log 21 资源限制对于多人使用的服务器需要注意Jupyter可能消耗大量内存和CPU。可以通过Linux的cgroups或容器化技术Docker对单个Notebook进程的资源使用进行限制。定期更新定期更新Jupyter及其相关库如notebook、jupyterhub以获取安全补丁和新功能。使用pip install --upgrade notebook进行更新。备份配置文件将你精心配置好的jupyter_notebook_config.py文件进行备份。在搭建新环境时可以直接复用极大提升效率。5.3 一个关键的“踩坑”提醒关于Token认证的残留即使你配置了密码在首次启动Jupyter时终端可能仍然会打印出一行带有Token的URL。不要将此URL分享给任何人这个Token在密码认证启用后依然有效可以作为备用登录方式。如果你希望完全禁用Token认证只使用密码可以在配置文件中添加c.NotebookApp.token 但这样做之后万一你忘记了密码将无法通过任何方式登录。因此请务必保管好你的密码。配置安全的Jupyter Notebook远程访问就像为你的数字工作室安装防盗门和监控系统。过程并不复杂但每一步都关乎安全底线。从生成密码哈希、配置SSL到设置防火墙和考虑反向代理这套组合拳打下来你的数据科学工作环境才能真正做到既便捷又可靠。在实际操作中最常出问题的就是密码哈希的复制粘贴环节以及SSL证书的路径配置多一分仔细就少一次深夜排查。

相关新闻

LeetCode 105:从前序与中序遍历构造二叉树,Java 递归解法详解

LeetCode 105:从前序与中序遍历构造二叉树,Java 递归解法详解

一、题目描述给定一棵二叉树的前序遍历 preorder 和中序遍历 inorder,请还原这棵二叉树。题目保证数组中没有重复元素。preorder [3, 9, 20, 15, 7] inorder [9, 3, 15, 20, 7]构造结果如下:3/ \9 20/ \15 7关键是从两种遍历序列中确定根节点&am…

2026/8/9 2:22:47 阅读更多 →
罗克韦尔 AB(伟肯)AB33I 风机驱动板卡

罗克韦尔 AB(伟肯)AB33I 风机驱动板卡

一、板卡基础概述1.1 型号溯源与适配机型AB33I 行业俗称,原厂本体为 VACON 伟肯399I(物料号 PC00299H)风机驱动电源板,罗克韦尔收购伟肯之后,大批量搭载在 AB 大功率变频器内部,现场运维习惯性简称为 AB33I…

2026/8/9 2:22:47 阅读更多 →
如何快速提升日本麻将水平?mahjong-helper智能助手为你提供专业指导

如何快速提升日本麻将水平?mahjong-helper智能助手为你提供专业指导

如何快速提升日本麻将水平?mahjong-helper智能助手为你提供专业指导 【免费下载链接】mahjong-helper 日本麻将助手:牌效防守记牌(支持雀魂、天凤) 项目地址: https://gitcode.com/gh_mirrors/ma/mahjong-helper 你是否在雀…

2026/8/9 2:22:47 阅读更多 →

最新新闻

2026年浪潮最火的三款服务器怎么选?DeepSeek V4部署需要什么配置?全国优秀代理商名单+区域采购指南

2026年浪潮最火的三款服务器怎么选?DeepSeek V4部署需要什么配置?全国优秀代理商名单+区域采购指南

目录 2026年浪潮最火的三款服务器怎么选?DeepSeek V4部署需要什么配置?全国优秀代理商名单区域采购指南开篇:一个采购总监的72小时一、浪潮2026年三款主力服务器:到底谁最火? 1. NF5280G7:通用算力王者&…

2026/8/9 3:17:12 阅读更多 →
告别唯代码论:构建多元化程序员考核体系,提升团队效能与创新

告别唯代码论:构建多元化程序员考核体系,提升团队效能与创新

1. 从“码力崇拜”到价值回归:为什么我们需要重新定义程序员考核在技术圈待了十几年,我见过太多关于程序员的“刻板印象”和“单一评价”。最典型的就是“唯代码论”——一个程序员的价值,似乎完全等同于他每天提交的代码行数、修复的Bug数量…

2026/8/9 3:17:12 阅读更多 →
基于RocketMQ LiteTopic构建AI推理服务精细化流量治理方案

基于RocketMQ LiteTopic构建AI推理服务精细化流量治理方案

1. 从“一刀切”到“千人千面”:AI推理流量治理的必然演进最近在搞一个AI推理服务的线上稳定性保障,遇到了一个挺典型的问题。我们的服务接入了好几个大模型,有处理实时对话的,有跑文生图的,还有做代码生成的。起初流量…

2026/8/9 3:17:12 阅读更多 →
Vue大文件切片上传实现与优化方案

Vue大文件切片上传实现与优化方案

1. 大文件上传的痛点与解决方案 前端开发中处理大文件上传一直是个令人头疼的问题。我最近在一个视频管理后台项目中就遇到了这个挑战 - 用户需要上传平均2GB以上的高清视频素材,传统的文件上传方式完全无法满足需求。 传统表单上传的局限性非常明显:首…

2026/8/9 3:17:12 阅读更多 →
Unity3D第一人称迷宫游戏开发:从场景搭建到性能优化的全流程实战

Unity3D第一人称迷宫游戏开发:从场景搭建到性能优化的全流程实战

1. 项目概述与核心价值最近在社区里看到不少朋友对Unity3D的第一人称视角小游戏开发感兴趣,尤其是迷宫探索这类经典玩法。作为一个从Unity 4.x版本就开始折腾的老玩家,我决定把当年踩过的坑、总结的经验,结合现在更成熟的开发流程&#xff0c…

2026/8/9 3:17:11 阅读更多 →
程序员想转AI的话,可以看下FDE这个新岗位。

程序员想转AI的话,可以看下FDE这个新岗位。

硅谷不少公司都在高薪招聘 FDE,比如 OpenAI、Anthropic、Scale AI,感觉这是程序员的一条新出路。 有人可能觉得,FDE 就是换汤不换药,和之前的售前工程师、解决方案架构师或者技术支持没什么区别。 其实不是。今天我想写一篇文章&a…

2026/8/9 3:16:11 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →