Transformers实战指南:从架构原理到Hugging Face微调部署
1. 从“transformers”这个词说起它到底指什么“transformers”这个词放在不同圈子里指向的东西完全不一样。做深度学习的人第一反应是Hugging Face那套NLP工具库做硬件的人想到的是电压变换器看科幻电影的人想到的是会变形的机器人。但既然这个标题被单独拎出来而且没有附带任何正文、关键词和摘要那它大概率指向的是当前技术社区里讨论度最高的那个含义——深度学习领域的Transformer架构及其生态工具链。我先把结论放在前面如果你是一个刚接触NLP或者大模型的开发者看到“transformers”这个词你需要搞清楚三件事——它既是一个模型架构2017年那篇著名论文提出的网络结构也是一个工具库名称Hugging Face transformers还是一个技术生态的代称围绕预训练模型展开的一整套开发范式。这三层含义经常被混着用导致很多新手一开始就被绕晕。这篇文章我会从实际使用的角度出发把“transformers”这个主题拆开讲透。不管你是想搞清楚Transformer架构到底怎么回事还是想用transformers库跑通自己的第一个模型或者想理解为什么整个AI行业都在围绕它转我都会给出可以直接上手的内容。适合的读者包括有一定Python基础想入门NLP的开发者、需要在自己的项目里集成预训练模型的工程师、以及想理解大模型底层逻辑的技术管理者。2. Transformer架构的核心机制拆解2.1 为什么RNN和CNN不够用了在Transformer出现之前处理序列数据的主流方案是RNN循环神经网络和CNN卷积神经网络。RNN的思路很直观像人读句子一样一个词一个词地读把前面的信息通过隐藏状态传递下去。但问题也很明显——它是串行的第100个词必须等前99个词算完才能处理。这在GPU并行计算的时代简直是浪费硬件。CNN处理序列的思路是用卷积核滑动窗口来捕捉局部特征并行度上去了但感受野有限。虽然可以通过堆叠多层来扩大感受野但要让距离很远的两个位置产生关联需要的层数会非常多信息在传递过程中也容易丢失。Transformer的核心突破就是自注意力机制Self-Attention。它让序列中任意两个位置之间直接建立联系距离为1和距离为1000的注意力计算代价是一样的。而且整个计算过程可以完全并行这对GPU来说太友好了。2.2 自注意力到底在算什么我用一个具体的例子来说明。假设输入是“小猫追着球跑”这五个字自注意力机制做的事情是对于每一个字计算它和其他所有字之间的“关联强度”然后根据这个强度对所有字的信息进行加权求和得到这个字的新表示。具体计算分三步Query、Key、Value的生成每个字的向量分别乘以三个可学习的矩阵W_Q、W_K、W_V得到Q、K、V三个向量。你可以把Q理解为“我在找什么”K理解为“我有什么”V理解为“我实际的内容是什么”。注意力分数计算用Q和K做点积得到每对位置之间的相关性分数。分数越高说明两个位置越相关。加权求和把分数经过softmax归一化后作为权重对V进行加权求和。用代码表示就是import torch import torch.nn.functional as F def self_attention(Q, K, V, maskNone): d_k Q.size(-1) scores torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5) if mask is not None: scores scores.masked_fill(mask 0, -1e9) attn_weights F.softmax(scores, dim-1) output torch.matmul(attn_weights, V) return output, attn_weights这里除以根号d_k是为了防止点积结果过大导致softmax梯度消失这是原论文里的一个关键细节很多人第一次看代码时会忽略。2.3 多头注意力为什么需要多个“头”单个注意力头只能捕捉一种类型的关联模式。但语言中的关系是多样的——有语法依赖、有语义关联、有指代关系等等。多头注意力就是并行地跑多组Q、K、V变换每组关注不同的模式最后把结果拼接起来再做一次线性变换。打个比方单个注意力头像一个专家只能从一个角度看问题多头注意力像一个专家组每个人从自己的专业视角分析同一段文本最后综合所有人的意见。实践中常用的头数是8到16个每个头的维度是模型总维度除以头数。2.4 位置编码没有它Transformer就是个词袋自注意力机制本身是位置无关的——把输入序列打乱顺序计算结果是一样的。但语言中词序至关重要“猫追狗”和“狗追猫”完全是两回事。所以需要额外注入位置信息。原论文用的是正弦位置编码用不同频率的sin和cos函数生成位置向量直接加到词嵌入上。这种编码的好处是可以外推到训练时没见过的序列长度。后来也有很多变体比如可学习的位置嵌入、相对位置编码、旋转位置编码RoPE等。目前主流的大模型基本都用RoPE或其变体因为它在长序列上的表现更好。3. Hugging Face transformers库的实战入门3.1 这个库解决了什么问题在transformers库出现之前如果你想用BERT做文本分类需要做的事情包括找到论文、找到官方代码、理解代码结构、下载预训练权重、写数据预处理逻辑、写训练循环……这一套下来没个两三天搞不定。而且每个模型的代码风格不一样换个模型就得重新学一遍。transformers库的核心价值就是统一接口。不管你用的是BERT、GPT、T5还是LLaMA加载模型、分词、推理的API几乎一模一样。它把模型架构、预训练权重、分词器打包在一起用from_pretrained一个方法就能搞定。这对工程效率的提升是巨大的。3.2 环境准备中最容易踩的坑安装本身很简单pip install transformers torch但实际使用中有几个坑我踩过不止一次版本兼容性问题。transformers库更新非常快不同版本之间的API可能有破坏性变更。比如早期版本中tokenizer的encode方法返回的是list后来改成了返回BatchEncoding对象。如果你在网上抄了一段代码跑不通第一反应应该是检查版本。建议在项目里固定版本号比如transformers4.36.0。PyTorch和CUDA的版本匹配。这个坑不在transformers本身但会直接影响你能不能用到GPU。安装torch时一定要去官网查清楚对应的CUDA版本不要直接pip install torch就完事。用torch.cuda.is_available()验证GPU是否可用。模型下载慢或失败。预训练模型动辄几百MB到几个GB从境外服务器下载经常超时。解决办法是配置国内镜像源或者提前用git lfs把模型拉到本地然后用本地路径加载。3.3 用pipeline快速跑通第一个任务transformers库提供了pipeline API把最常见的任务封装成了一行代码。比如情感分析from transformers import pipeline classifier pipeline(sentiment-analysis) result classifier(这个产品的质量超出预期非常满意) print(result) # [{label: POSITIVE, score: 0.9998}]第一次运行会自动下载默认模型通常是distilbert-base-uncased-finetuned-sst-2-english大概250MB。下载完成后就能直接用。pipeline支持的任务包括文本分类、命名实体识别、问答、摘要、翻译、文本生成等。对于快速验证想法来说这是最高效的方式。但如果你要做定制化的事情就需要往下深入到模型和分词器层面。3.4 手动加载模型和分词器的完整流程跳过pipeline手动控制每个环节from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch model_name bert-base-chinese tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForSequenceClassification.from_pretrained(model_name, num_labels2) text 这部电影的剧情非常精彩 inputs tokenizer(text, return_tensorspt, paddingTrue, truncationTrue, max_length128) with torch.no_grad(): outputs model(**inputs) logits outputs.logits predictions torch.softmax(logits, dim-1) print(predictions)这里有几个关键参数需要理解return_tensorspt返回PyTorch张量如果是TensorFlow就写tf。paddingTrue批次内序列长度对齐短的补零。truncationTrue超过max_length的部分截断。max_length128最大序列长度根据任务和显存调整。注意BERT类模型的max_length上限通常是512但实际使用时没必要都拉满。文本分类任务中大部分句子128就够了设太大只会浪费显存和计算时间。4. 模型选型不同场景该用哪个Transformer4.1 编码器、解码器、编码器-解码器Transformer架构有三个主要变体对应不同的任务类型架构类型代表模型适合任务特点仅编码器BERT、RoBERTa分类、NER、抽取式问答双向注意力理解能力强仅解码器GPT系列、LLaMA文本生成、对话单向注意力生成能力强编码器-解码器T5、BART翻译、摘要、生成式问答兼顾理解和生成选型逻辑很简单你的任务是“理解”还是“生成”理解类任务用编码器模型生成类任务用解码器模型两者都需要的用编码器-解码器模型。4.2 中文场景下的模型选择中文NLP有自己的特殊性不能直接拿英文模型套。几个常用的中文预训练模型bert-base-chineseGoogle官方出的中文BERT适合作为基线。hfl/chinese-roberta-wwm-ext哈工大讯飞联合实验室出的全词掩码RoBERTa在多个中文任务上比原版BERT好。hfl/chinese-macbert-base同样来自哈工大讯飞用MacBERT的掩码策略效果进一步提升。我的经验是如果做中文文本分类直接从chinese-roberta-wwm-ext开始试大概率比bert-base-chinese好一截。如果任务对精度要求极高可以考虑更大的模型或者用领域数据做继续预训练。4.3 模型大小的权衡模型参数量直接决定了推理速度和显存占用。以BERT系列为例base版约110M参数12层768隐藏维度。单张消费级显卡就能跑。large版约340M参数24层1024隐藏维度。需要显存至少8GB以上。实际项目中base版在大多数任务上已经够用。large版带来的提升通常在1-3个百分点但推理时间翻倍。如果是在线服务这个代价需要仔细权衡。对于大语言模型LLM参数量从几十亿到几千亿不等。7B模型用4-bit量化后可以在单张24GB显存的卡上跑推理但训练就需要多卡了。5. 微调实战从预训练模型到自己的任务5.1 为什么要微调而不是从头训练预训练模型已经在大规模语料上学到了通用的语言知识——语法、语义、常识推理等。微调就是在这个基础上用你自己的任务数据做少量训练让模型适应特定任务。从头训练一个BERT级别的模型需要几十张GPU跑好几周成本极高。而微调通常只需要一张GPU跑几十分钟到几小时数据量也从几十GB降到几千条。这就是预训练微调范式的威力。5.2 数据准备的关键细节微调的数据格式取决于任务类型。以文本分类为例通常是一个CSV文件两列text和label。import pandas as pd from sklearn.model_selection import train_test_split data pd.read_csv(train.csv) train_texts, val_texts, train_labels, val_labels train_test_split( data[text].tolist(), data[label].tolist(), test_size0.2, random_state42 )几个容易出问题的地方类别不平衡。如果正负样本比例是9:1模型可能直接全预测成多数类也能拿到90%准确率。这时候要看F1分数而不是准确率或者用加权损失函数。数据泄露。训练集和验证集如果有重复样本验证指标会虚高。去重是必须的步骤。标签质量。人工标注的数据难免有错标。如果发现模型在验证集上表现异常先抽查一批数据看看标签对不对。5.3 用Trainer API完成微调transformers库提供了Trainer类把训练循环、评估、保存检查点都封装好了from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments from datasets import Dataset tokenizer AutoTokenizer.from_pretrained(hfl/chinese-roberta-wwm-ext) def tokenize_function(examples): return tokenizer(examples[text], paddingmax_length, truncationTrue, max_length128) train_dataset Dataset.from_dict({text: train_texts, label: train_labels}).map(tokenize_function, batchedTrue) val_dataset Dataset.from_dict({text: val_texts, label: val_labels}).map(tokenize_function, batchedTrue) model AutoModelForSequenceClassification.from_pretrained(hfl/chinese-roberta-wwm-ext, num_labels2) training_args TrainingArguments( output_dir./results, num_train_epochs3, per_device_train_batch_size16, per_device_eval_batch_size32, learning_rate2e-5, warmup_ratio0.1, weight_decay0.01, evaluation_strategyepoch, save_strategyepoch, load_best_model_at_endTrue, metric_for_best_modelf1, ) trainer Trainer( modelmodel, argstraining_args, train_datasettrain_dataset, eval_datasetval_dataset, ) trainer.train()5.4 超参数的经验值微调BERT类模型以下参数范围经过大量实践验证学习率2e-5到5e-5是最常用的区间。太大容易破坏预训练知识太小收敛慢。批次大小16或32。显存不够就减小批次用梯度累积来补偿。训练轮数2到4轮。BERT微调很容易过拟合轮数多了验证集指标反而下降。warmup比例0.1左右。让学习率从0线性增加到设定值避免训练初期震荡。权重衰减0.01。正则化手段防止过拟合。我个人的习惯是先用2e-5、batch size 32、3个epoch跑一遍作为基线然后根据验证集曲线调整。如果验证loss在第一个epoch后就开始上升说明学习率太大或者轮数太多。6. 推理部署中的性能优化6.1 模型量化用精度换速度量化是把模型参数从FP32降到INT8甚至INT4模型体积缩小2到4倍推理速度提升明显精度损失通常在1%以内。from transformers import AutoModelForSequenceClassification import torch model AutoModelForSequenceClassification.from_pretrained(your-model) quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 )动态量化对Transformer类模型效果很好因为大部分计算量集中在Linear层。实测下来INT8量化后推理速度提升约1.5到2倍模型文件大小减少约一半。6.2 ONNX Runtime加速把模型导出为ONNX格式用ONNX Runtime推理通常比原生PyTorch快20%到50%from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch model AutoModelForSequenceClassification.from_pretrained(your-model) tokenizer AutoTokenizer.from_pretrained(your-model) dummy_input tokenizer(测试文本, return_tensorspt) torch.onnx.export( model, (dummy_input[input_ids], dummy_input[attention_mask]), model.onnx, input_names[input_ids, attention_mask], output_names[logits], dynamic_axes{input_ids: {0: batch, 1: sequence}, attention_mask: {0: batch, 1: sequence}}, opset_version14, )导出时一定要设置dynamic_axes否则模型会固定输入长度实际使用时换个长度就报错。6.3 批处理与缓存策略在线服务中单个请求推理往往GPU利用率很低。解决办法是攒一批请求一起推理。但等待时间不能太长通常设置10到50毫秒的窗口。另外对于重复的输入比如热门查询可以在应用层加缓存直接返回之前的结果省去推理开销。缓存key用输入文本的哈希值。7. 那些文档里不会写的踩坑记录7.1 分词器的隐藏陷阱不同模型用的分词器不一样加载模型时一定要用配套的分词器。用BERT的分词器去处理GPT的输入结果会完全错乱。另外中文分词器对空格和标点的处理需要特别注意。比如有些分词器会把“你好世界”分成“你好”和“世界”有些会分成单字。这直接影响模型看到的内容。建议在正式训练前先拿几条典型数据看看tokenizer的输出是否符合预期。还有一个坑是特殊token。BERT用[CLS]和[SEP]RoBERTa用和。手动拼接输入时如果搞错了模型效果会大打折扣。用tokenizer的build_inputs_with_special_tokens方法可以避免这个问题。7.2 显存溢出的排查思路训练时遇到CUDA out of memory按以下顺序排查减小batch size最直接有效。从32降到16再到8看能不能跑起来。缩短max_length统计一下训练数据的长度分布如果95%的样本都在64以内就没必要设128。梯度累积batch size设为8累积4步等效于batch size 32。混合精度训练用fp16或bf16显存占用减少约40%。在TrainingArguments里设置fp16True。梯度检查点用时间换空间显存减少但训练变慢。设置gradient_checkpointingTrue。7.3 模型不收敛的常见原因训练loss不下降或者震荡通常不是模型本身的问题而是数据和超参数的问题学习率太大loss剧烈震荡或变成NaN。降到1e-5试试。数据标注错误模型学不到规律。人工抽查一批数据。标签映射错误比如把label 0和1搞反了。检查id2label和label2id的映射。输入格式错误tokenizer返回的input_ids没有正确传给模型。打印出来看看。我遇到过一次模型在训练集上准确率99%验证集上50%。排查了半天发现是数据预处理时把训练集和验证集的标签列搞混了。这种低级错误在实际项目中并不少见所以每次跑实验前花五分钟检查数据是值得的。8. 从transformers出发的进阶方向8.1 参数高效微调全量微调一个BERT需要更新所有110M参数。如果有多任务或者需要快速适配新场景参数高效微调PEFT是更好的选择。LoRA是最常用的方法只训练低秩矩阵参数量降到原来的1%以下效果却能接近全量微调。from peft import LoraConfig, get_peft_model lora_config LoraConfig( r8, lora_alpha32, target_modules[query, value], lora_dropout0.1, ) model get_peft_model(model, lora_config) model.print_trainable_parameters() # trainable params: 294,912 || all params: 102,294,528 || trainable%: 0.29LoRA的r值控制低秩矩阵的秩8到16是常用范围。target_modules指定对哪些层应用LoRA通常选注意力层的query和value矩阵。8.2 大模型时代的transformers生态现在transformers库已经不只是BERT和GPT的集合了。它支持LLaMA、Qwen、ChatGLM等主流大模型的加载和推理还集成了量化、Flash Attention、KV Cache等优化技术。如果你要部署一个7B级别的模型做推理基本流程是加载模型时设置load_in_4bitTrue做4-bit量化用device_mapauto自动分配到可用GPU然后调用generate方法生成文本。这些在transformers库里都有现成的API不需要自己写底层逻辑。8.3 持续学习的建议路径transformers这个主题足够大不可能一篇文章覆盖所有内容。我的建议是分三个阶段第一阶段跑通pipeline和手动加载模型的流程理解tokenizer、model、trainer三个核心组件的关系。第二阶段在自己的数据集上完成一次完整的微调走通数据准备、训练、评估、推理的全流程。第三阶段根据实际需求深入某个方向——做部署就研究量化和ONNX做研究就研究架构变体和训练技巧。每个阶段都会遇到新问题但有了前一个阶段的基础解决问题的速度会快很多。我在最开始接触transformers的时候光是搞清楚AutoModel和AutoModelForSequenceClassification的区别就花了不少时间。现在回头看这些概念其实很简单只是当时缺少一个从实战角度出发的引导。希望这篇内容能帮你少走一些弯路。

相关新闻

YOLO26改进 - 特征融合 | HS-FPN高效特征金字塔网络,通过选择性特征交互实现参数优化与性能提升

YOLO26改进 - 特征融合 | HS-FPN高效特征金字塔网络,通过选择性特征交互实现参数优化与性能提升

前言 本文介绍 MFDS-DETR 中的高层筛选特征金字塔 HS-FPN 在 YOLO26 中的接入方法。HS-FPN 利用高层语义特征生成通道权重,对低层特征进行选择,再通过逐点相加完成跨尺度融合。本文保留 YOLO26 主干及检测头,在 Neck 中构建 P5 → P4 → P3 …

2026/10/15 7:06:52 阅读更多 →
对比 @Configuration(Full) vs @Component(Lite)

对比 @Configuration(Full) vs @Component(Lite)

核心现象:同一个类里面,Bean方法互相调用,Full拿单例,Lite新建对象1. 两个简单Bean public class ABean { }public class BBean {public ABean aBean;public BBean(ABean aBean) {this.aBean aBean;} }2. Full模式(Co…

2026/10/15 7:06:52 阅读更多 →
酒店大功率空气能热水器,惠州厂家直供,全天候高效更省电

酒店大功率空气能热水器,惠州厂家直供,全天候高效更省电

在惠州空气能热水器行业做了十几年工程项目,我们团队在实践中发现,酒店客户咨询酒店大功率空气能热水器时,真正担心的往往不是机组匹数,而是高峰期热水够不够用、冬天稳不稳定、用几年后还有人管不管。今天以格瑞沃空气能在惠州落…

2026/10/15 7:06:52 阅读更多 →

最新新闻

用FastAPI和OCR打造PS5游戏截图素材管家

用FastAPI和OCR打造PS5游戏截图素材管家

家里那台PS5买回来半年后,我第一个受不了的不是游戏容量,而是截图和录像的管理。官方相册只能按时间倒序看,想搜某一场Boss战、某个游戏的地标截图,只能一页页翻。更头疼的是,我习惯把素材备份到家里的NAS,…

2026/10/15 7:42:00 阅读更多 →
Java旅行攻略搭子社交系统源码解析:从架构到匹配算法

Java旅行攻略搭子社交系统源码解析:从架构到匹配算法

刚拿到这套Java旅行攻略搭子社交系统源码的时候,我第一反应是“又是个社区加聊天的常规项目”,但真正把代码翻完才发现,它把“旅行攻略内容”和“搭子社交关系”这两条链路死死咬合在一起。很多开发者做社区时只做内容,做社交时只…

2026/10/15 7:42:00 阅读更多 →
SpringBoot+Vue+MyBatis高校实习管理系统设计与实现复盘

SpringBoot+Vue+MyBatis高校实习管理系统设计与实现复盘

每年五六月,是高校里最“兵荒马乱”的一段日子。一边是学生急着盖实习鉴定章、补周志材料,一边是辅导员和教务老师埋头在QQ群、微信群里一遍遍催收,纸质表和电子表还经常对不上。带过毕业班的朋友应该都有体会——这个场景太适合用一套“高校…

2026/10/15 7:42:00 阅读更多 →
QUIC协议如何根治直播卡顿?首帧秒开与弱网优化实践

QUIC协议如何根治直播卡顿?首帧秒开与弱网优化实践

1. 为什么直播总是卡:先聊聊我在真实环境中踩过的坑还记得接手某跨平台直播系统的性能优化时,后台数据统计里最刺眼的一项就是“首帧秒开率不达标”,用户端动不动就黑屏转圈三五秒,弹幕里全是催“优化网络”的。我一开始也和大多数…

2026/10/15 7:42:00 阅读更多 →
基于UniApp的微信小程序个性化聊天交友系统开发实战

基于UniApp的微信小程序个性化聊天交友系统开发实战

赶在毕业季前,很多同学都在愁选题。聊天交友类小程序算是经典方向,但大多数网上开源版本要么界面停留在五年前,要么只做了个壳子。这次分享的这套基于微信小程序、采用UniApp开发的大学生线上聊天交友系统,亮点不仅仅是“能聊天”…

2026/10/15 7:42:00 阅读更多 →
光子晶体光纤仿真降维实操:笔记本搞定模式干涉建模

光子晶体光纤仿真降维实操:笔记本搞定模式干涉建模

最近有个朋友跟我诉苦:他接手了一个光子晶体光纤传感器的项目,领导开口就问“你这个仿真要多大内存,是不是得租台服务器”,他按照常规三维时域软件一估算,发现模型随便就是几十亿网格,当场就自闭了。我跟他…

2026/10/15 7:41:00 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →