2026年3月

Cloudflare 近日宣布支持 ASPA(Autonomous System Provider Authorization)。这一新的加密标准通过验证数据在网络之间传输的路径,使互联网路由更加安全,从而防止流量经过不可靠或不受信任的网络。

ASPA 是一种基于 RPKI 的安全机制。它通过验证 AS_PATH(即路由通告经过的网络路径),来提升互联网路由协议 BGP 的安全性,从而减少路由泄露(route leaks)以及某些类型的路由劫持。这一新兴标准的目标,是提升互联网的整体可靠性,并减少由于意外或恶意行为导致的流量绕行。Cloudflare 首席系统工程师 Mingwei Zhang 和首席网络工程师 Bryton Herdes 解释道:

当数据在互联网上传输时,它会记录自己经过的每一个网络节点。ASPA 为网络运营者提供了一种机制,可以在 RPKI 系统中正式发布其授权的上游提供商列表。这样一来,接收网络就可以查看 AS_PATH,检查相关的 ASPA 记录,并验证数据流是否只经过被授权的网络链路。

边界网关协议(BGP) 是互联网流量路由的核心协议,但它本身缺乏原生的路径验证机制,因此容易受到路由泄露和路由劫持的影响。虽然 RPKI 和 Route Origin Authorization(ROA) 可以加强路由来源的验证,但它们并不会验证端到端路径。ASPA 通过一种加密方式,使网络运营者能够声明其被授权的提供商,从而让接收网络可以验证某个 AS 路径是否符合预期的结构。

ASPA 通过验证互联网路由的预期层级结构来检测路由绕行。在正常的 “valley-free”(无谷)拓扑 中,流量会从客户网络向上游提供商传递,可能在顶层经过一次对等(peer)连接,然后再通过提供商向下传递到目标客户网络。这种 客户 → 提供商的上行路径、可选的对等连接,以及提供商 → 客户的下行路径,共同构成了符合策略的标准路径。

去年,美国国家标准与技术研究院(NIST)发布了开源测试工具和数据集,以促进对新兴 BGP 安全和韧性机制的测试与实验,其中包括评估路由器实现 ASPA 规范的能力。

Cloudflare 还在 Cloudflare Radar 中添加了相关工具,用于跟踪 ASPA 的采用情况,使网络运营者能够查看哪些网络正在使用该技术,以及路径验证的情况。Zhang 和 Herdes 提醒:

随着 ASPA 终于成为现实,我们在互联网路径验证方面迎来了加密层面的升级。不过,对于那些从 RPKI 路由来源验证一开始就参与其中的人来说,他们知道,要让这一技术在互联网上真正产生显著价值仍然需要很长时间。 要真正利用 ASPA 对象并进行路径验证,还需要对多个组件进行改造,包括 RPKI 依赖方(RP)软件包、签名实现、RTR(RPKI-to-Router)软件以及 BGP 实现。

Cloudflare 表示,在最近的委内瑞拉 BGP 路由泄露事件 中,如果部署了 ASPA,网络就可以通过验证观察到的 AS 路径是否符合预期的提供商授权关系,从而检测并拒绝异常的路径通告,而仅依赖来源验证是无法做到这一点的。

Cloudflare 并不是唯一致力于推动这一加密标准的提供商。在去年发布的文章 “AWS secures internet routing with RPKI plus security checks” 中,亚马逊云科技团队写道:

虽然 ASPA 仍处于标准化过程中,但我们致力于使用它以及所有可用工具,让互联网继续成为一个安全可靠的环境。

尽管相关 IETF 标准仍处于草案阶段,Cloudflare 指出 ARIN 和 RIPE NCC 已经支持创建 ASPA 对象,而路由软件 OpenBGPD 和 BIRD 也已经包含 ASPA 验证功能。

原文链接:

https://www.infoq.com/news/2026/03/cloudflare-aspa-standard/

最近自己做了实验性质的项目,想发出来和大家交流一下,也看看有没有人感兴趣一起讨论。

这个项目可以简单理解成:

一个类似 Tor 思路的多跳代理网络,但我不想走 Tor 那种中心化节点目录的路线,而是希望节点发现、节点广播、节点加入网络这部分尽量做成去中心化

我现在在做的整体方向大概是这样:

  • 每个节点启动后,本地直接提供一个 SOCKS5 代理

  • 节点分成两类角色:


    • Relay (中继节点)
    • Exit (出口节点)
  • 本地应用流量先进入本地 SOCKS5 ,再进入这个网络

  • 每个节点都是中继,但是出口节点需要手动开启。

  • 目前支持的路径思路包括:


    • Local -> Exit
    • Local -> Relay -> Exit
    • 后面会继续扩展多跳
  • 整体理念上有点像 Tor:


    • 多跳转发
    • Relay 和 Exit 分工
    • 客户端本地建电路
  • 但一个比较重要的区别是:


    • Tor 的节点目录本质上是中心化的
    • 我这个项目希望尽量不依赖中心目录,而是通过节点广播、去中心化发现、节点本地缓存等机制来做

目前已经实现的功能:

1. 去中心化加密多跳代理

  • 自动寻找网络的节点
  • 多跳分层加密(让 Relay 只知道下一跳,看不到最终目标)
  • 电路池
  • 自动重试与路径切换

2. web 的控制台

  • 配置出口选择,你可以选择指定国家或者排除指定国家的出口节点
  • 配置出口政策,你可以只给一些服务提供出口网络。

3. 少量测试节点

  • 数个 Relay 和 Exit

我做这个项目的出发点主要是:

  • 想做一个使用 go 语言的多跳加密代理原型
  • 想尝试一下:
    如果不依赖 Tor 那种中心化目录,而是尽量做去中心化节点发现,这条路线能不能走通
  • 也想看看在 libp2p / 自定义电路协议 / 本地 SOCKS5 Agent 这套组合下,能不能做出一个比较像样的系统

目前这个项目还比较早期,更偏:

  • 协议实验
  • 网络架构设计
  • 工程验证

还不算成熟产品。

如果大家感兴趣,我后面也可以继续整理一些内容,比如:

  • 架构图
  • 协议设计文档
  • 配置示例
  • 测试版仓库

也想听听大家看法,比如:

  • 这种项目你们最在意的是匿名性、稳定性,还是运维能力?
  • 如果不走中心化目录,节点发现这块你们觉得最难的点会是什么?
  • 客户端出口选择和出口运营者策略这两个层次,这样拆分是不是合理?

GitHub: https://github.com/chenjia404/meshproxy

引言

昨天我们在 iframe 文章的末尾留了一道思考题:

假设你想在自己的博客里嵌入一个来自“http://example.com”的页面,但对方设置了 X-Frame-Options: SAMEORIGIN,你有什么办法让它强制显示吗?为什么?

许多读者在评论区给出了自己的猜想:有人说可以用 iframe 的 sandbox 属性,有人说可以尝试修改 document.domain,还有人提出用代理服务器。今天我们就来揭晓答案,并借此深入理解浏览器的安全边界

一、先给出结论

答案是:无法通过纯前端技术强制嵌入。如果你尝试在自己的页面里用 iframe 加载该页面,浏览器会直接拒绝加载,并在控制台输出类似如下的错误:

Refused to display 'http://example.com' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

这是浏览器的硬性安全策略,无法通过任何前端手段绕过。下面我们解释为什么。

二、X-Frame-Options 究竟是什么?

X-Frame-Options 是一个 HTTP 响应头,由服务器在返回页面时设置,用于告诉浏览器是否允许当前页面被嵌入到 iframe 中。它有三个可选值:

  • DENY:禁止任何页面嵌入(即使是同源页面也不行)。
  • SAMEORIGIN:只允许同源页面嵌入(即协议、域名、端口完全一致)。
  • ALLOW-FROM uri:允许指定来源嵌入(已废弃,现代浏览器改用 CSP)。

当浏览器接收到这个响应头后,在渲染页面时会进行检查:如果当前页面的父窗口(即 iframe 的父文档)与子页面不同源,且头部设置为 SAMEORIGIN,浏览器就会阻止加载并抛出错误。

浏览器的角色:严格执行,不容商量

这个机制是浏览器内置的,开发者无法通过 JavaScript 修改或忽略。即使你在 iframe 上设置再多的 sandbox 属性(如 allow-same-origin),也不会改变浏览器的判断——因为 X-Frame-Options 的检查发生在网络请求完成后、页面渲染前,它根本不关心 iframe 的属性,只关心父页面的来源是否匹配。

三、为什么不能绕过?——安全设计的初衷

X-Frame-Options 是为了防御点击劫持(Clickjacking)而诞生的。点击劫持是一种恶意攻击:攻击者将目标网站透明化,然后诱使用户点击看似无害的按钮,实际却点击了被嵌入的页面上的按钮(如“点赞”或“支付”)。

如果允许前端随意绕过,那么任何网站都可以被恶意嵌入,用户的安全将无法保障。因此,浏览器必须无条件遵守服务器返回的安全指令——这是客户端不可协商的安全底线

四、那些“看起来可行”的方案,为什么行不通?

1. 用 iframe 的 sandbox 属性?

sandbox 主要用于限制 iframe 内的行为(如禁用脚本、表单等),但无法改变父页面与子页面的跨域状态,更无法抹除服务器设置的 X-Frame-Options。该头由浏览器在网络层面拦截,sandbox 毫无作用。

2. 修改 document.domain?

document.domain 只能用于同主域的跨子域通信(比如 a.example.com 和 b.example.com 都设为 example.com),且仅限于同协议同端口。对于完全不同的域名(如 example.com 和 yourblog.com),这个技巧无效。更重要的是,它无法影响 X-Frame-Options 的检查机制。

3. 用代理服务器获取页面内容?

是的,你可以在自己的后端写一个代理接口,从 example.com 获取 HTML 内容,然后返回给你的前端。这样你的页面嵌入的就是你自己域下的内容,X-Frame-Options 只作用于原始请求,代理后相当于你的服务器在请求,浏览器看到的是你的域返回的内容,自然没有限制。

但这种方法有几个致命问题:

  • 法律与道德风险:未经授权代理他人页面,可能侵犯版权或违反服务条款。
  • 功能不完整:页面内的链接、表单、API 请求可能仍然指向原始域,导致跨域问题或路径错误。你需要改写所有 URL,且可能破坏页面的预期行为。
  • 性能问题:代理增加了延迟,且可能被目标网站封禁。
  • 动态内容:如果页面包含用户登录态或个性化内容,代理无法提供。

所以,这只是一个“理论可行”的 hack,并非真正的嵌入方案,也不推荐用于生产环境。

4. 使用浏览器插件或修改浏览器设置?

浏览器插件可以修改请求或响应头,但那是针对用户自己安装的扩展。你不能要求所有访问你博客的用户都安装插件。而且插件也受限于浏览器的权限模型,某些敏感头可能无法修改。即使能改,也是极少数用户的本地行为,不具备普适性。

5. 利用浏览器漏洞?

曾经有过绕过 X-Frame-Options 的浏览器 bug,但一旦发现,厂商会立即修复。依赖漏洞是不可靠且危险的,你的页面可能随时失效,甚至导致安全问题。

五、现代替代方案:Content-Security-Policy

X-Frame-Options 已经逐渐被 CSP 的 frame-ancestors 指令取代。CSP 提供了更精细的控制:

Content-Security-Policy: frame-ancestors 'self' https://trusted.com;

这条指令表示只允许同源和 https://trusted.com 嵌入。浏览器支持度也很高(除了 IE)。

如果你的网站想允许特定第三方嵌入,应该使用 CSP 而非过时的 X-Frame-Options。同样,作为嵌入方,如果目标网站没有允许你的域名,你依然无法强行嵌入。

六、正确的做法是什么?

如果你确实有合法需求要嵌入某个页面,正确的流程是:

  1. 联系网站所有者,请求他们允许你的域名嵌入。如果他们同意,可以在 CSP 中添加你的域名。
  2. 使用官方提供的嵌入方式,很多网站(如 YouTube、Twitter)都提供专用的嵌入代码,这些代码往往通过 iframe 实现,但它们是经过授权的,服务器会针对这些嵌入源放宽限制。
  3. 调用 API 获取数据,自行渲染。如果目标网站提供开放 API,你可以获取数据后用自己的 UI 呈现,完全摆脱 iframe 的限制。

七、总结:尊重安全,不越界

X-Frame-Options: SAMEORIGIN 是服务器与浏览器之间的契约,是保护用户的一道屏障。作为开发者,我们应该理解并尊重这些安全设计,而不是想方设法绕过它们。绕过安全策略,最终损害的是用户的利益和你的信誉。

希望通过这道思考题,你对 iframe 的安全限制有了更深的认识。下次遇到类似问题,你不仅知道“不能”,还知道“为什么不能”,以及“如果真的需要,应该怎么做”。


每日一问:你在项目中有没有遇到过因为 iframe 安全头导致的嵌入问题?是如何解决的?欢迎在评论区分享你的经验!

使用阿里云轻量云国内做 DERP
才发现
不管用什么端口 都会 reset
respect
学习了
Update: 一头在国外一头在国内 想着中继一个给家里电脑用 呵呵了 是我天真了

项目介绍

岩石识别系统是一个基于深度学习的图像分类应用,旨在为地质勘查、教育科研等领域提供快速、准确的岩石类型识别服务。系统采用前后端分离架构,前端使用Vue3结合Element Plus构建用户界面,提供直观友好的操作体验;后端基于Flask框架开发RESTful API,实现用户认证、图像识别、历史记录管理等核心功能;算法层面采用TensorFlow深度学习框架,基于ResNet50卷积神经网络模型进行训练,能够准确识别玄武岩、煤、花岗岩、石灰岩、大理石、石英岩、砂岩等7种常见岩石类型。系统支持用户注册登录、图像上传识别、历史记录查询、公告管理等功能,通过JWT认证机制保障数据安全,为用户提供一个便捷、高效的岩石智能识别平台。

图片

图片

图片

选题背景与意义

在地质科学研究、矿产资源勘查、建筑材料鉴定等领域,岩石类型的准确识别是一项基础且重要的工作。传统的岩石识别方法主要依赖专业地质人员通过肉眼观察或显微镜分析,不仅要求识别者具备丰富的专业知识,而且识别效率较低,难以满足大规模快速识别的需求。近年来,随着深度学习技术的快速发展,计算机视觉在图像识别领域取得了突破性进展,为岩石智能识别提供了新的技术路径。

关键技术栈:ResNet50

ResNet50是ResNet(Residual Network,残差网络)系列中的经典模型,由微软研究院于2015年提出,在ImageNet图像识别竞赛中取得优异成绩,成为计算机视觉领域广泛应用的骨干网络之一。ResNet50的核心创新在于引入了残差连接(Residual Connection)结构,通过跨层的恒等映射连接,有效解决了深层神经网络训练过程中的梯度消失和梯度退化问题,使得网络层数可以大幅增加而性能不会下降。ResNet50共包含50层网络,其中包括49个卷积层和1个全连接层,采用瓶颈结构(Bottleneck)设计,在保证网络表达能力的同时控制参数量。

技术架构图

图片

系统功能模块图

图片

演示视频 and 完整代码 and 安装

地址:https://www.yuque.com/ziwu/qkqzd2/aob7gygvoqi64r37

准备送父母去趟深圳姐姐家,在 12306 上买完票后。

顺手查了下本地刚好有趟车可以直接到西九龙,二等座票价 565 元。比只到深圳北的票价贵了差不多 150 元。

觉得深圳北到西九龙也没有多远,不会跨境车这么贵吧。细查深圳北到西九龙的票才 75 元。接着查了同趟车本地到深圳北的无折扣票也就 424.5 元。

两段票价加起来比一段票价便宜了 65 元。

去香港都需要护照或者通行证。可以用身份证买一段票再用护照或通行证买一段票,单趟下来通行证的钱快出来了,往返都够办理护照的钱了。


https://i.imgur.com/a/QtPrSRR.png

项目介绍

本植物识别系统是一款基于深度学习技术的智能植物识别应用,旨在帮助用户快速、准确地识别各类植物。系统采用前后端分离架构,前端使用 Vue3 框架结合 Element Plus 组件库,提供美观、直观的用户界面;后端采用 Flask 轻量级 Web 框架,负责处理业务逻辑和数据交互;核心识别算法基于 TensorFlow 框架实现的 ResNet50 深度学习模型,具备强大的图像特征提取和分类能力。

图片

图片

图片

选题背景与意义

随着生态环境的日益恶化和人们环保意识的不断提高,植物保护和研究工作变得越来越重要。然而,传统的植物识别方法主要依赖于植物学专家的经验和专业知识,效率低下且成本高昂,无法满足普通民众和非专业人员的需求。

近年来,深度学习技术的快速发展为植物识别提供了新的解决方案。卷积神经网络(CNN)在图像识别领域取得了显著的成果,ResNet50 作为其中的经典模型,具有强大的特征提取能力和分类精度。本项目正是基于这一技术背景,开发了一款易用、高效的智能植物识别系统。

关键技术栈:ResNet50

ResNet50 是由微软研究院提出的一种深度残差网络结构,是 ResNet(Residual Neural Network)系列模型中的经典代表。它通过引入残差学习(Residual Learning)机制,有效地解决了深度神经网络训练过程中的梯度消失和梯度爆炸问题,使得网络可以达到更深的层数(50层),同时保持良好的训练效果。

ResNet50 的核心创新点在于残差块(Residual Block)的设计。传统的卷积神经网络在层数增加时会出现退化现象(Degradation),即随着网络深度的增加,训练误差和测试误差都会增加。ResNet 通过在网络中添加跳跃连接(Skip Connection),将输入直接与输出相加,使得网络可以学习残差映射(Residual Mapping),从而避免了退化问题。

技术架构图

图片

系统功能模块图(MindMap)

图片

演示视频 and 完整代码 and 安装

地址:https://www.yuque.com/ziwu/qkqzd2/fh58mo20xzg2tvr1

多智能体系统是 2026 年主流构建方式,Claude 的智能体团队功能、OpenAI 的 Swarm 框架、LangGraph 的编排层以及 CrewAI都指向同一个结论:复杂任务需要协调配合的专家,而非一个万能通才。

为什么单个智能体会失效

一个智能体包揽一切,就像一人创业公司——小规模时凑合,规模上去就垮了。

反复遭遇的失效模式有三种。

上下文窗口污染:当一个智能体挂载十种不同工具时,每份工具 schema、每条 API 响应、每个中间结果都在抢占上下文空间。执行到十步任务的第七步 ,第二步里的关键信息早已被挤出或稀释。

角色混乱:被指示"调研、分析、编写代码、起草摘要"的智能体,往往会在这些角色之间相互干扰:调研没完成就开始写代码,代码没编译就开始起草摘要。系统提示词逐渐变成一堆互相抵触的指令。

故障扩散:单个智能体在第三步出错,第四步到第十步全部受污染,没有隔离机制、没有检查点、没有独立验证。

给每个智能体分配单一职责、少量工具和清晰的系统接口,可以同时解决上述三个问题。

三种行之有效的编排模式

构建了几套多智能体系统之后,几乎所有架构都可以归结为以下三种模式,或它们的混合体。

Supervisor 模式

一个中央 supervisor 智能体接收任务,将其分解为子任务,分配给各专家智能体,收集结果后综合输出最终答案。只有 supervisor 能看到全局。

这是最常见的模式,也是优先考虑的起点。Claude 的智能体团队功能本质上就是该模式的产品化实现:定义专家智能体,编排器负责在它们之间路由工作。

supervisor 通常运行在能力较强的模型上(Claude Opus 4.6、GPT-5.3),专家智能体则可以选用更便宜、更快的模型(Claude Sonnet 4.5、Gemini flash),毕竟它们的任务范围窄得多。

 supervisor = Agent(  
    model="claude-opus-4.6",  
    system_prompt="You are a project coordinator. Decompose tasks and delegate to specialists.",  
    available_agents=["researcher", "coder", "reviewer"]  
)  

researcher = Agent(  
    model="claude-sonnet-4.5",  
    system_prompt="You research technical topics. Return structured findings.",  
    tools=[web_search, doc_lookup, arxiv_search]  
 )

适用场景:子任务边界清晰的复杂任务,例如客户支持、内容生成流水线、代码审查工作流。

需要警惕的是,supervisor 本身容易成为瓶颈。任务分解一旦出错,下游每个智能体都会拿到错误的指令。

Pipeline 模式

各智能体串联成线性链路,每个节点接收上游输出,完成自身的转换处理后传递给下游。

 pipeline = [  
    Agent(name="extractor", task="Extract key entities from raw text"),  
    Agent(name="enricher", task="Enrich entities with database lookups"),  
    Agent(name="analyzer", task="Analyze patterns across enriched entities"),  
    Agent(name="reporter", task="Generate human-readable report"),  
]  

result = input_data  
for agent in pipeline:  
     result = agent.run(result)

适用场景:ETL 式工作流、文档处理,以及任何第 N 阶段输出即为第 N+1 阶段输入的任务。

需要警惕的是,错误传播。第一阶段的失误会级联穿透整条链路,各阶段之间必须设置验证门控。

Swarm 模式

没有中央协调者。各智能体点对点通信,根据当前状态动态移交工作:OpenAI 的 Swarm 框架普及了这一思路。

核心机制是 handoff:某个智能体判断自身已不再适合处理当前状态,便将控制权连同对话上下文一起转交给另一个智能体。

 def triage_agent_instructions(context):  
    return """You handle initial customer contact.  
    If the issue is billing, hand off to billing_agent.  
    If the issue is technical, hand off to tech_agent.  
    If you can resolve it directly, do so."""  
    triage = Agent(  
        name="triage",  
        instructions=triage_agent_instructions,  
        handoffs=[billing_agent, tech_agent]  
     )

适用场景:对话走向难以预测的面向用户系统,以及分类路由场景。

需要警惕的是:无限 handoff 循环,智能体 A 认为应由 B 处理,B 又认为应由 A 处理。所以需要设置最大 handoff 深度。

智能体间通信

多智能体系统里最难的部分不是构建单个智能体,而是让它们有效地协作。

结构化消息传递是不可妥协的前提。智能体之间不能交换自由文本,必须为每个角色的输入输出定义明确的 schema。

 class AgentMessage:  
     sender: str  
     receiver: str  
     task_id: str  
     payload: dict          # 结构化数据  
     confidence: float      # 智能体对自身输出的置信度  
     requires_review: bool  # 人工介入标志

系统中每条消息都携带

confidence

字段。研究智能体返回的结论置信度若低于 0.7,supervisor 不会盲目将其转发给代码智能体,所以要么以更精确的查询重试,要么升级给人工处理。

共享状态与消息传递是第一个绕不开的架构决策。共享状态(所有智能体读写同一个数据库或内存存储)更简单,代价是耦合;消息传递(只通过显式消息通信)更干净,代价是冗长。

实践中倾向于混合方案:用一个共享的任务上下文对象供各方读取,控制流则走显式消息。可以把它想象成一块共享白板,智能体在上面张贴各自的工作产出,再通过点对点消息协调后续动作。

 task_context = {  
     "task_id": "support-4521",  
     "customer": {"id": "C-1234", "tier": "enterprise"},  
     "research_findings": None,   # 由研究智能体填充  
     "proposed_solution": None,   # 由解决方案智能体填充  
     "review_status": None,       # 由审查智能体填充  
 }

不会崩溃的任务分解

supervisor 的分解质量决定了整个系统的天花板。单个智能体再优秀,喂给它的子任务如果划分得一团糟,结果也好不了。

按能力分解,而非按步骤数分解。任务看起来复杂,不代表要拆成十个子任务。应当沿着不同智能体各自擅长的边界来切割:研究智能体、代码智能体、审查智能体是自然的划分;"步骤 1-3 的智能体"和"步骤 4-6 的智能体"不是。

每个子任务应当能够独立验证。研究智能体返回一份 API 端点列表,在将其传给代码智能体之前,就能验证这份列表是否存在、格式是否正确,不必等到后续步骤才发现问题。

在每个子任务里明确退出条件。不要只告诉智能体"调研账单 API",而要说:"调研账单 API,并返回:(a) 端点 URL,(b) 认证方式,© 速率限制,(d) 相关错误码。如有任何字段缺失,返回 INCOMPLETE。"

 subtask = {  
     "agent": "researcher",  
     "objective": "Find the billing API documentation",  
     "required_outputs": ["endpoint_url", "auth_method", "rate_limits", "error_codes"],  
     "exit_criteria": "All four fields populated with verified data",  
     "max_retries": 2,  
     "timeout_seconds": 30  
 }

跨链路的错误处理

单智能体的错误处理思路清晰:重试、回退或失败。多智能体场景要难得多,故障会级联、叠加,有时还隐而不发。

第一层是智能体级别的重试,用于处理短暂性故障,API 超时、速率限制、工具响应格式异常。在向上级报告失败之前,以指数退避策略最多重试三次。

第二层是 supervisor 级别的重新路由。智能体重试耗尽后,supervisor 可以重新分解子任务、切换到其他智能体,或者简化请求。代码智能体曾在一项复杂的重构任务上连续失败,supervisor 将其拆成三个较小的代码变更后顺序派发,三项均顺利完成。

第三层是人工升级。有些故障需要人工判断,系统要知道何时停手。简单的启发式规则:若 supervisor 已尝试三种不同的分解策略且均告失败,则生成一张包含完整尝试上下文的结构化升级工单。

 class EscalationPolicy:  
     max_agent_retries: int = 3  
     max_redecompositions: int = 2  
     confidence_threshold: float = 0.6  
       
     def should_escalate(self, attempts, confidence):  
         return (attempts >= self.max_redecompositions  
                 or confidence < self.confidence_threshold)

还有一种隐性风险:部分成功。研究智能体返回了五个所需数据点中的四个,代码智能体基于不完整的数据写出了可运行的代码,审查智能体因代码能够编译而放行。一切看起来正常,直到上线后那个缺失的字段引发故障。验证完整性,不只是验证正确性。

生产部署与监控

在生产环境运行多智能体系统,所需的可观测性能力远超大多数团队的预期。

Tracing 不可或缺

每次智能体调用、每条消息传递、每次工具调用都需要留存 trace。分布式 tracing 配合贯穿整个执行过程的关联 ID,是最基础的保障。

 trace= {  
    "trace_id": "ma-2026-02-25-a8f3",  
    "total_agents_invoked": 4,  
    "total_llm_calls": 12,  
    "total_tool_calls": 8,  
    "total_tokens": 47_200,  
    "total_cost_usd": 0.34,  
    "total_latency_ms": 18_400,  
    "outcome": "success"  
 }

没有这些在四个智能体和十二次 LLM 调用里定位一个故障,无异于读一本缺了好几章的悬疑小说。

按智能体监控成本

多智能体架构会成倍放大调用成本。一次 supervisor 调用加三次专家调用,意味着至少四次 LLM 请求。按每个智能体、每种任务类型追踪成本,并在单次任务费用超过阈值时触发告警。

核心优化点是只对真正需要强推理的角色(supervisor、代码智能体)使用高端模型,任务范围更窄的智能体(研究智能体、审查智能体)换用成本更低的模型。仅此一项,成本下降了 40%。

延迟预算

多智能体调用默认串行执行。每个智能体耗时三秒,四个智能体的链路就是十二秒——对面向用户的场景来说不可接受。

两种缓解手段:并行化独立子任务(supervisor 同时派发调研任务与代码框架生成任务),以及流式返回中间结果(在代码智能体仍在工作时,先将研究结论呈现给用户)。

总结

  1. 按能力拆分,而非按复杂度拆分。一个智能体配十种工具,不如三个智能体各配三种工具。职责单一的智能体更可靠、成本更低、也更易于调试。
  2. 从 supervisor 模式起步。可预测性和可调试性最好。只有当场景明确需要时,再考虑 Swarm 或 Pipeline。
  3. 结构化通信不可妥协。定义消息 schema,包含置信度分数,每次 handoff 时验证完整性。
  4. 将成本预算设为单智能体的 3-5 倍。多智能体系统能力更强,成本也更高,通过对专家智能体选用更便宜的模型来部分抵消。
  5. 全程留存 Trace。看不见的东西无法调试,跨智能体的分布式 tracing 是最值得投入的运营基础设施。

多智能体系统不是银弹。额外的复杂性、更高的成本、新增的故障模式,这些代都是现实中的问题。但当单个智能体确实力的确无法解决,任务需要多种能力、独立验证或动态路由,精心编排的智能体团队是目前见过的最可靠的解法。

https://avoid.overfit.cn/post/972be117256f4f72b11fb12007f742b7

by Prakash Sharma

我用 Opus 4.6 (先了解代码情况,再按需求)写一个文档,每次都到最后关头,就报错。。。

连续试了三次,现在 Claude 模型的额度还剩 2 格,额度是扣了,但事情是一件没给我干啊,才上年费 Pro 的车,感觉像吃了苍蝇

有些朋友做视频的时候可能会烦恼视频封面怎么做才能撬动更多的点击率,进入更多受众的视野,所以基于视频封面对点击率的重要影响,我做了一个在线网站,帮助大家快速制作视频封面,只要上传图片,选定平台和品类,就可以生成符合平台调性的视频封面,从而提升视频的点击率,喜欢的视频封面也可以下载到本地,在上传时使用
因为现在还是验证阶段,所以做的很粗糙,如果有兴趣,可以访问 https://cover-inspiration-site.vercel.app/#samples
希望大家多多指点

1.首先获取key和密钥,这里不再阐述。

2.查询官方文档并没有提供实例,只说明调用方法回调

3.我这里是写好的,拿来即可使用(key和密钥自行申请):

<script type="text/javascript">
  window._AMapSecurityConfig = {
    securityJsCode: "729c83c0211116ffcfcb52a48fff124d909d1",
  };
</script>
<script src="https://webapi.amap.com/subway?v=1.0&amp;key=6bb49d7aa91fe88df2cfb708a7d9d08c111&amp;callback=cbk"></script>
<script type="text/javascript">
    window.cbk = function(){
        var mySubway = subway("hotList", {
            easy: 1
        });
         var allLineList = mySubway.getCityList(function(callback){
             console.log(callback)
         });
         
    };
</script>

4.查询控制台返回:
image.png

日常抽奖、点名、分组、测试数据时,经常会用到随机数。相比手动输入或套公式,这个在线工具打开就能用,电脑和手机都方便。

这个简单随机数生成器是我用 Vue 开发的,重点是上手快、操作清晰。你只需要设置范围和数量,就能马上得到结果,不用注册,也不用下载安装软件。

在线工具网址:https://see-tool.com/dns-query
工具截图:

这个工具能做什么

  • 按区间生成随机整数或小数
  • 一次生成多个结果,适合批量使用
  • 支持去重,避免抽样重复
  • 可选升序或降序,方便直接粘贴到表格
  • 结果支持一键复制,减少手工整理

三步就能完成

  1. 输入最小值、最大值和生成数量。
  2. 按需求勾选去重、排序;如果是小数场景,再设置小数位数。
  3. 点击生成,满意就复制,不满意可立即重抽。

适合哪些场景

  • 学生:随机点名、练习题取值
  • 老师或运营:活动抽取、名单分组
  • 办公人群:测试数据、编号样例
  • 开发与测试:快速生成一批可控数字

使用小提醒

如果开启去重,生成数量不能超过区间内可选值;如果你更关注分布效果,可以多生成几次再观察结果。

我做这个工具的目标很简单:让“生成随机数”这件小事更省时间。希望它能帮你减少重复操作,把精力留给更重要的事情。

之前的阿里云的域名,有阿里云服务器,网站跑了两年左右,服务器到期后,就把网站迁移到阿里云 oss 了,而且这个网站一直都是正常运行,包括后面做了备案的信息更新。

今天重新买了一个域名,点进去发现必须购买服务器才能备案,有什么办法可以绕过呢?

有一台火山云的服务器,若去火山云备案,岂不是得把域名转过去?
后面这个域名要在阿里云的 oss 使用,不是又得转回来?

真是折磨人,😑。

OpenClaw 难的不是“功能不会点”,而是“流程没想清楚”。你把这 8 个坑避开,基本就能从“能跑”进阶到“跑得稳”。

大家好,我是饭米粒

很多人刚上手 OpenClaw,第一反应是:

“这工具好强,但我怎么越用越乱?”

我一开始也一样。
看了很多功能,配了很多自动化,结果两天后自己都看不懂自己在干嘛。

后来我发现,新手不是输在技术,而是输在顺序
下面这 8 个坑,是我见过最多、也最容易修的。

坑 1:一上来就追“全自动”

典型表现

  • 想一次性把写作、分发、复盘全打通
  • 没有人工检查点
  • 出错后不知道哪一环炸了

为什么会踩

你把 OpenClaw 当“无人驾驶”,但新手阶段它更像“带辅助驾驶”。

正确做法

先做“半自动流程”:

  1. AI 先生成草稿
  2. 人工确认关键内容
  3. 再自动分发或归档

口诀:先可控,再省事。

坑 2:不写流程图,直接堆功能

典型表现

  • 看见工具就接
  • 触发条件全靠记忆
  • 后面改一处,其他地方连锁崩

为什么会踩

你没有“流程视图”,只有“功能碎片”。

正确做法

开工前先写 4 行流程:

  1. 触发源(谁触发)
  2. 处理逻辑(AI 做什么)
  3. 人工校验点(哪一步必须确认)
  4. 输出目标(发到哪,存到哪)

你可以把它理解成“装修前先画户型图”。
不画图直接开工,后面全是返工。

坑 3:提示词写太长、太抽象

典型表现

  • 一段提示词几百字
  • 要求很多,但没有优先级
  • 输出风格忽左忽右

为什么会踩

你以为“写得越多越准”,实际上模型更吃“结构化指令”。

正确做法

把提示词改成 3 段:

  • 角色:你是谁(例如:公众号结构增强编辑)
  • 任务:你要产出什么(提纲/正文/标题)
  • 约束:字数、风格、禁区

再加一条:
先出提纲,再写正文。

这样稳定性会明显提升。

坑 4:上下文喂太少,AI“失忆”

典型表现

  • 每次都像重新开始
  • 同一主题,前后口径不一致
  • 写作风格飘来飘去

为什么会踩

你没把“长期信息”变成可复用上下文。

正确做法

最少维护 3 类固定信息:

  1. 用户画像(你是谁、读者是谁)
  2. 写作偏好(口语化、步骤化、少术语)
  3. 内容边界(不夸大、不虚构)

把它当成“开场白模板”,每次任务前自动带上。

坑 5:不做错误分层,排障全靠猜

典型表现

  • 一报错就重试
  • 不看是权限问题、格式问题还是网络问题
  • 反复踩同一类错误

为什么会踩

你把所有报错当成一个问题。

正确做法

按 3 层排查:

  1. 输入层:参数、字段、格式是否对
  2. 权限层:token/scopes 是否够
  3. 执行层:超时、网络、服务状态

先分层,再处理,速度会快很多。

坑 6:把“提醒”写成“系统噪音”

典型表现

  • 定时任务会触发,但提醒文案看不懂
  • 过了几天你自己都不知道它在提醒什么

为什么会踩

提醒没有上下文,只有一句“该做事了”。

正确做法

提醒文案至少包含 4 件事:

  1. 这是提醒
  2. 具体任务是什么
  3. 对应哪个项目
  4. 下一步动作是什么

比如:
“【提醒】你 3 天前规划的 OpenClaw 教程选题该复盘了,现在请补 3 条读者问题并更新提纲。”

坑 7:没有“人工兜底”就直接外发

典型表现

  • 自动生成后直接发群/发公众号
  • 出现事实错误、口吻失真
  • 返工成本巨大

为什么会踩

你把 AI 当最终发布者,而不是第一生产者。

正确做法

加一个“发布前 checklist”:

  • 事实是否可验证
  • 观点是否符合你定位
  • 是否有夸大承诺
  • 是否读起来像你本人

检查通过再发布。

坑 8:只盯功能,不做复盘

典型表现

  • 今天搭一个流程,明天换一个
  • 没有衡量标准
  • 做了很多,增长没感觉

为什么会踩

你在“忙自动化”,不是“用自动化拿结果”。

正确做法

每周固定复盘 3 个指标:

  1. 省了多少时间
  2. 错误率是否下降
  3. 内容产出是否更稳定

复盘后只做一件优化,不要一次改 10 个地方。

给新手的最小可行路径(直接照抄)

如果你刚开始,不要贪多,先跑这条线:

  1. 先做一个“选题 → 提纲 → 初稿”的半自动流程
  2. 强制保留人工审核
  3. 每周复盘一次,只优化一个点

你会发现,OpenClaw 真正的价值不是“炫技”,
而是让你稳定产出、减少内耗。

我现在做内容也是这套。
不是最快,但很稳。

写在最后

很多人问我:
“OpenClaw 到底难不难?”

我现在的回答是:
不难,前提是你别一上来就把它当万能机器。

先把流程跑顺,再谈规模化。
先把一个场景做成,再复制到第二个、第三个。

你会比大多数人快很多。

本文由mdnice多平台发布

image.png

本文介绍 OpenClaw 如何构建安全沙箱浏览器环境。在多 Agent 并发时让浏览器也支持并发。通过容器化 Sandbox,可以实现浏览器隔离、并发任务支持以及资源回收等能力。同时分析沙箱工具权限配置的关键细节,并介绍 OpenClaw 源码调试方法。

前言: OpenClaw 到底是真正有产能性价比的 AI 助手,还是只是个 皇帝的新衣 被一众相关利益者吹嘘炒作?虽然我已经研究了两个多月,还不知道答案。不过,作为一个失业码农,我只想研究一下相关的技术和应用。所以本文没有 “功能炸裂、不学就被淘汰、震惊、天花板、刷新了我xyz、省下多少 $$ ” 这类的故事。

以 OpenClaw 为代表的这类个人 AI Agent,如果要真实完成任务,就必须给予其一定的权限和工具。但由于 LLM 的不稳定性以及 Prompt 注入漏洞,这些能力又必须被严格约束。无论是 Guardrail 还是其它防御手段,都无法保证绝对安全。

在这种情况下,容器化 Sandbox 就成为最后一道入侵防线和风险防火墙。

OpenClaw 提供两类 tools 的 sandbox:

  • 运行时 sandbox container
  • 浏览器 sandbox container

使用容器化 Sandbox,除了作为 入侵防线和风险防火墙 外,还能带来一些额外好处:

  • 支持浏览器并发操作

    每个 Session 使用独立容器,资源完全隔离。例如,每个 session 使用自己的 browser sandbox 实例,从而避免并发任务之间的浏览器操作互相干扰。

  • Session 资源使用限制
  • Session 资源统一回收

沙箱浏览器的部署

1. 创建 Agent

openclaw agents add worker --workspace ~/.openclaw/workspace/worker
openclaw agents set-identity --agent worker --name "worker"

2. 配置沙箱

每个 Agent 都可以拥有独立的沙箱配置,其配置位于 ~/.openclaw/openclaw.json 中的 agents.list[].sandbox

agents:
  list:
      {
        "id": "worker",
        "name": "worker",
        "workspace": "~/.openclaw/workspace/worker",
        "agentDir": "~/.openclaw/agents/worker/agent",
        "identity": {
          "name": "worker"
        },
        "subagents": {
          "allowAgents": [
            "main",
            "worker"
          ]
        },
        "sandbox": {
          "mode": "all",
          "workspaceAccess": "rw",
          "scope": "session",
          "docker": {
            "image": "openclaw-sandbox-common:bookworm-slim",
            "containerPrefix": "oc-sbx-worker",
            "workdir": "/workspace",
            "readOnlyRoot": true,
            "tmpfs": [
              "/tmp",
              "/var/tmp",
              "/run"
            ],
            "network": "bridge",
            "user": "1000:1000",
            "capDrop": [
              "ALL"
            ],
            "env": {
              "LANG": "C.UTF-8"
            },
            "memory": "8g",
            "cpus": 2
          },
          "browser": {
            "enabled": true,
            "image": "openclaw-sandbox-browser:bookworm-slim",
            "containerPrefix": "oc-sbx-browser-worker",
            "network": "openclaw-sandbox-browser",
            "headless": false,
            "enableNoVnc": true,
            "allowHostControl": false,
            "autoStart": true,
            "autoStartTimeoutMs": 12000
          },
          "prune": {
            "idleHours": 1,
            "maxAgeDays": 1
          }
        },
        "tools": {
          "profile": "full",
          "allow": [
            "group:messaging",
            "group:runtime",
            "group:fs",
            "group:sessions",
            "group:web",
            "group:ui",
            "group:automation",
            "group:nodes",
            "group:openclaw"
          ],
          "deny": [],
          "elevated": {
            "enabled": true,
            "allowFrom": {
              "webchat": [
                "*"
              ]
            }
          }
        }
      },
 
tools:
  profile: full
  allow:
    - group:messaging
    - group:runtime
    - group:fs
    - group:sessions
    - group:web
    - group:ui
    - group:automation
    - group:nodes
    - group:openclaw
  deny: []
  sessions:
    visibility: all
  sandbox:
    tools:
      allow:
        - group:messaging
        - group:runtime
        - group:fs
        - group:sessions
        - group:web
        - group:ui
        - group:automation
        - group:nodes
        - group:openclaw
      deny: [] 

如果你好奇 deny: [] 的作用,那就对了,请继续往下看。

沙箱浏览器工具权限

这里是本文的重点和难点。我在沙箱工具权限上花了整整两天时间,因为沙箱模式下的 Agent 一直抱怨没有 browser 工具。

OpenClaw 文档中虽然说明了 sandbox browser 的配置,但并没有提供一个完整的配置教程。网上也几乎找不到成功配置的案例。最后我只能通过 Debug OpenClaw 源代码来定位问题。

在 OpenAI Codex 的源码解读以及 VSCode Debug 的帮助下,我终于找到了问题所在。具体过程会在后面的 “Debug” 一节中说明。这里先直接给出结论:

需要在 tools 的权限配置中增加 deny: []

在 Debug 了很久之后,源码中的
src/agents/sandbox/tool-policy.ts 里的 DEFAULT_TOOL_DENY 最终给了我答案。

你也许会说:文档里不是已经写了吗?

确实写了,但 OpenClaw 的文档相对碎片化,没有一个系统的教程示例可以直接参考。因此如果没有完整理解权限体系,很容易忽略这个细节。


题外话:这个空配置的重要性,让我想起“空性”(Śūnyatā)。
在佛教(尤其是禅宗和大乘佛教)中,“空”并不代表什么都没有,而是指一切事物都没有固定、独立、不变的本质(自性)。

3. 构建沙箱浏览器的 Image

参考: https://docs.openclaw.ai/gateway/sandboxing#images-%2B-setup
git clone https://github.com/openclaw/openclaw

cd openclaw

# build agent runtime docker image: openclaw-sandbox-common:bookworm-slim
scripts/sandbox-common-setup.sh

# build agent browser docker image: openclaw-sandbox-browser:bookworm-slim
scripts/sandbox-browser-setup.sh

沙箱浏览器的使用

下面示例:

Now I want to summarize following websites:
- https://news.ycombinator.com/
- https://lobste.rs/

You can use `sessions_spawn` tool to submit task to a worker. With parameters:
- `agentId`=worker
- `label`=$(a_key_word_of_the_website_domain_name)

The `task` parameter you submit should use following template:
> 1. Call browser `navigate` tool with targetUrl=$(the_website_url) , don't call browser `open` tool. Don't use `web fetch` tool or any other shell command if the browser tool fail. Then summarize the webpage content and response it with the screen shoot of your browser.

Try your best to concurrent the tasks.

中文版本:

现在,我希望你对以下网站进行摘要总结:
- https://news.ycombinator.com/
- https://lobste.rs/

你可以使用 `sessions_spawn` 工具将任务提交给一个工作进程(worker)。提交时需包含以下参数:
- `agentId`=worker
- `label`=$(网站域名中的一个关键词)

你提交的 `task` 参数应采用如下模板:
> 1. 调用浏览器的 `navigate` 工具,并指定 `targetUrl=$(网站URL)`;切勿调用浏览器的 `open` 工具。如果浏览器工具执行失败,请勿转而使用 `web fetch` 工具或任何其他 Shell 命令。随后,请对网页内容进行摘要总结,并将总结结果连同浏览器的截图一并作为响应输出。

请尽可能尝试并发执行这些任务。

运行结果:

image.png

Debug OpenClaw (调试并设置断点)

在 VSCode 中调试 OpenClaw 成了排查配置问题的最后手段。很多有经验的开发者都知道:再完善的文档,也比不上直接阅读源代码。

作为一个后端 Java 开发者,调试 TypeScript 项目其实并不容易入手。好在 OpenAI Codex 最终为我 指明了方向

具体过程我准备在另一篇文章中详细说明。这里先给出 VSCode 调试 OpenClaw 的配置示例。

.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "OpenClaw: Gateway dev",
      "type": "node",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "program": "${workspaceFolder}/scripts/run-node.mjs",
      "args": ["gateway", "--port", "18789", "--force"],
      "console": "integratedTerminal",
      "outFiles": ["${workspaceFolder}/dist/**/*.js"],
      "skipFiles": ["<node_internals>/**"]
    },    

背景:某头部大厂(B)后端开发 5 年+,B 端业务,裸辞 gap 半年,年后陆续开始面试,互联网大中厂面了个遍( 5 家),都是一面二面挂,甚至连续多次投递过不了简历关,非常焦虑。

问题:

  1. 想获得面试机会非常需要垂直业务经历匹配,很多岗位直接简历筛选不过。
  2. 基本每场面试都会具体质疑我的裸辞原因,并对我给出的理由(休息了一段时间、部门业务前景不好想换业务获得成长、gap 过程中也在学习 AI 等)均不认可(例如:怎样才能叫获得成长?为什么一定要裸辞呢? gap 这么久都干啥了?)。仿佛 gap 就该判刑。
  3. 复盘了下面试挂的原因,项目经历确实没有太大的亮点。

如果后续大厂的机会都没把握住,心理可能会很失衡,但是心里预期只能这样慢慢降低。
现在也想找些上海深圳的外企(能给得起薪资(快到 P6 的顶),平薪也行)投递,大家有推荐吗?谢谢。

近几次面试发现一个问题用人单位似乎更看重 AI 工具的熟练度,你说突破了某个技术难点会被认为“AI 就能做到何必自己去探索”,各种问题都能扯到 AI 上,这样很容易忽视技术深度和背后自主探索和创造所付出的努力。

我用 AI 确实能大幅提高效率,写 API 接口几分钟就搞定了,CRUD 任务描述一下需求即可快速实现,丢一份文档即可生成 MVP ,但之前做了个探索性的微服务项目的确遇到深水区,尤其是基础设施层。大致存在以下几种问题:

  • 组件和框架集成存在隐形契约,官方文档没有,GitHub 无人提及,网上无人讨论。
  • 框架功能设计缺陷和框架的 BUG 导致无法满足需求必须改源码还不能破坏原有的函数。
  • 官方文档缺失部分内容,无参考答案,无已知解决方案。
  • 官方文档仅有简单示例但没有完整落地的案例,同时需要修改底层源码。
  • 框架已存在的特性,无注释,没有提及该特性的相关文档和资料。

面试官认为提示词写好加上几个 Skills 就行,实际上烧了一堆 token 还是没用,除了最后一个 AI 勉强有解其他的几乎不行,最后还是自主探索用更优雅的方式解决掉。

所以这就存在争议,技术的学习成本降低以后 AI 工具熟练度能代替技术深度吗?如果自主探索攻破难题被认为“人做得到的 AI 同样可以”,那所有的技术研究,开源项目不就没有意义?

自从 OpenAI 出来 gpt-5.4 模型后 Codex 的使用确实有了极大的提升,我个人调整配置后开发同一个需求对比使用 Claude Code + Claude Opus 4.6 还更快一点完成。

本来从 gpt-5.3-codex 的默认配置直接使用,但发现上下文一下就不够了,对于大一点的工程来说
特别难受。

后来查了下网上的资料,说 gpt-5.4 的 1M 上下文的能力要自己主动配置开启,晕。

下面放出我自己使用 Codex 的一些配置,算是抛砖引玉,不一定是最佳实践,有不同的欢迎指正。

打开 ~/.codex/config.toml 文件

project_doc_fallback_filenames = ["CLAUDE.md"] # agents.md 找不到,则找 claude.md ,和 Claude Code 使用同一份约束

model = "gpt-5.4"
review_model = "gpt-5.4" # 默认 "gpt-5.2-codex"

model_provider = "apibox" # 改成你自己的中转站名
model_reasoning_effort = "xhigh" # 思考强度超高

model_context_window = 1000000 # 模型上下文窗口大小,默认 1000000 ( 1M ) for gpt-5.4
model_auto_compact_token_limit = 500000 # for gpt-5.4 虽然是 1M ,但是有效注意力不够,不建议开的太高


[model_providers.apibox]
name = "OpenAI" # 如果用的是中转站,建议把名字改成 OpenAI (注意大小写)命中缓存,省 token
base_url = "apibox.cc/v1" # 改成你自己的中转站 API 地址哦
wire_api = "responses" 
requires_openai_auth = true

[features]
shell_tool = true # 启用 shell 工具。默认: true
apply_patch_freeform = true # 通过自由格式编辑路径包含 apply_patch (影响默认工具集)。默认: false
shell_snapshot = true # 启用 shell 快照功能。默认: false
undo = true # 启用 undo 功能。默认: true
unified_exec = true # 使用统一 PTY 执行工具
multi_agent = true
steer = true
prevent_idle_sleep = true
child_agents_md = true

memories = true # 开启记忆
sqlite = true # 可配可不配,随意
fast_mode = true # 必开,完全不同的体验,当然也会让 gpt-5.4 用量变 2 倍

[memories] # 强烈建议用新模型来总结 memories
consolidation_model = "gpt-5.4"
extract_model = "gpt-5.4"
# generate_memories = true # 默认 true
# use_memories = true # 默认 true ,表示把 memory_summary.md 注入 developer instructions
max_raw_memories_for_consolidation = 512
max_unused_days = 30 # 默认 30
max_rollout_age_days = 45 # 默认 30
# max_rollouts_per_startup = 16 # 默认 16
# min_rollout_idle_hours = 6 # 默认 6

小技巧:

model_auto_compact_token_limit 这个配置可以动态调整
当你的工程的会话上下文特别大的时候,你有不想开新的会话时。你可以先把这个配置改大,然后重新开启 VS Code 或者 cli ,这样就不会触发压缩了,可以继续聊下去。