用LSTM预测虚拟机实例数量:时序数据预处理与滚动多步预测
简介面向云计算资源管理与机器学习初学者这是一份基于长短期记忆网络实现虚拟机实例个数预测的完整工程包针对云数据中心资源利用率优化与弹性伸缩场景提供了一套可运行的参考实现。压缩包内合计六十七个文件以十七个Java源码和十八个class编译文件为主体同时配有文本格式的数据说明、Excel格式的训练样本、XML格式的工程配置和README说明文档整体体积仅一百六十六KB保持Eclipse工程结构源码目录与编译输出目录分离便于直接导入开发环境进行学习与复现。目前共有一百四十一人学习下载。资源不仅演示了长短期记忆网络的输入门、遗忘门、输出门和记忆单元等核心机制还完整覆盖了虚拟机历史数据准备、模型构建与训练、实例数量预测的整个流程能够帮助读者理解LSTM处理时序预测和云资源弹性伸缩问题的方法配合清晰注释既适合新手快速上手也能为进阶者提供调参优化和工程化部署的参考是课程设计与毕业设计的实用素材。1. 虚拟机实例个数预测为什么LSTM适合这份容量规划需求预测虚拟机实例个数这件事本质上是在预测一条时间序列的下一个值——而这条序列在大多数业务场景里并不平稳它带着明显的日周期、周周期偶尔还有突刺。LSTM能记住长周期依赖比ARIMA这种线性模型更适合抓这种“昨天这个时段就涨过”的规律。我拿到这个项目包时第一反应是看它数据怎么组织、窗口怎么切因为时序预测的成败往往不在网络有多深而在样本构造对不对。如果你正处于需要提前规划资源、控制授权成本、避免半夜弹扩容告警的状态这套流程可以完整复用到你的场景里。适合所有做云资源管理、容量预估或基础设施监控的开发者和运维人员。2. 从原始序列到训练样本数据清洗、滑动窗口与归一化的三个关键选择2.1 原始数据长什么样这类项目包里的数据一般就是一个CSV两列一列是时间戳一列是虚拟机实例个数。时间粒度常见的有两种按小时采样一天24条按半小时采样一天48条。采样粒度决定了你能预测的最小时间单位也决定了序列的长度规模。拿到数据后先别急着建模我会先看一眼时间范围和缺失情况。虚拟机实例个数来自云平台接口或监控系统通常存在两类脏数据一是某几小时数据没采到出现NaN二是业务高峰期偶发超大值比如自动扩容瞬间从几十跳到几百下一小时又回落。这两种情况如果直接喂给LSTM会让模型学到很离谱的“突刺记忆”。常见做法是缺失值用前向填充兜底连续缺失超过6小时再考虑线性插值异常尖峰用滚动中位数加阈值识别超过3倍滚动标准差就做截断处理而不是直接删掉——因为突刺本身也有业务含义完全删除会导致序列不连续。提示处理时间序列的缺失值时尽量不要用全局均值填充那会抹掉周期性模型会学出一个每天24点准时误报的坏习惯。2.2 滑动窗口构造样本的核心逻辑LSTM监督训练需要把原始序列切成“x看过去y看未来”的样本对。这个包的核心代码一般在preprocess.py里思路是用一个固定长度的窗口在序列上滑动。窗口长度是历史步数预测目标可以是下一步的个数也可以是未来24步的曲线。我一般会做两步切法第一步生成“一步预测”样本用于训练模型第二步验证时用滚动方式看多步效果。以小时粒度为例窗口长度选24含义是让模型看到过去整整一天的变化规律再去预测下一小时。如果粒度是半小时窗口长度选48同样是看一天。下面这段是构造滑动窗口的参考实现逻辑上可以直接套用import pandas as pd import numpy as np def make_sequences(data, seq_len24, pred_len1): 将一维时间序列切分为 (X, y) 监督样本 data: 排序后的 vm_count 数值序列 seq_len: 历史窗口长度即用过去多少个时刻预测未来 pred_len: 预测未来几个时刻 X, y [], [] for i in range(len(data) - seq_len - pred_len 1): X.append(data[i : i seq_len]) y.append(data[i seq_len : i seq_len pred_len]) return np.array(X), np.array(y) # 读取原始数据 df pd.read_csv(data/raw_vm_count.csv, parse_dates[time]) values df[vm_count].values.astype(float) X, y make_sequences(values, seq_len24, pred_len1) print(样本形状:, X.shape, y.shape) # 输出示例: 样本形状: (训练样本数, 24, 1) 或 (样本数, 24)这段代码的关键在于seq_len和pred_len两个参数seq_len24表示用过去24小时预测未来pred_len1表示只预测下一小时。构造完成后X的形状是(样本数, 24)后面还需要reshape成LSTM要求的(样本数, 24, 1)第三维是特征通道数。如果资源包代码里还有额外特征比如星期几、是否节假日这个第三维会大于1但在这个包的基础版本里通常只有数量本身。注意切片循环结束后序列末尾会有seq_len pred_len - 1个点无法生成样本这是正常现象不要因此去填充数据。2.3 归一化选MinMax还是StandardLSTM对输入尺度极其敏感不归一化直接训练会出现梯度爆炸或收敛极慢。对于虚拟机实例个数这种数据波动范围往往在0到几百之间而且没有太多长尾我一般优先选MinMaxScaler把数据压缩到[0, 1]区间。StandardScaler适合大部分分布接近正态的数据但对尖峰数据不太友好——一旦序列尾部有个超大值标准化后的正常点位会全部挤在一团。归一化要注意一个容易被忽略的细节统计量必须只用训练集计算。如果把全量数据的min和max拿来用等于让训练集“偷看”了未来验证集和测试集的分布信息被提前泄漏指标会虚高。这也是包里preprocess.py里最常见的隐患。from sklearn.preprocessing import MinMaxScaler # 必须先切分再归一化避免信息泄漏 train_size int(len(values) * 0.8) val_size int(len(values) * 0.1) train_raw values[:train_size] val_raw values[train_size:train_size val_size] test_raw values[train_size val_size:] scaler MinMaxScaler(feature_range(0, 1)) # 用训练集统计量进行 fit再对验证集和测试集只做 transform train_norm scaler.fit_transform(train_raw.reshape(-1, 1)).flatten() val_norm scaler.transform(val_raw.reshape(-1, 1)).flatten() test_norm scaler.transform(test_raw.reshape(-1, 1)).flatten()另外要区分训练集和验证集是否也参与窗口构造。这里切分发生在窗口构造之前保证验证集样本不会包含训练集后面点的信息。时序数据切分不需要打乱顺序因为它本质上就是时间先后关系随机打乱只会破坏序列结构让模型学到错误的“记忆”。3. 模型搭建与训练LSTM层数、隐藏单元与早停之间的平衡3.1 网络结构不是越深越好虚拟机实例个数这种数据单变量输入周期性明显深度不需要太大。常见的两套配置单层LSTM配64个隐藏单元或者两层LSTM第一层128、第二层64。单层模型训练快、不易过拟合适合数据量只有几百上千条的情况双层模型能捕获更复杂的周期组合但需要更多数据支撑否则验证集Loss容易反弹。我一般会先跑单层64单元作为基准如果验证集MAE明显偏高再升级到双层。这个包的模型文件核心结构大致是import torch import torch.nn as nn class LSTMPredictor(nn.Module): def __init__(self, input_size1, hidden_size64, num_layers1, output_size1, dropout0.2): super().__init__() self.lstm nn.LSTM( input_sizeinput_size, hidden_sizehidden_size, num_layersnum_layers, batch_firstTrue, dropoutdropout if num_layers 1 else 0.0 ) self.fc nn.Linear(hidden_size, output_size) def forward(self, x): # x: (batch, seq_len, input_size) out, _ self.lstm(x) # 取最后一个时间步的输出做预测 out out[:, -1, :] return self.fc(out)batch_firstTrue让输入形状变成(batch, seq_len, input_size)这是PyTorch里更直观的写法不容易搞混维度。output_size1对应一步预测的输出。dropout只在层数大于1时生效单层LSTM加dropout反而可能破坏记忆通道。3.2 损失函数与优化器的选择训练回归任务最常用的损失函数是MSE均方误差和MAE平均绝对误差。MSE对大误差惩罚更重会让模型更谨慎地避开极端值但如果数据里有少量异常尖峰MSE会被这些尖峰带偏。MAE对异常值更稳健但梯度在误差较小时恒定收敛速度略慢。折中方案是用HuberLoss它结合了两者优势在误差较小时按平方增长超过阈值后按线性增长。优化器直接用Adam学习率0.001起步配合ReduceLROnPlateau做动态衰减。如果训练到后期损失一直在0.02左右抖动那就是学习率大了把学习率降到0.0003继续跑几轮。import torch.optim as optim from torch.optim.lr_scheduler import ReduceLROnPlateau model LSTMPredictor(input_size1, hidden_size64, num_layers1, output_size1) optimizer optim.Adam(model.parameters(), lr0.001) criterion nn.HuberLoss(delta1.0) scheduler ReduceLROnPlateau(optimizer, modemin, factor0.5, patience5)这里delta1.0表示误差超过1.0后从平方损失切换为线性损失。在归一化后的数据里误差一般小于1这个阈值能覆盖大多数情况。如果数据方差很小可以把delta调小到0.5。3.3 训练流程与早停策略循环训练时batch_size选32或64都可以小批量能让训练更稳定但太小的batch比如8会导致损失震荡。训练轮次设一个比较大的值比如200配合早停机制验证集损失连续15轮不下降就停止然后加载历史最优的模型参数。这相当于给训练过程留了“后悔药”不用担心最后一轮恰好过拟合。best_val_loss float(inf) patience 15 no_improve 0 for epoch in range(200): model.train() train_loss 0 for x_batch, y_batch in train_loader: optimizer.zero_grad() pred model(x_batch) loss criterion(pred, y_batch) loss.backward() optimizer.step() train_loss loss.item() # 验证 model.eval() val_loss 0 with torch.no_grad(): for x_val, y_val in val_loader: pred model(x_val) val_loss criterion(pred, y_val).item() if val_loss best_val_loss: best_val_loss val_loss torch.save(model.state_dict(), models/lstm_vm.pt) no_improve 0 else: no_improve 1 if no_improve patience: print(fearly stop at epoch {epoch}) break scheduler.step(val_loss)训练完成后模型文件保存在models/lstm_vm.pt后续推理环节直接加载这个最优权重。这里train_loader和val_loader用的是PyTorch的DataLoader注意不要在加载时对窗口内数据进行随机打乱时间顺序的语义必须保持。4. 推理与容量预警从模型到调度系统的落地路径4.1 加载模型并做真实推理模型训练好之后真正业务场景里需要做的是拿到当前时刻前seq_len个实际观测值预测未来一个或多个时刻的实例个数。推理代码的要点和训练不同——推理时没有验证集Loss更关键的是归一化和反归一化的对称性。import torch import numpy as np def predict_next(model, recent_values, scaler, seq_len24): recent_values: 最近 seq_len 个时刻的原始 vm_count 数值需要严格按时间正序 model.eval() # 归一化最近窗口 recent_norm scaler.transform(np.array(recent_values).reshape(-1, 1)).flatten() # 构造输入形状: (1, seq_len, 1) x torch.tensor(recent_norm, dtypetorch.float32).view(1, seq_len, 1) with torch.no_grad(): pred_norm model(x).item() # 反归一化得到真实数量 pred_raw scaler.inverse_transform([[pred_norm]])[0][0] return round(pred_raw)这里有个常见的坑scaler.transform的输入必须是二维数组直接传一维会报错inverse_transform同样如此。round的目的是让预测值回到合法的整数范围因为虚拟机实例个数不可能是1.7台。不过如果要做更精细的容量规划保留一位小数也没问题。4.2 评估指标与误差阈值模型预测得准不准不在训练Loss而在反归一化后的绝对误差。我在这个项目里会看三个指标MAE用于日常误差感知RMSE用于放大偶发性大误差的影响MAPE用于衡量相对偏差。以一个规模在100~300台之间波动的集群为例MAE为4.5意味着平均偏差约4.5台实例对于提前一天做资源准备来说完全够用如果MAE超过了15台那预测基本没有指导价值要回去检查窗口长度或数据清洗环节。评估代码可以直接对比验证集预测和真实值from sklearn.metrics import mean_absolute_error, mean_squared_error mae mean_absolute_error(y_true, y_pred) rmse mean_squared_error(y_true, y_pred, squaredFalse) mape np.mean(np.abs((y_true - y_pred) / y_true)) * 100 print(fMAE: {mae:.2f}) print(fRMSE: {rmse:.2f}) print(fMAPE: {mape:.2f}%)当MAE占均值比例低于5%时说明模型已经能抓住主要规律。如果MAPE异常高大概率是深夜低值时段比如0点数量只有个位数绝对值很小的偏差被放大了。这种情况不用过度紧张可以看分时段的MAE来决定模型是否合格。4.3 接入告警系统模型产出的预测值本身不是终点它要变成一个可执行动作。常见做法是让推理脚本每小时跑一次算出来来小时预测值然后和容量阈值比较。比如某公司定的规则是预测值超过集群容量上限的85%时触发预警连续三次预测超过90%就发扩容工单。这相当于给容量水位安装一个前视镜头而不是等系统真实用满后才报警。这个资源包里如果带了调度接入的示例代码一般也是薄薄一层读模型、拉最新数据、预测、判断阈值、推送消息。整个流程跑通后预测环节才真正融合进运维链路。5. 避坑指南六个常见错误与排查方法5.1 预测结果全是同一个数现象模型训练完预测出来每个时刻的值都差不多曲线几乎是平的完全看不出周期。原因目标变量做了MinMax归一化后序列被压缩到了[0, 1]的极小区间内波动。如果原始数值分布在极小范围模型拟合出的“最优解”是输出平均值附近的一个常数。解决先检查原始序列的方差。如果方差偏小可以放宽归一化区间或改用StandardScaler重新做另一个更有效的做法是增加窗口长度让模型看到更多周期结构。5.2 验证集误差远大于训练集现象训练集MAE只有2验证集MAE达到20误差曲线明显分叉。原因大概率是切分时没有按时间顺序或者把数据随机打乱后再切分。时序预测必须按顺序切分否则验证集里的时间点混入了训练集之前的数据。解决严格使用train → val → test的顺序切分并用训练集统计量归一化验证集和测试集。如果包里的代码用了随机分割函数直接改成按索引切分即可。5.3 一跑训练显存就溢出现象笔记本电脑训练batch_size设成128seq_len取144还没跑完一个epoch就OOM。原因LSTM在长序列上需要展开很多时间步模型内部缓存了很多中间变量序列越长显存占用越大。虚拟机实例个数预测通常不需要144小时的历史窗口24或48完全足够。解决把seq_len降到24再试。如果确实需要更长历史可以减小batch_size到16或32或者在LSTM层前加一个Conv1D做降采样把序列先压缩再进LSTM。5.4 预测值出现负数现象反归一化后某些时刻的预测值变成了-8这种负数看着明显不合理。原因模型输出层是线性层训练数据里没有负样本但模型外推时可能在某些组合下产生负输出尤其Sequence归一化到[0, 1]区间时、输入值接近0而LSTM对短记忆不敏感时输出可能低于0。解决代码里对pred_raw做一次max(0, pred_raw)处理。更优雅的方案是在训练时把输出层激活函数改为ReLU强制输出非负代价是会微幅增加训练难度。两者可以同时使用。5.5 训练正常但推理时shape总报错现象训练完保存模型写推理脚本一执行就报Expected 3D input之类的维度错误。原因训练时输入是(batch, seq_len, 1)而推理时只传入了一个样本如果直接把一维数组喂给模型形状变成了(seq_len,)模型无法识别。解决推理前先重塑成(1, seq_len, 1)。调试方法很简单打印x.shape确认三维。这类问题几乎每个写LSTM推理的人都会遇到一次不是模型问题是PyTorch维度约定问题。5.6 安装了依赖却发现模型文件和代码版本对不上现象加载训练好的.pt文件时提示找不到某个key或维度和模型定义不匹配。原因训练时的模型结构和推理脚本里的模型结构不一致。最常见的是修改了隐藏单元数比如训练时用128推理时却用了64。解决模型定义必须和保存时一致。如果改了网络结构旧模型权重就不能用只能重新训练。建议在推理脚本里把模型定义完整复制过来不要“凭印象”重写这是最稳妥的方式。6. 从单步到滚动多步一个更稳的预测技巧只预测下一步的价值有限实际容量规划通常需要看未来6小时、12小时甚至24小时的趋势。常见做法有两种第一种是训练时把pred_len直接设为目标步长让模型一次输出多条未来曲线第二种是在单步模型上做滚动预测把上一步的预测值当作窗口的新输入重复调用。第二种方法的风险是误差累积第一步预测偏差0.5第二步在这个偏差基础上继续预测偏差可能放大。我一般会混合使用预测未来24小时时先用事件预测模式算出未来24个点再把每个预测点的输出当作输入继续推演同时每天早上或整点用真实监测值来重置起点避免误差无限累积。滚动推理代码def rolling_predict(model, recent_values, scaler, steps24): 基于最近窗口滚动预测未来 steps 个时刻 model.eval() seq recent_values[-seq_len:].copy() preds [] for _ in range(steps): seq_norm scaler.transform(np.array(seq).reshape(-1, 1)).flatten() x torch.tensor(seq_norm, dtypetorch.float32).view(1, seq_len, 1) with torch.no_grad(): next_norm model(x).item() next_raw scaler.inverse_transform([[next_norm]])[0][0] preds.append(round(next_raw)) # 滚动窗口移除最早的一个点加入最新的预测点 seq.append(next_raw) seq.pop(0) return preds这里有个性能优化点如果预测步数较长且调用频繁每次都用inverse_transform其实没必要可以全部在归一化空间累加最后统一反归一化能省掉几十次转换开销。seq.append(next_raw)时注意recent_values最后一个点要保留避免窗口起点错误。从那以后我每次上线这种时序预测模型都强制自己走一遍“清洗→窗口切分→训练→滚动推演→反归一化取整→与真实值对比”的完整链路确认每一步的形状和参数都对得上才敢把预测值接进告警系统。时序模型像是个黑匣子但黑匣子外面的数据管道才是真正决定成败的部分希望这里记下的这些细节能帮到你少踩几个坑。本文还有配套的精品资源点击获取

相关新闻

Java性能优化底层原则:量化、定位、优先级与验证闭环

Java性能优化底层原则:量化、定位、优先级与验证闭环

Java 程序员做性能优化,最常犯的错不是技术不够,而是上来就动手改代码。我见过太多团队,花了一周把某个"看起来很慢"的接口改成了异步,结果压测一打,慢的还是慢,甚至更慢了——因为真正的问题出在…

2026/10/11 11:35:08 阅读更多 →
AI写作工具如何让你的答辩演讲稿从“念经”变“脱口秀”

AI写作工具如何让你的答辩演讲稿从“念经”变“脱口秀”

答辩这种事情,我见过太多“认真准备稿子,一上台就翻车”的例子。稿子本身写得倒也算完整,但一开口,评委老师的目光就开始发散,有人低头看手机,有人翻论文,有人直接闭眼养神。问题出在哪&#xf…

2026/10/11 11:35:08 阅读更多 →
Python查找模块的各种方法和技巧

Python查找模块的各种方法和技巧

前言 「这个模块到底装在哪」是排查环境问题时第一个要回答的问题。同名模块装了多份、虚拟环境和系统解释器混用、pip 装完却 import 不到——这些症状的根因都可以归结为「解释器实际加载的是哪一个文件」。 很多人以为 import 只有一种查法,其实「查找模块」在不…

2026/10/11 11:35:08 阅读更多 →

最新新闻

codex 0.6.5 tar.gz 安装配置全攻略:从PyPI下载到跑通避坑指南

codex 0.6.5 tar.gz 安装配置全攻略:从PyPI下载到跑通避坑指南

简介:codex 0.6.5 是一份从 PyPI 官方下载的 Python 库源码压缩包,面向分布式系统与云原生应用开发者,核心围绕 Zookeeper 协调服务和分布式场景的交互展开,可用于配置管理、集群状态同步及云环境弹性组件的开发。包体共 639 个文…

2026/10/11 13:32:00 阅读更多 →
上位机OBJ模型材质MTL文件解析与渲染实战

上位机OBJ模型材质MTL文件解析与渲染实战

一位搞上位机开发的朋友曾跟我吐槽:接手一个3D模型加载项目,OBJ文件一读一个准,偏偏材质信息死活出不来,整个模型灰蒙蒙一片毫无质感。我一看代码,他压根没处理配套的MTL文件。这几乎是所有上位机工程师接手三维可视化…

2026/10/11 13:32:00 阅读更多 →
松下FP-XHC60T在3C点胶设备中的运动控制方案与调试复盘

松下FP-XHC60T在3C点胶设备中的运动控制方案与调试复盘

1. 项目整体思路与需求拆解1.1 3C点胶设备到底在控什么做3C行业的自动化设备,点胶机应该是很多工程师入行后接触最多的机型之一。手机中框、耳机壳、摄像头模组、电池仓密封、FPC补强,这些制程里都离不开点胶。胶水把结构粘住,把防水做严实&a…

2026/10/11 13:32:00 阅读更多 →
12天3城3展:工业自动化品牌密集参展的排期策略与复盘

12天3城3展:工业自动化品牌密集参展的排期策略与复盘

1. 从天津到杭州再到上海,12天3场展会意味着什么今年这一波秋季展会潮里,拉孚(Larfe)的行程单看得不少人直呼“太拼了”——12天,3座城市,3场展会,从天津出发,经过杭州,最后压轴落在上海工博会。…

2026/10/11 13:32:00 阅读更多 →
SpreadLicense.zip:离线开源许可证扫描与合规校验工具

SpreadLicense.zip:离线开源许可证扫描与合规校验工具

简介:本资源是面向T企业管理软件二次开发与运维人员的SpreadJS授权文件修复工具,专为解决财务报表模块加载时出现‘powered by grapecity spreadjs’未授权提示问题而设计。资源定位清晰:适用于熟悉T系统架构、具备前端JavaScript基础的IT支持…

2026/10/11 13:32:00 阅读更多 →
2026年详解腾讯企业邮箱购买方式,通过购买电话咨询套餐配置

2026年详解腾讯企业邮箱购买方式,通过购买电话咨询套餐配置

腾讯企业邮箱面向企业用户提供专业邮局服务,企业配置自有域名后即可生成以企业域名为后缀的账号,并自主组织、管理和分配。2026年,企业选购时的核心问题集中在两点:通过何种方式完成购买,以及如何借助购买电话把套餐配…

2026/10/11 13:31:00 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →