从Agent Loop到Agent Harness:智能体工程化实战指南
系列整理的第一篇话题落在智能体工程上。为什么写这个因为我见过太多人——也包括我自己早期的项目——把Agent做成一个看起来能跑、实际上脆得要命的“Demo玩具”。最典型的形态就是一条Agent Loop把工具列表丢给大模型让它反反复复“思考-调用工具-看结果-再思考”直到吐出最终答案。本地跑通的那一刻确实很兴奋但一旦放进生产环境问题就像开了闸一样涌出来上下文越滚越乱工具一多模型就开始瞎选任务中途断了没有任何恢复手段出了问题连“刚才到底发生了什么”都说不清楚。后来我把这个Loop反复重构逐步搭出了一个相对完整的Agent Harness——也就是为智能体运行准备的整套工程基础设施。这篇就把从Loop到Harness的架构演进、设计取舍和实操经验一次讲透。文章适合两类人一类是正在把Agent从Demo推向线上、被各种生产问题折磨的工程师另一类是想避开弯路、一开始就建立工程化视角的初学者。1. 从Agent Loop说起先看懂最小闭环和它的局限1.1 Agent Loop的本质是什么Agent Loop的核心逻辑其实就是一个围绕大模型的循环决策机制模型接收任务判断下一步该干什么——是直接回答还是调用某个工具获取信息——然后根据工具返回结果继续决策直到满足终止条件。伪代码大概长这样def agent_loop(user_input): messages [system_prompt, user_input] while True: response llm.chat(messages, toolsTOOLS) if response.tool_calls: messages.append(response) for call in response.tool_calls: result execute_tool(call) messages.append(tool_result(call, result)) else: return response.text这段代码能跑而且很多Demo就是这么跑的。它的核心思想是“把决策权交给模型”——不预先定义步骤模型根据上下文自行判断该做什么。这种自由度的好处是灵活坏处是没有约束。在单轮、低风险、工具数量有限比如两三个的场景下这个Loop足够用。比如做一个“查天气再回答用户”的Demo模型查完天气直接回复链路短、出错点少Loop完全Hold住。1.2 单循环模式在真实场景中的三个致命问题问题一上下文失控。每轮循环都往messages里追加工具调用和结果几十轮以后上下文窗口被塞满。而且这里有个隐蔽的坑工具返回的结果往往很长比如查数据库返回几百行记录模型根本不需要全部内容但全被塞进了上下文。结果就是上下文膨胀、Token成本飙升、模型注意力被无关信息稀释经常出现“前面查过的数据后面就忘了”的情况。问题二工具调用不可控。工具少的时候无所谓工具一旦超过五个模型选错工具的概率急剧上升。更头疼的是工具是有副作用的——比如“发送邮件”“创建工单”“扣款”这类写操作一旦模型在循环里重复调用同一个工具用户会收到两封邮件、两张工单、两次扣款。而原始Loop里没有任何幂等保护。问题三既不可观测也不可恢复。循环还在跑你却看不到它为什么选择调用某个工具、某一步的结果是什么。任务跑到一半如果LLM接口超时或者进程崩溃整个循环就断了。重新启动后没有状态、没有上下文、没有重试机制一切归零。1.3 从Loop到Harness的转变动机想清楚上面三个问题自然就得出一个结论Loop本身没错错的是“裸奔”——缺少一个围绕Loop的工程骨架。这个骨架就是我所说的Agent Harness。打个比方Agent Loop像一台裸露的发动机能转但装在车上肯定不行。Harness就是把它装进汽车底盘配上油路、刹车、仪表盘、安全气囊。不管是单个Agent还是多个Agent协作Harness提供的都是运行环境层面的保障记忆管理、工具治理、任务编排、人工介入、可观测性。这也是为什么我在标题里说“从Agent Loop到Agent Harness”——这不是说Loop被淘汰而是说Loop应该被嵌到Harness里面去。2. Agent Harness到底是什么四个层次讲清楚2.1 别把Harness理解成又一个框架先澄清一个常见误解Agent Harness不是又一个“Agent开发框架”它更接近一套运行Agent的“基础设施约定”。框架给你的是一堆写好的类和函数Harness给你的是一组必须回答的设计问题记忆放在哪里、工具如何安全地暴露给模型、任务状态怎么管理、出了错怎么追踪。这些问题没有标准答案但每个生产级Agent都必须给出答案。我参考了很多开源项目和团队的实践也踩过不少坑最后把Harness拆成四个层次来理解层次核心职责关键组件接入层屏蔽模型差异统一调用入口多模型网关、LLM调用封装、流式协议能力层管理Agent能做什么工具注册表、工具schema校验、权限控制认知层管理Agent怎么记、怎么想短期上下文、长期记忆、检索增强RAG控制层管理整个执行过程循环控制器、状态机、人工审批、观测探针下面逐个层展开说。2.2 接入层让模型变成可替换的组件接入层看起来简单实际是第一个坑。你直接把某厂商的SDK写死在业务代码里后面想换模型或者做多模型路由就难了。我在接入层做的最核心的一步是定义了一个统一模型的调用接口上层只认这个接口不管背后是大模型A还是大模型B。这个接口至少需要具备几个特性支持流式返回长任务下体验差异极大、支持超时与重试配置、支持幂等标识同一请求重试不会产生重复副作用。还要处理一个容易被忽略的问题——不同模型的tool calling格式并不一致接入层要把这些差异抹平让上层面向统一结构编程。2.3 能力层把“模型能调工具”升级成“工具能安全调”能力层是Loop和Harness区别最明显的地方。Loop的做法是直接把工具函数丢给模型Harness则要求做一层完整治理。核心是三个动作第一工具注册。每个工具都要登记名称、描述、参数JSON Schema、执行超时时间、副作用级别只读/写操作。登记的目的不是为了写文档而是让模型在决策时看到的是结构化的“工具说明书”不是一团Python函数签名。第二参数校验。模型给出的工具参数必须严格按照JSON Schema做服务端校验。我遇到过太多次模型“一本正经”地虚构参数——比如工具明明需要一个date字段模型给了一个datetime值而且它给出的日期在真实世界里根本不存在。不校验直接执行出问题之后排查成本极高。第三副作用保护。写类型的工具必须做幂等控制。我的做法是给每个工具调用生成一个request_id执行前先查有没有执行过执行中记录状态执行失败支持按原参数重试。这样即使模型在一个循环里重复调用了两次“创建工单”服务端也只会真的创建一张。2.4 认知层让Agent拥有分层记忆单纯把历史消息堆在上下文里到第10轮基本就乱套了。Harness的认知层会把记忆拆成分层结构。短期记忆就是当前任务会话内的核心上下文一般用滑动窗口或关键信息摘要来控制Token占用。长期记忆存放跨会话的持久信息比如用户偏好、历史工单、业务知识。检索增强RAG负责在需要时从知识库中召回相关信息而不是把所有知识一股脑塞给模型。我用一个简单的购物助手场景来说明短期记忆装的是“用户正在看一双运动鞋尺码42”长期记忆装的是“该用户上次咨询过退款政策”RAG则提供“当前商品的退换货规则文档”。三者配合模型既能记住当前任务细节又能调用历史积累还能实时获取外部知识。这比一个无限膨胀的messages数组健康得多。2.5 控制层给循环安装仪表盘和刹车控制层是Harness的骨架。说白了两件事管住循环不乱跑记录过程可追溯。管循环靠的是控制器。控制器接手了原先裸写在外层while里的所有逻辑——什么时候终止、最大步数限制、重复行为检测模型连续三次调用同一个工具还返回同样错误就应该停止而不是继续烧钱、超时熔断、异常时挂起和恢复。我在早期版本里就吃过亏模型在一个死循环里反复调用查询接口等到我手动介入已经产生了几百次无效调用和一大笔Token账单。事后才意识到控制器的步数限制和重复检测必须一开始就设计进去。可追溯靠的是观测探针。我在执行引擎里埋了事件总线每一轮循环都会发出事件模型决策内容、工具调用参数、工具结果摘要、当前状态转移。这些事件统一写入追踪系统后面展开讲。3. 五个关键设计取舍没有标准答案只有适合场景3.1 记忆策略窗口、摘要与RAG怎么搭配记忆设计的第一道选择题是上下文满了以后怎么办。三种主流方案滚动窗口直接丢弃早期内容、自动摘要压缩早期内容、外置存储按需检索。我全部实测过各自的代价很清楚。滚动窗口实现最简单但模型非常容易“失忆”用户说“我刚才不是说了要退款吗”模型完全不记得。自动摘要在每轮或每N轮触发一次总结效果明显更好但要注意两点摘要本身消耗Token和时间摘要时机不当反而会丢失细节。RAG最灵活但引入检索环节后召回质量直接决定模型回答质量你需要额外搭建向量库和检索评测流程。我的取舍原则是核心任务上下文用摘要记忆兜底跨会话的持久信息走长期存储知识型问答一律走RAG。搭配比例视业务而定但千万不要“只靠一种方案走天下”。3.2 工具设计的松与紧给模型多少自由工具层最纠结的取舍是让模型自由选择工具还是用流程限制它只能调用特定工具。自由度越高模型处理意外情况的能力越强但出错的概率也越高限制越多稳定性越好但灵活性下降。我的做法是“分层放开”。所有只读类工具查库存、查订单完全放开给模型自由调用写操作类工具创建工单、改订单状态默认禁用除非任务上下文明确授权涉及资金、删除等高危操作不仅要求上下文授权还必须经过人工审批节点。这套策略本质上是把风险分级而不是一刀切。3.3 任务编排让模型自由发挥还是用状态机管住有些场景适合让Agent自由规划步骤比如“帮我写一份活动策划方案”。有些场景则根本不应该让Agent自由发挥比如“处理退款申请”——它的步骤是固定的验证身份、核对订单、检查退款资格、执行退款、通知用户。中间任何一步乱了都可能造成资损或客诉。我现在的编排原则很明确流程确定性高的任务用状态机或工作流引擎硬性约束流程不确定的任务才交给Agent Loop自由演进。混合场景则采用“状态机骨架Agent决策节点”的模式——主干流程是确定的每个分支内部由Agent自主判断。这套取舍下来业务的稳定性明显改善模型自由发挥导致的“灵异操作”少了很多。3.4 人工介入留多少个断点才算合适人工介入的设计直接决定了Agent能够承担多少工作量。介入太多人变成机器介入太少风险失控。我的经验是按风险等级而非按步骤类型设置审批节点。推理总结类任务生成周报、提炼要点不需要人工节点模型出结果后抽检即可。跨部门通信、对外发送消息需要人工确认后执行。资金操作、数据删除、法律条款承诺必须双人复核并且这些节点要支持“挂起-人工处理-恢复”的完整流程。这里有个细节容易被忽略人工审批通过之后要把审批意见反馈给Agent让它继续执行而不是重新起一个新任务——否则前面所有上下文全部丢失。3.5 可观测性没有追踪系统生产环境寸步难行可观测是Harness和Loop的另一个分水岭。Loop阶段出问题只能靠日志盲猜Harness阶段我要求每一次模型推理、每一个工具调用、每一步状态转移都能被完整还原。具体来说每个任务都有全局唯一的trace_id每一步记录关键信息当前任务状态、模型输入的上下文摘要不用存全量太大、模型输出的决策内容、工具调用的入参和出参摘要工具结果往往很大建议截断或哈希、耗时和Token消耗。有了这套数据排查问题从“猜”变成“查”。我最常用的路径是用户反馈出错 → 打开trace找到那一步 → 看模型当时的上下文和决策 → 判断是模型问题还是工具问题还是上游数据问题。4. 实操案例客服工单Agent如何从Loop演进为Harness4.1 一个真实的演进起点我参与的一个某电商平台客服工单项目最初接到的需求很简单“用户咨询的时候让大模型先查一下订单和售后政策再回答如果用户要投诉自动创建工单给人工客服。” 第一版实现就是一段Agent Loop模型只有三个工具查订单、查政策、创建工单。上线第一周看着还行第二周问题集中爆发用户多问几句模型就开始编造售后政策创建工单的接口被模型重复调用一张投诉被提交了三次客服反馈工单信息里缺失关键上下文根本没法判断用户诉求。后面我们花了三周时间把这段Loop重构成了一个带Harness的系统。下面只讲几个关键节点。4.2 架构设计模块划分与接口定义重构成Harness后的模块划分接入层统一LLM调用网关配置了主模型和兜底模型认知层内存态短期记忆Redis存工单上下文向量库存售后知识库能力层工具注册表登记了8个工具按读写权限做了分级控制层状态机定义任务生命周期包含PENDING、RUNNING、WAITING_APPROVAL、COMPLETED、FAILED五种状态观测层事件总线记录每步行为全部上报到追踪系统工具接口统一为如下结构{ tool_name: create_ticket, arguments: { user_id: U12345, issue_category: refund, description: 用户收到破损商品申请退换 }, request_id: req_abc123, requires_approval: true }凡是requires_approval为true的写操作执行前必须进入WAITING_APPROVAL状态由人工在后台点击确认后系统再真正发起工具调用。4.3 从Loop到Harness的代码演进一段最简化的Harness核心执行流程示例如下class AgentHarness: def __init__(self, model, memory, tools, policy): self.model model self.memory memory self.tools tools self.policy policy def run(self, task_id, user_input): self.memory.init(task_id, user_input) state running steps 0 while state running and steps self.policy.max_steps: context self.memory.build_context() decision self.model.decide(context, self.tools.schema()) if decision.is_final(): state completed elif decision.requires_approval(): state waiting_approval self.notify_human(decision.task) # 挂起等待人工审批后继续 break else: result self.tools.execute(decision.tool_call) self.memory.add_step(decision, result) self.observer.record(task_id, decision, result) if self.is_loop_detected(): state failed self.alert(检测到重复无效调用) steps 1 return self.memory.final_answer()演进之后的变化是实实在在的工具重复调用被幂等机制防住了需要审批的写操作会等待人工确认每一步行为都在追踪系统里可以完整复现上下文通过记忆层管理多轮对话不再失忆。客服处理效率提升了一个量级更重要的是我们终于敢把系统交给一线客服用了。4.4 这轮重构教会我的事重构最大的收获不是技术组件而是想清楚了“Agent的边界”。Loop把边界画在“能用工具”Harness把边界画在“能安全稳定地使用工具”。如果没有后面这层前面的“能”就是伪命题。每一轮循环都有成本每一次工具调用都可能产生副作用作为工程负责人你必须对这两个事实保持敬畏。5. 高频问题与排查心得一份来自实战的速查表5.1 上线后最常见的问题现象根本原因排查手段模型反复调用同一个工具上下文信息不足模型无法确定已完成目标查看trace中每轮的上下文摘要检查记忆层是否丢了关键信息模型虚构工具返回结果工具调用没有校验真实返回值模型“脑补”了结果工具层强制注入真实结果并对返回结构做校验禁止模型生成工具结果任务做到一半中断无状态设计取消或崩溃后无法恢复引入任务状态存储执行中定期持久化上下文支持从最后一步恢复上下文越往后越不准关键信息被无关内容淹没开启自动摘要把历史关键信息压缩进系统提示词减少冗余上下文注入人工审批后上下文丢失挂起后没有保存中间状态审批通过后必须带着原上下文继续执行不要重新初始化任务5.2 一个让我印象深刻的翻车事故有一次上线了一版带“自动响应售后”的Agent策略里给模型开了一个“修改订单状态”的写权限。当时我认为已有审批机制兜底没有加重复执行检测。结果模型在连续三轮循环里判断“需要修改订单状态”每一轮都发起审批请求。人工客服看到一个订单连续三条审批消息第一反应是“那可能是用户改主意了”连续点了三个通过。订单状态被改了三次最终数据错乱费了不少力气才修复。这个事故让我定了两条铁律第一同一任务的同类型写操作必须做次数限制——比如一个订单在单个任务生命周期内状态修改最多触发一次第二人工审批界面上必须展示完整决策链让审批人看到这个操作是第几次被发起前一次的结果是什么。人机协同里机器要给人足够的判断依据否则“人工审批”很可能变成形式主义的机械点击。5.3 给正在做Harness的同学几条建议从一开始就埋可观测性不要等出问题再补。补齐trace的成本远低于事后从零排查的成本。工具的JSON Schema写得越严格模型越不容易乱来。给模型太多含糊的自由文本参数位它会给你填一堆意外内容。先固化那些流程确定性高的场景不要一上来就做全流程Agent化。把“客服问答”“订单查询”这些确定性高的模块先Harness化形成稳定底座再逐步扩展到复杂决策场景。不要把Agent的“灵活”当成产品目标。用户要的是稳定结果不是模型每次都有新花样的处理过程。发现模型输出风格漂移或流程漂移时优先收紧约束而不是继续加Prompt。结尾回头再看从Agent Loop到Agent Harness这条路我最大的体会是智能体工程的复杂度不是来自模型本身而是来自模型之外的那一圈“配套工程”。模型给你的是无限可能而工程的价值恰恰是把这些可能收敛成可控、可预测、可业务化的能力。Loop是起点Harness是及格线。如果这篇文章能让你在搭自己的Agent时少踩几个我踩过的坑那就值了。后面我准备再写一篇关于多Agent协作场景下Harness如何演进的内容欢迎持续关注。

相关新闻

CSS Grid从基础到进阶:二维网格布局核心语法与实战避坑指南

CSS Grid从基础到进阶:二维网格布局核心语法与实战避坑指南

开头用了“下围棋”的类比,这个说法我很喜欢,但说实话,直到我自己在项目里真正把Grid用明白之后,才觉得这个比喻有多贴切——围棋落子是在横竖交错的棋盘上做二维占位,而CSS Grid网格布局就是让页面元素在“行线和列线…

2026/10/17 15:10:46 阅读更多 →
OpenCode终端AI编程助手实操指南:从安装、模型接入到Skills配置

OpenCode终端AI编程助手实操指南:从安装、模型接入到Skills配置

最近几次跟同行聊AI编程工具,总绕不开一个话题:想把开发流程里的AI能力从某一家闭源产品里解出来,换成一个更开放、更可控的方案。我最后选了OpenCode,一个开源的终端AI编码助手,用了几个月,把安装、模型接…

2026/10/17 15:10:46 阅读更多 →
用AI Coding工具构建万字世界观:奇幻设定工程化创作工作流

用AI Coding工具构建万字世界观:奇幻设定工程化创作工作流

最近在做奇幻题材的世界观底稿时,我把整套流程从“聊天式提问”改成了“AI Coding 工具驱动”,效果差别非常明显。用 AI Coding 工具生成万字奇幻世界设定,听起来像是拿错剧本,但实际操作下来,这恰恰是当前把大模型能力…

2026/10/17 15:10:46 阅读更多 →

最新新闻

深入理解 DOM NodeList:从基础到实战

深入理解 DOM NodeList:从基础到实战

1. 什么是 NodeListNodeList 是 DOM 中一个非常重要的集合类型,它表示一组节点的集合。当我们使用 document.querySelectorAll() 或 element.childNodes 等 API 时,返回的结果就是 NodeList。NodeList 与数组(Array)有相似之处&am…

2026/10/17 15:59:20 阅读更多 →
实测10款AI论文工具:从开题到答辩的辅助指南

实测10款AI论文工具:从开题到答辩的辅助指南

又到了一年论文季,后台和私信里全是问“有哪些真正能用的AI论文工具”的同学。去年我帮实验室带过不少本科生的毕业论文,自己也踩过不少坑。市面上的所谓“AI论文网站”鱼龙混杂,有真能提效的,也有纯粹割韭菜的。这篇东西不整虚的…

2026/10/17 15:59:20 阅读更多 →
Qt5兼容QFTP移植包:工业现场FTP文件传输实战方案

Qt5兼容QFTP移植包:工业现场FTP文件传输实战方案

简介:本资源是面向Qt初学者与跨平台开发者的QT5环境下FTP功能实现方案,解决QT5官方移除QFTP模块后无法直接使用FTP客户端API的实践难题。压缩包共8个文件(25KB),含4个C源文件(cpp)、3个头文件&a…

2026/10/17 15:59:20 阅读更多 →
华为云鲲鹏ECS三节点Hadoop集群搭建与OBS存储接入实战

华为云鲲鹏ECS三节点Hadoop集群搭建与OBS存储接入实战

简介:实验报告以华为云鲲鹏云环境为依托,完整记录在ECS与OBS上搭建Hadoop集群的全过程,面向高校大数据课程、云计算实训及刚接触分布式平台的初学者。内容从购买弹性云服务器和对象存储服务入手,详细说明AK/SK认证密钥获取、多节点…

2026/10/17 15:59:20 阅读更多 →
自适应滑模控制MATLAB仿真:抖振抑制与收敛性验证

自适应滑模控制MATLAB仿真:抖振抑制与收敛性验证

简介:本资源是一套面向控制工程专业学生与研究人员的自适应滑模控制MATLAB仿真实践包,聚焦空中机械臂等非线性不确定系统的鲁棒控制问题,适用于具备基础自动控制与MATLAB编程能力的学习者。压缩包共12个文件(7个m脚本实现控制器设…

2026/10/17 15:59:20 阅读更多 →
CSAPP第三版实验全攻略:从环境搭建到六大Lab避坑指南

CSAPP第三版实验全攻略:从环境搭建到六大Lab避坑指南

简介:《深入理解计算机系统》第三版配套实验包是一份面向计算机系统学习者的实践资源,适合正在阅读原书或准备系统掌握底层原理的读者。实验包围绕书中经典实验展开,覆盖汇编语言、内存管理、缓存模拟、进程控制、编译器构造与安全攻防等核心…

2026/10/17 15:58:19 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/17 1:44:59 阅读更多 →
影刀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/16 21:54:38 阅读更多 →
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 阅读更多 →