自动化失败后如何继续?AI工作流与Agent协作的恢复策略
1. 自动化失败到底意味着什么1.1 先厘清一个常见误解很多人一提到自动化失败第一反应就是“脚本挂了”“流程断了”“得赶紧修”。这个判断在单点任务里没错但放到 AI 工作流和 Agent 协作的场景里往往只对了一半。自动化失败其实分三种性质完全不同的情况处理方式也截然不同。第一种是执行层失败。比如某个自动化测试脚本因为页面元素变了而报错或者某个工作流节点因为接口超时返回了空值。这类失败是“动作没做成”问题定位相对直接修的是代码或配置。第二种是决策层失败。Agent 拿到了数据但判断错了下一步该干什么或者工作流在分支条件上走错了路径。这类失败表面上看流程跑完了但结果是错的比第一种更隐蔽。第三种是协作层失败。多个 AI 组件、多个 Agent 之间传递信息时上下文丢失、格式不匹配、职责边界模糊导致整个链路虽然每一步都“成功”了但合起来是个废品。我踩过最深的坑就是第三种。当时搭了一个内容处理工作流前面几个节点各自跑得好好的结果最后输出的时候发现中间某个环节把关键字段吞掉了排查了大半天才定位到是两个组件对同一个字段的理解不一致。所以自动化失败之后工作怎么继续第一步不是急着修而是先判断你面对的是哪一类失败。1.2 失败之后最该做的三件事判断完失败类型接下来有三件事必须按顺序做顺序错了会浪费大量时间。第一件冻结现场。不要急着重跑。很多人习惯性地再点一次“执行”结果把出错的现场覆盖了日志被冲掉复现都复现不了。正确的做法是先把当前状态保存下来——日志、中间产物、输入数据、环境快照能留的都留。这一步花不了几分钟但能省下后面几个小时的排查时间。第二件界定影响范围。这次失败影响了哪些下游环节有没有已经产生的错误结果被消费掉了比如一个自动化流程失败后它产出的半成品有没有被后续步骤当成正确输入继续处理如果有那你要修的不只是这个失败点还要回溯清理被污染的数据。第三件决定继续策略。是原地修复后重跑还是跳过失败节点继续往下走还是回滚到上一个稳定状态重新来过这个决策取决于失败的严重程度和业务对时效的要求。下面我会展开讲这几种策略分别适合什么场景。提示冻结现场这个动作建议直接做成工作流里的标准步骤。任何自动化流程在关键节点失败时自动把上下文打包存档而不是等人来手动处理。这个习惯一旦养成排查效率至少翻倍。1.3 为什么“继续”比“修复”更难修复一个 bug 是有明确终点的——改完、测过、通过结束。但“失败后工作怎样继续”这个问题没有标准答案因为它涉及的是流程的韧性问题。一个健壮的自动化体系不是永远不出错而是出错之后能优雅地降级、有序地恢复、可控地继续。这背后需要的是对流程的全局理解而不仅仅是对某个脚本的熟悉程度。我见过太多团队把精力全花在“让自动化不出错”上结果一旦出错就全线瘫痪因为没有人想过失败之后该怎么办。所以这一篇的重点不是教你怎么修某个具体的自动化脚本而是给你一套失败后继续推进工作的思路框架和实操方法。不管你是做测试自动化、AI 工作流编排还是 Agent 协作系统这套思路都能直接套用。2. 失败分类与继续策略的对应关系2.1 三类失败的判断标准要把“失败后怎么继续”这件事讲清楚得先有一套快速判断失败类型的标准。我总结了一个简单的三分法看三个维度就够了。判断维度执行层失败决策层失败协作层失败表面现象报错、超时、中断流程跑完但结果不对各环节正常但整体输出异常日志特征有明确异常堆栈日志正常无报错日志分散各节点各自正常复现难度容易复现偶发依赖输入难以复现依赖组合状态影响范围局部可能影响整条链路影响跨系统协作修复优先级高但不紧急紧急需立即排查高且紧急需系统性解决这张表不是绝对的实际场景里经常出现混合型失败。但有了这个框架你至少能在失败发生后的第一时间做出一个大致判断而不是像无头苍蝇一样乱撞。2.2 执行层失败原地修复加断点续跑执行层失败是最常见的也是最好处理的。核心策略就八个字原地修复断点续跑。具体怎么做假设你有一个自动化测试流程跑到第三步的时候因为元素定位失败挂了。传统做法是修好定位然后从头再跑一遍。但如果整个流程很长前面两步耗时很久从头跑就是浪费。更好的做法是让流程支持断点续跑。也就是说流程能记住自己跑到哪了修复之后从失败的那个节点继续而不是从头开始。这需要在设计工作流的时候就考虑到状态持久化的问题。实现断点续跑的关键是状态快照。每个关键节点执行完成后把当前的状态包括中间数据、上下文变量、已完成的步骤标记存下来。失败恢复时读取最近的快照从下一个节点继续执行。# 断点续跑的核心逻辑示意 import json import os CHECKPOINT_FILE workflow_checkpoint.json def save_checkpoint(step_index, context_data): 每个节点成功后保存状态快照 checkpoint { last_completed_step: step_index, context: context_data, timestamp: time.time() } with open(CHECKPOINT_FILE, w) as f: json.dump(checkpoint, f) def resume_from_checkpoint(): 失败恢复时读取快照 if os.path.exists(CHECKPOINT_FILE): with open(CHECKPOINT_FILE, r) as f: checkpoint json.load(f) return checkpoint[last_completed_step] 1, checkpoint[context] return 0, {} def run_workflow(steps, start_from0, contextNone): context context or {} for i in range(start_from, len(steps)): try: result steps[i](context) context.update(result) save_checkpoint(i, context) except Exception as e: print(f步骤 {i} 失败: {e}) print(f已保存断点修复后可从步骤 {i} 继续) raise这段代码不复杂但思路很关键。它把“失败”从一个灾难性事件变成了一个可恢复的中断。你修好第三步的问题之后直接调用resume_from_checkpoint()流程就从第三步继续前面两步的成果不会丢。注意断点续跑的前提是每个步骤是幂等的或者说重复执行不会产生副作用。如果你的某个步骤是“发送一封邮件”那重跑的时候要确保不会重复发送。这个在设计阶段就要考虑好。2.3 决策层失败回滚加人工介入决策层失败比执行层失败麻烦得多因为流程表面上跑完了你不主动检查根本发现不了问题。这类失败的继续策略是回滚到决策点人工介入修正判断逻辑。什么叫回滚到决策点就是找到那个做出错误判断的节点把它之后产生的所有结果全部作废然后从那个节点重新开始。这比执行层的断点续跑要重因为你要清理的不仅是状态还有已经产生的错误输出。人工介入这一步不能省。决策层失败往往意味着 AI 的判断逻辑在某个场景下不适用或者工作流的分支条件设计有漏洞。这种问题不是简单改个参数就能解决的需要人来分析根因。我的经验是对于决策层失败至少要回答三个问题这个错误判断是在什么输入条件下触发的是偶发还是必然如果换成人工来做这个判断会怎么决策差异在哪里修正之后如何验证同类输入不会再触发同样的错误这三个问题回答清楚了再动手改。否则你只是修了这一次下次换个输入条件又挂了。2.4 协作层失败重建上下文加对齐协议协作层失败是最难排查的因为每个环节单独看都是正常的。问题出在环节之间的“接口”上——数据格式、字段含义、时序关系、错误传递方式任何一个没对齐都会导致整体失败。继续策略是重建完整上下文对齐协作协议。重建上下文的意思是把失败链路上所有环节的输入输出全部拉出来按时间顺序排好找到信息在哪个环节发生了畸变。这个过程有点像破案你要沿着数据流一路追踪看它在哪一步变了味。对齐协议则是治本之策。协作层失败的根因通常是各组件之间没有明确的“契约”。A 组件以为某个字段是必填的B 组件觉得它是可选的A 组件输出的是字符串格式的时间B 组件期望的是时间戳。这些不一致在平时可能不暴露一旦遇到边界情况就炸了。解决方法是给每个协作接口定义明确的契约包括字段名称、类型、是否必填取值范围和边界条件错误码和异常传递方式超时和重试策略这个契约一旦定下来就要作为所有组件的共同遵守标准。任何一方要改必须同步通知其他方。听起来很笨但这是避免协作层失败最有效的方法。3. 搭建可恢复工作流的实操要点3.1 状态管理是核心中的核心可恢复的工作流核心就一个字状态。状态管好了失败之后就能继续状态管不好失败就是终点。状态管理要解决三个问题存什么、存哪里、怎么读。存什么至少要存四类信息流程执行到哪一步了、当前上下文里有哪些变量、已经产生了哪些输出、失败时的错误信息。这四类信息缺一不可少了任何一个恢复的时候都会卡壳。存哪里小规模场景用本地文件就够了JSON 格式简单直接。规模大一点用数据库方便查询和并发控制。如果是分布式的工作流可能需要专门的协调服务来管理状态。选型的原则是恢复的时候能快速读到写入的时候不会成为瓶颈。怎么读恢复逻辑要能处理三种情况有完整快照、有部分快照、完全没有快照。有完整快照就从断点继续有部分快照就尽量恢复缺的部分重新计算完全没有快照就只能从头来。这三种情况的处理逻辑要提前写好不要等失败了再临时想。# 状态管理的简化实现 class WorkflowState: def __init__(self, workflow_id): self.workflow_id workflow_id self.step_index 0 self.context {} self.outputs [] self.errors [] def to_dict(self): return { workflow_id: self.workflow_id, step_index: self.step_index, context: self.context, outputs: self.outputs, errors: self.errors } classmethod def from_dict(cls, data): state cls(data[workflow_id]) state.step_index data[step_index] state.context data[context] state.outputs data[outputs] state.errors data[errors] return state这个类很基础但把状态管理的核心要素都包含了。实际使用的时候你可以根据需要在上面加序列化、版本控制、并发锁等机制。3.2 失败隔离与降级设计不是所有的失败都需要停下来处理。有些失败是可以隔离的让流程带着“已知问题”继续往下走最后统一处理。这就涉及到失败隔离的设计。具体做法是给每个节点定义一个失败策略是“失败即停止”还是“失败则跳过”还是“失败则降级使用默认值”。举个例子一个内容处理工作流里有一步是“调用 AI 接口做摘要”。如果这个接口挂了你是让整个流程停下来还是跳过摘要步骤继续处理其他内容这取决于摘要对下游的重要性。如果下游只是把摘要作为可选展示项那完全可以跳过如果下游依赖摘要做分类决策那就不能跳过。降级设计则是给失败节点准备一个“备胎方案”。比如 AI 接口挂了降级方案是使用本地规则引擎做一个粗略的摘要。虽然质量差一点但流程能继续跑不至于全线卡死。实操心得降级方案不需要做得和主方案一样好它的唯一目标是让流程能继续。我见过有人为了做一个完美的降级方案花了大量时间结果主方案早就修好了降级方案一次都没用上。降级方案够用就行别过度设计。3.3 日志与可观测性建设失败之后能不能快速定位问题取决于你平时的日志建设。日志不是越多越好而是要在关键位置打关键信息。什么叫关键位置节点入口和出口、决策分支点、外部调用前后、状态变更时刻。这些位置打上日志失败的时候就能快速还原执行路径。日志内容要包含时间戳、节点标识、输入摘要、输出摘要、耗时、状态标记。不需要把完整数据都打进去但要有足够的信息让你判断“这一步做了什么、结果是什么”。除了日志还要有可观测性。日志是被动查看的可观测性是主动监控的。给工作流加上执行状态的可视化面板实时显示每个节点的状态等待中、执行中、成功、失败、跳过失败的时候能一眼看到卡在哪里。这个面板不需要多复杂一个简单的 Web 页面加上状态查询接口就够了。但它的价值很大——失败发生的时候你不需要去翻日志直接看面板就知道问题在哪。3.4 重试机制的正确打开方式重试是处理失败最常用的手段但很多人用错了。无脑重试不仅解决不了问题还可能让情况更糟。重试要满足三个条件才有意义失败是暂时的、重试是安全的、重试次数是有限的。暂时性失败才值得重试。网络抖动、接口限流、资源暂时不可用这些重试一下可能就好了。但如果是代码逻辑错误、数据格式不对重试一百次也是一样的结果。重试的安全性指的是幂等性。如果一个操作重复执行会产生副作用比如重复扣款、重复发消息那重试之前必须做好去重。重试次数要有限制而且最好用指数退避策略。第一次失败等 1 秒重试第二次等 2 秒第三次等 4 秒以此类推。这样既给了系统恢复的时间又不会因为密集重试把系统压垮。import time import random def retry_with_backoff(func, max_retries3, base_delay1): 带指数退避的重试 for attempt in range(max_retries): try: return func() except Exception as e: if attempt max_retries - 1: raise delay base_delay * (2 ** attempt) random.uniform(0, 1) print(f第 {attempt 1} 次失败{delay:.1f} 秒后重试) time.sleep(delay)这段代码里的随机抖动很重要。如果多个任务同时失败同时重试没有抖动的话它们会同时再次请求形成“惊群效应”。加上随机量可以把重试时间打散。4. 常见失败场景与排查实录4.1 场景一工作流跑到一半卡死无响应这是最让人抓狂的情况——没有报错没有日志就是不动了。排查思路按这个顺序走先看进程还在不在再看是不是卡在某个外部调用上最后看是不是死锁了。进程还在但不输出大概率是卡在某个同步调用上。比如调用了一个外部接口对方没有返回也没有超时你的流程就一直等着。解决办法是给所有外部调用加上超时设置超时之后走失败处理逻辑。如果是死锁通常发生在多个节点互相等待对方释放资源的时候。这种问题在设计阶段就要避免——尽量不要让节点之间有循环依赖如果必须有加超时和优先级机制。我遇到过一次卡死排查了半天发现是某个节点在等一个永远不会到来的消息。原因是上游节点失败后没有发送失败通知下游节点就一直在等。后来加了一个“心跳超时”机制下游节点超过一定时间没收到消息就自动判定上游失败走降级逻辑。4.2 场景二重跑之后结果不一致同一个流程同样的输入跑两次结果不一样。这种问题在涉及 AI 决策的流程里特别常见。原因通常有三个AI 模型本身有随机性、流程依赖了外部状态、并发执行导致顺序不确定。AI 模型的随机性可以通过设置随机种子来固定但有些模型即使设了种子在不同环境下也会有细微差异。如果业务对一致性要求高要么用确定性更强的模型要么在关键决策点加人工确认。外部状态依赖是指流程读取了外部数据而外部数据在两次执行之间变了。解决办法是在流程开始时对依赖的外部数据做快照整个流程基于快照执行。并发顺序不确定是指多个节点并行执行时完成的顺序不一样导致最终结果不同。这种情况要么改成串行要么在合并结果时做确定性排序。4.3 场景三Agent 之间传递信息丢失多 Agent 协作的时候信息在传递过程中丢失是很常见的问题。A Agent 说了一句话B Agent 收到的却是残缺的。根因通常是序列化和反序列化的问题。A Agent 内部用的数据结构在传给 B Agent 的时候被转成了字符串或 JSON如果转换规则不一致信息就会丢失。解决办法是定义统一的消息格式所有 Agent 之间的通信都走这个格式。消息格式要包含发送者、接收者、消息类型、负载内容、时间戳、消息 ID。负载内容用结构化的方式定义不要用自由文本。另外消息传递要有确认机制。A 发出消息后要能知道 B 是否收到了。如果没收到要能重发。这个确认机制不需要很复杂一个简单的 ACK 就够了。4.4 常见问题速查表问题现象可能原因排查动作解决方向流程卡死无响应外部调用无超时检查所有外部调用的超时设置加超时和失败处理重跑结果不一致AI 随机性/外部状态变化对比两次执行的中间状态固定种子/快照外部数据信息传递丢失序列化格式不统一检查消息格式定义统一消息协议断点续跑失败状态快照不完整检查快照包含的字段补全状态持久化重试导致重复执行操作不幂等检查重试逻辑的副作用加去重机制降级方案不生效降级条件判断错误检查降级触发条件修正判断逻辑这张表建议打印出来贴在工位上遇到问题先对照排查能省不少时间。5. 从失败中沉淀可复用的经验5.1 建立失败案例库每次失败都是一次学习机会但如果不记录下次遇到同样的问题还是要从头排查。建立一个失败案例库把每次失败的现场、根因、解决方案都记下来。案例库的格式不需要很正式一个表格就够了失败时间、失败现象、影响范围、根因分析、解决方案、预防措施。关键是坚持记录而且要在失败解决后尽快记不要等记忆模糊了再补。这个案例库的价值在于它能帮你发现模式。当你记录了足够多的案例之后你会发现某些类型的失败反复出现那就说明流程设计上有系统性的问题需要从根上解决。5.2 定期做失败演练消防演习不是为了真的着火而是为了着火的时候不慌。自动化流程的失败演练也是一样。定期人为地制造一些失败——断开某个外部依赖、注入错误数据、模拟超时——然后观察流程的反应。看看它是否能正确降级、是否能断点续跑、是否能给出清晰的错误信息。这种演练能暴露很多平时发现不了的问题。我做过一次演练模拟数据库连接断开结果发现流程直接崩溃了连错误日志都没写。后来加了连接池的健康检查和失败缓存再演练的时候就能优雅降级了。5.3 把恢复能力纳入流程设计标准最后也是最重要的把恢复能力作为流程设计的一等公民而不是事后补丁。设计一个新工作流的时候除了考虑正常路径还要考虑失败了怎么办、部分失败了怎么办、恢复的时候从哪里开始、恢复需要哪些信息。这些问题在设计阶段回答清楚比事后打补丁要省力得多。具体来说每个新流程上线前至少要回答这几个问题这个流程的哪些节点可能失败每个节点失败后的继续策略是什么状态快照存在哪里、包含什么恢复流程的触发条件是什么恢复后如何验证结果正确性这些问题回答完了流程的恢复能力就有了基本保障。剩下的就是在实践中不断打磨和优化。自动化失败不可怕可怕的是失败之后不知道怎么办。把失败当成流程的一部分来设计而不是当成异常来处理你的自动化体系就会从“脆弱”变成“有韧性”。这个转变是我做了这么多自动化项目之后最大的体会。

相关新闻

端侧大模型Decode阶段硬件部署:从硬件选型到量化调优实战

端侧大模型Decode阶段硬件部署:从硬件选型到量化调优实战

1. 项目概述与decode阶段的定位1.1 这个项目到底在解决什么问题先说结论:decode阶段硬件部署,拆开看就两件事。第一,模型推理里解码(decode)那一段能不能跑在目标硬件上;第二,跑起来之后性能、稳…

2026/10/10 4:15:40 阅读更多 →
神经网络模组化:结构先验与特征竞争如何塑造可解释AI

神经网络模组化:结构先验与特征竞争如何塑造可解释AI

1. 从“搭积木”说开去:神经网络模组化是什么如果你把一个训练好的神经网络拆开看,会发现一件有意思的事情:它不是一团糊在一起的计算,而是像乐高积木一样,一块一块拼起来的。有的块负责看边缘,有的块负责看…

2026/10/10 4:15:40 阅读更多 →
2026年亲测专业口碑家具获客公司:筛选评估与避坑指南

2026年亲测专业口碑家具获客公司:筛选评估与避坑指南

这两年我明显感觉到一个趋势:家具行业里越来越多的经销商和工厂老板,不再自己硬扛投流、拍视频、做直播,而是把“找客户”这件事外包给专业的家具获客公司。我身边就有好几个做家具的朋友,2026年开春就开始盘算着换合作方&#xf…

2026/10/10 4:14:40 阅读更多 →

最新新闻

有奖答题页源码拆解:多语言切换、答题状态机与抽奖概率控制

有奖答题页源码拆解:多语言切换、答题状态机与抽奖概率控制

简介:一套基于HTML、CSS和JavaScript构建的有奖答题互动网页设计源码,同时融合多语言技术,可支持不同语言环境的知识竞赛与教育培训场景。压缩包共1645个文件,约60.48MB,其中以HTML/CSS/JS前端文件为主,包含…

2026/10/10 4:57:23 阅读更多 →
FANUC/西门子/海德汉异构机床数据采集实战方案

FANUC/西门子/海德汉异构机床数据采集实战方案

/* 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 4:57:23 阅读更多 →
eBPF 追踪文件描述符泄露:监控 sys_enter_openat 与 sys_enter_close 的配对状态

eBPF 追踪文件描述符泄露:监控 sys_enter_openat 与 sys_enter_close 的配对状态

在长期运行的 Linux 后端守护进程与高并发微服务中,“文件描述符泄露(File Descriptor Leak)”是一种极其隐蔽却极具杀伤力的系统病变。很多程序在正常流量下运行几个月安然无恙,但由于某些冷门异常分支遗漏了一句 close()&#x…

2026/10/10 4:57:23 阅读更多 →
PCA9422与MKV58F1M0VLQ24硬件协同电源管理设计

PCA9422与MKV58F1M0VLQ24硬件协同电源管理设计

/* 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 4:57:22 阅读更多 →
机器学习驱动的土壤数据农作物推荐算法实践

机器学习驱动的土壤数据农作物推荐算法实践

/* 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 4:57:22 阅读更多 →
用Git+Markdown构建个人知识操作系统:Pi蓝皮书实践指南

用Git+Markdown构建个人知识操作系统:Pi蓝皮书实践指南

1. 项目概述:这不是一本电子书,而是一套可生长的个人知识操作系统“从零开始,开源一本属于自己的 Pi 蓝皮书”——这个标题里藏着三个被多数人忽略的关键信号:“Pi”不是圆周率,而是Personal Intelligence(…

2026/10/10 4:56:22 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* 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 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* 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 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/9 6:17:20 阅读更多 →