新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleSpeech 中 ERNIE-SAT 跨语言语音合成与语音编辑实战:基于 VCTK 数据集的完整训练、合成与编辑指南

发布时间:2026/9/25 2:22:29来源:尧图网络
PaddleSpeech 中 ERNIE-SAT 跨语言语音合成与语音编辑实战:基于 VCTK 数据集的完整训练、合成与编辑指南
人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载ERNIE-SAT 是百度提出的语音-文本联合预训练框架在跨语言多说话人语音合成与跨语言语音编辑任务上取得了 SOTA 效果可用于语音编辑、个性化语音合成、声音克隆等一系列场景。本文以 PaddleSpeech 仓库中的 VCTK ERNIE-SAT 示例 为骨架完整讲解从 VCTK 数据集准备、MFA 强制对齐、特征预处理、8 卡训练到使用 HiFiGAN 声码器合成波形、以及语音合成 语音编辑端到端推理的完整流程并结合 paddlespeech/t2s/exps/ernie_sat 目录下的源码与 conf/default.yaml 配置做源码级剖析。读完本文你将能够在自己的环境里复现 ERNIE-SAT 在英文多说话人 VCTK 数据上的合成与编辑实验。ERNIE-SAT 模型框架简介ERNIE-SAT论文见 arXiv 2211.03545是一个语音-文本联合预训练框架在跨语言多说话人语音合成和跨语言语音编辑任务上达到当时的最佳水平。框架核心有两大创新跨语言与个性化的软音素映射预训练过程中将中文与英文对应的音素共同作为输入从而学习跨语言的、且带有说话人个性信息的软音素映射语音与文本联合掩码学习通过同时掩码mask语音与文本并联合建模实现语音与文本的对齐使模型具备对任意语音片段进行精确编辑的能力。从仓库源码看ERNIE-SAT 的实现分布在 paddlespeech/t2s/models/ernie_sat/ernie_sat.py模型主体、ernie_sat_updater.py训练更新器以及 paddlespeech/t2s/exps/ernie_sat训练与推理脚本中。训练时文本被整体视为一个序列与语音特征在帧级对齐后共同参与 MLM掩码语言建模式训练conf/default.yaml 中的mean_phn_span: 8与mlm_prob: 0.8正是对这一机制的控制参数平均掩码音素跨度与掩码概率。数据集准备下载并解压 VCTK 数据集从 VCTK 官方渠道下载 VCTK-0.92 版本并解压到~/datasets解压后数据位于~/datasets/VCTK-Corpus-0.92。注意PaddleSpeech 示例中的预处理脚本 local/preprocess.sh 写死使用~/datasets/VCTK-Corpus-0.92/作为--rootdir如果你的数据集放在其他位置需要相应调整。获取 MFA 强制对齐结果ERNIE-SAT 训练需要音素级时长信息仓库采用Montreal Forced AlignerMFA获取时长供 FastSpeech2 风格的时长建模使用。两种获取方式直接下载对齐结果从 PaddleSpeech 提供的 CDN 下载vctk_alignment.tar.gz并解压到当前目录得到vctk_alignment目录自行训练 MFA 模型参考仓库中的 MFA 示例其中 reorganize_vctk.py 负责重组 VCTK 数据。需要特别注意的是VCTK-0.92 中移除了三个说话人p315没有对应的文本p280与p362缺少质量更好的*_mic2.flac录音仅有*_mic1.flac。因此最终可用的说话人集合比原始 VCTK-0.92 少 3 人这一点在 MFA 对齐与后续训练中保持一致防止时长与音频对不上。快速开始run.sh 的阶段式流水线示例目录下的 run.sh 是整条流水线的入口。脚本首先source path.sh设置环境path.sh 将MAIN_ROOT指向仓库根目录并设置BIN_DIR${MAIN_ROOT}/paddlespeech/t2s/exps/ernie_sat然后定义了 4 个阶段阶段功能调用的脚本0数据预处理时长生成 特征提取 归一化./local/preprocess.sh ${conf_path}1训练模型所有 checkpoint 位于train_output_path/checkpoints/CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}2合成波形默认使用 HiFiGAN 声码器支持从metadata.jsonl或文本文件合成CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}3端到端推理同时执行语音合成与语音编辑CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize_e2e.sh ${conf_path} ${train_output_path} ${ckpt_name}直接运行./run.sh会依次执行全部 4 个阶段。脚本支持--stage与--stop-stage参数选择要运行的阶段区间也可以将stage设置为等于stop-stage来只运行单个阶段例如./run.sh --stage 0 --stop-stage 0上述命令只执行数据预处理。脚本中stage与stop_stage的默认值分别是 0 和 100参数解析由仓库通用工具 utils/parse_options.sh 完成注意这种--stage传参方式不能与位置参数$1、$2混用。此外run.sh 默认使用 8 张 GPUgpus0,1,2,3,4,5,6,7训练输出目录默认为exp/default默认 checkpoint 为snapshot_iter_199500.pdz可通过--train_output_path、--ckpt_name等参数覆盖。环境路径约定示例假设数据集路径为~/datasets/VCTK-Corpus-0.92MFA 对齐结果路径为./vctk_alignment当前目录下的子目录。run.sh开头即执行set -e任何一步失败都会立即终止避免带病数据继续污染后续阶段。数据预处理详解单独执行数据预处理./local/preprocess.sh ${conf_path}其中${conf_path}默认为conf/default.yaml。该脚本内部又细分为 4 个子阶段生成时长文件调用 utils/gen_duration_from_textgrid.py从 MFA 的 TextGrid 结果生成durations.txt提取特征调用${BIN_DIR}/preprocess.py参数为--datasetvctk、--rootdir~/datasets/VCTK-Corpus-0.92/、--dumpdirdump、--dur-filedurations.txt、--config${config_path}、--num-cpu20、--cut-silTrue。其中--cut-silTrue表示去除静音片段统计特征均值/方差调用 utils/compute_statistics.py输入dump/train/raw/metadata.jsonl的speech字段输出dump/train/speech_stats.npy归一化调用${BIN_DIR}/normalize.pytrain / dev / test 三个子集分别执行dev 和 test 必须使用 train 集统计出的speech_stats.npy同时生成dump/phone_id_map.txt与dump/speaker_id_map.txt两张 id 映射表。预处理完成后当前目录会生成dump文件夹结构如下dump ├── dev │ ├── norm │ └── raw ├── phone_id_map.txt ├── speaker_id_map.txt ├── test │ ├── norm │ └── raw └── train ├── norm ├── raw └── speech_stats.npy数据被划分为train、dev、test三部分每部分都包含raw原始特征与norm归一化特征两个子目录归一化所用的统计量从训练集计算得到即dump/train/speech_stats.npy。每个子目录中都有一个metadata.jsonl它是类表格文件逐条记录了每个句子的音素序列phones、文本长度text_lengths、语音长度speech_lengths、音素时长durations、语音特征路径、说话人speaker以及 id——这些字段正是后续训练与推理脚本解析依赖的关键。特征配置说明conf/default.yaml 顶部是特征提取配置预处理与推理共用这份配置参数默认值含义fs24000采样率n_fft2048FFT 大小采样点数n_shift300帧移采样点数约 12.5mswin_length1200窗长采样点数约 50ms设为 null 时与 FFT 大小相同windowhann窗函数fmin80Mel 滤波器组最低频率fmax7600Mel 滤波器组最高频率n_mels80Mel 滤波器个数mean_phn_span8掩码学习时平均音素跨度mlm_prob0.8掩码概率MLM 比例其中mean_phn_span与mlm_prob是 ERNIE-SAT 联合掩码预训练的核心超参直接控制训练时语音/文本被掩码的粒度与强度对应 conf/default.yaml 中模型enc_input_layer: sega_mlmsegmented MLM 输入层的设计。模型训练预处理完成后即可训练CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}local/train.sh 实际调用${BIN_DIR}/train.py即 paddlespeech/t2s/exps/ernie_sat/train.py核心参数python3 ${BIN_DIR}/train.py \ --train-metadatadump/train/norm/metadata.jsonl \ --dev-metadatadump/dev/norm/metadata.jsonl \ --config${config_path} \ --output-dir${train_output_path} \ --ngpu8 \ --phones-dictdump/phone_id_map.txt训练配置同样位于conf/default.yaml要点数据batch_size: 40num_workers: 8模型结构编码器与解码器均为Conformerencoder_type: conformer、decoder_type: conformerenc_input_layer: sega_mlmattention 维度 384、2 个头、线性层 1536、各 4 个 block编码器 CNN 卷积核 7解码器 CNN 卷积核 31此外还有postnet_layers: 5、postnet_filts: 5、postnet_chans: 256的后处理网络配置优化器scheduler_params.d_model: 384、warmup_steps: 4000梯度裁剪grad_clip: 1.0训练轮数max_epoch: 1500快照保存数量num_snapshots: 50随机种子seed: 0。配置注释特别说明该配置在8 张 A10080GB 显存上约需 2 天完成训练读者应根据自身机器调整batch_size、num_workers数据加载线程数以及 local/train.sh 中的--ngpu。配置文件末尾的token_list是 CMU 音素字典AH0、T、N、sp等首尾为blank与sos/eosunk之外的未知音素在推理时会被替换为sp静音音素这一点在 synthesize_e2e.py 的_p2id函数中有明确实现。波形合成HiFiGAN 声码器ERNIE-SAT 输出梅尔频谱后需要声码器Vocoder将其转换为波形。示例使用HiFiGAN对应仓库中的 VCTK voc5 示例作为神经声码器。下载预训练 HiFiGAN 模型并解压unzip hifigan_vctk_ckpt_0.2.0.zipHiFiGAN checkpoint 包含三个文件hifigan_vctk_ckpt_0.2.0 ├── default.yaml # 训练 HiFiGAN 时使用的默认配置 ├── feats_stats.npy # 训练 HiFiGAN 时用于归一化频谱的统计量 └── snapshot_iter_2500000.pdz # HiFiGAN 生成器参数合成命令CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}local/synthesize.sh 调用${BIN_DIR}/../synthesize.py即 paddlespeech/t2s/exps/synthesize.py可以从metadata.jsonl批量合成测试集波形参数如下FLAGS_allocator_strategynaive_best_fit \ FLAGS_fraction_of_gpu_memory_to_use0.01 \ python3 ${BIN_DIR}/synthesize.py \ --erniesat_config${config_path} \ --erniesat_ckpt${train_output_path}/checkpoints/${ckpt_name} \ --erniesat_statdump/train/speech_stats.npy \ --vochifigan_vctk \ --voc_confighifigan_vctk_ckpt_0.2.0/default.yaml \ --voc_ckpthifigan_vctk_ckpt_0.2.0/snapshot_iter_2500000.pdz \ --voc_stathifigan_vctk_ckpt_0.2.0/feats_stats.npy \ --test_metadatadump/test/norm/metadata.jsonl \ --output_dir${train_output_path}/test \ --phones_dictdump/phone_id_map.txt其中--erniesat_stat与--voc_stat分别是 ERNIE-SAT 频谱归一化和 HiFiGAN 频谱归一化各自使用的统计量二者不可混用FLAGS_fraction_of_gpu_memory_to_use0.01将显存占用限制在极小比例便于在推理机器上与其他进程共存。语音合成与语音编辑端到端推理这是 ERNIE-SAT 最具特色的应用场景对一段真实语音既可以按文本重新合成也可以只替换其中一段文本对应的语音内容语音编辑其余部分保持原说话人的音色与韵律。准备对齐工具MFA语音编辑需要精确定位待编辑片段的音素边界因此要准备 MFA 对齐工具与对齐模型mkdir -p tools/aligner cd tools # 下载 MFA wget https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner/releases/download/v1.0.1/montreal-forced-aligner_linux.tar.gz # 解压 MFA tar xvf montreal-forced-aligner_linux.tar.gz # 修复 MFA 的 .so 链接 cd montreal-forced-aligner/lib ln -snf libpython3.6m.so.1.0 libpython3.6m.so cd - # 下载对齐模型与词典 cd aligner wget https://paddlespeech.cdn.bcebos.com/MFA/ernie_sat/aishell3_model.zip wget https://paddlespeech.cdn.bcebos.com/MFA/AISHELL-3/with_tone/simple.lexicon wget https://paddlespeech.cdn.bcebos.com/MFA/ernie_sat/vctk_model.zip wget https://paddlespeech.cdn.bcebos.com/MFA/LJSpeech-1.1/cmudict-0.7b cd ../../这里下载了中英两套对齐资源AISHELL-3 的中文对齐模型与simple.lexicon词典VCTK 的英文对齐模型与cmudict-0.7b词典从而支持中英跨语言场景。准备预训练 FastSpeech2 时长预测模型ERNIE-SAT 使用 FastSpeech2 作为音素时长预测器用于预估新文本的帧级时长进而决定编辑片段的长度mkdir download cd download wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/fastspeech2/fastspeech2_conformer_baker_ckpt_0.5.zip wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/fastspeech2/fastspeech2_nosil_ljspeech_ckpt_0.5.zip unzip fastspeech2_conformer_baker_ckpt_0.5.zip unzip fastspeech2_nosil_ljspeech_ckpt_0.5.zip cd ../两个模型分别对应中文baker 语音库与英文LJSpeech的时长预测覆盖跨语言编辑场景。准备源音频数据下载示例使用的源音频编辑素材mkdir source cd source wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/SSB03540307.wav wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/SSB03540428.wav wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/LJ050-0278.wav wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/p243_313.wav wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/p299_096.wav wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/this_was_not_the_show_for_me.wav wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/ernie_sat/source/README.md cd ../各 wav 对应的原始文本可以在source/README.md中查看用于构造--old_str。运行合成与编辑准备好上述资源后执行./run.sh --stage 3 --stop-stage 3 --gpus 0它会调用 local/synthesize_e2e.sh该脚本内部依次执行两个任务可参考 paddlespeech/t2s/exps/ernie_sat/synthesize_e2e.py 的实现任务一语音合成synthesize——用新文本--new_str重新生成整句话的语音python3 ${BIN_DIR}/synthesize_e2e.py \ --task_namesynthesize \ --wav_pathsource/p243_313.wav \ --old_strFor that reason cover should not be given \ --new_strI love you very much do you love me \ --source_langen \ --target_langen \ --erniesat_config${config_path} \ --phones_dictdump/phone_id_map.txt \ --erniesat_ckpt${train_output_path}/checkpoints/${ckpt_name} \ --erniesat_statdump/train/speech_stats.npy \ --vochifigan_vctk \ --voc_confighifigan_vctk_ckpt_0.2.0/default.yaml \ --voc_ckpthifigan_vctk_ckpt_0.2.0/snapshot_iter_2500000.pdz \ --voc_stathifigan_vctk_ckpt_0.2.0/feats_stats.npy \ --output_nameexp/pred_gen.wav任务二语音编辑edit——只替换原句中一段文本对应的语音其余部分保持不变python3 ${BIN_DIR}/synthesize_e2e.py \ --task_nameedit \ --wav_pathsource/p243_313.wav \ --old_strFor that reason cover should not be given \ --new_strFor that reason cover is not impossible to be given \ --source_langen \ --target_langen \ --erniesat_config${config_path} \ --phones_dictdump/phone_id_map.txt \ --erniesat_ckpt${train_output_path}/checkpoints/${ckpt_name} \ --erniesat_statdump/train/speech_stats.npy \ --vochifigan_vctk \ --voc_confighifigan_vctk_ckpt_0.2.0/default.yaml \ --voc_ckpthifigan_vctk_ckpt_0.2.0/snapshot_iter_2500000.pdz \ --voc_stathifigan_vctk_ckpt_0.2.0/feats_stats.npy \ --output_nameexp/pred_edit.wav参数设计要点用户可自行修改--wav_path、--old_str、--new_str使用规则如下--old_str必须是--wav_path对应音频的真实文本用于 MFA 对齐定位编辑边界--new_str应根据--task_name设计synthesize合成新文本可与原文本完全不同模型按新文本整句重新生成edit编辑新文本应与原文本内容相近仅修改希望被替换的片段如上例中把 should not be given 改为 is not impossible to be given--source_lang与--target_lang在使用 VCTK 训练的模型时应都设为en若要跨语言编辑则分别指定源语言与目标语言。从 synthesize_e2e.py 的prep_feats_with_dur函数可以看出底层处理逻辑先对源 wav 提取 MFA 音素边界get_phns_spans再用 FastSpeech2 预测新音素序列的时长eval_durs并计算时长调整因子get_dur_adj_factor默认再乘以 1.25将新文本帧级时长对齐到编辑区间最后对原语音中待替换区域进行掩码重建从而保证编辑后音频的时长、音色与上下文衔接自然。该函数的返回值注释明确列出了输出替换部分置零后的新 wav、新音素序列、MFA 起止边界、以及原 wav 与新 wav 的掩码 Mel 边界这正是帧级精确编辑能力的技术支撑。预训练模型与评测指标仓库提供基于 VCTK 训练好的 ERNIE-SAT 预训练模型erniesat_vctk_ckpt_1.2.0.zip。其训练指标如下ModelStepeval/mlm_losseval/lossdefault8(gpu) × 19950057.62221557.622215即使用 8 张 GPU 训练约 199500 步step 数由run.sh中默认 checkpointsnapshot_iter_199500.pdz印证验证集上的 MLM 损失与总损失均为 57.622215。使用预训练模型时将其解压后替换--erniesat_ckpt指向的 checkpoint 即可直接进行合成与编辑无需重新训练。总结与延伸围绕 VCTK 的 ERNIE-SAT 示例本文完整梳理了 PaddleSpeech 中该模型的落地路径数据集与 MFA 对齐准备 →run.sh阶段式流水线 → 预处理时长/特征/归一化→ 8 卡 Conformer 训练 → HiFiGAN 波形合成 → 合成/编辑端到端推理。若希望进一步深入模型实现细节可阅读 paddlespeech/t2s/models/ernie_sat/ernie_sat.py 与 ernie_sat_updater.py训练、合成、对齐入口分别见 train.py、synthesize.py、synthesize_e2e.py中文AISHELL-3数据上的 ERNIE-SAT 实验可参考 examples/aishell3/ernie_sat 与 examples/aishell3_vctk/ernie_sat两个目录均包含独立的run.sh与配置文件可作为跨语言实验的对照起点。在实际复现时请务必根据 GPU 显存与数量调整 conf/default.yaml 中的batch_size、num_workers以及 local/train.sh 中的ngpu以保证训练稳定收敛。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech ERNIE-SAT 实战指南基于 AISHELL-3 与 VCTK 的跨语言语音合成、语音编辑与音色克隆PaddleSpeech ERNIE SAT 实战指南基于 AISHELL 3 与 VCTK 的跨语言语音合成、语音编辑与音色克隆 本篇技术指南以 Paddl人工智能语音音频PaddleSpeech ERNIE-SAT 语音-文本联合预训练实战基于 VCTK 的语音编辑与个性化语音合成全链路解析PaddleSpeech ERNIE SAT 语音 文本联合预训练实战基于 VCTK 的语音编辑与个性化语音合成全链路解析 本文围绕 PaddleSpeech人工智能语音音频NLP媒体生成PaddleSpeech 中的 ERNIE-SAT基于 AISHELL-3 的语音合成与语音编辑实战指南PaddleSpeech 中的 ERNIE SAT基于 AISHELL 3 的语音合成与语音编辑实战指南 本文围绕 PaddleSpeech 仓库中 exam人工智能语音音频上一篇Jingo Markdown高级用法表格、代码高亮与GFM语法指南下一篇mcp-server-browserbase 安全最佳实践保护你的 API 密钥和敏感数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

用 Go 打造交通数据分析可视化平台:从 PRD 到可演示数据产品的完整实战指南 2026/9/25 3:00:51

用 Go 打造交通数据分析可视化平台:从 PRD 到可演示数据产品的完整实战指南

教程文档 【免费下载链接】easy-vibe 从 0 到 1 学会 vibe coding,项目制学习 项目地址: https://gitcode.com/datawhalechina/easy-vibe 点击查看 免费下载 这是一篇面向 datawhalechina/easy-vibe 项目 Stage 2 学习者的综合实战指南。你将围绕一份真…

阅读更多 →
2024数学建模国赛C题:从数据清洗到线性规划的全流程复现 2026/9/25 3:00:51

2024数学建模国赛C题:从数据清洗到线性规划的全流程复现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Containerization x86_64 部署构建指南:基于 aarch64 开发容器交叉产出 Linux 部署包 2026/9/25 3:00:32

Containerization x86_64 部署构建指南:基于 aarch64 开发容器交叉产出 Linux 部署包

容器运行时虚拟化云原生 【免费下载链接】containerization Containerization is a Swift package for running Linux containers on macOS. 项目地址: https://gitcode.com/gh_mirrors/cont/containerization 点击查看 免费下载 本指南围绕 make dist-x86_64 展开…

阅读更多 →
BAML jsonish 柔性解析器:把 LLM 自由文本可靠地解析成结构化数据 2026/9/25 3:00:32

BAML jsonish 柔性解析器:把 LLM 自由文本可靠地解析成结构化数据

编程语言AI Agent编译器CLI人工智能 【免费下载链接】baml The programming language for agents 项目地址: https://gitcode.com/gh_mirrors/ba/baml 点击查看 免费下载 本文聚焦 BAML 引擎中的 jsonish 库(位于 engine/baml-lib/jsonish)&…

阅读更多 →
TEN Framework 中的 clasp:答案集求解器的工作原理、构建方式与在依赖解析中的落地 2026/9/25 3:00:32

TEN Framework 中的 clasp:答案集求解器的工作原理、构建方式与在依赖解析中的落地

人工智能AI Agent多模态语音AI 应用 【免费下载链接】ten-framework Open-source framework for conversational voice AI agents 项目地址: https://gitcode.com/TEN-framework/ten-framework 点击查看 免费下载 本篇以 vendored 在仓库内的 clasp README 为核心&…

阅读更多 →
Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册 2026/9/25 3:00:26

Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册

后端Web框架API设计 【免费下载链接】falcon The no-magic web API and microservices framework for Python developers, with a focus on reliability and performance at scale. 项目地址: https://gitcode.com/gh_mirrors/fa/falcon 点击查看 免费下载 导读 本…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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