新闻详情

新闻详情

首页 / 资讯中心 / 详情

Nemotron-3-Diarization 流式 ASR 集成实战:搭建「谁说了什么」的多说话人实时转录管线

发布时间:2026/9/26 6:36:06来源:尧图网络
Nemotron-3-Diarization 流式 ASR 集成实战:搭建「谁说了什么」的多说话人实时转录管线
人工智能语音音频【免费下载链接】Nemotron-3-Diarization项目地址https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization点击查看免费下载nvidia/Nemotron-3-Diarization回答的是「谁在什么时候说了话who spoke when」。要想得到带说话人归属的完整转录文本——「谁说了什么who said what」——必须把它与一个兼容的流式 ASR 模型配对使用。本文基于本仓库的 ASR_INTEGRATION_GUIDE.md系统讲解两条官方支持的流式 ASR 集成路径Multitalker Parakeet 与 Nemotron 3.5 ASR从环境安装、音频预处理、参数调优到离线批量推理与在线实时服务的完整实现帮助你在自己的对话录音、会议或通话场景中构建可运行的说话人归属转录系统。一、耦合式流式管线Diarization 与 ASR 如何协同工作这是一条耦合的流式coupled streaming管线Nemotron-3-Diarization 在流式推理过程中输出帧级说话人活动frame-level speaker activity而 ASR 阶段为每一个被检测到的说话人维护一条独立的转录流separate transcription stream。音频流(16 kHz 单声道 PCM) │ ▼ ┌─────────────────────────────┐ │ Nemotron-3-Diarization │ 输出: 帧级说话人活动 │ (Sortformer 编码器) │ (T×8 活动概率, 按首次到达排序) └─────────────────────────────┘ │ 说话人活动 / 掩码 ▼ ┌─────────────────────────────┐ │ 流式 ASR (每说话人独立流) │ 输出: 带说话人标签的转录 │ Option 1: Multitalker Parakeet│ │ Option 2: Nemotron 3.5 ASR │ └─────────────────────────────┘ │ ▼ speaker_attributed_output.json (SegLST 格式)从模型本身看Nemotron-3-Diarization 是一个约 100M 参数的 Transformer 编码器详见 explainability.md输入 10 ms 的 Mel 频谱特征按 8 倍下采样堆叠成 80 ms 的编码器帧流式推理时借助Arrival-Order Speaker CacheAOSC与FIFO 队列在 chunk 之间保留说话人上下文最终输出[T, 8]的逐说话人活动概率张量8 个通道按说话人在输入音频中的首次到达顺序排列可后处理成带起止时间的通用说话人标签本仓库 README.md 对该架构有完整说明。本仓库的 streaming_diarization_demo.png及同内容的动图正是模型卡中标注的「Nemotron-Diarization with Streaming ASR」在线演示画面展示了该耦合管线的实际运行效果说话人分离后的转录文本按说话人着色实时呈现。官方推荐的流式 ASR 配对方案如下角色模型说话人分离nvidia/Nemotron-3-DiarizationASR 方案 1nvidia/multitalker-parakeet-streaming-0.6b-v1面向重叠语音ASR 方案 2nvidia/nemotron-3.5-asr-streaming-0.6b单说话人流式 掩码增强集成脚本NeMo Speech 的examples/asr/asr_cache_aware_streaming/speech_to_text_multitalker_streaming_infer.py二、环境准备安装 NeMo Speech因为多说话人流式辅助代码与模型是同步开发的请使用 NeMo Speech 仓库的较新 checkout。apt-get update apt-get install -y libsndfile1 ffmpeg git git clone --branch main --single-branch https://github.com/NVIDIA-NeMo/Speech.git cd Speech curl -LsSf https://astral.sh/uv/install.sh | sh uv sync --python 3.13 --extra asr --extra cu13 --no-dev source .venv/bin/activate若你本机安装的 NVIDIA 驱动与 CUDA 环境需要 CUDA 12请将--extra cu13换成--extra cu12。如果 Hugging Face 仓库需要鉴权请提供一个对两个模型仓库都有读取权限的 tokenexport HF_TOKENyour-hugging-face-token不要把 token 写进源码或提交到仓库。NeMo 示例脚本直接接受 Hugging Face 仓库 IDdiar_modelnvidia/Nemotron-3-Diarization若希望把 checkpoint 保留在本地可用hf download下载hf download nvidia/Nemotron-3-Diarization \ --local-dir /path/to/Nemotron-3-Diarization然后用本地路径替换下文命令中的仓库 ID即把diar_modelnvidia/Nemotron-3-Diarization替换为/path/to/Nemotron-3-Diarization/Nemotron-3-Diarization.nemo。注意本仓库根目录下的 Nemotron-3-Diarization.nemo 是一个 Git LFS 指针文件约 198 MB 的 checkpoint 本体由 LFS 托管实际使用时按上述方式下载或通过SortformerEncLabelModel.restore_from加载。三、音频准备统一为 16 kHz 单声道 PCM配对模型期望单声道mono、16 kHz的音频输入推理前需要转换其他格式的输入ffmpeg -i input.mp3 -ac 1 -ar 16000 -c:a pcm_s16le conversation.wav-ac 1强制单声道、-ar 16000重采样到 16 kHz、-c:a pcm_s16le输出 16-bit PCM。音频格式不达标通常会导致推理被拒绝或结果质量明显下降见文末故障排查。四、ASR 模型选型与运行命令官方提供两条集成路线请在下面两者中择一使用。方案 1Multitalker Parakeet面向重叠语音nvidia/multitalker-parakeet-streaming-0.6b-v1是一个为重叠语音微调过的流式多说话人 ASR 模型仅支持英语且必须搭配masked_asrfalse使用——它把说话人活动当作条件信息conditioning消费而不是用它做掩码。在 NeMo Speech 仓库根目录执行python examples/asr/asr_cache_aware_streaming/speech_to_text_multitalker_streaming_infer.py \ asr_modelnvidia/multitalker-parakeet-streaming-0.6b-v1 \ diar_modelnvidia/Nemotron-3-Diarization \ audio_file/absolute/path/to/conversation.wav \ max_num_of_spks8 \ single_speaker_modefalse \ masked_asrfalse \ parallel_speaker_strategytrue \ cache_gatingtrue \ binary_diar_predstrue \ att_context_size[70,13] \ fifo_len264 \ spkcache_update_period222 \ generate_realtime_scriptsfalse \ output_path./speaker_attributed_output.json方案 2Nemotron 3.5 ASR掩码增强的单说话人流式模型nvidia/nemotron-3.5-asr-streaming-0.6b是一个常规的单说话人流式 ASR 模型在这条说话人归属管线中它利用 diarization 提供的掩码说话人活动masked speaker activity来在一定程度上识别重叠语音。它开箱支持32 个语言-localetokenizer 还额外支持8 个需要微调的 adaptation-ready locale。此方案必须搭配masked_asrtrue。target_lang应设置为输入音频的语言-locale当希望模型自动推断语言提示时使用target_langauto。python examples/asr/asr_cache_aware_streaming/speech_to_text_multitalker_streaming_infer.py \ asr_modelnvidia/nemotron-3.5-asr-streaming-0.6b \ diar_modelnvidia/Nemotron-3-Diarization \ audio_file/absolute/path/to/conversation.wav \ max_num_of_spks8 \ single_speaker_modefalse \ masked_asrtrue \ parallel_speaker_strategytrue \ cache_gatingtrue \ binary_diar_predstrue \ att_context_size[56,13] \ fifo_len264 \ spkcache_update_period222 \ target_langauto \ generate_realtime_scriptsfalse \ output_path./speaker_attributed_output.json注意两套命令中att_context_size不同Parakeet 推荐[70,13]Nemotron 3.5 ASR 推荐[56,13]这是两模型编码器帧几何encoder frame geometry不同导致的务必按方案取用不要混配。输出与结果解读脚本把最终结果写入speaker_attributed_output.json格式为 NeMo 的SegLST 格式每个 finalized 条目包含其文本text、时间范围time range和匿名说话人标签anonymous speaker label。设置generate_realtime_scriptstrue还会打印流式中间假设streaming hypotheses。典型的渲染结果如下Speaker 0: Welcome, everyone. Let us begin. Speaker 1: I have the latest numbers. Speaker 2: I agree, but there is one remaining issue.⚠️ 需要特别强调说话人编号只是该次流式会话中「发现的身份」并不对应现实世界的真实姓名。如果应用需要显示人名必须通过额外的注册enrollment或应用层映射步骤把编号关联到具体身份切忌把匿名标签当作生物特征身份直接展示标签在会话之间还会变化见故障排查。核心参数含义速查表Setting含义max_num_of_spks8会话中维护的说话人流数量上限。若场景中说话人更少应调低以降低算力开销。parallel_speaker_strategytrue并行处理各说话人专属的 ASR 流。masked_asrfalse搭配 Multitalker Parakeet 使用它将说话人活动作为条件信息消费。masked_asrtrue搭配 Nemotron 3.5 ASR 使用它用 diarization 活动掩码每条说话人流。att_context_size[70,13]Multitalker Parakeet 的推荐注意力上下文。att_context_size[56,13]Nemotron 3.5 ASR 的推荐注意力上下文。cache_gatingtrue只为「在最近 diarization 窗口内被判定为活跃」的说话人运行 ASR减少不必要的计算。fifo_len264FIFO 队列中保留的最近 80 ms diarization 编码器帧的最大数量。spkcache_update_period222每次说话人缓存更新时从 FIFO 队列最旧端转移的 80 ms 帧数量实际生效值受 chunk 与 FIFO 几何约束。需要理解max_num_of_spks是一个上限不是「每个配置的说话人都会出现」的承诺——活跃说话人的身份是由 diarization 模型从音频中动态发现的本仓库 README.md 也确认模型最多支持 8 个说话人超过 8 人时部分人将不可避免地被漏检或错配。参数fifo_len264与spkcache_update_period222直接对应 README 中「低延迟 1.04 s」档位SPKCACHE_LEN264, FIFO_LEN264, UPDATE_PERIOD222的流式几何输入缓冲延迟按(CHUNK_LEN RIGHT_CONTEXT) × 80 ms计算。五、实时麦克风 / 服务集成从离线回放走向生产服务speech_to_text_multitalker_streaming_infer.py示例最适合被理解为一个离线流式回放与评估驱动offline streaming replay and evaluation driver它逐 chunk 走通流式推理路径但读取的是已经就绪的文件或 manifest。生产环境中的 Web、麦克风或 websocket 服务需要为每个客户端维护一个持久会话persistent session并把新到达的 PCM chunk 源源不断地喂入该会话。一条实时接口的典型链路是客户端把音频 chunk 发送到服务器 → 服务器按模型要求的 hop/cache 几何缓冲这些 chunk → 把每个完整的帧交给 NeMo Speech 的SpeakerTaggedASR。Gradio 只是众多可选界面之一其余替代方案包括自定义 Web UI、桌面或移动应用、HTTP API、原生 websocket 客户端。服务端结构5 步每个 worker 进程只加载一次ASR 与 diarization checkpoint。每条实时客户端连接到来时新建一个流式会话。对每个到达的单声道 PCM chunk如需则重采样到 16 kHz追加到该客户端的待处理音频缓冲并处理每一个完整的流式帧。向客户端返回最新的说话人归属转录以及如果需要最新的 diarization 活动状态。录音结束或 websocket 关闭时重置该客户端的会话。参考实现LiveMultitalkerSession下面的流式循环代码专门按方案 1Multitalker Parakeet配置方案 2 需换成其对应的模型专属设置如att_context_size[56,13]、masked_asrtrue。import os import numpy as np import torch from omegaconf import OmegaConf import nemo.collections.asr as nemo_asr from nemo.collections.asr.models.sortformer_diar_models import SortformerEncLabelModel from nemo.collections.asr.parts.utils.multispk_transcribe_utils import ( SpeakerTaggedASR, configure_diar_streaming, validate_feature_frame_strides, ) from nemo.collections.asr.parts.utils.streaming_utils import CacheAwareStreamingAudioBuffer def load_models(asr_model_path, diar_model_path, devicecuda): if os.path.isfile(asr_model_path): asr_model nemo_asr.models.ASRModel.restore_from(restore_pathasr_model_path) else: asr_model nemo_asr.models.ASRModel.from_pretrained(asr_model_path) if os.path.isfile(diar_model_path): diar_model SortformerEncLabelModel.restore_from(restore_pathdiar_model_path, map_locationdevice) else: diar_model SortformerEncLabelModel.from_pretrained(diar_model_path) asr_model.eval().to(device) diar_model.eval().to(device) asr_model.encoder.set_default_att_context_size([70, 13]) validate_feature_frame_strides(asr_modelasr_model, diar_modeldiar_model) return asr_model, diar_model class LiveMultitalkerSession: def __init__(self, asr_model, diar_model, sample_rate16000): self.cfg OmegaConf.create( { device: str(asr_model.device), sample_rate: sample_rate, deploy_mode: True, streaming_mode: True, max_num_of_spks: 8, batch_size: 32, parallel_speaker_strategy: True, masked_asr: False, mask_preencode: False, single_speaker_mode: False, cache_gating: True, cache_gating_buffer_size: 2, binary_diar_preds: True, spkcache_len: None, spkcache_update_period: 222, fifo_len: 264, diar_right_context: 0, att_context_size: [70, 13], use_amp: True, precision: bf16, online_normalization: False, pad_and_drop_preencoded: False, feat_len_sec: 0.01, discarded_frames: 8, word_window: 50, sent_break_sec: 1.0, fix_prev_words_count: 5, update_prev_words_sentence: 5, left_frame_shift: -1, right_frame_shift: 0, min_sigmoid_val: 1e-2, ignored_initial_frame_steps: 5, generate_realtime_scripts: True, print_sample_indices: [0], colored_text: True, verbose: False, print_time: False, log: False, } ) self.asr_model asr_model self.diar_model diar_model streaming_cfg asr_model.encoder.streaming_cfg diar_chunk_len streaming_cfg.valid_out_len streaming_cfg.cache_drop_size configure_diar_streaming( diar_modeldiar_model, cfgself.cfg, output_subsampling_factorasr_model.encoder.subsampling_factor, diar_chunk_lendiar_chunk_len, ) self.cfg.spkcache_len int(diar_model.sortformer_modules.spkcache_len) self.streamer SpeakerTaggedASR(self.cfg, asr_model, diar_model) self.audio_buffer CacheAwareStreamingAudioBuffer( modelasr_model, online_normalizationself.cfg.online_normalization, ) feature_stride float(asr_model.cfg.preprocessor.window_stride) hop_feature_frames streaming_cfg.valid_out_len * asr_model.encoder.subsampling_factor self.hop_samples round(hop_feature_frames * feature_stride * sample_rate) cache_frames streaming_cfg.pre_encode_cache_size if isinstance(cache_frames, (list, tuple)): cache_frames cache_frames[-1] cache_samples round(cache_frames * feature_stride * sample_rate) self.frame_samples self.hop_samples cache_samples self.pending_audio np.zeros(cache_samples, dtypenp.float32) self.step_num 0 torch.inference_mode() def accept_audio(self, pcm_chunk, sample_rate): Accept one live mono PCM chunk and return the latest transcript text. if pcm_chunk.dtype np.int16: pcm_chunk pcm_chunk.astype(np.float32) / 32768.0 elif pcm_chunk.dtype np.int32: pcm_chunk pcm_chunk.astype(np.float32) / 2147483648.0 else: pcm_chunk pcm_chunk.astype(np.float32) # Resample here when sample_rate ! self.cfg.sample_rate. self.pending_audio np.concatenate([self.pending_audio, pcm_chunk]) latest None while len(self.pending_audio) self.frame_samples: frame self.pending_audio[: self.frame_samples] self.pending_audio self.pending_audio[self.hop_samples :] chunk_audio, chunk_lengths self.audio_buffer.preprocess_audio(frame) chunk_audio chunk_audio[:, :, : chunk_lengths[0]] drop_extra_pre_encoded ( 0 if self.step_num 0 else self.asr_model.encoder.streaming_cfg.drop_extra_pre_encoded ) latest self.streamer.perform_parallel_streaming_stt_spk( step_numself.step_num, chunk_audiochunk_audio, chunk_lengthschunk_lengths, is_buffer_emptyFalse, drop_extra_pre_encodeddrop_extra_pre_encoded, ) self.step_num 1 return if latest is None else latest[0]接入应用界面与并发注意事项把accept_audio()连接到你的应用所用接口或传输层对网络服务在客户端连接时创建会话对每条解码后的 PCM 消息调用一次accept_audio()客户端断开时删除会话。如果服务器可能对同一客户端并发回调请用一把小锁保护每个会话。严禁在客户端之间共享会话对象说话人缓存、ASR 解码器状态、时间戳、待处理音频缓冲与转录历史都是会话专属状态。模型权重则可以在连接之间共享以节省 GPU 显存——前提是每条连接都持有独立的SpeakerTaggedASR、流式缓冲与说话人缓存状态。关键几何参数从哪里来从源码结构看上述实现的核心几何推导如下对应 NeMo Speechparts/utils/multispk_transcribe_utils.py与parts/utils/streaming_utils.py的协作方式hop_samples由 ASR 编码器的valid_out_len × subsampling_factor换算成音频采样点数决定每步前进的帧长frame_samples hop_samples cache_samples完整帧 前进步长 预编码缓存pre_encode_cache_size这正是模型所需的hop/cache 几何configure_diar_streaming()把 ASR 侧的帧几何output_subsampling_factor、diar_chunk_len同步给 diarization 模型保证两条模型流的 chunk 几何对齐——这也是故障排查中「不要各自独立调参」的根本原因validate_feature_frame_strides()启动时校验 ASR 与 diarization 的特征帧步长是否兼容explainability.md 指出模型以 80 ms 帧率工作10 ms 特征下采样 8 倍因此这类校验是强耦合管线的必要防线。六、更换其他 ASR 模型的考量一种朴素做法是用普通单说话人 ASR在 diarization 之后按说话人片段切音频再转录cut-and-transcribe。当说话人很少重叠时这种方法可行但它不能等价替代 Multitalker Parakeet——因为切出的时间片里仍然包含所有与之重叠的声纹常规 ASR 可能把不同说话人的词合并或选错。要做重叠感知overlap-aware的说话人归属转录请遵循两条原则选用专为消费说话人活动speaker activity而设计的 ASR 模型如 Multitalker Parakeet 的条件式输入、Nemotron 3.5 ASR 的掩码式输入核实其编码器帧几何与 diarization 模型兼容这正是att_context_size、fifo_len、spkcache_update_period等参数不能随意混配的原因。七、故障排查速查表现象处理只出现纯文本无说话人归属确保是用asr_model... diar_model...同时启动多说话人推理脚本而不是单独调用asr_model.transcribe()。模型无法下载接受所需模型条款并确认HF_TOKEN对两个仓库都有读取权限。音频被拒绝或结果很差统一转换为 16 kHz 单声道 16-bit PCM参考第三节的 ffmpeg 命令。CUDA 显存不足调低max_num_of_spks。多说话人架构为每个说话人流维护专属 ASR 状态显存与算力随并发说话人流数量增长。重连后说话人标签变了标签是会话本地的不是生物特征身份需在应用层做身份映射见第四节说明。流式参数校验失败从本文给出的配置组合起步。ASR 与 diarization 的 chunk 几何必须保持对齐不要各自独立调参。八、进一步延伸在仓库内继续深挖README.md模型总体说明、SortformerEncLabelModel的加载/推理示例、流式配置参数SPKCACHE_LEN/FIFO_LEN/CHUNK_LEN/RIGHT_CONTEXT/UPDATE_PERIOD与延迟档位表、输入输出格式、性能评估DER/SCA/MAE/RTFx数据以及「Integration with Streaming ASR」对本指南的引用。diarization_evaluation.md若需对集成后的管线做量化评估可使用 NeMo Speech 的e2e_diarize_speech.py与score_diarization.py计算 DERfalse alarm missed speech speaker confusion、Speaker Counting AccuracySCA与说话人计数 MAE并注意报告 collar、overlap、流式参数等协议细节。explainability.md模型工作原理10 ms Mel 特征 8 倍堆叠 → 80 ms 帧 → Transformer 编码 → Conv1D 上采样回 10 ms、AOSC/FIFO 机制、输出张量[T, 8]及技术限制最多 8 人、长录音与高噪/强混响下性能可能下降、低延迟与精度/速度的权衡。综合本指南与仓库资料一条可落地的实践路径是先按第二节安装 NeMo Speech 并准备 16 kHz 单声道音频用第四节两条命令中的任一条跑通离线流式回放验证效果与参数组合再按第五节的服务结构把LiveMultitalkerSession接入你自己的 Web/websocket/桌面接口最后用第八节提到的评估脚本对 DER 等指标做量化验收。这样你就拥有了一套从「谁在什么时候说话」到「谁说了什么」的完整多说话人实时转录能力。赞分享人工智能语音音频【免费下载链接】Nemotron-3-Diarization项目地址https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization点击查看免费下载相关推荐在PaddleSpeech中实现流式ASR与说话人分离的集成方案在PaddleSpeech中实现流式ASR与说话人分离的集成方案 背景介绍 随着语音识别技术的快速发展实时语音转写需求日益增长特别是在会议记录、远程协作等场人工智能语音音频NLP媒体生成Insanely Fast Whisper高级功能说话人分离(diarization)实现多人对话转录Insanely Fast Whisper高级功能说话人分离 diarization 实现多人对话转录 你还在为多人会议录音无法区分说话人而烦恼使用Insa人工智能语音本地部署AI 应用TEN Framework 说话人分离实战基于 Speechmatics ASR 构建Who Likes What多说话人语音 AgentTEN Framework 说话人分离实战基于 Speechmatics ASR 构建Who Likes What多说话人语音 Agent 本指南以 TE人工智能AI Agent多模态语音AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

VMware安装卡在虚拟网络驱动?彻底解决与排查指南 2026/9/26 7:24:11

VMware安装卡在虚拟网络驱动?彻底解决与排查指南

1. 卡在“正在安装虚拟网络驱动程序”到底卡在了哪装 VMware Workstation 这件事,说简单也简单,一路下一步就完事;说坑也真坑,很多人第一次装就栽在同一个地方——进度条走到“正在安装虚拟网络驱动程序”这一步,然后就…

阅读更多 →
Word公式导入UEditor:前端解析OMML转MathML完整实践 2026/9/26 7:24:11

Word公式导入UEditor:前端解析OMML转MathML完整实践

最近有个实际项目把我折腾得够呛:客户那边一摞Word文档,里面全是带分数、根号、求和符号的复杂公式,要从前端导入到UEditor里展示。试了一圈发现,直接从Word复制粘贴,公式要么变成一串乱码,要么是低清图片&…

阅读更多 →
SpringBoot + Vue.js 健康管理系统设计与实现全攻略 2026/9/26 7:24:11

SpringBoot + Vue.js 健康管理系统设计与实现全攻略

毕业设计的选题年年都在变,但"健康管理系统"这五个字几乎从没缺席过。原因很简单:这个题目覆盖面广、技术栈成熟、需求清晰,而且做出来的东西能演示、能答辩、能讲出实际应用价值。但覆盖面广也意味着陷阱多——很多同学照着网上的…

阅读更多 →
低功耗便携设备开关机芯片选型指南:EH2130-52BF-2B26静态电流与按键逻辑解析 2026/9/26 7:24:11

低功耗便携设备开关机芯片选型指南:EH2130-52BF-2B26静态电流与按键逻辑解析

1. 低功耗便携设备开关机芯片的选型逻辑1.1 为什么开关机芯片成了便携设备的隐形门槛做便携式电子产品的人都有一个共识:电池容量每增加100mAh,外壳就要厚0.3mm,重量就要多几克。用户拿到手里的第一感受永远是"轻不轻、小不小、能用多久…

阅读更多 →
泰迪杯车辆驾驶行为分析:GPS轨迹清洗与聚类建模全流程 2026/9/26 7:24:11

泰迪杯车辆驾驶行为分析:GPS轨迹清洗与聚类建模全流程

简介:第七届泰迪杯数据挖掘竞赛“车辆驾驶行为分析”完整项目,含源码、文档说明与比赛总结,面向数据挖掘学习者、竞赛选手及车辆网联相关毕设学生。项目在常规驾驶行为分析基础上,引入省、市、县级温度、天气、湿度等环境数据&…

阅读更多 →
从Codex到Claude Code:小黑插图Skill迁移实战 2026/9/26 7:24:04

从Codex到Claude Code:小黑插图Skill迁移实战

打开 GitHub 看到“小黑插图 Skill”这个项目挂到 11.7k star 的时候,我第一反应是:这又是一个绑死在 Codex 生态里的玩具。直到我把它里面的指令文件、参考图资源和提示词模板搬到 Claude Code,真的跑出一张像模像样的小黑插画,我…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉