AI文本水印技术解析:从零宽字符到统计水印的实现与攻防
1. 项目概述当AI生成内容遇上“隐形签名”最近AI圈子里有个消息传得挺广Anthropic就是那个开发了Claude的明星公司宣布要在其AI生成的文本里嵌入“水印”。这个消息一出很多技术圈的朋友尤其是对文本安全和内容溯源有研究的朋友第一反应可能就是“这不就是我之前研究过的那个技术吗” 没错这个“水印”技术很可能就是我们常说的“零宽字符”或“文本隐写”技术的一种高级应用。它不是什么新鲜玩意儿但在大模型时代被赋予了全新的、至关重要的使命。简单来说这就像给AI写的每一段话都打上一个肉眼看不见的、独一无二的“数字指纹”。这个指纹不影响你阅读也不改变文本内容但它能悄无声息地告诉你“嘿这段话是机器生成的不是人写的。” 对于普通用户这听起来可能有点科幻但对于内容平台、教育机构、新闻媒体甚至是法律取证领域这简直是刚需。想想看当AI生成的论文、新闻稿、营销文案满天飞的时候如何辨别真伪如何追溯源头这个“隐形水印”就是一把关键的钥匙。所以今天我们不聊Anthropic的官方公告细节而是深入聊聊这个技术本身。它到底是怎么实现的背后有哪些核心原理作为一个开发者或安全研究员我们自己能不能动手实现一个简易版本更重要的是当这种技术普及后对我们使用AI、创作内容会有什么影响又有哪些潜在的“攻防”手段这篇文章我就结合自己之前在这个领域的一些实践和踩过的坑来和大家系统地拆解一下“AI文本水印”这回事。2. 技术核心零宽字符与统计水印的博弈要理解AI文本水印我们得先抛开“水印”这个具象的词把它理解为一种“信息隐藏”技术。在文本领域主要有两大流派基于字符编码的隐写和基于文本统计特征的扰动。2.1 零宽字符文本中的“幽灵信使”这可能是大家最熟悉也最直观的一种方式。零宽字符是一系列在渲染时不可见、不占位的Unicode字符。比如零宽空格用于连接或分隔但不显示。零宽非连接符阻止字符连字。零宽连接符促进字符连字。从左至右标记 / 从右至左标记控制文本方向。它的工作原理非常简单粗暴你可以将你的签名信息比如“Generated by AI Model X”转换成一串二进制码如ASCII或UTF-8然后将这串二进制码映射到一组零宽字符序列上。例如用“零宽空格”代表0“零宽非连接符”代表1。接着你按照一定规则比如每隔N个正常字符插入一个将这串“幽灵序列”插入到AI生成的文本中。举个例子 假设我们要编码字母“A”ASCII二进制 01000001。我们可以定义零宽空格 0零宽非连接符 1那么“A”的编码序列就是零宽非连接符零宽空格零宽非连接符零宽空格零宽空格零宽空格零宽空格零宽非连接符。然后我们把它插入到句子“今天天气真好”中比如在每个字符后插入一位。最终得到的文本人眼看起来依然是“今天天气真好”但复制到支持显示零宽字符的编辑器或经过特定解码程序里就能提取出隐藏的“A”。注意这种方法虽然直观但有几个致命弱点。第一鲁棒性差。只要文本被复制粘贴到某些不保留格式的纯文本环境比如记事本、某些聊天框或者经过一次编解码转换这些零宽字符就极易丢失。第二容易被检测和移除。有经验的用户或简单的脚本可以轻松扫描并剔除所有零宽字符。因此它更适合于对抗性不强的场景比如内部标记或轻度溯源不适合作为强认证手段。2.2 统计水印大模型的“风格指纹”这才是Anthropic这类公司更可能采用的、更高级也更隐蔽的技术。它不依赖于插入额外字符而是通过轻微地、有偏向性地扰动大模型生成文本的概率分布来实现。核心思想是在文本生成过程中当模型需要从候选词表中挑选下一个词时我们不是完全按照模型计算的原始概率来随机采样而是引入一个基于秘密密钥的“偏置信号”。这个信号会稍微提高某些特定词汇被选中的概率同时降低其他词汇的概率。如何实现这种“偏置”一个经典方法是“绿名单”密钥与哈希我们有一个秘密密钥Secret Key和一个哈希函数如HMAC。生成绿名单对于当前已生成的文本前缀Context我们将其与密钥一起输入哈希函数生成一个决定性的伪随机数。用这个数将整个词表划分为两个集合“绿名单”和“红名单”。划分规则是确定且可复现的只要有相同的密钥和上下文。偏置采样在采样下一个词时我们给“绿名单”中的词增加一个固定的概率增量δ给“红名单”中的词相应地减少概率。然后从这个偏置后的新分布中进行采样。检测水印检测端同样持有密钥。对于一段待检测文本它可以根据密钥和文本前缀逐词判断每个词当年是否属于“绿名单”。如果一段文本中实际出现在“绿名单”中的词的数量显著高于随机情况下的期望值例如使用统计检验如Z-test那么我们就认为这段文本包含水印。为什么这种方法更强大隐蔽性它没有修改文本的“实体”只是影响了生成过程因此生成的文本从语言学角度看是完全自然的没有引入任何怪异字符。鲁棒性只要文本的主体内容和顺序没有被大幅度改写比如 paraphrasing统计特征就能保持。简单的同义词替换可能无法完全消除这种基于整体分布的水印。可证明性检测结果可以通过严格的统计检验来量化置信度p值提供数学上的证据。当然这种方法也有挑战。它需要深度集成到模型的推理过程中可能会轻微影响文本的多样性和质量如果偏置δ设置过大。而且如果密钥泄露水印机制也就失效了。3. 从零实现一个简易文本水印系统光讲原理不够过瘾我们动手实现一个简易版的、结合了上述两种思想的演示系统。我们会实现一个基于“绿名单”的统计水印的生成与检测流程并用Python来演示核心逻辑。这里我们假设使用一个简化版的“文本生成”场景。3.1 环境准备与核心思路我们不需要一个真正的大模型而是模拟其核心行为一个基于上下文预测下一个词的概率分布。我们将构建两个核心函数generate_watermarked_text模拟带水印的文本生成。detect_watermark检测给定文本是否包含水印。为了简化我们假设“词表”是一个包含常见词汇的列表。“模型”每次根据上一个词随机但可加入偏置地选择下一个词。我们的“绿名单”算法使用一个简单的哈希函数如SHA256基于密钥和当前上下文生成。import hashlib import random from typing import List, Tuple import numpy as np from scipy import stats class SimpleTextWatermarker: def __init__(self, vocab: List[str], secret_key: str my_secret_key, delta: float 0.1): 初始化水印器 :param vocab: 词表列表 :param secret_key: 秘密密钥用于生成确定性绿名单 :param delta: 水印强度对绿名单词的logit加分值 self.vocab vocab self.vocab_size len(vocab) self.vocab_index {word: i for i, word in enumerate(vocab)} self.secret_key secret_key.encode(utf-8) self.delta delta def _get_greenlist_indices(self, prefix: str) - List[int]: 根据文本前缀和密钥生成当前步的绿名单词索引。 使用HMAC-SHA256确保确定性。 # 将密钥和前缀组合进行哈希 h hashlib.sha256() h.update(self.secret_key) h.update(prefix.encode(utf-8)) hash_digest h.digest() # 使用哈希值作为随机种子确保相同输入产生相同绿名单 random_seed int.from_bytes(hash_digest[:4], byteorderbig) # 取前4字节作为种子 rng random.Random(random_seed) # 随机将一半的词表划入绿名单 all_indices list(range(self.vocab_size)) rng.shuffle(all_indices) greenlist_size self.vocab_size // 2 greenlist_indices all_indices[:greenlist_size] return greenlist_indices def generate_next_token(self, prefix: str, base_logits: np.ndarray) - str: 模拟带水印的下一个词生成。 :param prefix: 已生成的文本前缀 :param base_logits: 模拟的模型原始输出logits这里我们随机生成 :return: 生成的下一个词 if len(base_logits) ! self.vocab_size: base_logits np.random.randn(self.vocab_size) # 模拟随机logits # 获取当前步的绿名单索引 greenlist_indices self._get_greenlist_indices(prefix) # 应用水印偏置绿名单词加分 watermarked_logits base_logits.copy() watermarked_logits[greenlist_indices] self.delta # 将logits转换为概率softmax probs np.exp(watermarked_logits) / np.sum(np.exp(watermarked_logits)) # 根据概率分布采样下一个词 next_token_idx np.random.choice(self.vocab_size, pprobs) return self.vocab[next_token_idx] def generate_watermarked_text(self, prompt: str, length: int 20) - str: 生成一段带水印的文本。 text prompt for _ in range(length): # 在实际中base_logits应由真实模型提供。这里用随机值模拟。 base_logits np.random.randn(self.vocab_size) next_word self.generate_next_token(text, base_logits) text next_word return text def detect_watermark(self, text: str) - Tuple[float, float]: 检测给定文本是否包含水印。 :return: (z_score, p_value) 统计检验值 words text.split() if len(words) 2: return 0.0, 1.0 green_token_count 0 total_tokens_considered 0 # 遍历文本为每个位置基于前缀判断当前词是否在绿名单中 for i in range(1, len(words)): # 从第二个词开始因为需要前缀 prefix .join(words[:i]) current_word words[i] if current_word not in self.vocab_index: continue # 忽略不在词表中的词 greenlist_indices self._get_greenlist_indices(prefix) current_idx self.vocab_index[current_word] if current_idx in greenlist_indices: green_token_count 1 total_tokens_considered 1 if total_tokens_considered 0: return 0.0, 1.0 # 计算统计量在无偏置无水印情况下每个词在绿名单的概率应为0.5 # 实际观察到的绿名单词比例 observed_ratio green_token_count / total_tokens_considered expected_ratio 0.5 # 标准差 (sqrt(p*(1-p)/n)) std_error np.sqrt(expected_ratio * (1 - expected_ratio) / total_tokens_considered) # Z-score z_score (observed_ratio - expected_ratio) / std_error if std_error 0 else 0 # p-value (双尾检验) p_value 2 * (1 - stats.norm.cdf(abs(z_score))) return z_score, p_value # 示例使用 if __name__ __main__: # 一个简单的词表 vocabulary [the, cat, sat, on, mat, dog, chased, ball, sun, is, bright, today] watermarker SimpleTextWatermarker(vocabvocabulary, secret_keytest_key_123, delta0.5) # 生成带水印的文本 prompt the cat watermarked_text watermarker.generate_watermarked_text(prompt, length15) print(f生成的水印文本: {watermarked_text}) # 检测水印 z, p watermarker.detect_watermark(watermarked_text) print(f检测结果 - Z-score: {z:.4f}, p-value: {p:.6f}) if p 0.01: # 显著性水平设为0.01 print(结论: 文本极有可能包含水印。) else: print(结论: 未检测到显著水印信号。) # 对比检测一段随机文本应无水印 random_text .join(random.choices(vocabulary, k15)) z_rand, p_rand watermarker.detect_watermark(random_text) print(f\n随机文本检测 - Z-score: {z_rand:.4f}, p-value: {p_rand:.6f})这段代码做了什么初始化定义词表、密钥和水印强度delta。绿名单生成_get_greenlist_indices函数根据密钥和当前文本前缀通过哈希生成一个确定性的、包含一半词汇的“绿名单”索引列表。带水印生成generate_next_token模拟采样过程。它接收模型原始的base_logits然后给绿名单中的所有词加上delta偏置再进行softmax和采样。水印检测detect_watermark函数逆向工作。它遍历待测文本对于每个词根据其前缀和密钥判断它“应该”在绿名单还是红名单。统计实际在绿名单中的词的比例。如果这个比例显著高于50%随机情况下的期望则判定存在水印并通过计算Z-score和p值来量化置信度。实操心得这里的delta参数是关键。delta太小水印信号太弱不易检测delta太大又会明显影响文本生成质量使文本变得不自然。在实际的大模型应用中需要大量的实验来权衡水印强度检测成功率和文本质量损失。此外这里的“绿名单”划分50%和哈希函数的选择都是可以优化的点。更复杂的方案可能采用动态的绿名单比例或者结合多个哈希函数来增强安全性。3.2 系统集成与部署考量上面的演示是高度简化的。要将此技术集成到像Claude这样的生产级大模型中需要考虑一系列工程问题无缝集成推理管线水印逻辑需要嵌入到模型自回归生成autoregressive generation的每一个采样步骤中。这意味着要修改模型服务如使用TGI、vLLM等推理框架的采样核心在logits_processor环节加入水印偏置。这需要深入理解推理框架的代码架构。密钥管理密钥的安全性至关重要。必须使用安全的密钥管理系统如AWS KMS, HashiCorp Vault来存储和轮换密钥并在推理服务中安全地调用。绝不能将密钥硬编码在代码或配置文件中。性能开销每一步都要计算哈希和调整logits会引入额外的计算开销。需要评估其对生成延迟Latency和吞吐量Throughput的影响。优化哈希计算例如使用更快的哈希函数、缓存部分结果是必要的。检测服务化水印检测需要作为一个独立的、高可用的服务暴露出来。它接收文本调用相同的密钥和逻辑进行计算并返回置信度分数。这个服务需要能承受高并发查询。对抗性文本处理检测服务收到的文本可能已经被“污染”——比如经过了同义词替换、句式重组、插入无关字符等攻击。一个健壮的检测系统需要包含预处理模块例如文本清洗、标准化甚至使用模型本身来尝试“恢复”原始文本的语义再进行水印检测。4. 水印技术的攻防实战与未来挑战有盾就有矛。当AI文本水印成为标准围绕它的攻防战也会立刻开始。理解这些攻击手段对于设计更健壮的水印方案至关重要。4.1 常见攻击手段与应对策略攻击类型描述潜在影响防御/缓解思路文本重写/复述使用另一个AI模型或人工对带水印文本进行复述改变用词和句式但保留原意。高。能有效破坏基于特定词分布的统计水印。设计对语义保持操作鲁棒的水印。例如将水印信号编码到更深层的、不易被复述改变的文本特征中如句法树结构、语义角色标注模式等。局部编辑随机删除、替换或插入少量词汇。中。如果编辑比例不高统计水印可能依然有效。采用纠错编码思想将水印信息冗余地编码到文本的多个位置允许部分丢失。混合拼接将带水印的AI文本与人类撰写的文本片段拼接在一起。高。会严重稀释水印信号降低检测置信度。开发能够定位水印片段在长文本中具体位置的检测算法而不是仅做全局判断。密码学攻击尝试破解或推断用于生成绿名单的密钥。致命。一旦密钥泄露水印系统完全失效。使用强密码学哈希函数如SHA-256定期轮换密钥并采用门限密码学等技术分散密钥风险。探测攻击通过向模型发送大量精心设计的查询观察其输出分布的变化来逆向推导水印规则。中高。特别是对于开源模型或可通过API大量查询的模型。引入随机性到水印规则中如动态变化的绿名单比例或delta增加探测难度。限制API调用频率和多样性。踩坑记录在一次内部测试中我们尝试用“同义词替换”攻击一个早期的统计水印模型。最初效果很好p值从0.001升到了0.1。但我们发现如果替换的同义词在词向量空间中与原词非常接近模型在生成时本身选择它们的概率也相近那么水印偏置可能会“传递”到同义词上。这启发我们或许可以将水印与词的语义嵌入Embedding关联起来而不仅仅是表面的词符Token。4.2 伦理、隐私与未来展望技术之外AI文本水印的广泛应用也引发了一系列伦理和隐私问题。透明度与用户知情权服务提供商是否有义务明确告知用户其生成的文本将被添加水印用户是否拥有选择“无水印”模式的权利即使付费这涉及到服务的透明度和用户的控制权。隐私溯源与滥用风险水印本质上是一种溯源工具。如果被滥用可能用于追踪特定用户的言论、创作轨迹甚至结合其他数据对用户进行画像构成隐私威胁。必须建立严格的数据访问和使用政策确保水印信息仅用于其声明的目的如鉴别AI生成内容并防止其被用于监控。公平性与偏见水印算法本身是否可能引入偏见例如在某些语言或文化语境下水印偏置是否会导致模型更倾向于选择某些带有文化偏向的词汇这需要在设计阶段就进行广泛的公平性测试。标准化与互操作性未来不同的AI公司Anthropic, OpenAI, Google等可能采用各自不同的水印方案。这会导致检测方需要维护多套检测系统。行业是否需要推动一个标准化的水印协议或API以便于内容平台进行统一鉴别我个人认为AI文本水印技术就像给“数字洪水”修筑的第一道堤坝。它无法完全阻止洪水但能为我们争取时间建立更完善的内容认证、来源追溯和信任体系。对于开发者而言理解其原理和实现不仅能帮助我们更好地使用AI工具也能激发我们在内容安全、隐私计算和算法公平性等更广阔领域进行创新。这项技术最终会如何演化是走向开放标准还是封闭花园将取决于技术社区、企业和监管机构的共同博弈。但有一点是肯定的在AI生成内容无处不在的未来知道“这句话是谁写的”将变得和这句话本身的内容一样重要。

相关新闻

线性规划建模实战:从核心三要素到生产计划问题解析

线性规划建模实战:从核心三要素到生产计划问题解析

1. 从“最优解”说起:线性规划到底在解决什么问题? 干了这么多年数学建模,带过不少学生,也看过很多参赛论文,我发现一个挺普遍的现象:很多同学一看到“线性规划”四个字,脑子里立刻蹦出来的就是…

2026/8/22 8:13:08 阅读更多 →
C++网络编程:心跳机制与定时器实现原理与实践

C++网络编程:心跳机制与定时器实现原理与实践

1. 项目概述:为什么网络连接需要“心跳”?在C网络编程的世界里,建立了一个TCP或UDP连接,并不意味着万事大吉。想象一下,你和朋友通过一条不稳定的电话线通话,如果有一方突然沉默,另一方很难判断…

2026/8/22 8:12:08 阅读更多 →
C# TCP/IP网络编程实战:从Socket到健壮通信框架

C# TCP/IP网络编程实战:从Socket到健壮通信框架

1. 项目概述:为什么C#与TCP/IP是工业与互联网的基石如果你正在用C#开发一个需要联网的桌面应用、一个工业上位机、一个游戏服务器,或者任何需要在不同设备间稳定交换数据的程序,那么TCP/IP网络编程就是你绕不开的核心技能。这不仅仅是调用几个…

2026/8/22 8:12:08 阅读更多 →

最新新闻

技术问题排查:如何准确定义问题领域与搜索关键词

技术问题排查:如何准确定义问题领域与搜索关键词

这类标题和热词组合,很容易让人困惑。它看起来像在讨论某个特定工具或模型的性能提升,但“v4 flash”、“修复插件”、“pro”这些词,在不同的技术领域里含义完全不同。从热词来看,至少涉及了嵌入式开发中的Flash存储、AI模型Deep…

2026/8/22 8:51:21 阅读更多 →
2024美赛A题解题全攻略:从种群动力学建模到性别比例机制分析

2024美赛A题解题全攻略:从种群动力学建模到性别比例机制分析

1. 项目概述:从“思路汇总”到“解题工具箱”的构建每年一二月份,对于全球数以万计的数模爱好者来说,最绕不开的话题就是美国大学生数学建模竞赛(MCM/ICM,俗称“美赛”)。而“A题思路汇总”这个关键词&…

2026/8/22 8:51:21 阅读更多 →
全域感知·无缝追踪·精准管控——镜像视界空间智能赋能智慧口岸白皮书

全域感知·无缝追踪·精准管控——镜像视界空间智能赋能智慧口岸白皮书

摘要当前我国智慧口岸建设已进入无感监管、精准安防、合规治理、闭环赋能的高质量发展新阶段,传统出入境口岸智能体系普遍存在视场碎片化、跨镜追踪断链、有源设备依赖、轨迹行为残缺、空间感知失准、隐私合规薄弱等结构性痛点,难以适配大客流、高遮挡、…

2026/8/22 8:51:21 阅读更多 →
Package everything we just did into a skill.

Package everything we just did into a skill.

Package everything we just did into a skill.翻译:把我们刚才完成的全部流程打包成一个 Skill(技能包)Claude工作原理(Claude Code / Agent Skills)这句话是 Claude Code 里非常经典的提示词:在当前对话里…

2026/8/22 8:51:21 阅读更多 →
方达炬  发明一例新成语:河蚀沉陆

方达炬 发明一例新成语:河蚀沉陆

方达炬 发明一例新成语:河蚀沉陆

2026/8/22 8:51:21 阅读更多 →
WireShark抓包分析实战:从安装到网络故障排查

WireShark抓包分析实战:从安装到网络故障排查

这次我们来看一个网络安全领域最基础、最核心的工具——WireShark。无论你是刚入门网络安全的小白,还是需要排查网络问题的运维、开发,WireShark 都是绕不开的必备技能。它不是什么高深莫测的黑客工具,而是一个强大的网络协议分析器&#xff…

2026/8/22 8:50:21 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/22 7:31:03 阅读更多 →
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/22 3:22:48 阅读更多 →