openJiuwen agent-core-java 上下文压缩进阶:RoundLevelCompressor 轮次级压缩器深度解析
人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载导读RoundLevelCompressor是 openJiuwen agent-core-java 上下文引擎com.openjiuwen.core.context中针对长会话场景的兜底fallback压缩器当上下文窗口的估算 token 越过阈值后它把多个连续、压缩级别一致的完整对话轮合并成一条新的用户消息与一条新的助手消息从而在不丢失关键任务信息的前提下显著缩短上下文。阅读本文你将掌握RoundLevelCompressorConfig全部配置项及校验规则、压缩触发条件、多阶段递归压缩 → aggressive keep-recent → aggressive full-context → hard truncate压缩流水线的底层实现以及它如何与ContextEngine、ContextProcessor处理器链集成。一、定位上下文压缩器家族中的轮次级兜底openJiuwen agent-core-java 在包 compressor 下提供了三个内置上下文压缩器RoundLevelCompressor是其中粒度最大、用于长会话兜底的一个压缩器压缩粒度适用场景CurrentRoundCompressor当前轮中最后一个用户消息之后的内容单条大消息、当前轮溢出DialogueCompressor单轮完整对话用户消息 → 工具调用 → 最终助手回答完成轮次的逐轮瘦身RoundLevelCompressor多个连续、压缩级别一致的完整对话轮长会话整体逼近/超出 token 预算时的兜底压缩RoundLevelCompressor的类声明如下RoundLevelCompressor.javapublic class RoundLevelCompressor extends ContextProcessor { public static final String ROUND_LEVEL_FALLBACK_MARKER [ROUND_LEVEL_MEMORY_BLOCK]; ... }它与兄弟压缩器一样继承自抽象基类ContextProcessorContextProcessor.java并重写了triggerAddMessages、onAddMessages、triggerGetContextWindow、onGetContextWindow四个钩子方法。与DialogueCompressor的差异在于后者按单轮为单位逐轮压缩而RoundLevelCompressor会把多个轮次作为一个整体 block 交给模型生成摘要产出的是带[ROUND_LEVEL_MEMORY_BLOCK]标记与compress_level元数据的历史记忆块。二、配置详解RoundLevelCompressorConfig 全参数RoundLevelCompressor通过RoundLevelCompressorConfig完成配置RoundLevelCompressorConfig.java。该配置类定义了 context-window 的 token 预算、分阶段压缩目标与截断参数Java 字段按 PythonRoundLevelCompressorConfig的语义映射为驼峰命名并保留下划线形式的 JSON 属性名如JsonProperty(trigger_total_tokens)便于配置文件直接对齐。全部字段与默认值如下字段类型默认值说明triggerTotalTokensint230000context window 估算 token 超过该值时触发压缩JSON:trigger_total_tokenstargetTotalTokensint160000压缩后的 context window 目标 token 上限JSON:target_total_tokenskeepRecentMessagesint0压缩时保护的最新原始消息数量JSON:keep_recent_messagescompressionCallMaxTokensint250000单次内部压缩模型调用的最大 token 预算JSON:compression_call_max_tokensfirstPassTargetTokensint30000第一阶段 round-level summary 目标 token 数JSON:first_pass_target_tokenssecondPassTargetTokensint20000aggressive keep-recent 阶段 summary 目标 token 数JSON:second_pass_target_tokensthirdPassTargetTokensint10000aggressive full-context 阶段 summary 目标 token 数JSON:third_pass_target_tokenstruncateHeadRatiodouble0.2hard truncate 时保留文本中 head 部分的比例JSON:truncate_head_ratiotruncatedMarkerString...[TRUNCATED]...hard truncate 插入的省略标记JSON:truncated_markercompressionMarkerString[ROUND_LEVEL_MEMORY_BLOCK]round-level fallback memory block 标记JSON:compression_markermodelModelRequestConfignull模型请求配置modelClientModelClientConfignull模型客户端配置一个完整的构造示例RoundLevelCompressorConfig config new RoundLevelCompressorConfig(); config.setTriggerTotalTokens(230000); // 触发阈值 config.setTargetTotalTokens(160000); // 压缩目标 config.setKeepRecentMessages(5); // 保护最近 5 条原始消息 config.setFirstPassTargetTokens(30000); config.setSecondPassTargetTokens(20000); config.setThirdPassTargetTokens(10000); config.setTruncateHeadRatio(0.2); // 硬截断时 head 保留 20% config.setModel(modelRequestConfig); config.setModelClient(modelClientConfig); RoundLevelCompressor compressor new RoundLevelCompressor(config);配置校验非法值在实例化阶段即暴露RoundLevelCompressorConfig.validate()会校验token 预算、各阶段目标 token 均大于0keepRecentMessages 0且truncateHeadRatio严格落在(0, 1)区间内。由于RoundLevelCompressor构造时立即执行config.validate()RoundLevelCompressorConfig各 setter 也会同步做 0/ 0前置校验因此非法配置会在实例化阶段直接抛出IllegalArgumentException而不是拖到压缩运行期才兜底——这是该压缩器fail-fast设计的关键点。三、触发条件什么时候启动压缩triggerAddMessages在消息写入前triggerAddMessages会先拼出现有上下文消息 待写入消息 system messages tools的完整视图使用ModelContext.TokenCounterPort精确计数计数失败时回退到content.length() / 3的估算逻辑当累计 token 超过triggerTotalTokens时返回trueRoundLevelCompressor.javaint totalTokens countContextWindowTokens(systemMessages, contextMessages, tools, context); if (totalTokens triggerTotalTokens) { Loggers.CONTEXT_ENGINE.info( [{} triggered] estimated context window tokens {} exceeds trigger_total_tokens {}, processorType(), totalTokens, triggerTotalTokens); return CompletableFuture.completedFuture(true); } return CompletableFuture.completedFuture(false);需要说明的是原 API 文档将触发条件描述为累计 token 超过阈值且存在可压缩的连续完整轮次窗口而从当前 Java 实现看triggerAddMessages的判定完全由 token 预算驱动候选窗口的查找发生在onAddMessages阶段——找不到可压缩窗口时压缩自然不生效。此外triggerGetContextWindow采用相同阈值逻辑保证取窗口阶段同样能拦截超预算场景。onAddMessages与onGetContextWindow当触发通过后onAddMessages会把现有消息 待写入消息交给compressUntilTarget若压缩前后消息列表发生变化则通过context.setMessages(compressedMessages, true)回写上下文并产生一个携带processorType()、被修改消息索引范围与紧凑摘要的ContextEventRoundLevelCompressor.java。onGetContextWindow则直接基于即将发送的ContextWindow快照执行同样的压缩流水线L191-L232并把压缩结果同时写回窗口与上下文。四、压缩执行从轮次切分到多阶段流水线原文档描述了onAddMessages的核心思路先把消息切分成对话轮DialogueRound筛选出压缩级别一致且索引连续的窗口keepLastRound true时最后一轮被排除在候选窗口之外压缩成功后把结果写成一条新的用户消息和一条新的助手消息并在 metadata 中写入递增后的compress_level。源码实现将其落地为一条四段式流水线compressUntilTargetRoundLevelCompressor.java递归压缩recursive /l0_to_l1构建原始 L0 block 目标buildRawTargets见L363-L395逐个交给模型压缩到firstPassTargetTokens若仍未达标则收集已有的 round-level memory block把压缩级别一致、索引连续的相邻 block 合并为更高一级的recursive_merge_l{n}_to_l{n1}目标继续压缩buildRecursiveMergeTargets见L491-L534。aggressive keep-recent仍超标时进入aggressive_keep_recent阶段目标secondPassTargetTokens保留keepRecentMessages条最近原始消息不动。aggressive full-context仍超标时进入aggressive_full_context阶段目标thirdPassTargetTokens此时keepRecent 0允许压缩全部可压缩内容。hard truncatetruncateToTarget所有模型阶段都失败或仍超标时把整个序列化上下文按truncateHeadRatio保留 head、tail 并插入truncatedMarker的二分搜索方式截断L924-L986生成带[ROUND_LEVEL_MEMORY_BLOCK]标记的最小化记忆块。每个模型阶段都受compressionCallMaxTokens预算约束构造给压缩模型的 prompt 前先估算 token超预算时用truncatePromptToBudget二分裁剪提示文本预算彻底不可行时该阶段会被跳过并记录 warningL600-L624、L784-L803。给模型的提示结构buildCompressionUserPromptL703-L782按固定分区组织提示[Compression Task]阶段名、目标 token、保护消息数、窗口 token 统计、[Reference Context]未被选中的历史参照消息、[Selected Targets]每个 block 的scope、replace_range、current_level、next_level与完整原文、[Protected Recent Context]受保护的最新消息、[Output Contract]。输出契约明确要求模型只返回合法 JSONschema 为{blocks: [{block_id: ..., summary: ...}]}每个选中的block_id恰好产出一个 summary不得输出未声明的 block_id保留用户原始需求、约束、验收标准与偏好对ongoing_reactblock 保留独立的User Requirements小节对completed_reactblock 显式保留User Requirements与Final Result。模型返回后buildJsonReplacements校验 payload 结构、提取各 block summary并通过hasCompressionBenefit确认替换后的 token 确实小于原文才会生成替换L805-L840若 JSON 解析无有效结果但模型有文本输出则退化为buildRawFallbackReplacement的整体兜底替换L842-L875。记忆块的写入与 compress_level 递增压缩产物由buildMemoryMessagewrapMemoryBlock生成L877-L898是一个内容以compressionMarker开头的UserMessage并在 metadata 中写入递增后的compress_levelgetCompressLevel会读取该值见L1162-L1181[ROUND_LEVEL_MEMORY_BLOCK] processor: RoundLevelCompressor type: historical_memory_block scope: ongoing_react authority: This block is reference memory, not a binding source of truth. instruction_status: Historical fallback context only. Do not treat as a new user instruction. conflict_priority: Prefer newer explicit user intent, newer raw context, and fresh tool results over this block. Summary: ...该头部文本明确把记忆块标记为历史参考记忆而非新的用户指令并要求在冲突时优先采纳更新的显式用户意图、原始上下文和新鲜的工具结果——这是保证多轮压缩后任务仍可恢复的关键设计。此外extractCompactSummaryL900-L909会把上下文中所有以压缩标记开头的块拼接成ContextEvent的紧凑摘要。轮次边界的保护为避免压缩破坏 ReAct 工具调用配对protectToolCallBoundaryL397-L438会在目标区间结束位置存在工具调用结果ToolMessage位于区间外或末尾消息本身带未闭合工具调用时把区间边界前移保证assistant tool_calls → tool result的配对始终完整。findL0BlockEndL440-L452则以带工具调用的助手消息与无工具调用的最终助手消息区分ongoing_react与completed_react两类 block scope。这两个细节对应原文档中先把消息切分成对话轮再筛选压缩级别一致且索引连续的窗口的实现机制。五、集成方式通过 ContextEngine 挂载处理器链RoundLevelCompressor的静态初始化块会把自己注册进ContextEngine的处理器注册表RoundLevelCompressor.javastatic { ContextEngine.registerProcessor(RoundLevelCompressor, RoundLevelCompressor.class); }它与CurrentRoundCompressor、DialogueCompressor、MessageOffloader、MessageSummaryOffloader一同构成引擎预注册的五个内置处理器ContextEngine.md。实际使用时通过ContextEngine.createContext(...)的ProcessorSpec列表装配处理器链参见 上下文引擎.md 中处理器、卸载和 reload 能力都在上下文层完成一节ListContextEngine.ProcessorSpec processors List.of( new ContextEngine.ProcessorSpec(RoundLevelCompressor, roundLevelConfig) ); ModelContext context engine.createContext(planner, session, processors, historyMessages, tokenCounter);处理器链只参与addMessages()与getContextWindow()两个阶段RoundLevelCompressor与其余内置压缩器一样是无状态实现——loadState方法体为空saveState返回空映射RoundLevelCompressor.java因此它适合按需嵌入任意会话上下文而不引入持久化负担。六、测试验证触发与结构行为仓库为RoundLevelCompressor提供了专项测试 RoundLevelCompressorTest.java覆盖的行为包括token 阈值触发triggerGetContextWindowUsesTriggerTotalTokens验证短消息不触发、长消息触发get 阶段流式状态streamsStateWhenRoundLevelCompressorTriggersOnGet验证压缩后在compressionHistory()中出现started/completed两段状态记录摘要含modified 2 messages记忆块生成buildMemoryMessageReturnsPlainUserMessageWithCompressionLevel验证产物是带[ROUND_LEVEL_MEMORY_BLOCK]前缀、含User Requirements且 metadata 带compress_level 1的UserMessage事件范围与紧凑摘要onGetContextWindowReportsOriginalMessageRangeAndCompactSummary验证ContextEvent记录全部被修改的消息索引、上下文被替换为单条压缩消息提示词输出契约buildCompressionUserPromptIncludesOngoingAndCompletedRequirements验证提示包含User Requirements、Final Result与不得削弱原始请求的约束文本工具调用边界保护protectsAssistantToolCallWhenToolResultIsOutsideTargetRange验证工具结果在区间外时边界被前移。此外集成层面还有 ContextEngineAdvancedSystemTest.java 与 ContextProcessorRailTest.java 等测试覆盖了包含RoundLevelCompressor在内的处理器链端到端行为。这些测试印证了一个重要事实触发条件与结构替换行为由代码保证而摘要内容本身依赖外部模型的 JSON 输出——模型不可用、返回非法 JSON 或摘要无压缩收益时处理器会记录 warning 并保留原轮次绝不破坏上下文完整性。七、使用注意事项压缩依赖外部模型RoundLevelCompressor与DialogueCompressor一样依赖模型返回{blocks: [...]}形式的 JSON 摘要。使用前务必在config中配置model/modelClient否则getModel()会通过Runner.resourceMgr().resolveModel(...)动态解析L1183-L1188失败路径上的行为应结合Runner资源管理确认。触发阈值与目标阈值需配套triggerTotalTokens决定何时动手targetTotalTokens决定压缩后必须回落到多少建议按模型 context window 真实上限留出余量并把compressionCallMaxTokens设得足够大避免压缩阶段自身提示被预算裁剪。多级压缩可叠加压缩块携带递增的compress_level元数据后续轮次可通过recursive_merge继续把同级记忆块合并为更高一级因此该压缩器天然支持层叠记忆的长会话演进但也意味着越早压缩的信息保真度越低——keepRecentMessages是保护最近任务状态的第一道防线。状态无持久化loadState/saveState均为空实现压缩行为是纯运行时过程若需要把压缩结果随会话状态落盘依赖的是SessionModelContext的StatefulContext能力而非压缩器自身。综上RoundLevelCompressor是 openJiuwen agent-core-java 上下文引擎中面向超长 ReAct 会话的最终防线它以可配置的 token 预算为界通过模型摘要 多阶段兜底 硬截断的组合在上下文逼近模型窗口上限时把多个完整对话轮安全折叠为带压缩级别的历史记忆块同时借助输出契约与工具调用边界保护保证任务的可恢复性。建议读者继续阅读 compressor.README.md 了解三个压缩器的整体分工或对照 RoundLevelCompressorConfig.md 与 RoundLevelCompressorConfig.java 进行实际调参。赞分享人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载相关推荐openJiuwen agent-core-java 上下文压缩器深度指南CurrentRound / Dialogue / RoundLevel 三层压缩机制与配置实战openJiuwen agent core java 上下文压缩器深度指南CurrentRound / Dialogue / RoundLevel 三层压缩机人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习openJiuwen 上下文引擎 RoundLevelCompressor 详解跨轮记忆块压缩器配置与实现原理openJiuwen 上下文引擎 RoundLevelCompressor 详解跨轮记忆块压缩器配置与实现原理 导读 RoundLevelCompressor人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen agent-core 对话历史压缩器DialogueCompressor深度解析基于上下文容量比例的 LLM 摘要压缩机制openJiuwen agent core 对话历史压缩器DialogueCompressor深度解析基于上下文容量比例的 LLM 摘要压缩机制 本文围绕人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习上一篇FreeCAD终极云存储集成指南如何实现3D模型远程访问下一篇多语言网站流量翻倍gh_mirrors/fr/frontend-stuff SEO优化指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

学术论文AI检测与合规写作工具实战指南

学术论文AI检测与合规写作工具实战指南

1. 论文写作中的AI检测挑战去年帮导师审稿时遇到一篇语法完美但内容空洞的论文,查重率仅5%却被Turnitin标记为"AI生成可能性高"。这件事让我意识到,随着AI写作工具的普及,学术诚信的判定标准正在发生微妙变化。许多留学生精心撰写的…

2026/10/13 6:11:43 阅读更多 →
消毒盒定时开关芯片选型指南:从定时精度到待机功耗的工程实践

消毒盒定时开关芯片选型指南:从定时精度到待机功耗的工程实践

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

2026/10/13 6:10:41 阅读更多 →
粮油企业数字化全链路:打通产销存与人财物的落地路径

粮油企业数字化全链路:打通产销存与人财物的落地路径

月底对账,是粮油行业绕不开的一道坎。我见过一家年加工三十万吨小麦的面粉厂,财务三个人从月初对到月中,最后还是差了217吨库存,谁也说不出差在了哪里。采购说原料入了库,仓储说发了货,销售说客户签了合同&…

2026/10/13 6:10:41 阅读更多 →

最新新闻

恶意代码检测毕设实战:PE特征提取与机器学习模型训练

恶意代码检测毕设实战:PE特征提取与机器学习模型训练

简介:这份资源是一套基于机器学习的恶意代码检测项目源码,面向计算机、人工智能、通信工程、自动化等专业的在校学生与教师,也适合作为毕设、课程设计或项目立项演示的参考。项目围绕恶意代码的特征提取、向量化与模型训练展开,涵…

2026/10/13 6:58:55 阅读更多 →
入口日志参数缺失导致500故障的根因与防御体系

入口日志参数缺失导致500故障的根因与防御体系

1. 项目概述:一次典型的“入口参数缺失”故障复盘“Agent 第一句就 500,我们查了三轮:入口日志少打了一个参数”——这句话不是段子,是某次线上服务发布后凌晨两点的 Slack 截图标题。它精准击中了现代分布式系统中最常见、最隐蔽…

2026/10/13 6:58:55 阅读更多 →
代码工具悄悄上传 .git 目录?从版本库泄露到安全排查的完整指南

代码工具悄悄上传 .git 目录?从版本库泄露到安全排查的完整指南

这两年做代码安全相关的事,最怕看到的就是这句:“ZCode 疑似被抓到上传工作区/.git 记录到云端”。当时看到这个消息,我第一反应是后背发凉。做过几年开发的人都清楚,工作区里最不能见光的目录就是.git,它不仅仅是版本…

2026/10/13 6:58:55 阅读更多 →
从Java后端到Agent开发:收藏这份转型指南,抓住AI时代机遇!

从Java后端到Agent开发:收藏这份转型指南,抓住AI时代机遇!

本文探讨了Java后端开发者转向Agent开发的可能性与挑战。Agent开发涉及将企业文档转化为知识库、模型工具API集成、多步骤任务流程设计等,不同于简单的LangChain调参。虽然Agent开发岗位火热,但也存在岗位泡沫、技术栈变化快、要求复合技能等风险。建议J…

2026/10/13 6:58:55 阅读更多 →
(187页PPT)贝恩保健品Swisse商业尽职调查项目报告(附下载方式)

(187页PPT)贝恩保健品Swisse商业尽职调查项目报告(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/92962815 资料解读:贝恩保健品 Swisse 商业尽职调查项目报告 详细资料请看本解读文章的最后内容。这份由贝恩公司出具的商业尽职…

2026/10/13 6:58:55 阅读更多 →
Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战

Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战

Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战 本文主要讲解Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战,每个概念讲清「是什么、为什么、怎么用」,每条命令解释「意图和…

2026/10/13 6:57:55 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →