构建可控真实探针系统:从可观测性到可交互性的运维诊断实践
1. 项目缘起一个运维的“无力感”与破局点做后端运维或者SRE的朋友对“Owner Console”或者“服务控制台”这类内部管理页面肯定不陌生。它们通常是我们了解服务状态的第一窗口集成了各种监控图表、日志链接和基础配置。但不知道你有没有遇到过这种场景凌晨三点告警响了你睡眼惺忪地打开控制台看到某个核心接口的P99延迟曲线突然飙升图表一片飘红。控制台告诉你“有问题”但“问题在哪”、“根因是什么”它却沉默了。你只能像开盲盒一样依次点开日志系统、链路追踪、 metrics 查询页面手动拼凑线索整个过程耗时耗力那种面对复杂问题时的“无力感”非常强烈。我负责的服务就曾长期处于这种状态。我们的 Owner Console 功能齐全数据展示漂亮但它本质上是一个“只读”的仪表盘。它能反映症状却无法进行诊断。所有的排查动作都需要跳出这个页面依赖外部工具和一系列手动操作来完成。这就像医生只有一个显示病人发烧的体温计却没有听诊器、血压计和化验单无法进行任何触诊和检查。“可控真实探针”这个想法就是在一次棘手的线上问题排查后诞生的。那次问题与一个第三方依赖的偶发性超时有关在控制台里只能看到结果大量5xx错误但无法在问题发生时实时、精准地抓取到下游服务的具体响应、网络状况甚至中间件内部状态。我们需要的是在问题复现的瞬间能够从服务内部“刺”出一根探针主动收集特定维度的深度信息而不是被动地等待日志上报或抓取全局快照。于是我决定改造这个“只读页面”目标是赋予它手动触发、精准定向的诊断能力让运维动作从“观察”走向“干预”和“探测”。这不是简单地加几个按钮调用现有API而是设计一套完整的、低侵入的、安全的主动诊断框架。下面我就把这套从设计到落地的完整思路和实操细节拆解给你。2. 核心设计构建安全可控的主动诊断框架给一个现有的管理页面增加主动操作能力首要考虑的不是功能有多强大而是安全与可控。一个可以执行任意命令的“后门”是灾难性的。因此整个设计的核心思想是“预定义诊断场景按需手动触发动态注入执行结果集中回收”。2.1 架构分层与职责界定整个系统可以清晰地分为四层控制台交互层 (Console UI)即原有的 Owner Console 页面。需要新增的是一个个具体的“诊断面板”每个面板对应一个预定义的诊断场景例如“数据库连接池采样”、“特定用户请求链路追踪”、“缓存热点Key分析”等。这里只有触发按钮和参数输入框如果需要不包含任何诊断逻辑。诊断网关层 (Diagnosis Gateway)这是新增的核心安全屏障。所有从控制台发起的诊断请求都必须先到达网关。网关负责身份认证与鉴权确认操作者是否有权限执行该诊断动作。这通常需要比页面访问更高级别的权限。请求校验与限流检查传入的参数是否合法防止恶意注入。同时对同一服务、同一诊断类型的请求进行频率限制避免诊断操作本身对服务造成压力。任务编排与下发将合法的诊断请求转化为一个具体的“诊断任务”下发到目标服务所属的“诊断执行器”。诊断执行器层 (Diagnosis Agent)这是一个需要轻量级集成到业务服务中的组件。它以一个独立线程或协程的方式存在常驻内存但绝大部分时间处于休眠状态资源消耗极低。它的职责是接收并解析任务从网关接收任务指令。动态加载与执行探针根据任务中指定的“探针类型”从预置的探针库中加载对应的诊断代码片段Probe并在安全的沙箱环境如独立的线程池中执行。数据收集与上报执行探针收集指定的数据如当前线程堆栈、JVM内存快照、特定SQL的执行计划、一段时间的请求采样等将结果打包上报给网关或指定的存储服务。探针库 (Probe Library)这是一个代码仓库存放所有预编译、审核过的诊断探针。每个探针都是一个独立的、功能单一的小模块。例如ThreadDumpProbe: 采集当前JVM所有线程的堆栈信息。SlowQueryCaptureProbe: 动态开启对某个数据库的慢查询日志捕获持续N秒。MethodTracingProbe: 对某个特定类的方法进行动态埋点打印出入参和执行时间。关键设计原则探针的执行必须是“旁路式”和“可熔断”的。即探针执行失败或超时绝不能影响主业务逻辑。通常需要通过线程池隔离、设置超时时间、以及捕获所有异常来实现。2.2 通信协议与数据格式为了通用性网关与执行器之间采用 HTTP/RESTful API 是最简单直接的选择。但对于高频或大数据量的诊断可以考虑使用更高效的 RPC 框架如 gRPC或消息队列如 Kafka进行指令下发和结果回传。数据格式推荐使用 JSON结构清晰易于扩展。一个典型的诊断任务请求体如下{ taskId: diag_20231027_001, targetService: user-service, targetInstance: 10.0.1.5:8080, probeType: JvmMemoryHeapDump, parameters: { liveObjectsOnly: true, dumpPath: /tmp/heapdump.hprof }, triggerMode: manual, timeoutSeconds: 120 }对应的诊断结果响应体{ taskId: diag_20231027_001, status: SUCCESS, result: { data: { fileUrl: http://internal-storage/diag/user-service/heapdump_20231027_001.hprof, fileSize: 1.5GB, summary: Heap dump completed, dominated by cache objects. }, metrics: { executionTimeMs: 45000, cpuCostPercent: 15, memoryOverheadMB: 50 } }, errorMessage: null, timestamp: 1698403200000 }3. 关键实现低侵入集成与动态探针加载有了设计蓝图接下来就是如何在不“伤筋动骨”的情况下将这套系统嵌入现有服务。3.1 诊断执行器Agent的集成目标是让业务服务“无感”或“低感”地拥有被诊断能力。我们采用了“Java Agent 轻量级SDK”的组合方案。对于新服务在服务启动命令中加入-javaagent:/path/to/diagnosis-agent.jar参数。这个 Agent Jar 包在服务启动初期通过字节码增强技术在关键类如Spring MVC的DispatcherServlet、RPC框架的客户端等中植入简单的“钩子”用于在收到诊断指令时激活诊断执行器模块。这种方式侵入性最低。对于存量服务如果修改启动参数成本高则采用“轻量级SDK依赖”的方式。在服务的pom.xml或build.gradle中引入一个diagnosis-client的依赖。该SDK在Spring Context初始化时自动注册一个后台线程和HTTP端点如/internal/diagnosis用于接收网关指令。这种方式需要一次发布但后续更新探针库时部分探针可以支持热加载。Agent/SDK的核心初始化流程启动一个后台心跳线程定期向诊断网关注册自己的服务名、实例IP和状态宣告“我在这里可以被诊断”。暴露一个安全的HTTP接口通常绑定在管理端口如8081与业务端口8080隔离用于接收任务。初始化一个探针加载器ProbeClassLoader用于隔离加载探针代码避免与业务类冲突。准备一个隔离的线程池专门用于执行探针任务并设置任务队列大小和拒绝策略。3.2 探针的动态加载与安全执行这是技术上的核心挑战。我们不能每次更新诊断脚本都重启服务因此需要动态加载。但同时必须严防死守确保执行的代码绝对安全。我们实现的“沙箱”方案探针白名单机制网关下发的probeType必须是在服务端预注册的白名单内。这个白名单在Agent启动时从网关同步或写在本地配置中。任何不在名单内的探针类型都会被直接拒绝。独立的类加载器为每个探针任务创建一个独立的ProbeClassLoader其父类加载器设置为null或一个极小的引导类加载器并严格控制其可加载的类路径。通常只允许加载来自一个特定目录如/opt/probes/下的、经过签名的Jar包。这样探针代码无法访问业务系统的类如你的UserService反之亦然实现了代码隔离。权限控制使用 Java Security Manager 或更现代的java.lang.instrument能力对探针代码的运行权限进行细粒度控制。例如禁止执行System.exit()、禁止创建文件除非指定目录、禁止发起网络连接除非到指定的监控存储服务。超时与熔断每个探针任务都必须设置明确的超时时间如30秒。执行线程会被监控一旦超时立即中断线程并标记任务失败。同时整个诊断执行器有全局的熔断器如果短时间内失败率过高会暂时拒绝新任务保护服务。一个简单的线程堆栈采集探针示例// 探针白名单中注册的类名com.yourcompany.probe.ThreadStackProbe public class ThreadStackProbe implements DiagnosticProbe { Override public DiagnosisResult execute(MapString, String parameters) { DiagnosisResult result new DiagnosisResult(); MapThread, StackTraceElement[] allStackTraces Thread.getAllStackTraces(); // 将堆栈信息转换为易读的文本可以过滤掉某些等待状态的线程如pool线程 StringBuilder sb new StringBuilder(); for (Map.EntryThread, StackTraceElement[] entry : allStackTraces.entrySet()) { Thread thread entry.getKey(); if (thread.getState() Thread.State.RUNNABLE || ...) { // 过滤条件 sb.append(\).append(thread.getName()).append(\ ); sb.append(thread.getState()).append(:\n); for (StackTraceElement ste : entry.getValue()) { sb.append( at ).append(ste).append(\n); } sb.append(\n); } } result.setData(sb.toString()); result.setSuccess(true); return result; } }这个探针会被打包成thread-stack-probe.jar签名后放入指定目录。当控制台触发“采集线程堆栈”任务时网关下发指令Agent动态加载这个Jar包实例化ThreadStackProbe类并执行execute方法。4. 控制台集成从按钮到洞察最后一步是把这一切在 Owner Console 上无缝地呈现出来让运维同学用得顺手。4.1 诊断面板的设计我们摒弃了“一个万能输入框”的做法而是为每个诊断场景设计专属面板。这能极大降低使用门槛和误操作风险。例如“数据库慢查询实时捕获”面板包含目标数据源选择下拉框列出该服务配置的所有数据源如userMaster,orderSlave。阈值输入框输入慢查询阈值单位毫秒。捕获时长输入框设置本次捕获持续多长时间如30秒。触发按钮按钮状态可实时反馈“就绪” - “执行中” - “完成/失败”。历史记录区域展示过去触发过的任务列表可直接查看结果或下载捕获到的慢查询日志文件。当用户填写参数并点击触发前端会向后端诊断网关发送一个结构化的请求。前端需要实现长轮询或WebSocket来实时获取任务执行状态“已下发”、“执行中”、“成功”、“失败”并动态更新按钮和面板状态。4.2 结果可视化与上下文关联诊断结果的展示至关重要。原始的数据如堆栈文本、内存二进制文件对大多数人并不友好。结构化解析对于线程堆栈后端可以解析后将线程按状态分组RUNNABLE, BLOCKED, WAITING并统计相同堆栈模式的出现次数帮助快速发现“锁竞争”或“忙等待”问题。可视化展示对于内存快照Heap Dump可以提供链接直接跳转到公司内集成的在线分析工具如类似MAT的工具进行可视化分析。上下文关联在诊断结果页面旁边可以自动关联展示任务执行时刻的服务关键指标CPU、内存、QPS、错误率以及该时间点前后的应用日志片段。这提供了极其宝贵的“现场上下文”让诊断结果不再是孤立的。5. 实战案例一次内存泄漏的精准定位理论说再多不如看一次实战。去年“双十一”前压测我们发现订单服务的一个实例内存缓慢增长最终OOM。通过监控只能看到Old Gen使用率持续上升但不知道是什么对象在“作怪”。观察期在控制台的内存监控面板上确认了增长趋势。触发诊断我打开了该实例的“内存诊断”面板。没有选择在高峰时进行全堆转储影响太大而是先使用了“直方图采样”探针。这个探针开销极小它通过JMX快速统计堆内存中各类对象的数量和占用大小。点击触发5秒后结果返回。数据显示ConcurrentHashMap$Node和某个自定义的OrderCacheDTO对象数量异常多。深入分析这提示我们缓存可能出了问题。我紧接着使用了“软引用缓存检查”探针这是我们针对本地缓存框架自定义的探针。探针执行后报告显示缓存命中率极低且缓存项数量远超预设上限但很多项已处于“软引用可达”状态说明内存紧张时它们本该被GC回收却因为被某些强引用意外持有而无法释放。定位根因根据上一步的线索我们怀疑是某个全局的List在不停地追加缓存键。我们使用了第三个探针“追踪特定对象GC路径”探针。这个探针需要指定一个样本对象我们从直方图里拿到了一个OrderCacheDTO的对象ID。探针通过反射和JVM调试接口找出了持有该对象引用的上层对象链。结果清晰地显示一个用于记录“缓存访问日志”的全局Queue持有了所有缓存对象的引用导致它们无法被GC。解决与验证定位到代码后修复很简单将强引用改为弱引用。发布后再次触发“直方图采样”看到相关对象数量稳定在正常范围内存曲线恢复平稳。整个排查过程从发现问题到定位根因全部在Owner Console内完成没有切换任何其他系统。这种“观察 - 假设 - 探测 - 验证”的流畅体验将一次可能耗时数小时甚至跨天的深度排查缩短到了半小时内。6. 避坑指南与最佳实践在实施这套系统的过程中我们踩了不少坑也积累了一些关键经验。安全性是生命线网络隔离诊断网关与执行器之间的通信必须走内部管理网络绝对禁止从公网直接访问执行器端点。双向认证不仅网关要验证AgentAgent也要验证网关的证书防止恶意网关下发指令。操作审计所有诊断任务的触发人、时间、目标、参数、结果状态必须完整记录并接入公司的操作审计系统做到事后可追溯。稳定性压倒一切资源隔离与限制给诊断执行线程池严格设限核心线程数、队列大小。一个失控的探针比如死循环最多打满这个小线程池而不会拖垮整个服务。熔断与降级当服务本身CPU负载过高如80%或内存使用率过高时诊断网关应自动拒绝或延迟执行非紧急的诊断任务或在Agent端直接降级只允许执行开销极小的探针。探针质量门禁所有探针代码入库前必须经过Code Review和性能测试评估其CPU、内存、IO开销。禁止在探针中执行同步网络IO等耗时操作。可观测性诊断系统自身必须有完善的监控。包括网关的任务吞吐量、成功率、延迟各个Agent的在线状态、接收任务数、执行失败率每种探针的平均执行耗时和资源消耗。这些指标能帮你快速发现某个探针是否设计不合理耗时太长、某个服务实例的Agent是否失联、诊断系统是否成为了新的瓶颈。用户体验任务排队与进度提示对于长时间任务如Heap Dump前端要有明确的进度条或等待提示。结果缓存与分享诊断结果特别是大型文件生成后应提供可分享的链接和一定的保留期方便协作排查。参数预设与模板对于常用诊断场景可以提供参数模板一键填充减少输入错误。7. 总结与展望给 Owner Console 加上手动诊断能力本质上是在运维的“可观测性”Observability基础上增加了“可交互性”Interactivity。它把运维人员从一个被动的图表观察者变成了一个主动的“系统医生”可以随时使用听诊器、血压计各种探针对系统进行针对性的检查。这套系统的价值在几次关键的线上危机中得到了充分验证。它缩短了平均故障定位时间MTTI降低了排查对专业工具的依赖让更多初级工程师也能快速上手处理复杂问题。更重要的是它形成了一种“数据驱动、精准干预”的运维文化。未来的优化方向我们正在探索“智能诊断”场景化诊断包将一系列关联的探针操作打包成一个“场景”比如“疑似数据库死锁”场景包可以自动按顺序执行检查数据库连接池状态 - 采集应用线程堆栈 - 抓取数据库当前锁信息。一键完成全套检查。与AIOps联动当监控系统检测到异常模式如错误率突增且伴随延迟上涨可以自动推荐或发起一个预设的诊断任务并将诊断结果作为附加信息一并告警给值班人员实现“告警即带初步诊断线索”。探针市场在公司内部建立探针共享机制鼓励各业务团队贡献针对自己中间件或业务场景的专用探针不断丰富整个诊断生态。这个项目的投入产出比非常高。它从一个具体的痛点出发用相对清晰的技术路径构建了一个能持续产生价值的运维能力基座。如果你也在为“只读监控”的无力感而烦恼不妨从设计一个最简单的“线程堆栈采集”功能开始迈出构建你的可控真实探针系统的第一步。

相关新闻

JPype1安装与配置全攻略:解决Python调用Java环境难题

JPype1安装与配置全攻略:解决Python调用Java环境难题

1. 项目缘起:为什么一个看似简单的安装会如此棘手? 最近在搞一个需要调用Java库的Python项目,自然而然地就想到了JPype1这个经典的桥接工具。本以为 pip install JPype1 就能搞定,结果却掉进了一个又一个坑里。从版本不兼容到编…

2026/8/14 2:13:13 阅读更多 →
从推流到录制:基于RTMP/HLS/FFmpeg的直播录播技术实战

从推流到录制:基于RTMP/HLS/FFmpeg的直播录播技术实战

在实际体育赛事直播和录播技术实现中,如何将一场实时发生的比赛(如切尔西的友谊赛)稳定、高清、低延迟地采集、编码、推流,并最终生成可供点播的录播文件,是一个涉及音视频处理、网络传输和流媒体服务的系统工程。对于…

2026/8/14 2:13:13 阅读更多 →
从玩家到创造者:Phigros自制谱生态与AT15制作全指南

从玩家到创造者:Phigros自制谱生态与AT15制作全指南

如果你是一位音游爱好者,或者对《Phigros》这款游戏有所了解,最近可能会在B站或一些社区里刷到一些“自制谱”视频,标题里常常带着“AT Lv.15”甚至“本人上传”这样的字眼。这背后其实是一个让很多玩家既兴奋又困惑的现象:一个由…

2026/8/14 2:13:13 阅读更多 →

最新新闻

Axure原型设计入门:从零到一掌握核心交互与高效工作流

Axure原型设计入门:从零到一掌握核心交互与高效工作流

1. 项目概述:为什么Axure值得你投入时间?如果你刚接触产品设计或者交互设计,听到“Axure”这个名字可能会觉得有点陌生,甚至有点“高大上”。但我想告诉你,它可能是你职业生涯早期,投入产出比最高的一款工具…

2026/8/14 3:12:40 阅读更多 →
DeepSeek-V4-Pro 正式版低调上线:百万上下文旗舰模型进入 GA 时代(0813 版数据)

DeepSeek-V4-Pro 正式版低调上线:百万上下文旗舰模型进入 GA 时代(0813 版数据)

DeepSeek-V4-Pro 正式版低调上线:百万上下文旗舰模型进入 GA 时代(0813 版数据)摘要:2026 年 8 月 12 日深夜,DeepSeek 将旗舰模型 DeepSeek-V4-Pro 从预览版切换为正式版(构建号 0813)&#xf…

2026/8/14 3:12:40 阅读更多 →
2026/2027 留学生抢手的 3 个“低竞争高回报”宝藏岗位「蒸汽求职分享」

2026/2027 留学生抢手的 3 个“低竞争高回报”宝藏岗位「蒸汽求职分享」

【摘要】站在 2026/2027 招聘季的节点上,海外科技与工程领域的雇主招聘逻辑发生了深刻演变。传统泛开发(Full-Stack/SWE)与常规算法(DS/ML)赛道红海内卷加剧,而处于“技术落地、数据底座与 AI 基础设施交汇…

2026/8/14 3:12:40 阅读更多 →
从好物分享到理性消费:构建个人消费决策系统的实践指南

从好物分享到理性消费:构建个人消费决策系统的实践指南

1. 从“夯到爆”到消费决策:一次关于好物分享的深度观察最近在社区里看到一个挺有意思的话题:“一人说一个你买过夯到爆的东西”。这个“夯到爆”的说法,生动又接地气,大概就是指那些买回来之后,远超预期、好用得让人忍…

2026/8/14 3:12:40 阅读更多 →
5 款热门电商 AI 作图软件测评,哪个更适合中小卖家?

5 款热门电商 AI 作图软件测评,哪个更适合中小卖家?

对于淘宝、拼多多、抖音小店、跨境铺货的中小电商卖家而言,视觉作图一直是核心痛点:没有专职美工、外包拍摄单套成本动辄数百上千元、上新 SKU 繁多导致作图效率极低、大促海报与场景图需求集中爆发,资金与时间双重承压。伴随国内垂直电商 AI…

2026/8/14 3:12:40 阅读更多 →
苏州360推广网站建设如何选择服务商及避坑指南深度解析

苏州360推广网站建设如何选择服务商及避坑指南深度解析

做生意到了今天这个年头,光靠以前那种“酒香不怕巷子深”的老观念,在如今这个信息爆炸、流量碎片化的时代,基本是行不通了。咱们苏州作为长三角的经济重镇,制造业发达,外贸活跃,大大小小的企业成千上万。很多老板跟我抱怨,说现在的获客成本越来越高,传统的地推、线下展…

2026/8/14 3:11:40 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

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

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

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

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

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

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

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

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

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

2026/8/13 10:41:51 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/13 10:41:49 阅读更多 →
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/13 10:41:49 阅读更多 →