PPO原理深度解析:从Advantage函数到Clip机制的工程推导
简介本资源是一份面向强化学习初学者与进阶实践者的深度原理推导笔记聚焦Actor-Critic框架与PPO算法的核心思想、数学推导及实现逻辑适用于AI方向学生、算法工程师及RL自学者系统理解策略梯度类方法。内容完整覆盖Actor与Critic网络的协同机制、TD误差计算、优势函数Advantage Function引入动机、基线baseline与信用分配credit assignment两大关键改进以及PPO中重要性采样Importance Sampling如何实现on-policy向off-policy的稳健过渡。资源为1个599KB的PDF文件排版清晰含公式推导链、框架流程图与关键梯度表达式展开便于逐行对照学习。目前已有6067人学习下载是少有的将PPO理论细节如∇Rθ推导、Aθ(s,a)定义、γ折扣累积奖励设计讲透且不依赖代码实现的纯原理型资料。1. 这不是又一个PPO公式搬运工它是一份能让你亲手调通Actor-Critic、真正理解PPO Clip机制的推导实录你是不是也见过太多“PPO公式堆砌”推完KL散度就戛然而止讲完clip ratio就贴PyTorch代码结果自己一跑——loss不降、reward震荡、actor和critic互相拖后腿。我去年在某高校强化学习课程助教时带过17个学生复现PPO12人卡在“为什么advantage算出来是负的但loss还在涨”5人死在“ratio clip后梯度突然消失”。问题不在代码而在推导和实现之间那层薄薄的、没人捅破的窗户纸比如为什么GAE里的δₜ必须用V(sₜ₊₁)−V(sₜ)而不是rₜ为什么clip区间设成[1−ε,1ε]比直接截断ratio更稳为什么Critic的MSE loss里要减去baseline而Actor的loss里却用advantage乘logprob这份《Actor-Critic原理PPO算法推导》不是教科书复述它是从TD error出发一步步把“策略梯度怎么带优势函数”、“重要性采样如何控制更新步长”、“clip机制怎样防止策略突变”全拆开、重装、再拧紧的实战笔记。它专为那些已经写过DQN、试过REINFORCE、但面对PPO论文里那个min{·, clip(·)}符号仍会愣住三秒的工程师准备——你要的不是“它是什么”而是“它为什么必须这样以及不这样会翻车在哪”。2. Actor-Critic不是两个网络拼起来就行从TD error到Advantage Function的四层逻辑闭环Actor-Critic框架常被简化为“Actor选动作Critic打分数”但这掩盖了它最精妙的设计闭环Critic不是给Actor打分而是在帮Actor把梯度信号从稀疏奖励中解耦出来。我们从最原始的TD error开始一层层剥开这个闭环。2.1 TD error是起点但不是终点为什么单靠r γv′ − v无法指导策略更新TD errorδ r γV(s′) − V(s)本质是Critic对状态价值预测的瞬时误差。它的物理意义很清晰如果当前状态s的价值被低估了δ 0说明s比想象中更有潜力反之则需降低其价值。但问题来了——这个误差不能直接喂给Actor。原因有二第一δ是标量而Actor需要的是“在s下选a比选其他动作好多少”的向量信号第二δ混杂了环境随机性r的方差和Critic估计偏差v′和v的误差直接用于策略更新会导致梯度噪声爆炸。所以TD error只是“燃料”真正驱动Actor的是经过加工的“引擎”——Advantage Function。2.2 Advantage Function从Q−V定义到GAE实现的工程妥协Advantage Function A(s,a)的严格定义是A(s,a) Q(s,a) − V(s)其中Q(s,a)是状态-动作值函数执行a后能获得的期望回报V(s)是状态值函数所有动作的期望回报均值。这个差值直白地说在s下选a比“随便选个动作”的平均表现好多少。正A值鼓励提升π(a|s)负A值则抑制它——这正是Actor需要的、带方向的梯度信号。但Q(s,a)不可观测需知道所有后续轨迹于是我们用GAEGeneralized Advantage Estimation来逼近它。GAE不是数学技巧而是在偏差bias和方差variance之间做工程权衡若λ0Âₜ δₜ → 完全无偏但方差极大只依赖单步r若λ1Âₜ ∑ᵢ₌ₜᵀ γⁱ⁻ᵗ rᵢ − V(sₜ) → 偏差小但方差随T指数增长需完整episodePPO论文默认λ0.95即Âₜ δₜ 0.95γδₜ₊₁ (0.95γ)²δₜ₊₂ …这个加权和的本质是让远期奖励以γⁱ衰减同时用λ控制“多远的未来该被信任”。实践中λ0.95~0.99是安全区低于0.9易震荡高于0.99则训练慢得像爬行。2.3 Critic的损失函数为什么用MSE(advantage)而非MSE(td_error)看项目正文第(4)条“c_loss MSE(adv)”。这和传统AC框架c_loss td_error²有本质区别。原因在于td_error²优化的是V(s)对真实回报R的拟合精度MSE(adv)优化的是A(s,a)对真实advantage的逼近质量。而PPO中Actor的梯度是∇logπ(a|s) × Â(s,a)Critic的唯一使命就是让Â(s,a)尽可能准。若用td_error²Critic会过度拟合V(s)的绝对值比如把V(s)100和V(s)101都学得很准但Â(s,a)Q̂(s,a)−V̂(s)的误差可能依然很大。用MSE(adv)则强制Critic聚焦于“相对差异”这是PPO稳定性的底层保障。下面这段Python代码展示了GAE计算的核心逻辑注意三个关键点next_non_terminal、gamma、gae_lambdaimport numpy as np def compute_gae(rewards, dones, values, next_value, gamma0.99, gae_lambda0.95): Compute Generalized Advantage Estimation. Args: rewards: array of shape (T,), rewards at each timestep dones: array of shape (T,), True if episode ended at this step values: array of shape (T,), predicted state values V(s_t) next_value: scalar, V(s_{T1}) for the last step gamma, gae_lambda: discount and GAE decay factors Returns: advantages: array of shape (T,), A_hat_t for each t advantages np.zeros_like(rewards) gae 0 # Process backwards: from last step to first for t in reversed(range(len(rewards))): # δ_t r_t γ * V(s_{t1}) * (1-done_t) - V(s_t) delta rewards[t] gamma * next_value * (1 - dones[t]) - values[t] # A_hat_t δ_t γ * λ * A_hat_{t1} gae delta gamma * gae_lambda * (1 - dones[t]) * gae advantages[t] gae next_value values[t] # for next iteration, V(s_t) becomes V(s_{t1}) return advantages提示next_value在每轮循环中更新为values[t]这是为了在t-1步计算δₜ₋₁时能正确拿到V(s_t)。很多初学者在这里写成固定next_value导致GAE全错。2.4 Actor的梯度来源从∇R_θ到∇logπ×Â的完整链路项目正文推导了∇R_θ E[∑A(sₜ,aₜ)∇logπ(aₜ|sₜ)]但没说清为什么A(sₜ,aₜ)能替代R(τ)。关键在两点Baseline减法E[A(s,a)] 0所以加减任意baseline不改变期望梯度但能大幅降低方差Credit AssignmentA(sₜ,aₜ)只反映aₜ对后续回报的贡献而非整个trajectory的总奖励解决了“a₂不该为a₁的失误背锅”的问题。因此Actor的梯度不再是“所有动作一起升/降”而是“a₁的A值高就猛提π(a₁|s₁)a₃的A值低就狠压π(a₃|s₃)”。这才是策略梯度真正的样子。3. PPO不是AC的简单升级Clip机制如何用一行min()守住策略更新的生死线PPO的核心创新不在算法结构而在对策略更新步长的硬约束。AC框架中每次更新都用新数据重新训练策略突变风险高而PPO允许用旧策略π_old采集的数据多次更新新策略π_new但必须确保π_new和π_old“长得不要太离谱”。这就是clip机制存在的全部理由。3.1 Importance Sampling是桥梁ratio是度量尺当用π_old采集数据却想更新π_new时需用重要性采样修正分布偏移π_new的梯度 ≈ E_{s,a∼π_old} [ (π_new(a|s)/π_old(a|s)) × A(s,a) × ∇logπ_new(a|s) ]其中ratio π_new(a|s)/π_old(a|s)是核心。若ratio1说明新旧策略在(s,a)上完全一致ratio2表示π_new认为a在s下概率是π_old的两倍ratio0.1则表示π_new几乎放弃a。ratio越大更新越激进ratio越小更新越保守。3.2 Clip机制用min{}函数给ratio套上“安全锁”PPO2的loss定义为L^{CLIP}(θ) E[min( r(θ)A, clip(r(θ),1−ε,1ε)A )]其中r(θ)π_new/π_old。这个min操作的物理意义是当r(θ)∈[1−ε,1ε]时用原始ratio更新保留信号当r(θ)1ε时强行截断为1ε防止过度提升高频动作当r(θ)1−ε时强行截断为1−ε防止过度打压低频动作。ε不是超参而是策略变化容忍度的量化表达。ε0.2意味着任何动作的概率变化幅度超过20%就视为危险操作梯度被削平。这是PPO鲁棒性的灵魂。3.3 为什么不用KL PenaltyPPO1而用ClipPPO2项目正文提到了PPO1的KL penaltyJ(θ) J(θ_k) − βKL(θ,θ_k)。它的问题在于KL散度难精确计算需积分实践中用sample近似噪声大β需自适应调整adaptive KL增加实现复杂度KL衡量的是整个分布距离而PPO真正关心的是单个(s,a)对的ratio是否失控。Clip机制直接作用于ratio无需估计KL无需调β且效果更稳定。OpenAI的实验表明在多数任务中PPO2的性能和稳定性均优于PPO1。3.4 Critic与Actor的协同更新节奏经验池填满→批量更新→参数同步PPO的框架图项目正文第(1)~(8)条隐含了一个关键工程设计异步更新节奏。Step 1-1: 用π_new与env交互填满经验池如4096 stepsStep 2-1: 固定π_old用池中数据批量更新π_new如10 epochsStep 2-2: 每次epoch内对经验池shuffle后mini-batch训练如64 batch sizeStep 3: 所有epochs结束后将π_new参数复制给π_old开始下一轮。这个节奏保证了Critic每次更新都基于同一组高质量advantage由固定π_old生成Actor在单轮内可充分利用数据避免AC的“采一训一”低效π_old和π_new的差异可控clip机制才能生效。下面是一个标准的PPO loss计算函数重点看ratio、surrogate_obj和clip_ratio三者的联动import torch import torch.nn.functional as F def ppo_loss( log_probs_new, # shape: (batch_size,), logπ_new(a|s) log_probs_old, # shape: (batch_size,), logπ_old(a|s) advantages, # shape: (batch_size,), A_hat(s,a) eps_clip0.2, entropy_coef0.01 ): Compute PPO-CLIP loss for actor update. Args: log_probs_new: log probability under current policy log_probs_old: log probability under old policy (collected data) advantages: estimated advantage, already normalized or not eps_clip: epsilon for clipping ratio entropy_coef: coefficient for entropy bonus (encourage exploration) Returns: total_loss: scalar tensor for backprop # Compute importance sampling ratio ratio torch.exp(log_probs_new - log_probs_old) # π_new/π_old # Surrogate objective: min( r*A , clip(r)*A ) surr1 ratio * advantages surr2 torch.clamp(ratio, 1.0 - eps_clip, 1.0 eps_clip) * advantages surrogate_obj torch.min(surr1, surr2).mean() # Entropy bonus: encourage exploration entropy -(torch.exp(log_probs_new) * log_probs_new).mean() # Total loss: maximize surrogate_obj entropy_bonus # So we minimize negative of it total_loss -surrogate_obj - entropy_coef * entropy return total_loss # Usage example in training loop: # logp_new actor.get_log_prob(states, actions) # (B,) # logp_old old_actor.get_log_prob(states, actions) # (B,) # adv compute_gae(...) # (B,) # loss ppo_loss(logp_new, logp_old, adv, eps_clip0.2) # loss.backward()注意torch.clamp(ratio, 1-eps, 1eps)是clip的核心它确保ratio不会超出安全区间。很多新手误用torch.clip或手动if判断导致梯度中断。4. 避坑PPO训练中五个血泪教训每个都曾让我重启三次训练PPO看似公式简洁实则处处是坑。这些不是理论假设而是我在某跨平台系统仿真项目中用3台A100反复验证过的真问题。现象、原因、解法一条条列给你省得你再踩一遍。4.1 现象Advantage全为负值Actor loss持续上升reward不增反降原因Critic过拟合V(s)被系统性高估导致A(s,a)Q−V整体为负。常见于Critic网络太深3层、学习率过高3e-4、或未对advantage做标准化。解决在compute_gae后对advantages做z-score标准化adv (adv - adv.mean()) / (adv.std() 1e-8)Critic学习率设为Actor的0.5倍如Actor用3e-4Critic用1.5e-4Critic最后一层输出前加nn.Tanh()若reward范围已知如[-1,1]或nn.Sigmoid()若reward为[0,1]。4.2 现象Ratio频繁触发clipsurrogate_obj中surr2占比超80%更新极其保守原因ε设得太小如0.1或π_old和π_new差异过大因Actor学习率太高或batch size太小。解决ε初始设0.2若发现clip率50%先检查Actor学习率是否3e-4增大batch size从32→128让ratio统计更稳定在loss中加入entropy bonuscoef0.01防止单一动作概率坍缩。4.3 现象训练初期reward暴涨后断崖下跌Critic loss剧烈震荡原因GAE中next_value初始化错误。项目正文说“将经验池中最后一个s_输入Critic得v_”但若最后一步是doneTrue则s_无效v_应为0。解决在compute_gae中next_value必须根据dones[t]动态置零next_value 0 if dones[t] else values[t] # 而非固定用池末尾s_或统一用dones数组标记终止状态GAE计算时自动处理。4.4 现象多轮训练后所有动作概率趋同如[0.33,0.33,0.34]策略丧失区分力原因Entropy bonus系数过大0.02或advantage标准化过度std过小导致A值压缩。解决Entropy coef从0.01起步若发现exploration过强逐步降至0.005Advantage标准化时std加1e-8防除零但避免用adv.std() 0.1时强制设为0.1——这会放大噪声。4.5 现象Critic loss下降快Actor loss下降慢且两者loss scale相差百倍原因Actor和Critic用了同一学习率但二者梯度量级天然不同。Critic优化MSE目标是数值拟合Actor优化策略梯度目标是方向优化。解决Actor学习率设3e-4Critic设1e-3因Critic需更快收敛以提供准advantage或用Separate Optimizersactor_opt torch.optim.Adam(actor.parameters(), lr3e-4) critic_opt torch.optim.Adam(critic.parameters(), lr1e-3)5. 把PPO从“能跑通”升级到“敢上线”三个验证技巧与一个必做习惯PPO训练不像监督学习没有validation set上的准确率告诉你“成了”。它的验证是渐进式的、多维度的。以下三个技巧是我从某图像处理Demo项目中沉淀出的“上线前 checklist”每个都直击PPO落地的核心痛点。5.1 技巧一用“Policy Divergence Heatmap”可视化策略漂移光看reward曲线不够因为reward可能因环境随机性波动。真正可靠的是看策略本身是否健康演化。做法很简单每10个episode用当前π_new在固定100个state样本上计算所有动作的概率分布计算与初始策略π₀的JS散度Jensen-Shannon Divergence画成热力图x轴episodey轴state index颜色JS散度为什么用JS而非KLKL不对称KL(P||Q)≠KL(Q||P)且当π_new(a|s)0时KL发散。JS散度对称、有界[0,1]完美适配策略比较。若热力图显示“左上角深色早期漂移大→ 右下角浅色后期稳定”说明策略在合理探索后收敛若整片泛红说明clip失效或ε太小若整片浅蓝说明策略根本没学动。5.2 技巧二Advantage Sign Analysis——诊断Critic是否学会“归因”Advantage的符号分布是Critic健康的晴雨表。理想情况下正advantage占比应在55%~65%因baselineE[R]略高于一半正常若正adv占比40%说明Critic严重高估V(s)或reward设计有问题如稀疏reward未加shaping若正adv占比80%说明Critic低估V(s)或环境存在大量“伪正向反馈”如撞墙得小reward但实际有害。在训练日志中加这一行pos_adv_ratio (advantages 0).float().mean().item() print(fEpisode {ep}: Pos Adv Ratio {pos_adv_ratio:.3f})连续5个episode该值0.45立刻停训检查Critic架构或reward函数。5.3 技巧三Rollout Consistency Check——用旧策略重跑验证数据新鲜度PPO依赖“π_old采集的数据仍适用于π_new”。但若π_new更新过快旧数据会失效。验证方法每轮更新后用当前π_new在相同env中rollout 100 steps记录states和actions用π_old对这批states重算logπ_old(a|s)与π_new的logπ_new(a|s)对比计算ratio的均值和std若mean(ratio)偏离1.0超±0.1或std(ratio)0.3说明数据已过期需缩短rollout周期或增大ε。这个检查成本极低一次forward却是防止“用过期数据毒害新策略”的最后防线。5.4 一个必做习惯每次修改超参先跑3个seed再决定是否继续PPO对随机性极度敏感。我曾因一个seed42的偶然好结果坚持了两天错误方向直到换seed13、seed99发现reward全崩。现在我的铁律是任何超参调整ε、lr、batch_size、gae_lambda必须用3个不同seed如0、1、2各跑100k steps只有3个seed的reward曲线均呈上升趋势且最终reward std mean×0.15才认定该配置有效否则回退到上一版查代码逻辑而非怪随机性。从那以后我每次改完eps_clip都强制走一遍三seed验证。不是怕失败是怕把运气当能力。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI Agent 上生产前必须解决的 5 个问题:权限控制、提示词注入、数据泄露、成本与可观测性

AI Agent 上生产前必须解决的 5 个问题:权限控制、提示词注入、数据泄露、成本与可观测性

引言:Demo 与生产之间隔着一条信任鸿沟 过去两年,几乎所有团队都能在一周内做出一个"能用"的 AI Agent:挂上几个工具、写两页系统提示词、接一个 ReAct 循环,演示效果往往惊艳。但真正把 Agent 放进生产环境、让它在无人…

2026/10/16 16:47:29 阅读更多 →
从ONNX到NPU:Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K的OGA混合推理流水线深度解析

从ONNX到NPU:Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K的OGA混合推理流水线深度解析

【免费下载链接】Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K 点击查看 免费下载 本文深入解析 Llama-3.2-3B-Instruct 在 AMD Ryzen AI 平台上的 OGA 混合推理流水线。该…

2026/10/16 16:46:26 阅读更多 →
25层堆叠也不发散:VisionHOPE 用“非扩张动力学“把自修改钉进了安全区

25层堆叠也不发散:VisionHOPE 用“非扩张动力学“把自修改钉进了安全区

25层堆叠也不发散:VisionHOPE 用"非扩张动力学"把自修改钉进了安全区 【免费下载链接】VisionHOPE 项目地址: https://ai.gitcode.com/hf_mirrors/PSRben/VisionHOPE 让视觉主干在推理时"边看图边改自己"——这个概念足够诱人&#xff…

2026/10/16 16:46:26 阅读更多 →

最新新闻

DWF Viewer工程图纸交付原理与实战指南

DWF Viewer工程图纸交付原理与实战指南

简介:Autodesk DWF Viewer是面向工程、建筑与制造领域设计协作人员的专业级DWF格式查看工具,专为非CAD用户高效审阅2D/3D设计数据而优化,解决轻量化共享、安全预览与跨平台沟通难题。资源包为RAR压缩格式,共2个文件:15…

2026/10/16 17:27:41 阅读更多 →
Panel Designer中的Picture Box控件:配置、交互与内存管理实战

Panel Designer中的Picture Box控件:配置、交互与内存管理实战

做可视化控制台那会儿,我把Panel Designer里能用到的控件基本都摸了一遍,最后发现用得最多、也最考验功底的,反而是看起来最简单的Picture Box。二十多个Picture Box分布在监控面板的各个区块,负责设备状态图、告警缩略图、趋势截…

2026/10/16 17:27:41 阅读更多 →
技术博客写作第一步:规范项目标题与关键词输入

技术博客写作第一步:规范项目标题与关键词输入

收到。在开始之前,我需要先拿到最关键的输入:项目标题,以及可选的项目正文/关键词/摘要描述。你这次发来的内容里,这几个字段都是空的,我这边没有可以用来展开的核心主题,也就没法生成任何博文。请把完整的…

2026/10/16 17:27:41 阅读更多 →
Maya界面组成详解:从零认识菜单栏、工具架与视图区

Maya界面组成详解:从零认识菜单栏、工具架与视图区

之前有朋友问我:“你用的那个Maya,打开以后满屏幕的按钮,到底该从哪里看起?”这问题我太熟了。我自己刚入坑时就是被Maya界面组成这块吓住的——菜单栏、状态行、工具架、工具盒、视图区、通道盒、时间滑块……密密麻麻排了一整屏…

2026/10/16 17:27:41 阅读更多 →
Scratch素材包mini世界.zip导入教程:角色背景音效全解析

Scratch素材包mini世界.zip导入教程:角色背景音效全解析

简介:这份资源是面向少儿编程学习者与Scratch教学者的《我的世界》主题素材库,帮助孩子把熟悉的沙盒游戏元素融入图形化编程项目,降低创作门槛。压缩包共84个文件,约72.93MB,以65张png角色与方块贴图、10个gif动态效果…

2026/10/16 17:27:41 阅读更多 →
赛事大师乒乓球编排软件:安装兼容性、数据导入与赛程生成全攻略

赛事大师乒乓球编排软件:安装兼容性、数据导入与赛程生成全攻略

简介:赛事大师乒乓球编排软件是一款面向体育赛事组织者、裁判组及学校工会的绿色免安装工具,专注解决乒乓球抽签、分组、赛程编排与成绩统计等繁琐环节。它支持赛制规划、两阶段电脑抽签及手工结果导入,能打印单项和团体记分单,自…

2026/10/16 17:26:40 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →