<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>『 闪 界 』</title>
  
  <subtitle>鼠标炸弹的博客</subtitle>
  <link href="https://flashj.cn/atom.xml" rel="self"/>
  
  <link href="https://flashj.cn/"/>
  <updated>2026-05-08T01:27:04.838Z</updated>
  <id>https://flashj.cn/</id>
  
  <author>
    <name>Mousebomb</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>cc-connect：把 Claude Code 接入飞书</title>
    <link href="https://flashj.cn/cc-connect-zhi-neng-ti-qiao-jie-qi.html"/>
    <id>https://flashj.cn/cc-connect-zhi-neng-ti-qiao-jie-qi.html</id>
    <published>2026-05-07T13:26:00.000Z</published>
    <updated>2026-05-08T01:27:04.838Z</updated>
    
    <content type="html"><![CDATA[<h1 id="cc-connect：把-Claude-Code-接入飞书"><a href="#cc-connect：把-Claude-Code-接入飞书" class="headerlink" title="cc-connect：把 Claude Code 接入飞书"></a>cc-connect：把 Claude Code 接入飞书</h1><p>今天装了一个新的智能体桥接器——<strong>cc-connect</strong>，它能把本地的 Claude Code 映射成飞书机器人，接入聊天软件。接入后，每个机器人对应一个工作路径，相当于在那个文件夹里打开了 Claude Code。体验下来非常不错，记录一下。</p><p><img src="https://cdn.mousebomb.org/blog/auto/202605080917582.png"></p><h2 id="初试-cc-connect"><a href="#初试-cc-connect" class="headerlink" title="初试 cc-connect"></a>初试 cc-connect</h2><p>安装方式很简单，按照官方文档来就行。它不支持 Copilot，但支持 Claude Code 和 OpenCode，基本够用了。</p><pre><code class="language-bash">请参考 https://raw.githubusercontent.com/chenhg5/cc-connect/refs/heads/main/INSTALL.md 帮我安装和配置 cc-connect</code></pre><p>装好后需要手动添加开机启动项 <code>cc-connect daemon install</code>，然后就可以在飞书里调用了。</p><p><strong>cc-connect 本身不配置大模型</strong>，它只做信息桥接，大模型调用的是你在配置文件里写的 Agent CLI（Claude Code 或 OpenCode）。</p><p>核心优点：<strong>一个项目目录放一个机器人</strong>，可以用项目来隔离，在外面同时用多个机器人写多个项目。</p><h2 id="权限控制：完全可控"><a href="#权限控制：完全可控" class="headerlink" title="权限控制：完全可控"></a>权限控制：完全可控</h2><p>我之前最关心的问题是权限审批流程。接入推送后，它会不会每一步都要确认？</p><p><img src="https://cdn.mousebomb.org/blog/auto/202605080913800.webp"></p><p>体验后发现，<strong>权限完全可控</strong>。它跟直接在命令行里用 Claude Code 是一样的，该弹出的确认提示全部都会出来。这些权限配置是在 Claude 配置文件里设置的，是一个白盒。</p><p>所以 Hermes 真的可以考虑退掉了。</p><h2 id="配置与多项目管理"><a href="#配置与多项目管理" class="headerlink" title="配置与多项目管理"></a>配置与多项目管理</h2><p>cc-connect 的配置文件放在 <code>~/.config/cc-connect/</code> 目录下，每个项目对应一个子目录（因为不只有配置文件，还有临时数据文件）。</p><p><strong>一个实例就够用</strong> —— 一个实例可以实现多个项目分开，可以并行执行命令，让多个项目同时运行。也支持多实例同时运行。</p><p>对于多项目管理，<strong>一个项目一个飞书机器人</strong>：并行执行任务，效率高</p><p>我的选择：<strong>分两个用途的机器人</strong></p><ul><li>写代码机器人：配多个目录，使用 OpenCode（和 Copilot 的 agents 文件兼容）</li><li>日记&#x2F;知识库机器人：用 Claude Code，配便宜量大的模型（minimax），到期后切 deepseek</li></ul><h2 id="飞书快速指令"><a href="#飞书快速指令" class="headerlink" title="飞书快速指令"></a>飞书快速指令</h2><p>cc-connect 支持丰富的斜杠命令，弄几个到飞书快捷菜单里：</p><p><img src="https://cdn.mousebomb.org/blog/auto/202605080920784.png"></p><ul><li><code>/new</code> - 新会话</li><li><code>/model [名称]</code> - 查看&#x2F;切换模型</li><li><code>/reasoning [等级]</code> - 查看&#x2F;切换推理强度</li><li><code>/quiet</code> - 静音开关</li><li><code>/stop</code> - 停止当前执行</li></ul><p>输入 <code>/model</code> 会直接返回飞书交互式选择菜单，不经过 Agent CLI 和大模型。</p><p>常用模型切换：</p><ul><li>minimax m2.7: <code>/model minimax-cn-coding-plan/MiniMax-M2.7</code></li><li>deepseek flash: <code>/model deepseek/deepseek-v4-flash</code></li></ul><h2 id="cc-connect-vs-Hermes：各有所长"><a href="#cc-connect-vs-Hermes：各有所长" class="headerlink" title="cc-connect vs Hermes：各有所长"></a>cc-connect vs Hermes：各有所长</h2><p>体验下来，两者定位完全不同：</p><table><thead><tr><th></th><th>cc-connect</th><th>Hermes</th></tr></thead><tbody><tr><td>个性</td><td>没有个性，纯粹工具</td><td>有性格有人格</td></tr><tr><td>执行</td><td>调用本地 Claude Code</td><td>走 Docker 运行</td></tr><tr><td>权限</td><td>所有 bash 调用都要审核</td><td>可以给完全 bash 权限</td></tr></tbody></table><p><strong>结论</strong>：</p><ul><li>写代码等需要遥控的高频edit的任务 → cc-connect</li><li>图书馆、日记等需要高频调用bash的 → Hermes 从 Docker 运行更安全</li></ul><p>缺点：cc-connect 老要审批也累。完全放行又怕安全风险，比如让它采集资料时跑起有头浏览器干扰我做事。Docker 环境的隔离hermes还是更安心。</p><h2 id="opencode-vs-Claude-Code"><a href="#opencode-vs-Claude-Code" class="headerlink" title="opencode vs Claude Code"></a>opencode vs Claude Code</h2><p>最后试了一下 opencode，虽然模型多，但<strong>没有 superpower</strong>。最终还是换回 Claude Code。</p><p>说起来，有多智能体配合的还是 Claude Code + Superpower，连 GitHub Copilot 都没开放多智能体。</p><p>将来适合我的最具性价比的用法，大概是 <strong>deepseek pro + Claude Code</strong> 了吧？</p><p>所以我现在有三档： </p><ol><li>在户外，用cc-connect指挥 claudecode提需求AI写代码</li><li>在家，用claudecode提需求AI写代码</li><li>疑难问题，用Copilot写代码+WebStorm审阅。</li></ol>]]></content>
    
    
    <summary type="html">今天装了一个新工具 cc-connect，它能把本地的 Claude Code 映射成飞书机器人，接入聊天软件，让你在飞书里直接遥控写代码。</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI工具" scheme="https://flashj.cn/tags/AI%E5%B7%A5%E5%85%B7/"/>
    
    <category term="Claude Code" scheme="https://flashj.cn/tags/Claude-Code/"/>
    
    <category term="飞书机器人" scheme="https://flashj.cn/tags/%E9%A3%9E%E4%B9%A6%E6%9C%BA%E5%99%A8%E4%BA%BA/"/>
    
    <category term="cc-connect" scheme="https://flashj.cn/tags/cc-connect/"/>
    
  </entry>
  
  <entry>
    <title>TRAE SOLO 独立版使用记录</title>
    <link href="https://flashj.cn/trae-solo-shi-yong-ji-lu.html"/>
    <id>https://flashj.cn/trae-solo-shi-yong-ji-lu.html</id>
    <published>2026-05-06T11:45:00.000Z</published>
    <updated>2026-05-08T01:33:20.231Z</updated>
    
    <content type="html"><![CDATA[<h1 id="TRAE-SOLO-独立版使用记录"><a href="#TRAE-SOLO-独立版使用记录" class="headerlink" title="TRAE SOLO 独立版使用记录"></a>TRAE SOLO 独立版使用记录</h1><p>这两天上线的 Trae Solo 新版支持手机远程控制，出门时也能让家里的电脑自己写代码了。虽然需要排队，但可以趁吃饭的时候让它写，还是有一点优势的。</p><p>不过相比 Trae IDE，功能稍弱：</p><ol><li>没有继承原有的规则</li><li>没有继承原有的 Skill，需要单独安装</li><li>技能中心更偏向办公场景，很多技能都没有</li><li>自动调用的大模型有几率选到「智商」稍低的，有些问题可能需要改好几次才能改好</li></ol>]]></content>
    
    
    <summary type="html">TRAE SOLO 新版支持手机远程控制，出门时也能让家里电脑写代码，但相比 TRAE IDE 存在规则继承、技能安装等差距。</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="TRAE" scheme="https://flashj.cn/tags/TRAE/"/>
    
    <category term="远程控制" scheme="https://flashj.cn/tags/%E8%BF%9C%E7%A8%8B%E6%8E%A7%E5%88%B6/"/>
    
  </entry>
  
  <entry>
    <title>解决 coreaudiod 内存占用高达 45G 的问题</title>
    <link href="https://flashj.cn/coreaudiod-memory-leak-from-claude-code-hook.html"/>
    <id>https://flashj.cn/coreaudiod-memory-leak-from-claude-code-hook.html</id>
    <published>2026-05-06T04:05:00.000Z</published>
    <updated>2026-05-06T13:13:11.070Z</updated>
    
    <content type="html"><![CDATA[<p>奇怪的coreaudiod内存占用<br>11:50～12:00</p><p>我的 coreaudiod 进程已经占用了 45 个 G 的内存，我怀疑是命令行里面溢出了。</p><p>现在我非常怀疑是 CC 里面的这个声音播报占用的。</p><p><img src="https://cdn.mousebomb.org/blog/auto/202605062110846.webp"></p><p>果然在帖子 <a href="https://www.reddit.com/r/ClaudeCode/comments/1n9wth1/why_does_running_claude_code_often_use_2040gb_of/">https://www.reddit.com/r/ClaudeCode/comments/1n9wth1/why_does_running_claude_code_often_use_2040gb_of/</a> 里也看到，有人加了hook播放音效，导致coreaudiod内存泄露。</p><p>我现在需要把 Claude 的 hook 给去掉，然后就直接用我终端本身的音效来设置一下。</p><p>我的终端用的是 Ghosty，我得查一查。</p><h3 id="先卸载peonping"><a href="#先卸载peonping" class="headerlink" title="先卸载peonping:"></a>先卸载peonping:</h3><pre><code class="language-sh">brew uninstall PeonPing/tap/peon-ping</code></pre><p>保留了之前下载的音效包 <code>/Users/rhett/.openpeon/packs/*</code></p><h3 id="再根据ghostty文档重新配置："><a href="#再根据ghostty文档重新配置：" class="headerlink" title="再根据ghostty文档重新配置："></a>再根据<a href="https://ghostty.org/docs/config/reference#notify-on-command-finish-after">ghostty文档</a>重新配置：</h3><pre><code class="language-ini">theme = Solarized Darculanotify-on-command-finish = alwaysnotify-on-command-finish-action = notify,bellnotify-on-command-finish-after = 1s# 启用自定义音频 bell（必须 1.3.0+）bell-features = audio,system,border,title# 自定义音效路径（推荐先用系统自带，后面再换自己的）# 格式：aiff/wav/mp3 均可bell-audio-path = /Users/rhett/.openpeon/packs/ccg_china_dozer/sounds/Building_is_complete.mp3bell-audio-volume = 1.0</code></pre><p>并且配置了.claude&#x2F;settings.json ，hooks只保留写死的两条afplay：</p><pre><code class="language-json">  &quot;hooks&quot;: &#123;    &quot;PermissionRequest&quot;: [      &#123;        &quot;matcher&quot;: &quot;*&quot;,        &quot;hooks&quot;: [          &#123;            &quot;type&quot;: &quot;command&quot;,            &quot;command&quot;: &quot;afplay /Users/rhett/.openpeon/packs/mambo_pack/sounds/review_this.mp3&quot;          &#125;        ]      &#125;    ],    &quot;Stop&quot;: [      &#123;        &quot;matcher&quot;: &quot;*&quot;,        &quot;hooks&quot;: [          &#123;            &quot;type&quot;: &quot;command&quot;,            &quot;command&quot;: &quot;afplay /Users/rhett/.openpeon/packs/mambo_pack/sounds/done.mp3&quot;          &#125;        ]      &#125;    ]  &#125;,</code></pre>]]></content>
    
    
    <summary type="html">coreaudiod 进程占用45G内存，排查发现是 Claude Code 的 hook 播放音效导致的内存泄露，通过卸载 PeonPing 并改用 Ghostty 终端原生音效解决。</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="Claude Code" scheme="https://flashj.cn/tags/Claude-Code/"/>
    
    <category term="peon-ping" scheme="https://flashj.cn/tags/peon-ping/"/>
    
    <category term="工具软件" scheme="https://flashj.cn/tags/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    <category term="终端" scheme="https://flashj.cn/tags/%E7%BB%88%E7%AB%AF/"/>
    
    <category term="Ghostty" scheme="https://flashj.cn/tags/Ghostty/"/>
    
    <category term="内存泄露" scheme="https://flashj.cn/tags/%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2/"/>
    
    <category term="MacOS" scheme="https://flashj.cn/tags/MacOS/"/>
    
  </entry>
  
  <entry>
    <title>从龙虾到 Hermes</title>
    <link href="https://flashj.cn/hermes-agent.html"/>
    <id>https://flashj.cn/hermes-agent.html</id>
    <published>2026-04-11T13:16:00.000Z</published>
    <updated>2026-04-11T13:33:38.546Z</updated>
    
    <content type="html"><![CDATA[<h1 id="从龙虾到-Hermes"><a href="#从龙虾到-Hermes" class="headerlink" title="从龙虾到 Hermes"></a>从龙虾到 Hermes</h1><p>你有没有这样一个”龙虾”——</p><p>它有自己的记忆系统，但每次重启就像失忆了一样；它偶尔能帮你写代码，但下一秒可能就抽风报错；每天下午15:00之后，你满怀期待地跟它说话，它却一本正经地已读不回。</p><p>对龙虾，爱恨交织这个词太轻了。</p><p>直到 4 月 6 号，我在小红书上刷到一个帖子注意到Hermes，一个熟悉的图标，之前在LM Studio里见过。</p><p>「Hermes Agent 」来了。</p><p>结合了 Claude Code 的命令行模式，和龙虾那种人格和记忆成长的功能。说实话，一开始我是怀疑的。但看完官网介绍，我心动了。</p><hr><h2 id="零、龙虾到底带来了什么？"><a href="#零、龙虾到底带来了什么？" class="headerlink" title="零、龙虾到底带来了什么？"></a>零、龙虾到底带来了什么？</h2><p>哎，经过浪费了这么长时间，我要反思龙虾到底带来了什么。</p><p>它的能力边界取决于它会的 skill，但它那些 skill 本身也是封装的命令行。所有的任务都可以做成一个工具、一个程序来实现。那它的价值就是可以方便用自然语言的方式随意组装这些东西，并且它接入各个聊天软件，然后它可以把自己需要的一些总结存入文档。下次它又能再读取出来，当作它的记忆体系。</p><p>它的这些优点似乎都是可被替代的，而且更大的缺点是，它所谓的记忆和接入各个聊天软件并没有产生实质的生产价值。提供实际生产价值的还是那些技能，而那些技能其实也可以在 Claude Code 之类的软件里面用。</p><p>所以说我觉得现在在养虾上面其实浪费了很多时间。感觉有一种获得感，因为我的虾成长了，它又学了一个技能，它能跟我互动，它能在飞书里面，你多个有形象、有头像的形象来跟我聊天，产生了一种虚假的获得感，但它其实并没有创造出什么东西来。</p><p>那我的用例呢，就是每天让它帮我分析我的日记，记住我是什么情况。但是呢，实际上这个数据我很少再需要提取一次。其实真正的刚需也就是每个月月底，可能让它帮我做一次月底总结，回顾一下。</p><p>然后知识库方面呢，倒腾的反反复复的改来改去的，反正基本功能还就只能是比较稳的抓取微信公众号的文章。但这些文章实际上真正有价值的，都是自己看完了之后消化掉，才是真正有价值的。你下次要查找，这确实是一个痛点。但是呢，有了龙虾智能体之后，反而经常是一个文章没看完，就只是想着要把它发给龙虾存下来。</p><p>一方面它总结的时候有时候会产生幻觉，丢失精度。另一方面呢，自己把从消化文档的重点被转移到了“哎，龙虾能不能很好地帮我把这个文章总结下来，存下来？”这个重点就搞错了。</p><p>我今天在研究龙虾装一个小红书的技能的时候，技能最后装的还是有各种各样的问题，不稳定。但是让我看到了一些新的我感兴趣的知识，比如新来的一个 Hermes Agent，它比龙虾更加强大，在记忆系统上面设计更好。</p><p>这让我意识到，沉迷在养龙虾这种虚假的获得感当中，其实它并不能创造任何价值。而且龙虾还非常不稳定。但凡它所有功能都是稳定的，我给她发消息，她必然会回复，无论多长时间。遇到困难呢，她就告诉我没有困难，她就会一定执行出来结果回复给我，不要给我冷暴力，发消息她也都不回。</p><p>但凡她所有功能都是稳定的，每次这些学过的技能都不出纰漏的，按照技能百分之百落到实处去执行，那也不至于说是人要在这上面浪费这么多时间，反复地去教她了。现在最大的获得感就是“哎呀，它这个技能又坏了”，然后我花了一下午时间又给它技能修好了，又能用了。结果呢，其实你不能保证修好之后下次还是百分之百成功。但是每次都沉迷在这种虚假的获得感当中，就是我好像又把它给养好了。</p><p>而且这个“龙虾”，占资源大。我为了保证安全得给它开个 Docker。我现在自从开了它之后，这 Docker 后端天天跑着，占了我 8 个多 G 的内存。我每天啥事不干，8.72 GB 的内存就得分配给它，我自己现在的空余内存就只剩 29 GB 了。就在这儿耗着，导致我连本地大模型推理都没办法再开一个，像“千问” 35BA3B 之类的我都开不了了。</p><p>龙虾（OpenClaw）感觉总体来说还是不稳定，非常不稳定。说实在的，它的能力也不是很强，那些技能都得封装好才行。</p><p>与其这样，我其实还不如用 Claude Code。</p><ol><li>每一步审核和思考都清晰可见，不像龙虾那么黑盒，而且容易崩。</li><li>它为了在飞书里呈现那个形象，堆砌了太多复杂的东西在里面，导致过于臃肿，能耗也很高。</li></ol><p>这就远远不如 Claude Code 了。所以我逐渐还是喜欢用 Claude Code 来工作，而且加了声音插件之后，它更像个人了。像我今天早上搞小红书的技能，我就懒得弄那个 OpenClaw 版的了，直接用的是 Claude 版。这样可以直接跑在我的宿主机的环境里面，因为它的每一步操作我都是可以看到的。</p><p>由于不用担心它做出一些危险举动，也就不必非得装在一个 Docker 里面去跑，省了很多资源吧。</p><h2 id="【一、部署-Hermes】"><a href="#【一、部署-Hermes】" class="headerlink" title="【一、部署 Hermes】"></a><strong>【一、部署 Hermes】</strong></h2><p>官方给了一键安装脚本，两分钟装完：</p><p>curl -fsSL <a href="https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh">https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh</a> | bash<br>source ~&#x2F;.zshrc<br>hermes setup</p><p>但开代理的同学注意了——必须手动补装 <code>httpx[socks]</code> 依赖，不然联网会报错：</p><p>cd ~&#x2F;.hermes&#x2F;hermes-agent<br>source venv&#x2F;bin&#x2F;activate<br>uv pip install “httpx[socks]”</p><p>装完之后，<code>~/.local/bin/hermes</code> 就能跑了。600 多 MB，实际可执行文件在 <code>~/.hermes/hermes-agent</code> 里。</p><hr><h2 id="【二、安全配置：local-还是-docker？】"><a href="#【二、安全配置：local-还是-docker？】" class="headerlink" title="【二、安全配置：local 还是 docker？】"></a><strong>【二、安全配置：local 还是 docker？】</strong></h2><p>它的安全配置设计让我眼前一亮。terminal 支持多种模式，但我考虑的本机能跑就两种：</p><ul><li><p><strong>local 模式</strong>：权限和用户账户一样大</p></li><li><p><strong>docker 模式</strong>：用完即走的临时容器，还能自动把当前工作目录 mount 进去</p><p>  每次执行 terminal 才开启容器，用完自动关闭。这种设计可以在配置里随时切换本地和 Docker 模式，不需要任何额外操作。</p><p>  我的配置选了 docker，顺手把 <code>~/Downloads</code> 开放给它：</p></li></ul><pre><code class="language-yaml">terminal  backend: docker    docker_mount_cwd_to_workspace: false</code></pre><hr><h2 id="【三、接入飞书】"><a href="#【三、接入飞书】" class="headerlink" title="【三、接入飞书】"></a><strong>【三、接入飞书】</strong></h2><p>平时主要在飞书上用，Gateway 必须配。用 <code>hermes gateway setup</code> 向导，问几个问题、填几个 Key，全程 5 分钟搞定：</p><pre><code class="language-sh">hermes gateway setup</code></pre><p>运行模式可以选 foreground 或安装成 launchd service：</p><pre><code class="language-sh">hermes gateway install   # macOS: 安装成开机启动服务</code></pre><p>安装完成后，日志随时可查，不像龙虾那样黑盒。<strong>HOME 渠道清清楚楚</strong>，不会再出现”消息乱发到不知道哪个群”的情况。</p><hr><h2 id="【四、多-Agent-配置】"><a href="#【四、多-Agent-配置】" class="headerlink" title="【四、多 Agent 配置】"></a><strong>【四、多 Agent 配置】</strong></h2><p>Hermes 支持多 Agent，每个 agent 都是独立的 profile，配自己的记忆、技能和大模型，互相隔离。</p><p>用 <code>hermes profile create limengjia</code> 新建了一个”李梦佳”人格，它直接变成了一个 CLI 命令 <code>limengjia</code>：</p><pre><code>hermes profile create limengjia  # → 创建了 ~/.hermes/profiles/limengjia  # → 生成了 /usr/local/bin/limengjia 快捷命令</code></pre><p>每个 profile 拥有：</p><ol><li><p>自己的配置</p></li><li><p>自己的记忆</p></li><li><p>自己的 skills</p></li><li><p>自己的大模型</p><p> 不像龙虾那样都混在一起。</p></li></ol><hr><h2 id="【五、接-MCP-扩展能力】"><a href="#【五、接-MCP-扩展能力】" class="headerlink" title="【五、接 MCP 扩展能力】"></a><strong>【五、接 MCP 扩展能力】</strong></h2><p>原生能力不够用？MCP 来补。</p><p>接飞书 MCP 打通云文档，配置写在 <code>.env</code> 里，敏感信息不落地：</p><p>feishu:<br>  command: “npx”<br>  args: [“-y”, “feishu-mcp@latest”, “–stdio”]<br>  env:<br>    FEISHU_APP_ID: ${FEISHU_APP_ID}<br>    FEISHU_APP_SECRET: ${FEISHU_APP_SECRET}<br>    FEISHU_AUTH_TYPE: “user”</p><p>还接了 MiniMax MCP，图像理解也能跑通了。底层用 mcporter 桥接，命令执行完自动删除，<strong>即用即走</strong>。</p><hr><h2 id="【六、记忆系统的惊喜】"><a href="#【六、记忆系统的惊喜】" class="headerlink" title="【六、记忆系统的惊喜】"></a><strong>【六、记忆系统的惊喜】</strong></h2><p>人格迁移只用一个 SOUL 文件就够了，其他记忆都是自动维护。</p><p>测试让李梦佳记住我叫”桂花糕”，它立刻在 profile 目录下生成了一个 <code>memory/user.md</code>：</p><pre><code>用户自称桂花糕（Guì Huā Gāo），请始终称呼其为桂花糕。 §桂花糕是李梦佳（我）的好朋友！</code></pre><p><strong>白纸黑字，清清楚楚。</strong> 比你猜它到底记没记住要强太多了。</p><hr><h2 id="【七、Hermes-对比龙虾的优点】"><a href="#【七、Hermes-对比龙虾的优点】" class="headerlink" title="【七、Hermes 对比龙虾的优点】"></a><strong>【七、Hermes 对比龙虾的优点】</strong></h2><p>hermes比起龙虾的优点有： </p><ul><li>模型报错会输出到控制台</li><li>网关有日志可查，关键是我知道在哪里查</li><li>文档完善，虽然没翻译中文，但是人家文档全啊，任何问题、命令都能找到明确文档</li><li>各个智能体独立一套自己的profile配置和网关，组合更灵活，backend可本地可远端</li><li>docker运行即用即走，自动mount目录</li><li>自带的出厂设置，新手友好，不需要较多配置就能顺畅用起来<ul><li>自带的安全机制刚好能运行基本功能，不像龙虾不把权限开到最高就没法用，开最高又不安全，对用户上手理解成本完全天差地别。</li></ul></li><li>记忆操作，反应迅速，操作了会显示到聊天中。你可以明确知道她记下来了什么。</li><li>以上优点种种，更让人感觉到这个产品是一个真正的产品，而不是一个黑客松的临时作品。</li></ul><hr><p>当然了，这也一样只是个玩具。</p><p>日常主力还是用Github Copilot写代码，加Claude Code打理琐事。</p><h2 id="终、我对于“龙虾热”的看法：数据是AI-Agent的基石"><a href="#终、我对于“龙虾热”的看法：数据是AI-Agent的基石" class="headerlink" title="终、我对于“龙虾热”的看法：数据是AI Agent的基石"></a>终、我对于“龙虾热”的看法：数据是AI Agent的基石</h2><p>我觉得啊，只有自己本来就已经有数字化资产的，养虾才有意义，知识、经历才能被token化，才能被发掘出新的洞察和价值。<br>同样企业也是基于自己现有数据token化沉淀，才有接入AI的意义。</p><p>他们都是看到来了一个agent，可以怎么玩，而不是本来就有许多数据需要处理。<br>换句话说，本来很多数据的处理都可以用多维表格做的，虾完全可以被多维表格AI和自动化代替。<br>包括玩龙虾玩得比较好的北汽福田，他们其实很多场景可以用多维表格AI+机器人，另一些场景可以用Hi-Agent，只不过他们token管够，额外装了龙虾来覆盖了一部分功能。</p><p>反而我觉得唯独我这种隐私需求下的个人数字分身（基于极其私密的个人经历、每天的公众号、知识阅读积累）才适合用开源、本地部署的agent方案（比如龙虾）。<br>我本身没有龙虾的时候已经有一套数字沉淀的体系了。<br>我的Agent部署在本地，才能完全100%可控，记忆、技能、MCP、接管我的浏览器，完全和我共享经历、经验，共同成长。我的家人和朋友可以在飞书上直接跟我的分身对话。<br>就算哪天龙虾没了，我的数字实体沉淀在文档库里，永远都不会被云服务、社会和资本形势影响。</p>]]></content>
    
    
    <summary type="html">hermes比起龙虾的优点有： 模型报错会输出到控制台。网关有日志可查，关键是我知道在哪里查。文档完善，虽然没翻译中文，但是人家文档全啊，任何问题、命令都能找到明确文档。各个智能体独立一套自己的profile配置和网关，组合更灵活，backend可本地可远端。docker运行即用即走，自动mount目录。自带的出厂设置，新手友好，不需要较多配置就能顺畅用起来。自带的安全机制刚好能运行基本功能，不像龙虾不把权限开到最高就没法用，开最高又不安全，对用户上手理解成本完全天差地别。；记忆操作，反应迅速，操作了会显示到聊天中。你可以明确知道她记下来了什么。</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="ClaudeCode" scheme="https://flashj.cn/tags/ClaudeCode/"/>
    
    <category term="OpenClaw" scheme="https://flashj.cn/tags/OpenClaw/"/>
    
    <category term="工具" scheme="https://flashj.cn/tags/%E5%B7%A5%E5%85%B7/"/>
    
    <category term="MCP" scheme="https://flashj.cn/tags/MCP/"/>
    
    <category term="AI智能体" scheme="https://flashj.cn/tags/AI%E6%99%BA%E8%83%BD%E4%BD%93/"/>
    
    <category term="HermesAgent" scheme="https://flashj.cn/tags/HermesAgent/"/>
    
    <category term="飞书集成" scheme="https://flashj.cn/tags/%E9%A3%9E%E4%B9%A6%E9%9B%86%E6%88%90/"/>
    
    <category term="Docker部署" scheme="https://flashj.cn/tags/Docker%E9%83%A8%E7%BD%B2/"/>
    
    <category term="多Agent" scheme="https://flashj.cn/tags/%E5%A4%9AAgent/"/>
    
    <category term="AI伙伴" scheme="https://flashj.cn/tags/AI%E4%BC%99%E4%BC%B4/"/>
    
    <category term="个人助理" scheme="https://flashj.cn/tags/%E4%B8%AA%E4%BA%BA%E5%8A%A9%E7%90%86/"/>
    
  </entry>
  
  <entry>
    <title>让Claude Code开口说话：这款音效插件让我把编程玩成了游戏</title>
    <link href="https://flashj.cn/claude-code-peon-ping-sound-notification.html"/>
    <id>https://flashj.cn/claude-code-peon-ping-sound-notification.html</id>
    <published>2026-04-10T00:46:00.000Z</published>
    <updated>2026-04-10T01:52:11.549Z</updated>
    
    <content type="html"><![CDATA[<h1 id="让Claude-Code开口说话：这款音效插件让我把编程玩成了游戏"><a href="#让Claude-Code开口说话：这款音效插件让我把编程玩成了游戏" class="headerlink" title="让Claude Code开口说话：这款音效插件让我把编程玩成了游戏"></a>让Claude Code开口说话：这款音效插件让我把编程玩成了游戏</h1><p>说实话，用Claude Code写代码已经够爽了，但有一个痛点一直困扰着我——</p><p><strong>我得时时刻刻盯着终端。</strong></p><p>任务跑着跑着，不知道什么时候该点”允许”，不知道什么时候它悄悄完成了。切到浏览器看文档回来，发现终端卡在某个授权确认那里等了五分钟；或者一个长任务跑完了，你还在傻等，桌面却早已安静如死鱼。</p><p>直到我装了 <strong>peon-ping</strong>。</p><hr><h2 id="它是什么"><a href="#它是什么" class="headerlink" title="它是什么"></a>它是什么</h2><p>peon-ping 是一款给 AI 编程助手加音效通知的工具，支持 Claude Code、Cursor、Codex 等主流工具。它的核心功能很简单：</p><ul><li><strong>任务完成时</strong>：播放音效通知你</li><li><strong>需要授权时</strong>：播放提示音叫你回来</li><li><strong>出错时</strong>：播放警告音效</li></ul><p>但它不是普通的”叮”一声——它背后接了 <strong>160+ 音效包</strong>，都是来自游戏角色的原声。</p><p>你可以让 GLaDOS 吐槽你代码写得烂，可以用星际争霸的人族单位播报”任务完成”，也可以用军团战争的地精说”你的命令我收到了”。</p><p><strong>从此，终端不再沉默。</strong></p><hr><h2 id="为什么我强推-Mambo-Pack"><a href="#为什么我强推-Mambo-Pack" class="headerlink" title="为什么我强推 Mambo Pack"></a>为什么我强推 Mambo Pack</h2><p>音效包我试了很多，最终稳定在 <strong>Mambo</strong>，两个字：<strong>灵动</strong>。</p><p>Mambo 的音效节奏感强、音色清脆，播报信息清晰不拖沓。不管是”任务完成”还是”等待授权”，音效时长刚好——不会太短以至于你没听到，也不会太长打断思路。</p><p>用它之后我才发现，之前那种”切出去就焦虑”的心态消失了。因为你知道：<strong>有什么事，终端会叫你的。</strong></p><p>我目前在用五套音效组合：</p><ul><li><strong>Mambo Pack</strong> ——主力通知音效</li><li><strong>命令与征服：将军音效包</strong> ——梦回当年在学校时<a href="https://flashj.cn/cnc-general-screen-shot.html">玩游戏时光</a></li><li><strong>星穹铁道 Kafka 音效包</strong> ——特定场景的趣味点缀</li><li><strong>星际争霸音效包</strong> ——完成重要里程碑时的仪式感</li><li><strong>王者荣耀音效包</strong> ——音效特别多，不容易重复</li></ul><p>切换起来一行命令搞定，用了就回不去。</p><hr><h2 id="安装配置有多简单"><a href="#安装配置有多简单" class="headerlink" title="安装配置有多简单"></a>安装配置有多简单</h2><p><strong>第一步：安装 peon-ping</strong></p><p>去官网直接选择你要的主题包，然后用官网生成的命令一键安装。比如：</p><pre><code class="language-bash">curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/install.sh | bash -s -- --packs=ccg_china_dozer,glados,honor_of_kings,mambo_pack,peasant,peon,sc2_stetmann_zh,sc_battlecruiser,sc_kerrigan,starrail-kafka-peon-pack</code></pre><p>或者</p><pre><code class="language-bash">brew install PeonPing/tap/peon-ping &amp;&amp; peon-ping-setup --packs=ccg_china_dozer,glados,honor_of_kings,mambo_pack,peasant,peon,sc2_stetmann_zh,sc_battlecruiser,sc_kerrigan,starrail-kafka-peon-pack</code></pre><p><strong>第二步：配置 Claude Code</strong></p><p>在 <code>~/.claude/hooks/peon-ping/config.json</code> 中配置自己的喜好：</p><pre><code class="language-json">&#123;  &quot;default_pack&quot;: &quot;mambo_pack&quot;,  &quot;volume&quot;: 1.0,  &quot;enabled&quot;: true,  &quot;desktop_notifications&quot;: false,  &quot;categories&quot;: &#123;    &quot;session.start&quot;: true,    &quot;task.acknowledge&quot;: true,    &quot;task.complete&quot;: true,    &quot;task.error&quot;: true,    &quot;input.required&quot;: true,    &quot;resource.limit&quot;: true,    &quot;user.spam&quot;: true  &#125;  //...&#125;</code></pre><p><strong>第三步：启动 Claude Code，直接开玩</strong></p><p>没有第四步了。装完即用，零学习成本。</p><hr><h2 id="把编程变成一种体验"><a href="#把编程变成一种体验" class="headerlink" title="把编程变成一种体验"></a>把编程变成一种体验</h2><p>peon-ping 解决的其实不是效率问题——它解决的是<strong>体验问题</strong>。</p><p>当终端开始”说话”，当你听见熟悉的游戏音效，当你不需要再焦虑地盯着屏幕，编程的节奏感就变了。它变得更像一场对话，而不是你单方面对着黑洞敲键盘。</p><p><strong>工具不只是工具，它还可以是你的游戏手柄。</strong></p><hr><p><strong>相关资源：</strong></p><ul><li>音效包目录：<a href="https://openpeon.com/packs">https://openpeon.com/packs</a></li><li>peon-ping 官网：<a href="https://www.peonping.com/">https://www.peonping.com</a></li></ul>]]></content>
    
    
    <summary type="html">说实话，用Claude Code写代码已经够爽了，但有一个痛点一直困扰着我——我得时时刻刻盯着终端。</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="Claude Code" scheme="https://flashj.cn/tags/Claude-Code/"/>
    
    <category term="peon-ping" scheme="https://flashj.cn/tags/peon-ping/"/>
    
    <category term="工具软件" scheme="https://flashj.cn/tags/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
  </entry>
  
  <entry>
    <title>OpenClaw Browser 浏览器配置指南</title>
    <link href="https://flashj.cn/openclaw-browser-config.html"/>
    <id>https://flashj.cn/openclaw-browser-config.html</id>
    <published>2026-04-07T15:00:00.000Z</published>
    <updated>2026-04-08T01:06:29.475Z</updated>
    
    <content type="html"><![CDATA[<h1 id="OpenClaw-Browser-浏览器配置指南"><a href="#OpenClaw-Browser-浏览器配置指南" class="headerlink" title="OpenClaw Browser 浏览器配置指南"></a>OpenClaw Browser 浏览器配置指南</h1><h2 id="三种-Browser-Profile-类型"><a href="#三种-Browser-Profile-类型" class="headerlink" title="三种 Browser Profile 类型"></a>三种 Browser Profile 类型</h2><table><thead><tr><th>类型</th><th>说明</th><th>配置方式</th></tr></thead><tbody><tr><td><strong>openclaw-managed</strong></td><td>独立的 Chromium 实例，有自己的 user data dir + CDP 端口</td><td><code>cdpPort: 18800</code> 等</td></tr><tr><td><strong>remote</strong></td><td>连接远程 CDP URL（Chromium 浏览器运行在其他机器上）</td><td><code>cdpUrl: &quot;http://192.168.65.254:9222&quot;</code></td></tr><tr><td><strong>existing-session</strong></td><td>接管用户已有的 Chrome Profile，通过 Chrome DevTools MCP auto-connect</td><td><code>driver: &quot;existing-session&quot;</code></td></tr></tbody></table><h3 id="openclaw-managed-示例"><a href="#openclaw-managed-示例" class="headerlink" title="openclaw-managed 示例"></a>openclaw-managed 示例</h3><pre><code class="language-json">&quot;profiles&quot;: &#123;  &quot;openclaw&quot;: &#123; &quot;cdpPort&quot;: 18800, &quot;color&quot;: &quot;#FF4500&quot; &#125;,  &quot;work&quot;: &#123; &quot;cdpPort&quot;: 18801, &quot;color&quot;: &quot;#0066CC&quot; &#125;&#125;</code></pre><p>openclaw 和 work 都是独立、临时、隔离的 profile，<strong>可以直接调起 Chrome，不需要 kill 已有进程</strong>。</p><h3 id="remote-示例"><a href="#remote-示例" class="headerlink" title="remote 示例"></a>remote 示例</h3><pre><code class="language-json">&quot;profiles&quot;: &#123;  &quot;remote&quot;: &#123;    &quot;cdpUrl&quot;: &quot;http://192.168.65.254:9222&quot;,    &quot;color&quot;: &quot;#00AA00&quot;  &#125;&#125;</code></pre><p>适合 Mac Studio 等已运行 Chrome 的机器。</p><h3 id="existing-session-示例（user-profile）"><a href="#existing-session-示例（user-profile）" class="headerlink" title="existing-session 示例（user profile）"></a>existing-session 示例（user profile）</h3><pre><code class="language-json">&quot;profiles&quot;: &#123;  &quot;user&quot;: &#123;    &quot;driver&quot;: &quot;existing-session&quot;,    &quot;attachOnly&quot;: true,    &quot;color&quot;: &quot;#00AA00&quot;  &#125;&#125;</code></pre><p>表示使用 MCP 点过去，需要用户自行开启 Chrome DevTools MCP 的 agent 控制。</p><h2 id="全局配置参数"><a href="#全局配置参数" class="headerlink" title="全局配置参数"></a>全局配置参数</h2><pre><code class="language-json">&quot;browser&quot;: &#123;  &quot;enabled&quot;: true,  &quot;ssrfPolicy&quot;: &#123;    &quot;dangerouslyAllowPrivateNetwork&quot;: true  &#125;,  &quot;remoteCdpTimeoutMs&quot;: 1500,  &quot;remoteCdpHandshakeTimeoutMs&quot;: 3000,  &quot;defaultProfile&quot;: &quot;openclaw&quot;,  &quot;color&quot;: &quot;#FF4500&quot;,  &quot;headless&quot;: false,  &quot;noSandbox&quot;: false,  &quot;attachOnly&quot;: false,  &quot;executablePath&quot;: &quot;/Applications/Google Chrome.app/Contents/MacOS/Google Chrome&quot;,  &quot;profiles&quot;: &#123; ... &#125;&#125;</code></pre><h2 id="给-Agent-开放-Browser-工具权限"><a href="#给-Agent-开放-Browser-工具权限" class="headerlink" title="给 Agent 开放 Browser 工具权限"></a>给 Agent 开放 Browser 工具权限</h2><p>默认 tool 的 profile 是 <code>coding</code>，不会包含 browser。需要单独在 agents 配置里用 <code>alsoAllow</code> 授权：</p><pre><code class="language-json">&quot;agents&quot;: &#123;  &quot;defaults&quot;: &#123;    &quot;workspace&quot;: &quot;/Users/rhett/.openclaw/workspace&quot;,    &quot;model&quot;: &#123; &quot;primary&quot;: &quot;minimax/MiniMax-M2.7&quot; &#125;  &#125;,  &quot;list&quot;: [    &#123;      &quot;id&quot;: &quot;main&quot;,      &quot;tools&quot;: &#123;        &quot;profile&quot;: &quot;full&quot;,        &quot;alsoAllow&quot;: [&quot;browser&quot;]      &#125;    &#125;  ]&#125;</code></pre><p><code>profile: &quot;full&quot;</code> 配合 <code>alsoAllow: [&quot;browser&quot;]</code> 即可让该 agent 调用 browser 工具。</p><h2 id="工具配置名参考"><a href="#工具配置名参考" class="headerlink" title="工具配置名参考"></a>工具配置名参考</h2><p>各工具调用由 plugins.entries 暴露，browser 工具需要 <code>plugins.entries.browser.enabled: true</code>。</p><h2 id="完整配置示例"><a href="#完整配置示例" class="headerlink" title="完整配置示例"></a>完整配置示例</h2><pre><code class="language-json">&#123;  &quot;agents&quot;: &#123;    &quot;defaults&quot;: &#123; ... &#125;,    &quot;list&quot;: [&#123; &quot;id&quot;: &quot;main&quot;, &quot;tools&quot;: &#123; &quot;profile&quot;: &quot;full&quot;, &quot;alsoAllow&quot;: [&quot;browser&quot;] &#125; &#125;]  &#125;,  &quot;browser&quot;: &#123;    &quot;enabled&quot;: true,    &quot;defaultProfile&quot;: &quot;openclaw&quot;,    &quot;executablePath&quot;: &quot;/Applications/Google Chrome.app/Contents/MacOS/Google Chrome&quot;,    &quot;profiles&quot;: &#123;      &quot;openclaw&quot;: &#123; &quot;cdpPort&quot;: 18800, &quot;color&quot;: &quot;#FF4500&quot; &#125;,      &quot;work&quot;: &#123; &quot;cdpPort&quot;: 18801, &quot;color&quot;: &quot;#0066CC&quot; &#125;,      &quot;user&quot;: &#123; &quot;driver&quot;: &quot;existing-session&quot;, &quot;attachOnly&quot;: true, &quot;color&quot;: &quot;#00AA00&quot; &#125;    &#125;  &#125;,  &quot;plugins&quot;: &#123;    &quot;entries&quot;: &#123;      &quot;browser&quot;: &#123; &quot;enabled&quot;: true &#125;    &#125;  &#125;&#125;</code></pre>]]></content>
    
    
    <summary type="html">OpenClaw 浏览器支持三种模式：openclaw-managed（独立实例）、remote（远程CDP）、existing-session（接管用户Chrome）；通过 alsoAllow: [browser] 给 agent 开工具权限</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="OpenClaw" scheme="https://flashj.cn/tags/OpenClaw/"/>
    
    <category term="Browser" scheme="https://flashj.cn/tags/Browser/"/>
    
    <category term="配置" scheme="https://flashj.cn/tags/%E9%85%8D%E7%BD%AE/"/>
    
  </entry>
  
  <entry>
    <title>MSA（Memory Sparse Attention）— 突破 AI 记忆瓶颈的开源方案</title>
    <link href="https://flashj.cn/MSA-MemorySparseAttention.html"/>
    <id>https://flashj.cn/MSA-MemorySparseAttention.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:58:46.350Z</updated>
    
    <content type="html"><![CDATA[<h1 id="MSA（Memory-Sparse-Attention）—-突破-AI-记忆瓶颈的开源方案"><a href="#MSA（Memory-Sparse-Attention）—-突破-AI-记忆瓶颈的开源方案" class="headerlink" title="MSA（Memory Sparse Attention）— 突破 AI 记忆瓶颈的开源方案"></a>MSA（Memory Sparse Attention）— 突破 AI 记忆瓶颈的开源方案</h1><h2 id="核心问题"><a href="#核心问题" class="headerlink" title="核心问题"></a>核心问题</h2><p>当前 AI 模型的记忆能力上限：</p><ul><li>最强大模型有效上下文约 <strong>1M token</strong></li><li>人类一生能存储的信息约 <strong>2-3 亿 token</strong> 量级</li><li>两者相差<strong>两个数量级</strong></li></ul><p>业界两条老路都碰壁：</p><ol><li><strong>拉长 context window</strong> — 计算成本二次方增长，到头了</li><li><strong>外挂 RAG</strong> — 检索和生成割裂，精度有上限</li></ol><h2 id="MSA-是什么"><a href="#MSA-是什么" class="headerlink" title="MSA 是什么"></a>MSA 是什么</h2><p>MSA（Memory Sparse Attention）来自 EverMind 团队（盛大旗下），把记忆<strong>直接嵌入注意力机制本身</strong>，不拉长上下文，不外挂检索。</p><p><strong>一句话理解：</strong> 传统 RAG 是给模型配了一个外置硬盘；MSA 是给模型装了一个原生记忆芯片。</p><ul><li>寻找和调用不再是两个独立步骤，而是整合在同一个神经网络里，端到端完成</li><li>模型自己学会了什么该记、怎么找、怎么用</li><li>即插即用，只需替换标准 Transformer 的 Self-Attention 层</li></ul><h2 id="关键技术细节"><a href="#关键技术细节" class="headerlink" title="关键技术细节"></a>关键技术细节</h2><ol><li><strong>压缩机制</strong>：把 1 亿 token 的存储降到可接受范围</li><li><strong>分层存储</strong>：GPU 放路由索引、CPU 放内容详情，总容量取决于内存而非显存</li><li><strong>稀疏路由</strong>：复杂度从 O(L²) 降到 O(L)</li><li><strong>位置编码</strong>：每篇文档独立编号，训练 64K 就能外推到 100M</li></ol><h2 id="性能表现"><a href="#性能表现" class="headerlink" title="性能表现"></a>性能表现</h2><p>基于 <strong>Qwen3-4B</strong> 构建，159B token 持续预训练：</p><table><thead><tr><th>测试结果</th><th>数据</th></tr></thead><tbody><tr><td>记忆跨度</td><td>从 1 万多 token → <strong>1 亿 token</strong>（近4个数量级）</td></tr><tr><td>质量衰减</td><td>回答质量仅下降 <strong>&lt;9%</strong></td></tr><tr><td>标准问答测试</td><td>40亿参数模型，超越传统 RAG 方案 <strong>16%</strong></td></tr><tr><td>vs 顶级检索器+2350亿参数大模型</td><td><strong>多项测试仍胜出</strong>，参数量差60倍</td></tr></tbody></table><h2 id="硬件门槛"><a href="#硬件门槛" class="headerlink" title="硬件门槛"></a>硬件门槛</h2><p>可直接跑在<strong>两张 A800 显卡</strong>的机器上，不需要集群。中、小团队甚至个人开发者都能用上亿级 token 长期记忆。</p><h2 id="团队背景"><a href="#团队背景" class="headerlink" title="团队背景"></a>团队背景</h2><ul><li>EverMind（盛大旗下）</li><li>之前做过 GAIA 榜单 SOTA 的多 Agent 框架 <strong>Omne</strong>、开源记忆平台 <strong>EverOS</strong></li><li>从立项到论文完成，历时九个多月</li></ul><p><strong>关键洞察：</strong> 模型在「找资料」和「写答案」时需要的信息不同——找资料需要宏观判断，写答案需要微观细节。拆开后各自用专门模块处理，性能质变。</p><h2 id="应用前景"><a href="#应用前景" class="headerlink" title="应用前景"></a>应用前景</h2><ul><li><strong>真正个性化的 AI 助手</strong>：记得饮食偏好、项目进展、家人性格</li><li><strong>AI 教育</strong>：真正个性化，因材施教</li><li><strong>医疗助手</strong>：跟踪完整病史</li><li><strong>企业知识库</strong>：记住十年项目积累</li><li><strong>记忆即服务</strong>：记忆层作为独立可插拔模块，记忆资产不锁定于单一模型</li></ul><h2 id="相关链接"><a href="#相关链接" class="headerlink" title="相关链接"></a>相关链接</h2><ul><li>MSA GitHub：<a href="https://github.com/EverMind-AI/MSA">https://github.com/EverMind-AI/MSA</a></li><li>EverOS GitHub：<a href="https://github.com/EverMind-AI/EverOS">https://github.com/EverMind-AI/EverOS</a></li></ul>]]></content>
    
    
    <summary type="html">MSA 把记忆直接嵌入注意力机制本身，而非外挂检索，实现了端到端的长期记忆能力，突破了传统 RAG 的精度上限和 context window 的计算成本瓶颈</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI记忆" scheme="https://flashj.cn/tags/AI%E8%AE%B0%E5%BF%86/"/>
    
    <category term="Transformer" scheme="https://flashj.cn/tags/Transformer/"/>
    
    <category term="开源" scheme="https://flashj.cn/tags/%E5%BC%80%E6%BA%90/"/>
    
    <category term="MSA" scheme="https://flashj.cn/tags/MSA/"/>
    
    <category term="RAG" scheme="https://flashj.cn/tags/RAG/"/>
    
    <category term="上下文窗口" scheme="https://flashj.cn/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E7%AA%97%E5%8F%A3/"/>
    
  </entry>
  
  <entry>
    <title>Playwright vs CDP 浏览器控制方式对比</title>
    <link href="https://flashj.cn/Playwright-vs-CDP.html"/>
    <id>https://flashj.cn/Playwright-vs-CDP.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:57:07.156Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Playwright-vs-CDP-浏览器控制方式对比"><a href="#Playwright-vs-CDP-浏览器控制方式对比" class="headerlink" title="Playwright vs CDP 浏览器控制方式对比"></a>Playwright vs CDP 浏览器控制方式对比</h1><h2 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h2><p>对于 OpenClaw 来说，Playwright 方式调用浏览器和 RDP（实为 CDP）调用浏览器工具，区别是什么？</p><h2 id="解答"><a href="#解答" class="headerlink" title="解答"></a>解答</h2><h3 id="小概念澄清"><a href="#小概念澄清" class="headerlink" title="小概念澄清"></a>小概念澄清</h3><p>RDP（Remote Desktop Protocol）是 Windows 远程桌面协议，在浏览器控制语境下实际指的是 <strong>CDP（Chrome DevTools Protocol）</strong>，即通过 9222 端口（Remote Debugging Port）进行通信的 Chrome 远程调试协议。</p><h3 id="核心区别"><a href="#核心区别" class="headerlink" title="核心区别"></a>核心区别</h3><h4 id="1-抽象层级与控制粒度"><a href="#1-抽象层级与控制粒度" class="headerlink" title="1. 抽象层级与控制粒度"></a>1. 抽象层级与控制粒度</h4><table><thead><tr><th>方式</th><th>原理</th><th>类比</th></tr></thead><tbody><tr><td><strong>Playwright</strong>（高级封装）</td><td>发送指令如”点击 Login 按钮”，自动寻元素、等待、计算坐标、模拟鼠标</td><td>自动驾驶系统</td></tr><tr><td><strong>CDP</strong>（底层协议）</td><td>直接发送原始 JSON 报文，需先获取 DOM 树找到节点 ID，再发送 Input.dispatchMouseEvent</td><td>直接控制方向盘和油门</td></tr></tbody></table><h4 id="2-对-AI-“视觉”与-DOM-解析的影响（核心差异）"><a href="#2-对-AI-“视觉”与-DOM-解析的影响（核心差异）" class="headerlink" title="2. 对 AI “视觉”与 DOM 解析的影响（核心差异）"></a>2. 对 AI “视觉”与 DOM 解析的影响（核心差异）</h4><ul><li><strong>Playwright 方式</strong>：依赖注入 JavaScript 遍历 DOM 元素计算 Bounding Box，易被复杂 CSS 或 Shadow DOM 阻挡</li><li><strong>CDP 方式</strong>：直接调用 Chrome 底层的 <strong>Accessibility Tree</strong>（无障碍树），精准获取所有可交互元素的坐标和层级，不受前端代码干扰</li></ul><blockquote><p>目前最先进的 Web Agent（如 Claude Computer Use 或基于 MCP 的实现）深度依赖 CDP 获取页面空间信息。</p></blockquote><h4 id="3-浏览器接管与隐蔽性（反爬虫）"><a href="#3-浏览器接管与隐蔽性（反爬虫）" class="headerlink" title="3. 浏览器接管与隐蔽性（反爬虫）"></a>3. 浏览器接管与隐蔽性（反爬虫）</h4><table><thead><tr><th>方式</th><th>特点</th></tr></thead><tbody><tr><td><strong>Playwright</strong></td><td>默认启动纯净新浏览器实例，带 webdriver 标记，易被识别为机器人</td></tr><tr><td><strong>CDP 直连宿主机</strong></td><td>通过 <code>host.docker.internal:9222</code> 连接真实 Chrome Profile，带着长期 Cookie 和正常指纹，隐蔽性极高</td></tr></tbody></table><h4 id="4-运行开销与依赖"><a href="#4-运行开销与依赖" class="headerlink" title="4. 运行开销与依赖"></a>4. 运行开销与依赖</h4><table><thead><tr><th>方式</th><th>资源消耗</th></tr></thead><tbody><tr><td><strong>Playwright</strong></td><td>容器内需安装庞大 Playwright 依赖库及浏览器内核包，容器体积大，内存占用高</td></tr><tr><td><strong>CDP</strong></td><td>仅需轻量级 WebSocket 客户端（如 chrome-devtools-mcp），所有渲染计算在宿主机</td></tr></tbody></table><h2 id="总结对比"><a href="#总结对比" class="headerlink" title="总结对比"></a>总结对比</h2><table><thead><tr><th>比较维度</th><th>Playwright 方式</th><th>CDP 方式（DevTools MCP）</th></tr></thead><tbody><tr><td>工作原理</td><td>高级 API，自动处理等待、查找和点击</td><td>底层 WebSocket，原始 JSON 报文</td></tr><tr><td>适用场景</td><td>固定自动化脚本、后台静默运行</td><td>AI 接管当前屏幕、复杂精准坐标映射任务</td></tr><tr><td>接管现有浏览器</td><td>支持（connectOverCDP），非默认设计</td><td>完美契合，生来为此设计</td></tr><tr><td>容器资源消耗</td><td>高</td><td>极低</td></tr><tr><td>反爬风控风险</td><td>较高（除非专门配置 Stealth）</td><td>较低（借用真实用户指纹）</td></tr></tbody></table><h2 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h2><p>对于 OpenClaw 直接操作宿主机浏览器主 Profile 的场景，<strong>CDP (DevTools MCP) 协议连接 9222 端口是最优选择</strong>：</p><ul><li>完美复用已有 Cookie 实现免登录</li><li>Accessibility Tree 让 AI 更准确理解网页结构</li><li>资源占用极低，隐蔽性最强</li></ul><hr><blockquote><p>本质：Playwright 是封装好的高级工具，CDP 是浏览器底层的”机器语言”。</p></blockquote>]]></content>
    
    
    <summary type="html">Playwright 是封装好的高级工具，CDP 是浏览器底层的&quot;机器语言&quot;。对于 OpenClaw 直接操作宿主机浏览器主 Profile 的场景，CDP (DevTools MCP) 协议连接 9222 端口是最优选择</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="OpenClaw" scheme="https://flashj.cn/tags/OpenClaw/"/>
    
    <category term="浏览器自动化" scheme="https://flashj.cn/tags/%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96/"/>
    
    <category term="Playwright" scheme="https://flashj.cn/tags/Playwright/"/>
    
    <category term="CDP" scheme="https://flashj.cn/tags/CDP/"/>
    
    <category term="DevTools" scheme="https://flashj.cn/tags/DevTools/"/>
    
  </entry>
  
  <entry>
    <title>macOS Chrome Remote Debugging 配置</title>
    <link href="https://flashj.cn/chrome-devtools-mcp-remote-debugging.html"/>
    <id>https://flashj.cn/chrome-devtools-mcp-remote-debugging.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:59:19.417Z</updated>
    
    <content type="html"><![CDATA[<h1 id="macOS-Chrome-Remote-Debugging-配置"><a href="#macOS-Chrome-Remote-Debugging-配置" class="headerlink" title="macOS Chrome Remote Debugging 配置"></a>macOS Chrome Remote Debugging 配置</h1><h2 id="问题背景"><a href="#问题背景" class="headerlink" title="问题背景"></a>问题背景</h2><p>在 macOS 上尝试通过命令行启用 Chrome remote debugging 失败：</p><pre><code class="language-bash">open -a &quot;Google Chrome&quot; --args --remote-debugging-port=9222 --no-first-run --no-default-browser-check</code></pre><p>命令执行完后进程立即退出，<code>lsof -i :9222</code> 没有任何输出，9222 端口无法监听。</p><h2 id="错误做法"><a href="#错误做法" class="headerlink" title="错误做法"></a>错误做法</h2><p>❌ 依赖命令行参数 <code>--remote-debugging-port</code></p><p>macOS 上的 Chrome 不认这些命令行参数来启用 remote debugging。</p><h2 id="正确方法"><a href="#正确方法" class="headerlink" title="正确方法"></a>正确方法</h2><p>✅ 在 Chrome 内部手动开启</p><ol><li>打开 Chrome，访问 <code>chrome://inspect/#remote-debugging</code></li><li>勾选 <strong>“Allow remote debugging for this browser instance”</strong></li><li>之后 Chrome 会在 9222 端口监听，可以正常进行 DevTools MCP 连接</li></ol><h2 id="参考文档"><a href="#参考文档" class="headerlink" title="参考文档"></a>参考文档</h2><ul><li><a href="https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session?hl=zh-cn#step_2_configure_chrome_devtools_mcp_server_to_automatically_connect_to_a_running_chrome_instance">Chrome DevTools MCP 官方文档</a></li></ul><h2 id="关键点"><a href="#关键点" class="headerlink" title="关键点"></a>关键点</h2><p>macOS 的 Chrome 安全机制决定了 remote debugging 必须在应用内部由用户主动授权，命令行参数无法绕过这个限制。</p>]]></content>
    
    
    <summary type="html">macOS 上 Chrome remote debugging 需在 chrome://inspect/#remote-debugging 手动勾选开启，而非依赖命令行参数</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="DevTools" scheme="https://flashj.cn/tags/DevTools/"/>
    
    <category term="Chrome" scheme="https://flashj.cn/tags/Chrome/"/>
    
    <category term="MCP" scheme="https://flashj.cn/tags/MCP/"/>
    
    <category term="macOS" scheme="https://flashj.cn/tags/macOS/"/>
    
    <category term="调试" scheme="https://flashj.cn/tags/%E8%B0%83%E8%AF%95/"/>
    
  </entry>
  
  <entry>
    <title>macOS Chrome 远程调试端口 9222 启动问题与最终解决方案</title>
    <link href="https://flashj.cn/chrome-remote-debugging-port-9222-macos-solution.html"/>
    <id>https://flashj.cn/chrome-remote-debugging-port-9222-macos-solution.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:57:46.092Z</updated>
    
    <content type="html"><![CDATA[<h1 id="macOS-Chrome-远程调试端口-9222-启动问题与最终解决方案"><a href="#macOS-Chrome-远程调试端口-9222-启动问题与最终解决方案" class="headerlink" title="macOS Chrome 远程调试端口 9222 启动问题与最终解决方案"></a>macOS Chrome 远程调试端口 9222 启动问题与最终解决方案</h1><h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>在 macOS 上通过命令行启动 Chrome 并开启 9222 远程调试端口时，遇到以下问题：</p><ol><li><code>chrome://inspect/#remote-debugging</code> 显示 <strong>“Server running at: starting…”</strong> 状态，无法真正连接</li><li>命令行报错：<strong>“DevTools remote debugging requires a non-default data directory. Specify this using –user-data-dir.”</strong></li></ol><h2 id="问题根源分析"><a href="#问题根源分析" class="headerlink" title="问题根源分析"></a>问题根源分析</h2><h3 id="根源一：SingletonLock-文件死锁"><a href="#根源一：SingletonLock-文件死锁" class="headerlink" title="根源一：SingletonLock 文件死锁"></a>根源一：SingletonLock 文件死锁</h3><p>Chrome 为防止多实例同时修改同一用户数据目录，会在 Profile 目录下创建排他锁文件：</p><table><thead><tr><th>文件</th><th>作用</th></tr></thead><tbody><tr><td><code>SingletonLock</code></td><td>主锁，标识是否有进程正在使用该目录</td></tr><tr><td><code>SingletonSocket</code></td><td>Socket 通信锁</td></tr><tr><td><code>SingletonCookie</code></td><td>Cookie 锁</td></tr></tbody></table><ul><li><strong>正常退出</strong>（Cmd+Q 或 <code>kill</code>）：Chrome 会主动清理这些锁文件</li><li><strong>强制退出</strong>（<code>kill -9</code> 或 <code>pkill -9</code>）：进程被强杀，来不及清理 → 下次启动时检测到锁文件残留，误以为有其他进程在使用目录，将 9222 端口挂起</li></ul><h3 id="根源二：Chrome-安全限制（新版-Chrome）"><a href="#根源二：Chrome-安全限制（新版-Chrome）" class="headerlink" title="根源二：Chrome 安全限制（新版 Chrome）"></a>根源二：Chrome 安全限制（新版 Chrome）</h3><p><strong>错误信息</strong>：<code>DevTools remote debugging requires a non-default data directory</code></p><p>新版 Chrome（约 2024+）出于安全考虑，<strong>禁止在默认用户目录（Default Profile）上开启 9222 远程调试端口</strong>。原因：</p><ul><li>如果允许，任意本地脚本即可通过 CDP 协议接管浏览器</li><li>可以静默读取密码、操作 MetaMask 钱包、获取登录 Cookie</li></ul><h3 id="根源三：混合问题"><a href="#根源三：混合问题" class="headerlink" title="根源三：混合问题"></a>根源三：混合问题</h3><p>用户使用了 <code>--profile-directory=&quot;Default&quot;</code> 但未指定 <code>--user-data-dir</code>，导致 Chrome 尝试连接到已运行的默认 Chrome 主进程，端口被挂起。</p><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><h3 id="方案-A：直接使用非默认目录（最简单）"><a href="#方案-A：直接使用非默认目录（最简单）" class="headerlink" title="方案 A：直接使用非默认目录（最简单）"></a>方案 A：直接使用非默认目录（最简单）</h3><pre><code class="language-bash">/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \  --remote-debugging-port=9222 \  --remote-allow-origins=&quot;*&quot; \  --user-data-dir=&quot;$HOME/chrome_dev_data&quot; \  --no-first-run</code></pre><h3 id="方案-B：克隆默认-Profile（一键启动脚本，推荐）"><a href="#方案-B：克隆默认-Profile（一键启动脚本，推荐）" class="headerlink" title="方案 B：克隆默认 Profile（一键启动脚本，推荐）"></a>方案 B：克隆默认 Profile（一键启动脚本，推荐）</h3><p>如果需要保留登录状态、插件等，使用 rsync 增量同步默认配置到专用调试目录。</p><h4 id="第一步：创建-Bash-脚本-debug-chrome-sh"><a href="#第一步：创建-Bash-脚本-debug-chrome-sh" class="headerlink" title="第一步：创建 Bash 脚本 debug_chrome.sh"></a>第一步：创建 Bash 脚本 <code>debug_chrome.sh</code></h4><pre><code class="language-bash">#!/bin/bashSOURCE_DIR=&quot;$HOME/Library/Application Support/Google/Chrome/Default&quot;TARGET_DIR=&quot;$HOME/chrome_debug_profile&quot;echo &quot;正在优雅退出 Google Chrome...&quot;# 使用 AppleScript 优雅退出，自动清理 SingletonLockosascript -e &#39;quit app &quot;Google Chrome&quot;&#39;# 等待进程完全清理while pgrep -x &quot;Google Chrome&quot; &gt; /dev/null; do  sleep 1doneecho &quot;正在同步配置到调试目录...&quot;# rsync 增量同步，排除无用缓存，首次慢后续秒级完成rsync -a --delete \  --exclude &#39;Cache&#39; \  --exclude &#39;Code Cache&#39; \  --exclude &#39;DawnCache&#39; \  --exclude &#39;GPUCache&#39; \  --exclude &#39;Singleton*&#39; \  &quot;$SOURCE_DIR/&quot; &quot;$TARGET_DIR/&quot;echo &quot;正在启动 Chrome 调试模式...&quot;# 后台静默启动nohup /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \  --remote-debugging-port=9222 \  --remote-allow-origins=&quot;*&quot; \  --user-data-dir=&quot;$TARGET_DIR&quot; \  --no-first-run &gt; /dev/null 2&gt;&amp;1 &amp;echo &quot;✅ 启动成功！可以连接 9222 端口了。&quot;</code></pre><h4 id="第二步：封装为-Mac-一键启动-App（Automator）"><a href="#第二步：封装为-Mac-一键启动-App（Automator）" class="headerlink" title="第二步：封装为 Mac 一键启动 App（Automator）"></a>第二步：封装为 Mac 一键启动 App（Automator）</h4><ol><li>打开「自动操作」(Automator) → 新建「应用程序」</li><li>搜索「运行 Shell 脚本」，拖入右侧工作区</li><li>粘贴上述 Bash 脚本</li><li><code>Command + S</code> 保存为 <code>Chrome Debug.app</code>，放到「应用程序」文件夹</li><li>之后只需双击 <code>Chrome Debug.app</code> 即可一键启动</li></ol><h4 id="脚本优势"><a href="#脚本优势" class="headerlink" title="脚本优势"></a>脚本优势</h4><ul><li><strong>AppleScript 优雅退出</strong> → 避免产生幽灵锁文件</li><li><strong>rsync 增量同步</strong> → 首次同步后每次秒级完成，排除了臃肿的缓存文件夹</li><li><strong>隔离环境</strong> → 调试环境折腾不污染日常上网记录</li><li><strong>一键启动</strong> → 通过 Automator 封装为 App，放在 Dock 或用快捷键唤起</li></ul><h2 id="排查命令"><a href="#排查命令" class="headerlink" title="排查命令"></a>排查命令</h2><pre><code class="language-bash"># 检查 9222 端口是否被监听lsof -i tcp:9222# 检查是否有残留 Chrome Helper 进程ps aux | grep -i &quot;Google Chrome&quot;# 手动清理锁文件（如果 AppleScript 无法自动清理）rm -f ~/Library/Application\ Support/Google/Chrome/SingletonLockrm -f ~/Library/Application\ Support/Google/Chrome/SingletonSocketrm -f ~/Library/Application\ Support/Google/Chrome/SingletonCookie</code></pre><h2 id="关键教训"><a href="#关键教训" class="headerlink" title="关键教训"></a>关键教训</h2><table><thead><tr><th>操作</th><th>结果</th></tr></thead><tbody><tr><td><code>kill -9</code> &#x2F; <code>pkill -9</code></td><td>❌ 进程被强杀，锁文件残留 → starting…</td></tr><tr><td><code>kill</code> &#x2F; <code>pkill -15</code></td><td>✅ 正常退出，锁文件自动清理</td></tr><tr><td>AppleScript <code>quit app</code></td><td>✅ 最优雅的退出方式</td></tr><tr><td><code>--user-data-dir</code> 未指定 + <code>--profile-directory=&quot;Default&quot;</code></td><td>❌ Chrome 安全限制拒绝调试</td></tr><tr><td>使用独立 <code>--user-data-dir</code></td><td>✅ 绕过安全限制</td></tr></tbody></table><hr><blockquote><p><strong>核心结论</strong>：新版 Chrome 强制要求 <code>--user-data-dir</code> 指向非默认目录。结合优雅退出 + rsync 增量同步 + Automator 一键封装，是 macOS 上最优雅的 Chrome CDP 调试启动方案。</p></blockquote>]]></content>
    
    
    <summary type="html">解决 macOS Chrome 远程调试端口 9222 问题：SingletonLock 死锁、Chrome 安全限制、rsync 同步 + Automator 一键启动方案</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="OpenClaw" scheme="https://flashj.cn/tags/OpenClaw/"/>
    
    <category term="CDP" scheme="https://flashj.cn/tags/CDP/"/>
    
    <category term="Chrome" scheme="https://flashj.cn/tags/Chrome/"/>
    
    <category term="macOS" scheme="https://flashj.cn/tags/macOS/"/>
    
    <category term="远程调试" scheme="https://flashj.cn/tags/%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95/"/>
    
    <category term="错误备忘" scheme="https://flashj.cn/tags/%E9%94%99%E8%AF%AF%E5%A4%87%E5%BF%98/"/>
    
  </entry>
  
  <entry>
    <title>Harness Engineering 读后感：AI工程的第三次范式转移</title>
    <link href="https://flashj.cn/harness-engineering.html"/>
    <id>https://flashj.cn/harness-engineering.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:59:40.835Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Harness-Engineering-读后感：AI工程的第三次范式转移"><a href="#Harness-Engineering-读后感：AI工程的第三次范式转移" class="headerlink" title="Harness Engineering 读后感：AI工程的第三次范式转移"></a>Harness Engineering 读后感：AI工程的第三次范式转移</h1><h2 id="一句话总结"><a href="#一句话总结" class="headerlink" title="一句话总结"></a>一句话总结</h2><blockquote><p><strong>Harness Engineering &#x3D; 为 Agent 构建「办公室」，而不是继续优化「邮件措辞」</strong></p></blockquote><hr><h2 id="背景：从三代工程范式看演变"><a href="#背景：从三代工程范式看演变" class="headerlink" title="背景：从三代工程范式看演变"></a>背景：从三代工程范式看演变</h2><table><thead><tr><th>时代</th><th>核心问题</th><th>关注点</th><th>类比</th></tr></thead><tbody><tr><td>Prompt Engineering (2022-2024)</td><td>怎么跟模型说话</td><td>措辞、格式、few-shot、CoT</td><td>写一封完美的邮件</td></tr><tr><td>Context Engineering (2025)</td><td>怎么把关键信息摆到模型眼前</td><td>RAG、对话历史、工具定义</td><td>给邮件附上所有需要的附件</td></tr><tr><td><strong>Harness Engineering (2026)</strong></td><td>怎么让模型在真实环境里稳定做事</td><td>工作流、约束、反馈循环、工具链</td><td><strong>架构整个办公室</strong></td></tr></tbody></table><p>三代并不是取代关系，而是抽象层次一层层向外扩展。任务越接近真实生产，后两者的重要性就越高。</p><hr><h2 id="核心论点：Agents-aren’t-hard-the-Harness-is-hard"><a href="#核心论点：Agents-aren’t-hard-the-Harness-is-hard" class="headerlink" title="核心论点：Agents aren’t hard; the Harness is hard"></a>核心论点：Agents aren’t hard; the Harness is hard</h2><p>这是 OpenAI Codex 团队 Ryan Lopopolo 在用 GPT-5 agent 构建了 100 万行代码、1500 个 PR 之后的真实总结。</p><p><strong>实验数据：</strong></p><ul><li>同一模型、同一数据、同一 prompt，仅改变运行时环境（shell），编程 benchmark 成功率从 42% 跳到 78%</li><li>Anthropic 的实验：简单 prompt-and-run 方案产出 broken product（$9），结构化的迭代管理环境产出可用游戏（$200）</li></ul><p><strong>Cost difference is irrelevant. Capability difference is everything.</strong></p><hr><h2 id="作为-Agent-开发工程师的感悟"><a href="#作为-Agent-开发工程师的感悟" class="headerlink" title="作为 Agent 开发工程师的感悟"></a>作为 Agent 开发工程师的感悟</h2><h3 id="1-我们以前在优化错误的层级"><a href="#1-我们以前在优化错误的层级" class="headerlink" title="1. 我们以前在优化错误的层级"></a>1. 我们以前在优化错误的层级</h3><p>花了大量时间在 prompt 模板、few-shot 示例、角色扮演上。但真正决定成败的，是** agent 运行环境的设计**。</p><p>做过 agent 开发的人都有类似经历：demo 惊艳，production 崩盘。原因是 demo 是「完美条件的单次交互」，而生产是「真实环境的持续运转」。</p><h3 id="2-约束-paradoxically-增加生产力"><a href="#2-约束-paradoxically-增加生产力" class="headerlink" title="2. 约束 paradoxically 增加生产力"></a>2. 约束 paradoxically 增加生产力</h3><p>Cursor 团队在推进 “Self-Driving Codebases” 时发现：当模型能力足够强时，它会在死胡同和 nonsense 方案上浪费大量 token。一个设计良好的 Harness 通过提供清晰的边界和有限的高质量工具，<strong>强制 agent 更快收敛到正确答案</strong>。</p><blockquote><p>你不是在限制 agent，你是在给它一条通往成功的窄路。</p></blockquote><h3 id="3-架构约束必须用-linter-强制，而不是用-prompt-请求"><a href="#3-架构约束必须用-linter-强制，而不是用-prompt-请求" class="headerlink" title="3. 架构约束必须用 linter 强制，而不是用 prompt 请求"></a>3. 架构约束必须用 linter 强制，而不是用 prompt 请求</h3><p>OpenAI 团队学到的硬规则之一：** Architectural constraints are enforced by linters, not prompts.**</p><p>不要跟 agent 说「请遵循单例模式」，而是构建一个 linter 来强制单例模式。不要请求，请约束。</p><h3 id="4-Agent-失败时，Harness-才是问题所在"><a href="#4-Agent-失败时，Harness-才是问题所在" class="headerlink" title="4. Agent 失败时，Harness 才是问题所在"></a>4. Agent 失败时，Harness 才是问题所在</h3><p>OpenAI 团队有一条原则：<strong>If a PR requires significant human intervention, the agent is not the problem — the Harness is.</strong></p><p>这是思维模式的核心转变。当 agent 犯错时，我们不是去批评它，而是去改进它的运行环境，让这个错误再也不可能发生。这正是 Mitchell Hashimoto 对 Harness Engineering 的定义：</p><blockquote><p>“Every time you discover an agent has made a mistake, you take the time to engineer a solution so that it can never make that mistake again.”</p></blockquote><h3 id="5-Anthropic-的关键发现：模型无法可靠评估自己的输出"><a href="#5-Anthropic-的关键发现：模型无法可靠评估自己的输出" class="headerlink" title="5. Anthropic 的关键发现：模型无法可靠评估自己的输出"></a>5. Anthropic 的关键发现：模型无法可靠评估自己的输出</h3><p>这直接指向了 GAN 式的架构：<strong>分离的 Generator 和 Evaluator agent</strong>。这也是为什么可靠的 Harness 需要独立的验证层。</p><hr><h2 id="实践要点：Harness-的五大支柱（来自-OpenAI-Stripe）"><a href="#实践要点：Harness-的五大支柱（来自-OpenAI-Stripe）" class="headerlink" title="实践要点：Harness 的五大支柱（来自 OpenAI + Stripe）"></a>实践要点：Harness 的五大支柱（来自 OpenAI + Stripe）</h2><ol><li><strong>单一真实来源</strong>：repository 是 agent 唯一的信息源，不假设任何外部知识</li><li><strong>Agent-readable 代码</strong>：不仅是人类可读，还需要能被 agent 理解（清晰的注释、结构）</li><li><strong>Linter 强制架构约束</strong>：规则不是 prompt，是代码</li><li><strong>增量授权</strong>：Harness 必须有阶段和关卡，agent 不能一上来就拥有全部权限</li><li><strong>Two-strike 规则</strong>（Stripe）：agent 第一次修复失败，立即 escalation 给人类，不浪费循环</li></ol><hr><h2 id="对我当前项目的启发"><a href="#对我当前项目的启发" class="headerlink" title="对我当前项目的启发"></a>对我当前项目的启发</h2><p>结合我们的 <strong>iUX 迪元健康</strong>项目：</p><ul><li><strong>工具调用层</strong>：需要更严格的 tool definition 和 error handling harness</li><li><strong>多步骤工作流</strong>：需要引入阶段性 gate 和反馈循环</li><li><strong>代码生成场景</strong>：agent 输出的代码需要有 linter 强制约束，而不是靠 prompt 提醒</li></ul><p>Harness Engineering 不是一个工具，是一种<strong>工程哲学</strong>的升级——从「调教模型」到「构建系统」。</p><hr><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul><li><a href="https://www.bilibili.com/video/BV1Zk9FBwELs/">B站视频：Harness Engineering 到底是什么</a></li><li><a href="https://epsilla.com/blogs/harness-engineering-evolution-prompt-context-autonomous-agents">Epsilla: The Third Evolution</a></li><li><a href="https://zhuanlan.zhihu.com/p/2015142041282163260">知乎：从 Prompt 到 Context 到 Harness</a></li><li><a href="https://juejin.cn/post/7622214939839397914">掘金：从 Prompt 工程师到 Harness 工程师</a></li></ul>]]></content>
    
    
    <summary type="html">Harness Engineering = 为 Agent 构建「办公室」，而不是继续优化「邮件措辞」。从「写好指令」到「构建环境」，让 agent 在真实生产环境中稳定可靠地运转</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="Harness Engineering" scheme="https://flashj.cn/tags/Harness-Engineering/"/>
    
    <category term="Agent开发" scheme="https://flashj.cn/tags/Agent%E5%BC%80%E5%8F%91/"/>
    
    <category term="AI工程" scheme="https://flashj.cn/tags/AI%E5%B7%A5%E7%A8%8B/"/>
    
    <category term="Prompt Engineering" scheme="https://flashj.cn/tags/Prompt-Engineering/"/>
    
    <category term="Context Engineering" scheme="https://flashj.cn/tags/Context-Engineering/"/>
    
  </entry>
  
  <entry>
    <title>Hermes Agent 官方文档解读 vs OpenClaw</title>
    <link href="https://flashj.cn/hermes-agent-vs-openclaw.html"/>
    <id>https://flashj.cn/hermes-agent-vs-openclaw.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:52:46.991Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Hermes-Agent-官方文档解读-vs-OpenClaw"><a href="#Hermes-Agent-官方文档解读-vs-OpenClaw" class="headerlink" title="Hermes Agent 官方文档解读 vs OpenClaw"></a>Hermes Agent 官方文档解读 vs OpenClaw</h1><blockquote><p><strong>重要</strong>：本篇以官方文档为核心，替代之前仅基于视频描述的版本。信息源优先级：官方文档 &gt; 权威分析 &gt; 视频描述。</p></blockquote><hr><h2 id="一、产品定位"><a href="#一、产品定位" class="headerlink" title="一、产品定位"></a>一、产品定位</h2><p><strong>Hermes Agent</strong> 是 <strong>Nous Research</strong>（Hermes-3 &#x2F; Nomos &#x2F; Psyche 模型家族）开发的开源 AI Agent，MIT 协议，2026 年 2 月发布。</p><p>官网：<a href="https://hermes-agent.nousresearch.com/">https://hermes-agent.nousresearch.com/</a><br>GitHub：约 22,000 Stars</p><p><strong>核心理念</strong>：</p><blockquote><p>“It’s not a coding copilot tethered to an IDE or a chatbot wrapper around a single API. It’s an autonomous agent that gets more capable the longer it runs.”</p></blockquote><p><strong>与 OpenClaw 的核心定位差异</strong>：</p><ul><li>OpenClaw &#x3D; <strong>本地优先的 Agent 编排框架</strong>，强项在多渠道集成、团队协作、企业治理</li><li>Hermes Agent &#x3D; <strong>自进化个人操作者</strong>，强项在长期记忆、自动化学技能、用户偏好建模</li></ul><hr><h2 id="二、核心架构（官方）"><a href="#二、核心架构（官方）" class="headerlink" title="二、核心架构（官方）"></a>二、核心架构（官方）</h2><h3 id="代码规模"><a href="#代码规模" class="headerlink" title="代码规模"></a>代码规模</h3><table><thead><tr><th>组件</th><th>文件</th><th>规模</th></tr></thead><tbody><tr><td>AIAgent（对话循环）</td><td>run_agent.py</td><td>~9,200 行</td></tr><tr><td>HermesCLI（交互终端）</td><td>cli.py</td><td>~8,500 行</td></tr><tr><td>Gateway（消息网关）</td><td>gateway&#x2F;run.py</td><td>~5,800 行</td></tr><tr><td>配置命令</td><td>hermes_cli&#x2F;main.py</td><td>~4,200 行</td></tr><tr><td>交互式安装向导</td><td>hermes_cli&#x2F;setup.py</td><td>~3,500 行</td></tr><tr><td>测试套件</td><td>tests&#x2F;</td><td>3,000+ 测试</td></tr></tbody></table><h3 id="6-种终端后端（Terminal-Backends）"><a href="#6-种终端后端（Terminal-Backends）" class="headerlink" title="6 种终端后端（Terminal Backends）"></a>6 种终端后端（Terminal Backends）</h3><table><thead><tr><th>后端</th><th>用途</th></tr></thead><tbody><tr><td>local</td><td>本地机器直接执行</td></tr><tr><td>Docker</td><td>容器化隔离执行</td></tr><tr><td>SSH</td><td>远程服务器</td></tr><tr><td>Daytona</td><td>Serverless 持久化</td></tr><tr><td>Modal</td><td>Serverless 持久化</td></tr><tr><td>Singularity</td><td>HPC 容器</td></tr></tbody></table><p><strong>Serverless 特性</strong>：Daytona 和 Modal 支持休眠——环境空闲时几乎零成本。</p><hr><h2 id="三、记忆系统（官方详解）"><a href="#三、记忆系统（官方详解）" class="headerlink" title="三、记忆系统（官方详解）"></a>三、记忆系统（官方详解）</h2><h3 id="两层记忆文件"><a href="#两层记忆文件" class="headerlink" title="两层记忆文件"></a>两层记忆文件</h3><table><thead><tr><th>文件</th><th>用途</th><th>容量</th></tr></thead><tbody><tr><td><code>MEMORY.md</code></td><td>Agent 的个人笔记：环境事实、约定、学到的教训</td><td>2,200 chars (~800 tokens)</td></tr><tr><td><code>USER.md</code></td><td>用户画像：偏好、沟通风格、期望</td><td>1,375 chars (~500 tokens)</td></tr></tbody></table><h3 id="技能系统（Self-Improving-Skills）"><a href="#技能系统（Self-Improving-Skills）" class="headerlink" title="技能系统（Self-Improving Skills）"></a>技能系统（Self-Improving Skills）</h3><p>Skills 是按需加载的知识文档，遵循 <strong>渐进式披露（Progressive Disclosure）</strong> 模式。Agent 会在以下时机自动创建技能：</p><ul><li>完成复杂任务（5+ 工具调用）后</li><li>遇到错误或死胡同并找到可行路径后</li><li>用户纠正了 Agent 的方法后</li><li>发现非平凡工作流时</li></ul><hr><h2 id="四、MCP（Model-Context-Protocol）集成"><a href="#四、MCP（Model-Context-Protocol）集成" class="headerlink" title="四、MCP（Model Context Protocol）集成"></a>四、MCP（Model Context Protocol）集成</h2><h3 id="支持两种-MCP-服务器"><a href="#支持两种-MCP-服务器" class="headerlink" title="支持两种 MCP 服务器"></a>支持两种 MCP 服务器</h3><table><thead><tr><th>类型</th><th>配置方式</th><th>适用场景</th></tr></thead><tbody><tr><td><strong>Stdio</strong>（本地子进程）</td><td><code>command</code> + <code>args</code> + <code>env</code></td><td>本地安装、低延迟</td></tr><tr><td><strong>HTTP</strong>（远程端点）</td><td><code>url</code> + <code>headers</code></td><td>托管服务、组织内部 MCP</td></tr></tbody></table><h3 id="动态工具发现"><a href="#动态工具发现" class="headerlink" title="动态工具发现"></a>动态工具发现</h3><p>MCP 服务器可通过 <code>notifications/tools/list_changed</code> 通知 Hermes 工具列表变化，Hermes 自动重新获取并更新注册表，无需手动 reload。</p><hr><h2 id="五、语音模式（Voice-Mode）"><a href="#五、语音模式（Voice-Mode）" class="headerlink" title="五、语音模式（Voice Mode）"></a>五、语音模式（Voice Mode）</h2><h3 id="三种语音功能"><a href="#三种语音功能" class="headerlink" title="三种语音功能"></a>三种语音功能</h3><table><thead><tr><th>功能</th><th>平台</th><th>说明</th></tr></thead><tbody><tr><td>Interactive Voice</td><td>CLI</td><td>Ctrl+B 录音，语音打断，流式 TTS</td></tr><tr><td>Auto Voice Reply</td><td>Telegram, Discord</td><td>文字回复同时发送语音音频</td></tr><tr><td>Voice Channel</td><td>Discord</td><td>加入 VC，聆听用户发言并语音回复</td></tr></tbody></table><h3 id="本地-STT（零-API-成本）"><a href="#本地-STT（零-API-成本）" class="headerlink" title="本地 STT（零 API 成本）"></a>本地 STT（零 API 成本）</h3><pre><code class="language-bash">pip install faster-whisper  # 免费，运行本地，约 150MB 模型，首次使用自动下载</code></pre><hr><h2 id="六、SOUL-md-人格系统"><a href="#六、SOUL-md-人格系统" class="headerlink" title="六、SOUL.md 人格系统"></a>六、SOUL.md 人格系统</h2><h3 id="SOUL-md-vs-AGENTS-md"><a href="#SOUL-md-vs-AGENTS-md" class="headerlink" title="SOUL.md vs AGENTS.md"></a>SOUL.md vs AGENTS.md</h3><table><thead><tr><th>用途</th><th>SOUL.md</th><th>AGENTS.md</th></tr></thead><tbody><tr><td>身份&#x2F;人格</td><td>✅</td><td>❌</td></tr><tr><td>语气&#x2F;风格</td><td>✅</td><td>❌</td></tr><tr><td>沟通偏好</td><td>✅</td><td>❌</td></tr><tr><td>项目架构</td><td>❌</td><td>✅</td></tr><tr><td>代码约定</td><td>❌</td><td>✅</td></tr><tr><td>工具偏好</td><td>❌</td><td>✅</td></tr><tr><td>仓库特定工作流</td><td>❌</td><td>✅</td></tr></tbody></table><p><strong>判断标准</strong>：如果它应该跟着你到处走 → SOUL.md；如果它属于某个项目 → AGENTS.md</p><hr><h2 id="七、14-消息平台"><a href="#七、14-消息平台" class="headerlink" title="七、14+ 消息平台"></a>七、14+ 消息平台</h2><p><strong>官方支持的平台</strong>（一个 Gateway，统一体验）：</p><p>CLI, Telegram, Discord, Slack, WhatsApp, <strong>Signal</strong>, Matrix, Mattermost, Email, SMS, DingTalk, <strong>Feishu</strong>, WeCom, Home Assistant</p><blockquote><p>Signal 和 Feishu 是 Hermes 独有的差异化渠道。</p></blockquote><hr><h2 id="八、与-OpenClaw-的全面对比"><a href="#八、与-OpenClaw-的全面对比" class="headerlink" title="八、与 OpenClaw 的全面对比"></a>八、与 OpenClaw 的全面对比</h2><h3 id="功能对照表"><a href="#功能对照表" class="headerlink" title="功能对照表"></a>功能对照表</h3><table><thead><tr><th>功能</th><th>Hermes Agent</th><th>OpenClaw</th></tr></thead><tbody><tr><td><strong>记忆系统</strong></td><td>多层（Active + Archive + Honcho），FTS5 检索，~3,300 chars 两文件</td><td>每 Assistant 独立隔离记忆</td></tr><tr><td><strong>技能系统</strong></td><td>47 工具，Agent 自动创建&#x2F;改进技能</td><td>52+ 内置 Skills，文件 precedence</td></tr><tr><td><strong>自进化</strong></td><td>✅ 任务完成自动写 Skill 文件</td><td>❌ 不会自动生成新技能</td></tr><tr><td><strong>用户建模</strong></td><td>Honcho dialectic 用户建模</td><td>❌</td></tr><tr><td><strong>部署后端</strong></td><td>6 种（local&#x2F;Docker&#x2F;SSH&#x2F;Daytona&#x2F;Modal&#x2F;Singularity）</td><td>托管 + 云容器</td></tr><tr><td><strong>Serverless 休眠</strong></td><td>✅ Daytona&#x2F;Modal 空闲零成本</td><td>❌</td></tr><tr><td><strong>渠道数量</strong></td><td><strong>14+</strong>（Signal + Feishu 独有）</td><td>主流消息平台</td></tr><tr><td><strong>模型支持</strong></td><td>200+ via OpenRouter&#x2F;Nous Portal&#x2F;Ollama</td><td>BYOK：Claude&#x2F;GPT&#x2F;Gemini&#x2F;xAI&#x2F;Groq&#x2F;Mistral</td></tr><tr><td><strong>MCP 支持</strong></td><td>✅ 原生 MCP，stdio + HTTP，动态发现</td><td>❌（非原生）</td></tr><tr><td><strong>语音模式</strong></td><td>✅ 本地 STT（零 API 成本），流式 TTS</td><td>❌</td></tr><tr><td><strong>技能格式</strong></td><td>agentskills.io（开放标准）</td><td>专有</td></tr><tr><td><strong>隐私&#x2F;安全</strong></td><td>零遥测，容器沙箱</td><td>Device pairing，Gateway 认证</td></tr><tr><td><strong>RL 训练</strong></td><td>✅ Atropos RL 训练支持</td><td>❌</td></tr><tr><td><strong>批量处理</strong></td><td>✅ Batch trajectory 生成</td><td>❌</td></tr><tr><td><strong>SOUL.md</strong></td><td>✅ 原生人格系统</td><td>类似但非 Slot #1</td></tr></tbody></table><h3 id="互补用法（高级用户）"><a href="#互补用法（高级用户）" class="headerlink" title="互补用法（高级用户）"></a>互补用法（高级用户）</h3><blockquote><p>“Use OpenClaw as the conductor: routing tasks, handling auth, integrating with infra. Use Hermes as the lead specialist: when a task really benefits from long-term memory and learned skills, route it to Hermes via MCP or a custom tool.”</p></blockquote><hr><h2 id="九、适用场景决策树"><a href="#九、适用场景决策树" class="headerlink" title="九、适用场景决策树"></a>九、适用场景决策树</h2><pre><code>需要 AI Agent？├─ 需要多角色团队隔离 + 企业治理 + 5+ 商业渠道│   └─ → OpenClaw（Gateway 架构天生适合）├─ 重复性服务业务（agency/咨询/SaaS ops）│   └─ → Hermes（自动沉淀工作流为技能，越用越强）├─ 需要 Signal 或 Feishu 渠道│   └─ → Hermes（OpenClaw 不支持）├─ 需要本地零成本 STT（语音交互）│   └─ → Hermes（faster-whisper 本地运行，无需 API key）├─ 需要 MCP 外部工具生态（GitHub/数据库/内部 API）│   └─ → Hermes（原生 MCP 支持，动态发现）├─ 已有成熟 OpenClaw 团队基础设施│   └─ → OpenClaw（生态成熟，治理完善）└─ 需要 RL 训练 / 轨迹导出 / 研究工作流    └─ → Hermes（Atropos RL + Batch Runner 内置）</code></pre>]]></content>
    
    
    <summary type="html">Hermes Agent 是 Nous Research 开发的白学元 AI Agent，MIT 协议。核心定位差异：OpenClaw = 本地优先的 Agent 编排框架，Hermes = 自进化个人操作者</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="OpenClaw" scheme="https://flashj.cn/tags/OpenClaw/"/>
    
    <category term="MCP" scheme="https://flashj.cn/tags/MCP/"/>
    
    <category term="AI代理" scheme="https://flashj.cn/tags/AI%E4%BB%A3%E7%90%86/"/>
    
    <category term="Hermes" scheme="https://flashj.cn/tags/Hermes/"/>
    
    <category term="NousResearch" scheme="https://flashj.cn/tags/NousResearch/"/>
    
    <category term="自进化" scheme="https://flashj.cn/tags/%E8%87%AA%E8%BF%9B%E5%8C%96/"/>
    
    <category term="记忆系统" scheme="https://flashj.cn/tags/%E8%AE%B0%E5%BF%86%E7%B3%BB%E7%BB%9F/"/>
    
    <category term="SOUL.md" scheme="https://flashj.cn/tags/SOUL-md/"/>
    
    <category term="语音模式" scheme="https://flashj.cn/tags/%E8%AF%AD%E9%9F%B3%E6%A8%A1%E5%BC%8F/"/>
    
  </entry>
  
  <entry>
    <title>LLM Personal Knowledge Base Pattern (Karpathy)</title>
    <link href="https://flashj.cn/llm-personal-knowledge-base-karpathy.html"/>
    <id>https://flashj.cn/llm-personal-knowledge-base-karpathy.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T00:52:23.454Z</updated>
    
    <content type="html"><![CDATA[<h1 id="LLM-Personal-Knowledge-Base-Pattern"><a href="#LLM-Personal-Knowledge-Base-Pattern" class="headerlink" title="LLM Personal Knowledge Base Pattern"></a>LLM Personal Knowledge Base Pattern</h1><blockquote><p>Andrej Karpathy 提出的 LLM 个人知识库架构思想。</p></blockquote><h2 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h2><p>传统 RAG：上传文档 → 查询时检索相关片段 → LLM 从头推导答案。<strong>每次问题都要重新发现知识，没有积累。</strong></p><p>Karpathy 的方法：<strong>LLM 在摄入时就主动整合知识到持久 wiki</strong>，而非仅做索引。交叉引用、矛盾标记、合成分析在摄入时就完成了，知识随时间复合增长。</p><h2 id="三层架构"><a href="#三层架构" class="headerlink" title="三层架构"></a>三层架构</h2><pre><code>Raw Sources          Wiki              Schema(原始文档)    →    (LLM维护的md)  →   (CLAUDE.md/AGENTS.md)- 不可变                      - LLM 完全拥有      - 指导 LLM 如何- 只读                        - 创建/更新/维护     维护 wiki 的配置- 来源信任                    - 跨引用/一致性      - LLM 遵守的规范</code></pre><h3 id="1-Raw-Sources（原始层）"><a href="#1-Raw-Sources（原始层）" class="headerlink" title="1. Raw Sources（原始层）"></a>1. Raw Sources（原始层）</h3><ul><li>文章、论文、图片、数据文件</li><li><strong>不可变</strong>——LLM 只读取，不修改</li><li>这是你的信任根</li></ul><h3 id="2-Wiki（知识层）"><a href="#2-Wiki（知识层）" class="headerlink" title="2. Wiki（知识层）"></a>2. Wiki（知识层）</h3><ul><li>LLM 生成的 markdown 文件集合</li><li>实体页、概念页、对比页、概述、合成</li><li>LLM 全权拥有此层：创建、更新、交叉引用、维护一致性</li></ul><h3 id="3-Schema（配置层）"><a href="#3-Schema（配置层）" class="headerlink" title="3. Schema（配置层）"></a>3. Schema（配置层）</h3><ul><li>CLAUDE.md &#x2F; AGENTS.md 等</li><li>定义 wiki 结构、规范、工作流</li><li>LLM 据此成为<strong>有纪律的 wiki 维护者</strong>，而非通用聊天机器人</li></ul><h2 id="三个核心操作"><a href="#三个核心操作" class="headerlink" title="三个核心操作"></a>三个核心操作</h2><h3 id="Ingest（摄入）"><a href="#Ingest（摄入）" class="headerlink" title="Ingest（摄入）"></a>Ingest（摄入）</h3><ol><li>把新文档放入原始收集</li><li>告诉 LLM 处理</li><li>LLM 读取文档、与你讨论要点</li><li>写摘要页、更新索引、更新相关实体&#x2F;概念页</li><li>追加日志</li></ol><p><strong>关键：单一文档可能涉及 10-15 个 wiki 页面，而非仅索引存储。</strong></p><h3 id="Query（查询）"><a href="#Query（查询）" class="headerlink" title="Query（查询）"></a>Query（查询）</h3><ol><li>LLM 搜索相关页面、读取、合成答案</li><li>答案可呈现为：md 页面、对比表、幻灯片、图表、canvas</li><li><strong>重要洞察：有价值的答案&#x2F;分析应该存回 wiki</strong>，让探索成果也复合增长</li></ol><h3 id="Lint（检查）"><a href="#Lint（检查）" class="headerlink" title="Lint（检查）"></a>Lint（检查）</h3><p>周期性健康检查：</p><ul><li>页面间矛盾</li><li>被新来源取代的老旧内容</li><li>孤立页面（无入站链接）</li><li>提及但未独立建页的重要概念</li><li>缺失的交叉引用</li><li>数据空白（可搜索补充）</li></ul><h2 id="两个特殊导航文件"><a href="#两个特殊导航文件" class="headerlink" title="两个特殊导航文件"></a>两个特殊导航文件</h2><h3 id="index-md（内容导向）"><a href="#index-md（内容导向）" class="headerlink" title="index.md（内容导向）"></a>index.md（内容导向）</h3><ul><li>wiki 目录：每个页面链接 + 一句话摘要 + 元数据</li><li>按类别组织（实体&#x2F;概念&#x2F;来源等）</li><li><strong>LLM 每次摄入时更新</strong></li><li>查询时 LLM 先读 index 定位相关页面，再深入</li><li>在中等规模（~100来源，数百页面）下效果很好，无需 embedding RAG 基础设施</li></ul><h3 id="log-md（时间导向）"><a href="#log-md（时间导向）" class="headerlink" title="log.md（时间导向）"></a>log.md（时间导向）</h3><ul><li>按时间顺序的追加记录</li><li>记录发生了什么、来源是什么</li><li>不可变，纯粹的时间线</li></ul><h2 id="应用场景"><a href="#应用场景" class="headerlink" title="应用场景"></a>应用场景</h2><table><thead><tr><th>场景</th><th>说明</th></tr></thead><tbody><tr><td>个人成长</td><td>目标&#x2F;健康&#x2F;心理&#x2F;自我提升，累积日记&#x2F;文章&#x2F;笔记</td></tr><tr><td>研究</td><td>数周&#x2F;月深度主题，阅读论文构建综合 wiki</td></tr><tr><td>读书</td><td>按章节归档，建角色&#x2F;主题&#x2F;情节页面，像 Tolkien Gateway 那样个人维护</td></tr><tr><td>团队知识</td><td>内部 wiki，来源包括 Slack&#x2F;会议记录&#x2F;项目文档</td></tr><tr><td>竞品分析&#x2F;尽职调查&#x2F;旅行规划&#x2F;课程笔记</td><td>任何需要时间积累的知识整理</td></tr></tbody></table><h2 id="对比：Wiki-方式-vs-传统-RAG"><a href="#对比：Wiki-方式-vs-传统-RAG" class="headerlink" title="对比：Wiki 方式 vs 传统 RAG"></a>对比：Wiki 方式 vs 传统 RAG</h2><table><thead><tr><th></th><th>传统 RAG</th><th>LLM Wiki（Karpathy）</th></tr></thead><tbody><tr><td>知识处理</td><td>查询时重新推导</td><td>摄入时编译，持久化</td></tr><tr><td>交叉引用</td><td>无，需要 LLM 每次推理</td><td>预建，随增长复合</td></tr><tr><td>矛盾处理</td><td>无</td><td>主动标记</td></tr><tr><td>知识复合</td><td>否，每次独立</td><td>是，随来源增加而增长</td></tr><tr><td>适用规模</td><td>大量文档快速检索</td><td>中等规模深度积累</td></tr></tbody></table><h2 id="炸弹的现有实践对照"><a href="#炸弹的现有实践对照" class="headerlink" title="炸弹的现有实践对照"></a>炸弹的现有实践对照</h2><p>炸弹的 Obsidian 日记库 + 知识库实际上已经在践行类似思路：</p><ul><li>Raw Sources → <code>/mnt/obsidian</code> 日记库（不可变原始记录）</li><li>Wiki → <code>workspace/知识库/</code>（LLM 帮忙整理和维护的结构化文档）</li><li>Schema → <code>SOUL.md</code> + <code>AGENTS.md</code>（指导 LLM 如何工作的配置）</li><li>Ingest → 知识库写入工作流</li><li>Query → 知识库检索</li><li>Lint → 待实践（定期检查 wiki 健康度）</li></ul><p><strong>可以补充的：</strong></p><ul><li>定期 Lint 机制（每周一次健康检查）</li><li>log.md 时间线记录（目前只有 index，没有活动日志）</li><li>鼓励”有价值的对话结论也存入 wiki”的习惯</li></ul>]]></content>
    
    
    <summary type="html">用 LLM 构建持久 wiki 代替传统 RAG，让知识在摄入时编译而非查询时重推导。三层架构：Raw Sources（不可变）→ Wiki（LLM维护）→ Schema（CLAUDE.md/AGENTS.md）</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
    <category term="RAG" scheme="https://flashj.cn/tags/RAG/"/>
    
    <category term="知识管理" scheme="https://flashj.cn/tags/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/"/>
    
    <category term="Wiki" scheme="https://flashj.cn/tags/Wiki/"/>
    
    <category term="知识库" scheme="https://flashj.cn/tags/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    
    <category term="Karpathy" scheme="https://flashj.cn/tags/Karpathy/"/>
    
  </entry>
  
  <entry>
    <title>OpenClaw 容器内浏览器无法启动问题排查</title>
    <link href="https://flashj.cn/openclaw-docker-browser-headless.html"/>
    <id>https://flashj.cn/openclaw-docker-browser-headless.html</id>
    <published>2026-04-07T13:17:00.000Z</published>
    <updated>2026-04-08T01:00:13.143Z</updated>
    
    <content type="html"><![CDATA[<h1 id="OpenClaw-容器内浏览器无法启动问题排查"><a href="#OpenClaw-容器内浏览器无法启动问题排查" class="headerlink" title="OpenClaw 容器内浏览器无法启动问题排查"></a>OpenClaw 容器内浏览器无法启动问题排查</h1><h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>OpenClaw 运行在 Docker 容器内，浏览器工具（browser tool）无法启动 Chrome，报错：<code>timed out. Restart the OpenClaw gateway.</code></p><p>手动执行 <code>chromium --headless --no-sandbox</code> 可以在宿主机正常工作，但 OpenClaw 启动的 Chrome 始终超时。</p><h2 id="排查过程"><a href="#排查过程" class="headerlink" title="排查过程"></a>排查过程</h2><h3 id="1-初步尝试：noSandbox"><a href="#1-初步尝试：noSandbox" class="headerlink" title="1. 初步尝试：noSandbox"></a>1. 初步尝试：noSandbox</h3><p>根据文档添加 <code>browser.noSandbox: true</code>，无效。</p><h3 id="2-尝试：添加-extraArgs"><a href="#2-尝试：添加-extraArgs" class="headerlink" title="2. 尝试：添加 extraArgs"></a>2. 尝试：添加 extraArgs</h3><pre><code class="language-json">&quot;browser&quot;: &#123;  &quot;noSandbox&quot;: true,  &quot;extraArgs&quot;: [    &quot;--disable-setuid-sandbox&quot;,    &quot;--disable-namespace-sandbox&quot;  ]&#125;</code></pre><p>重启后仍然超时。</p><h3 id="3-关键发现：headless-模式"><a href="#3-关键发现：headless-模式" class="headerlink" title="3. 关键发现：headless 模式"></a>3. 关键发现：headless 模式</h3><p>日志显示 <code>Browser control service ready</code>，说明 browser 服务正常，但 Chrome 启动超时。</p><p>手动执行以下命令完全正常：</p><pre><code class="language-bash">chromium --headless --no-sandbox --disable-gpu --dump-dom &quot;data:text/html,&lt;h1&gt;test&lt;/h1&gt;&quot;</code></pre><p>关键线索：<code>browser.status</code> 显示 <code>headless: false</code> —— 配置文件的修改（headless: true）通过 SIGUSR1 热重启没有生效，需要完整重启容器。</p><h3 id="4-解决：完整重启-Gateway"><a href="#4-解决：完整重启-Gateway" class="headerlink" title="4. 解决：完整重启 Gateway"></a>4. 解决：完整重启 Gateway</h3><p>容器重启后，<code>headless: true</code> 生效，浏览器立即正常工作。</p><h2 id="根本原因"><a href="#根本原因" class="headerlink" title="根本原因"></a>根本原因</h2><table><thead><tr><th>参数</th><th>作用</th><th>状态</th></tr></thead><tbody><tr><td><code>noSandbox: true</code></td><td>禁用 Chrome sandbox</td><td>✅ 之前已加</td></tr><tr><td><code>extraArgs: [&quot;--disable-setuid-sandbox&quot;, &quot;--disable-namespace-sandbox&quot;]</code></td><td>禁用 Linux namespace sandbox</td><td>✅ 本次加</td></tr><tr><td><code>headless: true</code></td><td>无头模式（不尝试打开 GUI 窗口）</td><td>❌ <strong>热重启未生效，完整重启后生效</strong></td></tr></tbody></table><p><strong>核心问题：</strong> snap chromium stub 在容器里需要 headless 模式。<code>headless: false</code> 时 Chrome 尝试打开 GUI 窗口，容器无显示设备导致超时。</p><h2 id="最终配置"><a href="#最终配置" class="headerlink" title="最终配置"></a>最终配置</h2><pre><code class="language-json">&quot;browser&quot;: &#123;  &quot;enabled&quot;: true,  &quot;headless&quot;: true,  &quot;noSandbox&quot;: true,  &quot;extraArgs&quot;: [    &quot;--disable-setuid-sandbox&quot;,    &quot;--disable-namespace-sandbox&quot;  ]&#125;</code></pre><h2 id="教训"><a href="#教训" class="headerlink" title="教训"></a>教训</h2><ol><li>SIGUSR1 热重启对 browser 配置的部分字段（headless）不能完全生效</li><li>容器内跑 Chrome，<code>headless: true</code> 是必须的</li><li><code>browser.status</code> 的 <code>headless</code> 值反映的是<strong>当前运行配置</strong>，不是配置文件值——可用于诊断配置是否真正生效</li></ol><h2 id="相关文档"><a href="#相关文档" class="headerlink" title="相关文档"></a>相关文档</h2><ul><li><code>/app/docs/tools/browser.md</code></li><li><code>/app/docs/tools/browser-linux-troubleshooting.md</code></li></ul>]]></content>
    
    
    <summary type="html">容器内需要 headless:true + noSandbox:true + extraArgs 禁用 setuid/namespace sandbox，三者缺一不可。SIGUSR1 热重启对 headless 字段不能完全生效，需完整重启容器</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="OpenClaw" scheme="https://flashj.cn/tags/OpenClaw/"/>
    
    <category term="Docker" scheme="https://flashj.cn/tags/Docker/"/>
    
    <category term="浏览器" scheme="https://flashj.cn/tags/%E6%B5%8F%E8%A7%88%E5%99%A8/"/>
    
    <category term="Chromium" scheme="https://flashj.cn/tags/Chromium/"/>
    
    <category term="headless" scheme="https://flashj.cn/tags/headless/"/>
    
    <category term="容器" scheme="https://flashj.cn/tags/%E5%AE%B9%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>Gemma 4：谷歌开源31B干翻4000亿，Mac Mini就能跑</title>
    <link href="https://flashj.cn/gemma4.html"/>
    <id>https://flashj.cn/gemma4.html</id>
    <published>2026-04-05T02:25:00.000Z</published>
    <updated>2026-04-05T02:30:32.163Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Gemma-4：谷歌开源31B干翻4000亿，Mac-Mini就能跑"><a href="#Gemma-4：谷歌开源31B干翻4000亿，Mac-Mini就能跑" class="headerlink" title="Gemma 4：谷歌开源31B干翻4000亿，Mac Mini就能跑"></a>Gemma 4：谷歌开源31B干翻4000亿，Mac Mini就能跑</h1><p>就在前两天，Google DeepMind CEO Demis Hassabis 发了一条推文，AI圈炸锅了。</p><p><strong>Gemma 4 来了。</strong></p><p>31B参数，开源，Apache 2.0协议，Mac Mini能跑，打爆4000亿参数的巨无霸。</p><p>Google之前开源过 Gemma，但一直差点意思——参数小、 benchmark 打不过竞品、许可证也一堆破事。这次全改了。</p><hr><h2 id="一、四个型号，总有一款适合你"><a href="#一、四个型号，总有一款适合你" class="headerlink" title="一、四个型号，总有一款适合你"></a>一、四个型号，总有一款适合你</h2><p>Gemma 4 发了四个型号，从手机到工作站都能跑：</p><ul><li><p><strong>E2B</strong>（2.3B有效参数 &#x2F; 5.1B含词表）——手机、树莓派。带原生音频，128K上下文。ARM设备上跑实时语音AI没问题。</p></li><li><p><strong>E4B</strong>（4.5B有效参数 &#x2F; 8B含词表）——笔记本、边缘设备。同样带音频，128K上下文。</p></li><li><p><strong>26B MoE</strong>（总26B，激活4B）——这次最亮眼的型号。MoE架构，推理时只激活3.8B参数，速度约等于4B模型，质量接近26B。256K上下文。Mac Mini 24GB内存可以流畅跑。</p></li><li><p><strong>31B Dense</strong>（30.7B）——满血版工作站旗舰。256K上下文，不带音频但视觉理解拉满。H100单卡可以跑bf16精度，消费级显卡量化后也能跑。</p></li></ul><p>E2B&#x2F;E4B的E是 effective（有效参数），实际推理时embedding层加起来是5.1B和8B。这种设计与Per-Layer Embeddings（PLE，每层独立embedding表）技术有关，专门优化端侧内存效率。</p><hr><h2 id="二、跨代飞跃——数字有多炸"><a href="#二、跨代飞跃——数字有多炸" class="headerlink" title="二、跨代飞跃——数字有多炸"></a>二、跨代飞跃——数字有多炸</h2><p>Gemma 4 直接把上一代的短板全补上了，还顺带翻倍。</p><ul><li><p><strong>数学（AIME 2026 no-tools）</strong>：20.8% → 89.2%，提升了68.4个百分点。翻了超过4倍。上一代基本做不了竞赛数学题，Gemma 4 能做出接近满分。</p></li><li><p><strong>代码（LiveCodeBench v6）</strong>：29.1% → 80.0%，提升50.9个百分点。上一代代码能力约等于新手，Gemma 4 已经可以当半个Code Assistant用了。</p></li><li><p><strong>研究生级科学推理（GPQA Diamond）</strong>：42.4% → 84.3%，提升41.9个百分点。考的是博士级别科学问题，Gemma 4 能答对八成以上。</p></li><li><p><strong>BigBench Extra Hard</strong>：19.3% → 74.4%，提升55.1个百分点。需要多步推理的复杂任务，提升幅度极大。</p></li><li><p><strong>上下文记忆（MRCR v2，128K长文本检索）</strong>：13.5% → 66.4%，提升52.9个百分点。上一代的长上下文基本是假的——能接收但用不好。Gemma 4 的256K上下文是真实可用的。</p></li><li><p><strong>Codeforces ELO</strong>：110 → 2150。110分约等于刚学会编程，2150分约等于有竞赛经验的程序员。这个跨越在开源模型里极为罕见。</p></li></ul><blockquote><p>资料来源：Google官方model card（ai.google.dev&#x2F;gemma&#x2F;docs&#x2F;core&#x2F;model_card_4），Stable Learn整理版（stable-learn.com&#x2F;en&#x2F;gemma-4-model-card&#x2F;），AI.rs横向评测（ai.rs&#x2F;ai-developer&#x2F;gemma-4-vs-qwen-3-5-vs-llama-4-compared）</p></blockquote><hr><h2 id="三、Arena-AI-排行榜——第三方怎么说"><a href="#三、Arena-AI-排行榜——第三方怎么说" class="headerlink" title="三、Arena AI 排行榜——第三方怎么说"></a>三、Arena AI 排行榜——第三方怎么说</h2><p>Google自己吹不算数，来看看第三方。Arena AI是众包聊天偏好排行榜，模型不知道自己在被比较，是目前最接近真实使用体验的排名。</p><p>截至2026年3月31日（数据来源：Maniac.ai引用Arena AI页面，maniac.ai&#x2F;blog&#x2F;qwen-3-5-vs-gemma-4-benchmarks-by-size）：</p><table><thead><tr><th>模型</th><th>Arena AI排名</th><th>Elo分数</th></tr></thead><tbody><tr><td>Gemma 4 31B</td><td>#3开源模型</td><td>1452 ± 9</td></tr><tr><td>Qwen3.5-397B-A17B</td><td>#4</td><td>1449 ± 6</td></tr><tr><td>Gemma 4 26B MoE</td><td>#6</td><td>1441 ± 9</td></tr><tr><td>Qwen3.5-122B-A10B</td><td>—</td><td>1416 ± 6</td></tr><tr><td>Qwen3.5-27B</td><td>—</td><td>1404 ± 6</td></tr><tr><td>Qwen3.5-35B-A3B</td><td>—</td><td>1400 ± 6</td></tr></tbody></table><p>Arena AI是聊天偏好排名，和静态benchmark不完全相关。但它说明了一个事实：在真实对话场景下，Gemma 4 的大模型已经可以和4000亿参数的Qwen掰手腕了。</p><hr><h2 id="四、跟-Qwen-3-5-比怎么样——同尺寸正面battle"><a href="#四、跟-Qwen-3-5-比怎么样——同尺寸正面battle" class="headerlink" title="四、跟 Qwen 3.5 比怎么样——同尺寸正面battle"></a>四、跟 Qwen 3.5 比怎么样——同尺寸正面battle</h2><p>Maniac.ai做了非常详细的同尺寸横向对比，把model card里两者都发布的benchmark拿来逐行比。结论比较微妙，不是「谁全面碾压谁」那么简单。</p><h3 id="31B-vs-27B（工作站旗舰档）"><a href="#31B-vs-27B（工作站旗舰档）" class="headerlink" title="31B vs 27B（工作站旗舰档）"></a>31B vs 27B（工作站旗舰档）</h3><table><thead><tr><th>Benchmark</th><th>Gemma 4 31B</th><th>Qwen3.5-27B</th><th>谁赢</th></tr></thead><tbody><tr><td>MMLU-Pro（通用知识推理）</td><td>85.2%</td><td>86.1%</td><td>Qwen小幅领先</td></tr><tr><td>GPQA Diamond（研究生科学）</td><td>84.3%</td><td>85.5%</td><td>Qwen小幅领先</td></tr><tr><td>LiveCodeBench v6（代码）</td><td>80.0%</td><td>80.7%</td><td>几乎相同</td></tr><tr><td>TAU2（Agent工具调用）</td><td>76.9%</td><td>79.0%</td><td>Qwen领先</td></tr><tr><td>MMMLU（多语言）</td><td>88.4%</td><td>85.9%</td><td><strong>Gemma领先</strong></td></tr><tr><td>MMMU-Pro（多模态）</td><td>76.9%</td><td>75.0%</td><td><strong>Gemma领先</strong></td></tr></tbody></table><p>静态benchmark Qwen略优，但差距极小；多语言和多模态Gemma反超。这个尺寸两家打得有来有回。</p><h3 id="26B-MoE-vs-35B-MoE（消费级MoE档）"><a href="#26B-MoE-vs-35B-MoE（消费级MoE档）" class="headerlink" title="26B MoE vs 35B MoE（消费级MoE档）"></a>26B MoE vs 35B MoE（消费级MoE档）</h3><p>这是Gemma最亮眼的档位。26B MoE推理只激活3.8B参数，但质量达到了31B dense的97%：</p><table><thead><tr><th>Benchmark</th><th>Gemma 4 26B MoE</th><th>Gemma 4 31B Dense</th></tr></thead><tbody><tr><td>MMLU-Pro</td><td>82.6%</td><td>85.2%</td></tr><tr><td>AIME 2026</td><td>88.3%</td><td>89.2%</td></tr><tr><td>LiveCodeBench v6</td><td>77.1%</td><td>80.0%</td></tr><tr><td>Arena AI排名</td><td>1441</td><td>1452（只差11分）</td></tr></tbody></table><p>花4B模型的推理成本，拿到31B模型97%的质量。这个效率比任何Dense模型都强。</p><p>对比同类的Qwen3.5-35B-A3B（激活3B参数）：Arena AI里Gemma 26B MoE（1441）领先Qwen 35B MoE（1400）41分，差距明显。</p><h3 id="E2B-E4B（小模型档）"><a href="#E2B-E4B（小模型档）" class="headerlink" title="E2B &#x2F; E4B（小模型档）"></a>E2B &#x2F; E4B（小模型档）</h3><p>这个档位比较意外：Qwen 3.5 在多数benchmark上领先。</p><ul><li><p>E4B（4B） vs Qwen3.5-4B：Qwen在MMLU-Pro（79.1% vs 69.4%）、GPQA（76.2% vs 58.6%）、LiveCodeBench（55.8% vs 52.0%）、TAU2（79.9% vs 42.2%）上全面领先。</p></li><li><p>E2B（2B） vs Qwen3.5-2B：同样的趋势，Qwen在3&#x2F;4个overlap benchmark上领先。</p></li></ul><p>Gemma E2B&#x2F;E4B的优势是：原生音频支持（Qwen小模型没有）、Google移动生态（Android AICore）、128K上下文。</p><p>结论：小模型党如果纯看文本benchmark，Qwen 3.5 更强；如果需要音频或者在Android上跑，Gemma E系列是唯一选择。</p><hr><h2 id="五、Mac-本地能跑吗"><a href="#五、Mac-本地能跑吗" class="headerlink" title="五、Mac 本地能跑吗"></a>五、Mac 本地能跑吗</h2><ul><li><p><strong>26B MoE（推荐）</strong>：Mac Studio M2 Max 64GB 完全没问题，量化后Q4_K_M版本约14GB显存，24GB内存的Mac Mini也能跑。速度大约每秒15-25 tokens。</p></li><li><p><strong>31B Dense（高性能）</strong>：M2 Max跑Q4量化约20GB内存，需要32GB内存的机器才比较流畅。</p></li><li><p><strong>E4B（笔记本日常）</strong>：任何有16GB内存的MacBook都能跑，8GB显存也够。适合日常对话、文案、代码补全。</p></li></ul><p>推荐工具：LM Studio（图形界面）、Ollama（命令行）、llama.cpp（原生推理，性能最优）。</p><hr><h2 id="六、这次为什么不一样——许可证的意义"><a href="#六、这次为什么不一样——许可证的意义" class="headerlink" title="六、这次为什么不一样——许可证的意义"></a>六、这次为什么不一样——许可证的意义</h2><p>Gemma 4 切到了 Apache 2.0——这是什么意思？</p><ul><li><p><strong>随便用</strong>：任何商业产品、任何数量、任何场景，完全免费。</p></li><li><p><strong>随便改</strong>：可以修改代码、可以训练、可以蒸馏，不需要通知Google。</p></li><li><p><strong>随便分发</strong>：可以做成SaaS、可以做成API服务、可以集成进别人的产品，不需要开源衍生代码。</p></li></ul><p>对比 Qwen 3.5：也是 Apache 2.0，两家打平。</p><p>对比 Llama 4：Community License，700M MAU上限 + Meta Acceptable Use Policy，商用有诸多限制。Gemma 4 的许可证反而比 Llama 4 更宽松。</p><p>对于想做独立开发、AI产品创业的人来说，Gemma 4 基本上没有法律风险了。</p><hr><h2 id="七、还有一些值得关注的技术细节"><a href="#七、还有一些值得关注的技术细节" class="headerlink" title="七、还有一些值得关注的技术细节"></a>七、还有一些值得关注的技术细节</h2><ul><li><p><strong>Thinking Mode（思考模式）</strong>：Gemma 4 支持链式推理，模型会在回答前输出内部思考过程，最长可达4000+ tokens。类似 DeepSeek-R1 和 OpenAI o1 的技术路线，是这次数学和代码能力大幅提升的关键。</p></li><li><p><strong>Native Function Calling</strong>：所有型号都支持结构化函数调用，不需要特殊提示词，直接返回JSON格式的工具调用指令。但和 o1、DeepSeek-R1 这类以工具调用见长的模型相比，Gemma 4 的工具调用成功率仍有差距——GitHub 上有用户直接向 Google 官方请求加强工具调用能力（TAU2 基准测试 Gemma 4 31B 为 76.9%，也低于 Qwen 3.5 的 79%）。</p></li><li><p><strong>Per-Layer Embeddings（PLE）</strong>：每层decoder有独立的embedding表，小参数模型性能提升的重要原因之一。</p></li><li><p><strong>Hybrid Attention</strong>：MoE模型使用了局部滑动窗口attention和全局attention混合的设计，保证速度的同时不丢失长上下文理解能力。</p></li><li><p><strong>Shared KV Cache</strong>：后几层共享KV张量，长上下文推理时显著降低显存占用。</p></li></ul><hr><h2 id="八、中文支持怎么样——中国用户最关心的问题"><a href="#八、中文支持怎么样——中国用户最关心的问题" class="headerlink" title="八、中文支持怎么样——中国用户最关心的问题"></a>八、中文支持怎么样——中国用户最关心的问题</h2><p>Gemma 4 比前代大幅进步，但 Qwen 3.5 在中文上仍然有优势。看数据说话。</p><p>Gemma 4 的多语言 benchmark（MMMLU）在31B上拿到了88.4%，这个进步是真实的——Gemma 4 的多语言能力已经不是短板了。</p><p>但 AI.rs 的横向评测里说：「Qwen 3.5 仍然保有 multilingual crown（多语言王冠）」。原因有两个：</p><ul><li><p><strong>词表大小</strong>：Qwen 3.5 用的是250K词汇表，专门为中文优化。Gemma 4 用的是140+语言混合训练，词表更偏多语言通用，中文词切词效率不如 Qwen。</p></li><li><p><strong>语言数量</strong>：Qwen 3.5 支持201种语言，Gemma 4 支持140+种。Qwen 覆盖的语言更广，尤其是中文方言、特定中文知识等方面，Qwen 的训练数据量和中文占比都更高。</p></li></ul><p>Qwen 是「中文优先」设计，Gemma 4 是「多语言一视同仁」设计。如果主要处理中国本地文化内容、网络用语、中文专业知识，Qwen 3.5 仍然是更稳的选择。</p><h3 id="Gemma-4-适合中国用户部署吗？"><a href="#Gemma-4-适合中国用户部署吗？" class="headerlink" title="Gemma 4 适合中国用户部署吗？"></a>Gemma 4 适合中国用户部署吗？</h3><p><strong>能部署吗？</strong> 完全能。Gemma 4 是完全开源的 Apache 2.0 模型，权重在 HuggingFace 上可以直接下载，不需要联网，不需要 Google 账号，不受任何地区限制。Llama 要担心被美国限制的问题，Gemma 4 没有这个风险。</p><p><strong>好用吗？</strong> 看做什么。如果主要处理英文任务（写代码、读英文技术文档、英文写作），Gemma 4 在31B这个尺寸上极强。如果主要处理中文内容，Qwen 3.5 目前仍然是更匹配的选择。</p><p>一个值得考虑的方案：<strong>双模型组合</strong>。用 Gemma 4 26B MoE 处理英文代码和复杂推理任务，用 Qwen 3.5 处理中文对话和本地知识。</p><p>Gemma 4 的 Thinking Mode 对中文思考链的支持是完整的，模型可以用中文做逐步推理，这对需要看推理过程的用户来说体验会比较好。</p><p><strong>总结：</strong></p><ul><li><p><strong>中文能力</strong>：Gemma 4 比前代强很多，多语言 benchmark 88.4% 是实打实的进步。但 Qwen 3.5 的中文词表（250K）和中文训练数据量更多，中文场景仍然是 Qwen 主场。</p></li><li><p><strong>部署友好度</strong>：Gemma 4 是纯开源（Apache 2.0），没有任何地区使用限制，对中国开发者非常友好。</p></li><li><p><strong>推荐策略</strong>：纯中文场景继续用 Qwen 3.5；英文为主或者需要强推理&#x2F;代码能力可以上 Gemma 4；Mac 用户推荐 Gemma 4 26B MoE，本地跑起来很舒服。</p></li></ul><p><strong>参考资料：</strong></p><ul><li><p>MMMLU（多语言通用知识）：Gemma 4 31B 88.4%，数据来自 Google 官方 model card（ai.google.dev&#x2F;gemma&#x2F;docs&#x2F;core&#x2F;model_card_4）</p></li><li><p>Qwen 多语言王冠评价：AI.rs 原文「Qwen 3.5 still holds the multilingual crown」——ai.rs&#x2F;ai-developer&#x2F;gemma-4-vs-qwen-3-5-vs-llama-4-compared</p></li><li><p>Qwen 词表数据（250K vocab，201语言）：github.com&#x2F;QwenLM&#x2F;Qwen3.5</p></li><li><p>Gemma 4 多语言支持（140+语言）：blog.google&#x2F;innovation-and-ai&#x2F;technology&#x2F;developers-tools&#x2F;gemma-4&#x2F;</p></li></ul><hr><h2 id="九、参考资料"><a href="#九、参考资料" class="headerlink" title="九、参考资料"></a>九、参考资料</h2><ol><li><p><a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/">Google官方博客</a> — Gemma 4发布公告</p></li><li><p><a href="https://deepmind.google/models/gemma/gemma-4/">Google DeepMind Gemma 4页面</a> — 模型家族总览</p></li><li><p><a href="https://ai.google.dev/gemma/docs/core/model_card_4">Google AI Model Card</a> — 技术规格和benchmark数据</p></li><li><p><a href="https://ai.rs/ai-developer/gemma-4-vs-qwen-3-5-vs-llama-4-compared">AI.rs 横向评测</a> — Gemma 4 vs Qwen 3.5 vs Llama 4</p></li><li><p><a href="https://maniac.ai/blog/qwen-3-5-vs-gemma-4-benchmarks-by-size">Maniac.ai 逐尺寸对比</a> — 按模型尺寸逐行对比，含Arena AI第三方排名</p></li><li><p><a href="https://stable-learn.com/en/gemma-4-model-card/">Stable Learn Gemma 4整理版</a> — 架构详解</p></li><li><p><a href="https://lmstudio.ai/models/gemma-4">LM Studio支持页面</a> — 本地部署工具支持情况</p></li><li><p><a href="https://huggingface.co/gg-hf-gg/gemma-4-31B-it">HuggingFace下载页</a> — 31B指令微调版下载</p></li></ol><hr><p>开源模型从「差口气」到「真能打」，Gemma 4 用了四代。4000亿参数不是终点，31B也不是起点。参数大小和模型强弱之间的关系，正在被一次又一次地打破。</p><p>——写于2026年4月3日，资料核实过，数据有源头，不确定的地方也注明了。如有疏漏欢迎指出。</p><hr><h2 id="彩蛋：一个判断"><a href="#彩蛋：一个判断" class="headerlink" title="彩蛋：一个判断"></a>彩蛋：一个判断</h2><p>Gemma 4 这个节点，让我想到了一个有意思的类比。</p><p>我们现在 AI 算力的发展阶段，有点像早期的大型机时代：</p><ol><li><p>客户机的配置不可能很高</p></li><li><p>它作为终端，必须连接到远程的大型计算机，使用大型机的算力来运算</p></li></ol><p>但电脑发展了几年之后，千家万户都能买 Mac 或 IBM 机子，所有功能在本地就能跑，联网才能用的服务全部进了本地客户端。</p><p><strong>对应现在的 AI 时代，我们相当于还在「终端机」阶段。</strong></p><p>现在买的 token 都需要云端处理，像在付电费。但这个窗口不会很长——最多十年，会从「终端机」变成「家用机」时代，token 都会在本地运行。</p><p>Gemma 4 这样的开源模型出现，正在加速这个进程。</p>]]></content>
    
    
    <summary type="html">31B参数，Apache 2.0协议，Mac Mini能跑，AIME数学从20%飙到89%——Google开源模型这次真的翻身了。但工具调用还是短板</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
    <category term="开源" scheme="https://flashj.cn/tags/%E5%BC%80%E6%BA%90/"/>
    
    <category term="google" scheme="https://flashj.cn/tags/google/"/>
    
  </entry>
  
  <entry>
    <title>Agency-Agent:144个AI员工一键部署</title>
    <link href="https://flashj.cn/agency-agent.html"/>
    <id>https://flashj.cn/agency-agent.html</id>
    <published>2026-04-04T04:16:00.000Z</published>
    <updated>2026-04-04T04:21:58.083Z</updated>
    
    <content type="html"><![CDATA[<p>9.74 复制打开抖音，看看【AIGC成也的作品】144个AI员工一键部署！ # 干货分享 # AI… <a href="https://v.douyin.com/RsEb3LiCBiA/">144个AI员工一键部署！ #干货分享 #AI #github #人工智能 #AI工具 - 抖音</a> 04&#x2F;07 <a href="mailto:&#x6c;&#64;&#x70;&#46;&#100;&#x61;">l@p.da</a> Agb:&#x2F;</p><p>github : <a href="https://github.com/msitarzewski/agency-agents">Agency-Agent</a></p><p>这个是抖音看到，最关键的点就是这个项目地址。我去给它找找，稍等研究一下，看看适不适合本地部署用一下。</p><p>因为昨天我用的那个叫作 Eigent 的，感觉不是很靠谱：</p><ol><li>里面怎么用中文都说不明白话（当然也有可能是受限于我模型的能力）</li><li>虽然内置了 4 个 Agent 也支持 skill，但它对 skill 的支持没有那么好，用起来不太顺</li><li>还是用 Electron 开发的，我觉得很讨厌</li></ol><p>等一下，我再看一下这个 Agency-Agent 的介绍。它这个里面毕竟有 <strong>100 多个已经定义好了的 Agent</strong> 嘛。</p><p>啊对啊，而且我看下面有人评论，就在这个抖音视频下面的评论里，有人说装了这个之后可以集成在 Trae 里面，然后 <strong>Trae 开发的时候就没那么降智</strong>了。</p><p>我🤔疑惑：这还能作为一个插件用在 Trae 里面吗？或者说它是可以当作 Skill 用，还是当作 MCP 来用来用啊？但它里面又内置了 100 多个智能体。到底是怎样一个形式呢？我要实践一下才知道。</p><hr><p>Use with Claude Code (Recommended)</p><pre><code># Copy agents to your Claude Code directorycp -r agency-agents/* ~/.claude/agents/# Now activate any agent in your Claude Code sessions:# &quot;Hey Claude, activate Frontend Developer mode and help me build a React component&quot;</code></pre><hr><p>看了一下它的文档，我现在才大概懂了。所谓它集成了很多个 Agent，其实是因为它整个开源项目是由一个个独立的 Agent 组成的，总共已经凑了一百多个。每个文件夹下面就是一个 Agent。</p><p>它本身有三种主要用法：</p><ol><li><p>放在 Claude Code 里面使用<br>在调用时，只需一句话就能唤起特定的角色来执行具体工作。</p></li><li><p>作为参考素材<br>你可以参考其中已经写好的 Agent 身份特征、核心使命、工作流程、技术交付物、代码实例、成功指标以及沟通风格等内容。在此基础上进行改编，做成自己想要的智能体或其他智能体验。</p></li><li><p>集成到其他编程工具中<br>将其结合到其他软件里使用，例如集成在 Cursor 或 OpenClaw 等编程工具中。</p></li></ol><p>它建议的首选使用方式是把这些 Agent 复制到 Claude Code 里面。</p><p>😐我的Claude Code 默认居然一个 Agent 都没有，我一直都以为Claude Code 是靠skill来组合功能，没想到claude code本身是支持你创建一个agents文件夹，设定一些角色的。</p><p>但是，你可以给它定义 Agent 的不同功能特性：</p><ol><li>这相当于对应了一个类似“功能包”的作用。</li><li>它本身拥有自己的性格、品位、形象和做事风格。</li><li>这一整套做事 SOP 都已经集成在它自己的个性里面了，而不是只通过外部 Skill 来提供的。</li></ol>]]></content>
    
    
    <summary type="html">144个AI员工一键部署。看了一下它的文档，我现在才大概懂了。所谓它集成了很多个 Agent，其实是因为它整个开源项目是由一个个独立的 Agent 组成的，总共已经凑了一百多个。每个文件夹下面就是一个 Agent。</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="agent" scheme="https://flashj.cn/tags/agent/"/>
    
    <category term="sop" scheme="https://flashj.cn/tags/sop/"/>
    
  </entry>
  
  <entry>
    <title>新知识： MineContext</title>
    <link href="https://flashj.cn/minecontext.html"/>
    <id>https://flashj.cn/minecontext.html</id>
    <published>2026-04-04T04:12:00.000Z</published>
    <updated>2026-04-04T04:21:45.616Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>MineContext：字节出品，让 AI 看懂你一天都在干什么**</p><p>GitHub：<a href="https://github.com/volcengine/MineContext/tree/main">https://github.com/volcengine/MineContext/tree/main</a></p><p>平时和 ChatGPT 聊天、提问，往往受限于 <strong>prompt 的长度和时间成本</strong>。一次只能提供一点上下文，没法让 AI 真正了解我们在做的事。</p><p>MineContext 想解决的，就是这个“AI 记不住你的世界”的问题。</p><p>它是一款开源的 <strong>上下文感知 AI 工具（context-aware AI partner）</strong>，能通过截图和内容解析理解你的数字世界——在写代码、读文档、查资料还是开会，它都能自动识别并提炼信息。AI 会基于这些上下文生成日报、总结、待办和洞察，主动推送给你，不再需要一遍遍解释背景。</p><p>所有数据都在本地存储，支持 OpenAI、豆包等模型（需要用到自己的 API）。</p><p><strong>MineContext</strong> 的命名也很有意思：既是 “我的上下文”，也是 “挖掘上下文”。它的灵感来自 Minecraft——如果海量的 context 是散落各处的“方块”，MineContext 就是那个能让你自由搭建、组合、再创造的“世界”。</p><p>使用文档：<a href="https://bytedance.larkoffice.com/wiki/W9m8whhMDiYuZyk1uQpc0chWnnc">如何快速上手 MineContext</a></p></blockquote><p>这个东西乍一听，好像跟我去年<a href="obsidian://open?vault=%E7%94%9F%E5%91%BD%E5%8E%86%E7%A8%8B&file=2025-09-27">9月用的 DayFlow</a> 差不多。 </p><p>我可以再试一下，DayFlow 当时我没有再用了，因为他用的是本地算力做视频分析，分析得太不准了。我用的是那个千问的 4B 视觉模型，分析得太不准了，就不用了。</p><p>我刚才看了一下官方文档的使用手册，发现它和我去年用的 DayFlow 功能完全一模一样。</p><p>但是它的视觉理解需要使用火山引擎的 API Key。我看群里面人家反馈，一天大概要花一块钱，这简直太离谱了。</p><p>如果我的视觉理解是通过上传截图到网上，等它处理完后再给我打标传回本地，那不等于还是一样泄露隐私吗？</p><p>我本地的屏幕天天都在给别人看，结果还得收我钱？</p><p>这种产品还是要依靠视觉理解模型。只有当大家都能在本地部署、企业端也能大规模跑起来的时候，才能真正动起来。</p><p>现在这个发展阶段有点像早期的电脑：</p><ol><li>客户机的配置肯定不可能是很高的。</li><li>它作为一个终端，必须连接到远程的大型计算机，使用大型计算机的算力来进行运算。</li></ol><p>但是电脑发展了几年之后，千家万户都能买一个 Mac 或者买一个 IBM 的机子，所有的功能就都已经具备了。以前那些需要用终端连接到远程才能使用的服务和功能，全部都在本地客户端里面独立实现了，完全不需要联网就能运行。</p><p>对应现在这个 AI 时代，我觉得它就相当于早期还在使用终端的年代。</p><p>我们现在买的 token 都需要云端来帮我们处理，好像在付电费一样。但是这个时间不会很长，<strong>最多过十年，就会从终端机变成家用机的时代，所有的 token 都会在本地运行</strong>。</p>]]></content>
    
    
    <summary type="html">这个东西乍一听，好像跟我去年9月用的 DayFlow 差不多。 我可以再试一下，DayFlow 当时我没有再用了，因为他用的是本地算力做视频分析，分析得太不准了。我用的是那个千问的 4B 视觉模型，分析得太不准了，就不用了。我刚才看了一下官方文档的使用手册，发现它和我去年用的 DayFlow 功能完全一模一样。</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="日记" scheme="https://flashj.cn/tags/%E6%97%A5%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>Claude Code 长短记忆机制分析</title>
    <link href="https://flashj.cn/claude-code-long-short-term-memory-analysis.html"/>
    <id>https://flashj.cn/claude-code-long-short-term-memory-analysis.html</id>
    <published>2026-04-01T14:03:00.000Z</published>
    <updated>2026-04-01T14:11:17.248Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Claude-Code-长短记忆机制分析"><a href="#Claude-Code-长短记忆机制分析" class="headerlink" title="Claude Code 长短记忆机制分析"></a>Claude Code 长短记忆机制分析</h1><blockquote><p>基于 <code>@anthropic-ai/claude-code@2.1.88</code> 源码还原项目</p><p>核心文件：<code>services/SessionMemory/</code>, <code>services/extractMemories/</code>, <code>services/teamMemorySync/</code>, <code>services/compact/sessionMemoryCompact.ts</code>, <code>utils/attachments.ts</code></p></blockquote><hr><h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>Claude Code 的记忆系统不是单一的”记忆”功能，而是一个<strong>多层、多作用域、多生命周期</strong>的记忆体系。整体分为：</p><table><thead><tr><th>层次</th><th>系统名称</th><th>作用域</th><th>生命周期</th><th>文件格式</th></tr></thead><tbody><tr><td>短期（秒级-分钟）</td><td>Query 内上下文</td><td>单轮对话</td><td>一次 API 调用</td><td>消息数组</td></tr><tr><td>短期（会话级）</td><td>Session Memory</td><td>单次会话</td><td>会话结束</td><td><code>.claude/session-memory.md</code></td></tr><tr><td>中期（项目级持久）</td><td>Auto Memory &#x2F; Durable Memory</td><td>项目目录</td><td>持久化到磁盘</td><td><code>.claude/projects/&lt;path&gt;/memory/*.md</code></td></tr><tr><td>长期（团队级持久）</td><td>Team Memory</td><td>Git 仓库（全组织）</td><td>云端同步+本地持久化</td><td><code>~/.claude/team-memory/&lt;repo&gt;/*</code></td></tr><tr><td>系统级（配置级持久）</td><td>CLAUDE.md</td><td>项目&#x2F;用户目录</td><td>静态文件，每次加载</td><td><code>CLAUDE.md</code></td></tr></tbody></table><p>整个系统的核心设计思想是：<strong>不同层次的信息在不同时间尺度上积累，在不同的触发点被提取，按需注入到 AI 的上下文中——而不是一次性全塞进去。</strong></p><hr><h2 id="一、短期记忆：Session-Memory（会话记忆）"><a href="#一、短期记忆：Session-Memory（会话记忆）" class="headerlink" title="一、短期记忆：Session Memory（会话记忆）"></a>一、短期记忆：Session Memory（会话记忆）</h2><p>Session Memory 是<strong>会话级别的临时笔记</strong>，记录当前会话进行到了哪里、做了什么、遇到了什么问题。它本质上是一个结构化的 Markdown 文件，由后台 AI 定期更新。</p><h3 id="1-1-存储位置与格式"><a href="#1-1-存储位置与格式" class="headerlink" title="1.1 存储位置与格式"></a>1.1 存储位置与格式</h3><pre><code>.claude/└── session-memory.md         # 会话记忆文件</code></pre><p>文件模板（9 个固定段落）：</p><pre><code class="language-markdown"># Session Title_A short and distinctive 5-10 word descriptive title_# Current State_What is actively being worked on right now?_# Task specification_What did the user ask to build?_# Files and Functions_What are the important files?_# Workflow_What bash commands are usually run and in what order?_# Errors &amp; Corrections_Errors encountered and how they were fixed._# Codebase and System Documentation_What are important system components?_# Learnings_What has worked well? What has not?_# Key results_Exact output the user requested (table, answer, etc.)_# Worklog_Step by step, what was attempted, done?_</code></pre><ul><li><strong>每个段落有上限</strong>：<code>MAX_SECTION_LENGTH = 2000</code> 字符&#x2F;tokens</li><li><strong>文件总上限</strong>：<code>MAX_TOTAL_SESSION_MEMORY_TOKENS = 12000</code> tokens</li><li>超过上限时提取 AI 会自动压缩过长段落</li></ul><p>用户可以自定义模板：<code>~/.claude/session-memory/config/template.md</code></p><h3 id="1-2-触发机制"><a href="#1-2-触发机制" class="headerlink" title="1.2 触发机制"></a>1.2 触发机制</h3><p>Session Memory 作为 <strong>Post-Sampling Hook</strong> 运行——每次 AI 响应完成后异步触发。但不是每次都触发，有三重门槛：</p><pre><code class="language-typescript">// 默认配置DEFAULT_SESSION_MEMORY_CONFIG = &#123;  minimumMessageTokensToInit: 10_000,       // 上下文达到 10K token 时才初始化  minimumTokensBetweenUpdate: 5_000,        // 每次更新后至少增长 5K tokens  toolCallsBetweenUpdates: 3,               // 至少 3 次工具调用&#125;</code></pre><p><strong>触发条件（满足以下任一即可）：</strong></p><pre><code class="language-typescript">const shouldExtract =  (hasMetTokenThreshold &amp;&amp; hasMetToolCallThreshold) ||  // 条件 1: token 和工具调用都超标  (hasMetTokenThreshold &amp;&amp; !hasToolCallsInLastTurn)     // 条件 2: token 超标 + 最后一轮无工具调用（对话自然停顿点）</code></pre><p><strong>设计精妙之处：</strong></p><ul><li>Token 阈值 <strong>始终</strong> 是硬性要求——即使工具调用很多，如果上下文没增长也不触发</li><li>条件 2 捕获 “对话自然停顿点”——当 AI 最后一轮没有调用工具（可能是回答了用户），这是提取记忆的好时机</li><li>只在 <code>repl_main_thread</code>（主 REPL 线程）运行，不在子 agent 中运行</li></ul><h3 id="1-3-更新机制"><a href="#1-3-更新机制" class="headerlink" title="1.3 更新机制"></a>1.3 更新机制</h3><p>更新由一个 <strong>forked agent（分叉 AI 代理）</strong> 执行——完美拷贝父级对话的上下文，共享 prompt cache，但拥有独立的工具调用权限：</p><pre><code class="language-typescript">// 提取代理的权限极其严格：// 只允许 Edit 工具操作 session-memory.md 这一个文件function createMemoryFileCanUseTool(memoryPath) &#123;  return async (tool, input) =&gt; &#123;    if (tool.name === &#39;Edit&#39; &amp;&amp; input.file_path === memoryPath) &#123;      return &#123; behavior: &#39;allow&#39; &#125;    &#125;    return &#123; behavior: &#39;deny&#39; &#125;  // 其他一切拒绝  &#125;&#125;</code></pre><p><strong>更新流程：</strong></p><ol><li>检查是否满足触发条件（token 门槛 + 工具调用次数）</li><li>读取当前的 session memory 文件</li><li>启动 forked agent，发送更新 prompt</li><li>Forked agent 用 Edit 工具更新文件</li><li>记录 <code>lastSummarizedMessageId</code>——标记记忆覆盖到了哪条消息</li></ol><h3 id="1-4-关键数据流"><a href="#1-4-关键数据流" class="headerlink" title="1.4 关键数据流"></a>1.4 关键数据流</h3><pre><code>每次 AI 响应 (PostSamplingHook)      │      ▼shouldExtractMemory(messages)?      │  No → 直接返回      │  Yes ↓      ▼runForkedAgent(  prompt: &quot;请基于最新对话更新 session notes&quot;,  tools: 只允许 Edit → session-memory.md)      │      ▼更新 .claude/session-memory.md      │      ▼记录 lastSummarizedMessageId ← 知道记忆覆盖到了哪里</code></pre><hr><h2 id="二、中期记忆：Auto-Memory-Durable-Memory（自动持久记忆）"><a href="#二、中期记忆：Auto-Memory-Durable-Memory（自动持久记忆）" class="headerlink" title="二、中期记忆：Auto Memory &#x2F; Durable Memory（自动持久记忆）"></a>二、中期记忆：Auto Memory &#x2F; Durable Memory（自动持久记忆）</h2><p>Auto Memory 是<strong>项目级别的持久化知识</strong>，记录跨会话的经验教训、用户偏好、代码结构理解等。与 Session Memory 不同，它不会在会话结束后丢失。</p><h3 id="2-1-存储位置与格式"><a href="#2-1-存储位置与格式" class="headerlink" title="2.1 存储位置与格式"></a>2.1 存储位置与格式</h3><pre><code>.claude/projects/&lt;project-path&gt;/└── memory/    ├── MEMORY.md              # 索引文件（每次启动必加载）    ├── user_role.md           # 用户角色记忆    ├── feedback_testing.md    # 反馈记忆    ├── project_auth_flow.md   # 项目特定知识    └── ...                    # 按主题组织的独立文件</code></pre><p>** MEMORY.md —— 索引文件（非记忆内容）：**</p><pre><code class="language-markdown">- [User Role](user_role.md) — 用户是数据科学家，专注于 observability- [Feedback on Testing](feedback_testing.md) — 集成测试必须用真实数据库- [Project Auth Rewrite](project_auth_flow.md) — 认证重写由法律合规驱动</code></pre><ul><li>每行 ~150 字符以内</li><li>超过 200 行会被截断</li><li>只存储指针，不存储内容</li></ul><p><strong>单个记忆文件格式：</strong></p><pre><code class="language-markdown">---name: feedback_testingdescription: 集成测试必须用真实数据库type: feedback---集成测试必须访问真实数据库，而不是 mock。**Why:** 上季度因为 mock/生产不一致导致通过的测试在生产迁移时失败**How to apply:** 编写涉及数据库的测试时，使用真实连接</code></pre><h3 id="2-2-记忆的四种类型"><a href="#2-2-记忆的四种类型" class="headerlink" title="2.2 记忆的四种类型"></a>2.2 记忆的四种类型</h3><pre><code class="language-typescript">enum MemoryType &#123;  &#39;user&#39;,      // 用户角色、偏好、知识背景  &#39;feedback&#39;,  // 用户给出的指导（做什么/不做什么）  &#39;project&#39;,   // 项目目标、里程碑、技术决策  &#39;reference&#39;  // 外部资源指针（Linear 项目、Grafana 面板等）&#125;</code></pre><p>每种类型有不同的 <code>when_to_save</code> 和 <code>how_to_use</code> 指南，训练 AI 判断何时保存、如何使用。</p><h3 id="2-3-提取机制：Extract-Memories"><a href="#2-3-提取机制：Extract-Memories" class="headerlink" title="2.3 提取机制：Extract Memories"></a>2.3 提取机制：Extract Memories</h3><p>与 Session Memory 的主动更新不同，Auto Memory 是通过 <strong>后台提取代理</strong> 自动积累的：</p><pre><code class="language-typescript">// 注册时机：每个完整 query loop 结束后（AI 没有 pending 工具调用时）// 通过 handleStopHooks 触发export function initExtractMemories() &#123;  // ...&#125;export async function executeExtractMemories(context) &#123;  // fire-and-forget，不阻塞主流程&#125;</code></pre><p><strong>节流控制：</strong></p><pre><code class="language-typescript">// 不是每轮都提取，默认每隔 N 轮提取一次（N 由 GrowthBook 远程配置）const turnsBetweenExtraction = getFeatureValue(&#39;tengu_bramble_lintel&#39;, 1)// 如果 AI 自己已经写了记忆文件（main agent 直接执行了 save 操作），// 则跳过 forked agent 的提取（避免重复劳动）if (hasMemoryWritesSince(messages, lastMemoryMessageUuid)) &#123;  return // 跳过，推进游标&#125;</code></pre><p><strong>提取代理的权限模型（比 Session Memory 宽松得多）：</strong></p><table><thead><tr><th>工具</th><th>权限</th><th>说明</th></tr></thead><tbody><tr><td>Read &#x2F; Grep &#x2F; Glob</td><td>完全开放</td><td>只读工具，无风险</td></tr><tr><td>Bash</td><td>仅只读命令</td><td><code>ls, find, grep, cat, stat, wc, head, tail</code></td></tr><tr><td>Edit &#x2F; Write</td><td>仅限 memory 目录</td><td>只能写 <code>memory/*.md</code></td></tr><tr><td>其他所有工具</td><td>拒绝</td><td>MCP, Agent, rm 等</td></tr></tbody></table><p><strong>互斥设计：</strong> 主 agent 和提取代理不会同时写入记忆——如果主 agent 已经写了记忆（用户说”记住这个”时 AI 直接保存），提取代理会跳过该轮，推进游标到主 agent 写入之后。这避免了两者竞争。</p><pre><code class="language-typescript">// 提取代理只在主代理没有写记忆时才运行if (hasMemoryWritesSince(messages, lastMemoryMessageUuid)) &#123;  // 跳过，推进游标——下一轮只考虑这之后的新消息  lastMemoryMessageUuid = lastMessage.uuid  return&#125;</code></pre><h3 id="2-4-提取策略：两阶段并行写入"><a href="#2-4-提取策略：两阶段并行写入" class="headerlink" title="2.4 提取策略：两阶段并行写入"></a>2.4 提取策略：两阶段并行写入</h3><p>提取代理被设计为<strong>最少 turn 数</strong>的策略：</p><pre><code>Turn 1: 并行读取所有可能需要更新的文件 (Read × N)Turn 2: 并行写入所有需要更新的文件 (Write/Edit × N)禁止在多个 turn 中交错读写 —— 浪费上下文</code></pre><p><strong>提取代理 prompt 中明确指示：</strong></p><blockquote><p>“You have a limited turn budget. Edit requires a prior Read of the same file, so the efficient strategy is:</p><ul><li>Turn 1 — issue all Read calls in parallel for every file you might update</li><li>Turn 2 — issue all Write&#x2F;Edit calls in parallel<br>Do not interleave reads and writes across multiple turns.”</li></ul></blockquote><p>同时限制 <code>maxTurns: 5</code>——超过 5 轮强制终止。</p><hr><h2 id="三、长期记忆：Team-Memory（团队记忆）"><a href="#三、长期记忆：Team-Memory（团队记忆）" class="headerlink" title="三、长期记忆：Team Memory（团队记忆）"></a>三、长期记忆：Team Memory（团队记忆）</h2><p>Team Memory 是<strong>组织级别</strong>的知识共享，通过 Git 仓库识别，同一个仓库的所有认证成员共享同一套记忆文件。</p><h3 id="3-1-存储位置"><a href="#3-1-存储位置" class="headerlink" title="3.1 存储位置"></a>3.1 存储位置</h3><pre><code>~/.claude/team-memory/&lt;owner&gt;/&lt;repo&gt;/├── MEMORY.md├── coding_standards.md├── deployment_process.md└── ...</code></pre><h3 id="3-2-同步协议"><a href="#3-2-同步协议" class="headerlink" title="3.2 同步协议"></a>3.2 同步协议</h3><p>Team Memory 在本地文件和服务器 API 之间同步：</p><pre><code>本地文件系统                    服务器 API     │                           │     │  GET /team_memory?repo=   │  拉取（下载全量）     │◄─────────────────────────│     │                          │     │  PUT /team_memory?repo=   │  推送（增量上传）     │────────────────────────▶│     │                          │</code></pre><p><strong>同步关键点：</strong></p><ul><li>拉取：服务器内容覆盖本地（server wins）</li><li>推送：只上传内容哈希不同的文件（delta upload）</li><li>删除：本地删除不会传播到服务器，下次拉取会恢复</li><li>冲突重试：最多 2 次（基于 ETag <code>lastKnownChecksum</code>）</li></ul><p><strong>同步状态管理：</strong></p><pre><code class="language-typescript">type SyncState = &#123;  lastKnownChecksum: string | null           // ETag，用于条件请求  serverChecksums: Map&lt;string, string&gt;       // 每个文件内容的 sha256 哈希  serverMaxEntries: number | null            // 服务器最大条目数（从 413 响应学习）&#125;</code></pre><h3 id="3-3-隐私保护：密钥扫描"><a href="#3-3-隐私保护：密钥扫描" class="headerlink" title="3.3 隐私保护：密钥扫描"></a>3.3 隐私保护：密钥扫描</h3><p>推送前会自动扫描密钥，防止敏感信息泄露到团队空间：</p><pre><code class="language-typescript">// 扫描正则模式const SECRET_PATTERNS = [  /(?i)(api[_-]?key|api[_-]?secret)/,  /(?i)(password|passwd|pwd)/,  /(?i)(token|auth|credential)/,  // ...]// 超过 250KB 的文件不上传const MAX_FILE_SIZE_BYTES = 250_000</code></pre><h3 id="3-4-权限控制"><a href="#3-4-权限控制" class="headerlink" title="3.4 权限控制"></a>3.4 权限控制</h3><p>提取代理可以同时向私有记忆和团队记忆写入，但团队记忆有更严格的约束：</p><ul><li>绝不保存 API key、凭证等敏感信息</li><li>每个文件类型有 <code>&lt;scope&gt;</code> 指导该写到哪个目录</li><li>推送时用 OAuth token 认证</li></ul><hr><h2 id="四、系统级配置记忆：CLAUDE-md"><a href="#四、系统级配置记忆：CLAUDE-md" class="headerlink" title="四、系统级配置记忆：CLAUDE.md"></a>四、系统级配置记忆：CLAUDE.md</h2><p><code>CLAUDE.md</code> 是<strong>静态配置文件</strong>，不是 AI 自动生成的，而是用户&#x2F;团队手动维护的：</p><pre><code>.claude/CLAUDE.md                 # 项目级~/.claude/CLAUDE.md              # 用户级</code></pre><p>这是每次对话启动时<strong>必加载</strong>的内容，作为 system prompt 的一部分注入。与动态生成的 Session Memory 和 Auto Memory 不同，CLAUDE.md 是确定性的、版本可控的。</p><hr><h2 id="五、记忆如何注入到-AI-上下文"><a href="#五、记忆如何注入到-AI-上下文" class="headerlink" title="五、记忆如何注入到 AI 上下文"></a>五、记忆如何注入到 AI 上下文</h2><p>记忆不是全部塞进 prompt 的，而是<strong>按需、分层、通过 attachment 机制</strong>注入的。</p><h3 id="5-1-加载时机"><a href="#5-1-加载时机" class="headerlink" title="5.1 加载时机"></a>5.1 加载时机</h3><p>系统启动时扫描所有记忆目录：</p><pre><code>1. 加载 CLAUDE.md (静态配置)2. 加载 memory/MEMORY.md (索引 → 按需加载具体文件)3. 加载 session-memory.md (当前会话笔记)4. 如果是团队模式，加载 team memory</code></pre><h3 id="5-2-压缩后的记忆再注入"><a href="#5-2-压缩后的记忆再注入" class="headerlink" title="5.2 压缩后的记忆再注入"></a>5.2 压缩后的记忆再注入</h3><p>当 Auto Compact 触发时，所有消息被替换为摘要<strong>但记忆不会丢失</strong>：</p><pre><code class="language-typescript">// compactConversation() 成功后：// 1. 清除 fileStateCache// 2. 重新注入关键上下文：postCompactFileAttachments = [  ...最近修改的文件快照(最多5个),  ...异步Agent状态,  ...plan文件,  ...已调用的技能内容(25K token预算),  ...MCP工具增量,  // 记忆通过 attachment 机制自动重新注入]</code></pre><h3 id="5-3-Session-Memory-Compact-——-轻量级压缩"><a href="#5-3-Session-Memory-Compact-——-轻量级压缩" class="headerlink" title="5.3 Session Memory Compact —— 轻量级压缩"></a>5.3 Session Memory Compact —— 轻量级压缩</h3><p>当记忆存在且有实质内容时（不只是模板），系统会尝试<strong>基于记忆的压缩</strong>，这比完整的 AI 摘要压缩更经济：</p><pre><code class="language-typescript">async function trySessionMemoryCompaction(messages, agentId, threshold) &#123;  // 1. 等待任何正在进行的记忆提取完成  await waitForSessionMemoryExtraction()  // 2. 读取 session memory 内容  const sessionMemory = await getSessionMemoryContent()  if (!sessionMemory || isEmpty(sessionMemory)) return null // 降级到 legacy compact  // 3. 找到 lastSummarizedMessageId 对应的消息索引  const lastSummarizedIndex = messages.findIndex(    msg =&gt; msg.uuid === lastSummarizedMessageId  )  // 4. 调整索引保护 API 不变性：  //    - 确保保留 tool_use / tool_result 配对  //    - 确保保留 thinking blocks 与同 message.id 的消息合并  const startIndex = adjustIndexToPreserveAPIInvariants(    messages, lastSummarizedIndex + 1  )  // 5. 保留 startIndex 之后的新消息 + session memory 摘要  //    这样新消息有完整上下文，旧信息在 session memory 中有摘要  // 6. 预算检查：最终 token 数必须在 [minTokens, maxTokens] 范围内  //    默认：10K - 40K tokens&#125;</code></pre><p>这比完整的 <code>compactConversation</code>（启动 forked agent 做全对话摘要）要便宜得多，因为：</p><ul><li>不需要额外的 AI 调用生成摘要（session memory 已经是现成的摘要）</li><li>Token 从 ~167K 压缩到 ~10-40K（保留最近的对话 + 用 session memory 替代旧对话的摘要）</li></ul><hr><h2 id="六、完整记忆生命周期：信息如何流动"><a href="#六、完整记忆生命周期：信息如何流动" class="headerlink" title="六、完整记忆生命周期：信息如何流动"></a>六、完整记忆生命周期：信息如何流动</h2><pre><code>用户在对话中提供信息        │        ├── 显式指令 (&quot;记住这个&quot;) ──→ AI 直接写入 Auto Memory        │                              同时更新 MEMORY.md 索引        │        ├── 隐性经验 (错误修正、偏好) ──→ extractMemories 后台代理        │                                  每 N 轮自动扫描对话        │                                  识别值得保存的信息        │                                  写入对应的 .md 文件        │        ├── 会话进行中的状态 ──→ Session Memory (PostSamplingHook)        │                          定期（每 5K token 或 3 次工具调用）        │                          由 forked agent 更新笔记        │        └── 团队级知识 ──→ Team Memory                             与 Auto Memory 相同的文件结构                             但存储到 ~/.claude/team-memory/&lt;repo&gt;/                             自动同步到服务器共享给团队成员        │        ▼下次会话启动        │        ├── CLAUDE.md 必加载 ← 确定性配置        ├── memory/MEMORY.md 索引加载 ← 持久知识（跨会话）        ├── team/MEMORY.md 索引加载 ← 团队知识（跨成员）        ├── session-memory.md 如果存在 ← 上次会话的临时笔记        │        ▼AI 带着所有记忆开始新对话</code></pre><hr><h2 id="七、关键设计原则与实现细节"><a href="#七、关键设计原则与实现细节" class="headerlink" title="七、关键设计原则与实现细节"></a>七、关键设计原则与实现细节</h2><h3 id="7-1-记忆与压缩的协同"><a href="#7-1-记忆与压缩的协同" class="headerlink" title="7.1 记忆与压缩的协同"></a>7.1 记忆与压缩的协同</h3><p>Session Memory 最初是为了替代 Auto Compact 而设计的——如果有了 session memory 摘要，就不需要再浪费一次 AI 调用来做全对话摘要：</p><pre><code class="language-typescript">// autoCompactIfNeeded() 流程：// 1. 先尝试 Session Memory Compact（不需要额外 AI 调用）const sessionMemoryResult = await trySessionMemoryCompaction(...)if (sessionMemoryResult) &#123;  return &#123; wasCompacted: true &#125; // 成功！不需要完整压缩&#125;// 2. 如果 session memory 不可用或没有内容，才做完整压缩const compactionResult = await compactConversation(...)</code></pre><p><strong>熔断与回退：</strong></p><ul><li>Session Memory 为空（只有模板）→ 降级到 legacy compact</li><li><code>lastSummarizedMessageId</code> 找不到（消息被压缩掉了）→ 降级到 legacy compact</li><li>预算检查失败 → 降级到 legacy compact</li></ul><h3 id="7-2-索引（MEMORY-md）的设计"><a href="#7-2-索引（MEMORY-md）的设计" class="headerlink" title="7.2 索引（MEMORY.md）的设计"></a>7.2 索引（MEMORY.md）的设计</h3><pre><code class="language-markdown">- [Title](file.md) — one-line hook</code></pre><p>这种设计有几个关键好处：</p><ol><li><strong>低开销加载</strong>：索引文件很小（200 行 × 150 字符 ≈ 7.5K 字符），可以快速解析</li><li><strong>按需加载内容</strong>：不需要一次加载所有记忆文件，只有相关的时候才 read</li><li><strong>用户可审查</strong>：索引文件可读，用户可以删除不需要的条目</li><li><strong>语义组织</strong>：按主题分类，不是按时间排序</li><li><strong>自我修复</strong>：AI 可以更新或删除过时的条目</li></ol><h3 id="7-3-游标与增量提取"><a href="#7-3-游标与增量提取" class="headerlink" title="7.3 游标与增量提取"></a>7.3 游标与增量提取</h3><p>提取代理不是每次都扫描整个对话历史：</p><pre><code class="language-typescript">// 游标机制：lastMemoryMessageUuid// 每次提取只处理游标之后的新消息const newMessageCount = countModelVisibleMessagesSince(messages, lastMemoryMessageUuid)// 如果游标对应的消息被压缩删除了（找不到 UUID），回退到全量扫描if (!foundStart) &#123;  return count(messages, isModelVisibleMessage) // 兜底策略&#125;</code></pre><p>这确保提取代理每次只处理<strong>增量</strong>内容，成本可控。</p><h3 id="7-4-并行调用合并（Coalescing）"><a href="#7-4-并行调用合并（Coalescing）" class="headerlink" title="7.4 并行调用合并（Coalescing）"></a>7.4 并行调用合并（Coalescing）</h3><p>当多个 trigger 几乎同时到达时，不会启动多个提取代理：</p><pre><code class="language-typescript">if (inProgress) &#123;  // 有提取正在进行 → 保存上下文，等当前结束后做一次 trailing extraction  pendingContext = &#123; context, appendSystemMessage &#125;  return&#125;// 当前提取结束后：const trailing = pendingContextpendingContext = undefinedif (trailing) &#123;  await runExtraction(&#123; context: trailing.context, isTrailingRun: true &#125;)  // trailing run 使用新的游标（上次已推进），只处理间隔期的新消息&#125;</code></pre><h3 id="7-5-敏感信息防护"><a href="#7-5-敏感信息防护" class="headerlink" title="7.5 敏感信息防护"></a>7.5 敏感信息防护</h3><pre><code class="language-typescript">// Team Memory 推送前扫描密钥async function scanForSecrets(content: string): Promise&lt;boolean&gt; &#123;  // 正则匹配 API key、password、token 等模式  // 发现疑似密钥 → 跳过该文件上传&#125;// 超过 250KB 的文件不上传到团队空间if (fileSize &gt; MAX_FILE_SIZE_BYTES) &#123;  skippedFiles.push(&#123; path, reason: &#39;too_large&#39; &#125;)&#125;</code></pre><hr><h2 id="八、对低代码开发智能体团队的启示"><a href="#八、对低代码开发智能体团队的启示" class="headerlink" title="八、对低代码开发智能体团队的启示"></a>八、对低代码开发智能体团队的启示</h2><h3 id="启示-1：多时间尺度的记忆系统"><a href="#启示-1：多时间尺度的记忆系统" class="headerlink" title="启示 1：多时间尺度的记忆系统"></a>启示 1：多时间尺度的记忆系统</h3><p>Claude Code 的记忆不是”一块大脑”，而是多个不同时间尺度的系统：</p><table><thead><tr><th>系统</th><th>保留周期</th><th>更新频率</th><th>触发方式</th></tr></thead><tbody><tr><td>Session Memory</td><td>会话期间</td><td>每 5K token &#x2F; 3 次工具调用</td><td>PostSampling Hook</td></tr><tr><td>Auto Memory</td><td>永久</td><td>每 N 轮对话</td><td>Stop Hook</td></tr><tr><td>Team Memory</td><td>永久 + 云端同步</td><td>随 Auto Memory 一起管理</td><td>同上 + 定时推送</td></tr><tr><td>CLAUDE.md</td><td>永久</td><td>手动</td><td>启动时加载</td></tr></tbody></table><p><strong>应用：</strong> 低代码平台应该有类似的记忆分层——工作流中间状态（短期）、项目经验（中期）、组织最佳实践（长期）应该有不同存储和生命周期。</p><h3 id="启示-2：后台提取-前台直接保存的双路径"><a href="#启示-2：后台提取-前台直接保存的双路径" class="headerlink" title="启示 2：后台提取 + 前台直接保存的双路径"></a>启示 2：后台提取 + 前台直接保存的双路径</h3><p>记忆有两条写入路径：</p><ol><li><strong>前台直接保存</strong>：用户说”记住这个”时 AI 直接写入</li><li><strong>后台自动提取</strong>：对话结束后提取代理分析并提取</li></ol><p>两者通过 <code>hasMemoryWritesSince</code> 互斥——避免重复劳动。</p><p><strong>应用：</strong> 低代码平台中，用户应该能直接保存知识，同时系统也应该有后台自动提取能力（从执行日志、错误模式、流程变更中学习）。</p><h3 id="启示-3：索引与内容分离的架构"><a href="#启示-3：索引与内容分离的架构" class="headerlink" title="启示 3：索引与内容分离的架构"></a>启示 3：索引与内容分离的架构</h3><p><code>MEMORY.md</code>（索引）与 <code>.md</code> 文件（内容）分离的设计：</p><ul><li>索引永远加载，内容按需加载</li><li>索引小（200 行 × 150 字），内容按需读</li><li>用户可以审查和编辑索引</li></ul><p><strong>应用：</strong> 如果低代码平台有大量可学习的”模式”或”规则”，应该用索引+内容的两级结构，而不是一次性加载所有模式。</p><h3 id="启示-4：记忆本身可以替代压缩"><a href="#启示-4：记忆本身可以替代压缩" class="headerlink" title="启示 4：记忆本身可以替代压缩"></a>启示 4：记忆本身可以替代压缩</h3><p>Session Memory 是 Auto Compact 的廉价替代品——它已经是 AI 生成的结构化摘要，不需要再启动一个 forked agent 生成摘要。</p><p><strong>应用：</strong> 低代码平台如果积累了工作流执行日志&#x2F;笔记，可以在需要”精简上下文”时直接使用这些笔记作为摘要，而不需要额外调用 AI。</p><h3 id="启示-5：记忆写入的最小化权限模型"><a href="#启示-5：记忆写入的最小化权限模型" class="headerlink" title="启示 5：记忆写入的最小化权限模型"></a>启示 5：记忆写入的最小化权限模型</h3><p>提取代理只被授予最小必要权限：</p><ul><li>只读工具不受限（Read&#x2F;Grep&#x2F;Glob&#x2F;Bash 只读命令）</li><li>写工具严格限定在 memory 目录</li><li>其他一切工具拒绝</li></ul><p><strong>应用：</strong> 低代码平台中自动学习&#x2F;记忆的智能体应该有类似的受限权限——它可以读取上下文信息、写入记忆文件，但不能执行修改业务数据的操作。</p><h3 id="启示-6：增量提取和游标管理"><a href="#启示-6：增量提取和游标管理" class="headerlink" title="启示 6：增量提取和游标管理"></a>启示 6：增量提取和游标管理</h3><p>提取代理通过 <code>lastMemoryMessageUuid</code> 游标只处理新消息，如果游标对应消息被压缩删除了就回退到全量。这是增量消费的标准模式。</p><p><strong>应用：</strong> 任何基于对话历史的持续学习系统都需要游标管理——记住上次处理到哪里了，以及当历史记录被修改&#x2F;删除时的回退策略。</p><h3 id="启示-7：记忆的压缩与截断"><a href="#启示-7：记忆的压缩与截断" class="headerlink" title="启示 7：记忆的压缩与截断"></a>启示 7：记忆的压缩与截断</h3><p>Session Memory 有硬性上限（12K tokens，每段 2K tokens），提取时 AI 会自动截断超长段落并优先保留 <code>Current State</code> 和 <code>Errors &amp; Corrections</code>。</p><p><strong>应用：</strong> 低代码平台的学习模块应该有容量管理——当知识库太大时，AI 应该优先保留哪些信息、淘汰哪些信息。这需要明确的内容策略和截断规则。</p><h3 id="启示-8：团队知识的版本控制与安全"><a href="#启示-8：团队知识的版本控制与安全" class="headerlink" title="启示 8：团队知识的版本控制与安全"></a>启示 8：团队知识的版本控制与安全</h3><p>Team Memory 用 Git 仓库作为标识、Etag-based 增量同步、推送前自动扫描密钥、单次推送有 200KB 限制、大文件分批上传。</p><p><strong>应用：</strong> 如果低代码平台有”团队级知识”概念，需要类似的：</p><ul><li>基于内容哈希的增量同步（避免全量传输）</li><li>冲突检测与重试</li><li>敏感信息自动过滤</li><li>推送大小限制</li></ul>]]></content>
    
    
    <summary type="html">Claude Code 的记忆系统不是单一的&quot;记忆&quot;功能，而是一个**多层、多作用域、多生命周期**的记忆体系。整体分为：</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="ClaudeCode" scheme="https://flashj.cn/tags/ClaudeCode/"/>
    
    <category term="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
  </entry>
  
  <entry>
    <title>Claude Code 长上下文管理策略分析</title>
    <link href="https://flashj.cn/claude-code-long-context-management-strategy-analysis.html"/>
    <id>https://flashj.cn/claude-code-long-context-management-strategy-analysis.html</id>
    <published>2026-04-01T13:32:00.000Z</published>
    <updated>2026-04-01T14:10:58.482Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Claude-Code-长上下文管理策略分析"><a href="#Claude-Code-长上下文管理策略分析" class="headerlink" title="Claude Code 长上下文管理策略分析"></a>Claude Code 长上下文管理策略分析</h1><blockquote><p>基于 <code>@anthropic-ai/claude-code@2.1.88</code> 源码还原项目<br>核心文件：<code>services/compact/</code>, <code>utils/toolResultStorage.ts</code>, <code>query.ts</code>, <code>services/contextCollapse/</code></p></blockquote><hr><h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>Claude Code 不是简单依赖 LLM 的 256K&#x2F;512K&#x2F;1M 上下文窗口硬抗，而是设计了一套<strong>多层、递进式</strong>的上下文管理系统。共 6 层防线，由轻到重依次触发，确保在任何交互长度下都能保持 AI 响应的质量和速度。</p><hr><h2 id="核心架构：Query-循环中的执行顺序"><a href="#核心架构：Query-循环中的执行顺序" class="headerlink" title="核心架构：Query 循环中的执行顺序"></a>核心架构：Query 循环中的执行顺序</h2><pre><code>每次 AI API 调用前，按以下顺序执行：1. applyToolResultBudget()     — 裁剪超大工具结果（零 API 开销）2. Snip Compact                — 移除旧的 API round groups3. Microcompact                — 清理旧工具结果（缓存编辑 or 时间触发）4. Context Collapse              — 实验性细粒度管理（可选，替代 autocompact）5. Auto Compact                — 如果以上都不够，AI 摘要化整个对话                                ↓                           发送 API 请求</code></pre><p>每层策略的关键特征对比：</p><table><thead><tr><th>层级</th><th>策略</th><th>触发方式</th><th>API 调用</th><th>压缩比</th><th>保留精度</th></tr></thead><tbody><tr><td>1a</td><td>缓存编辑 Microcompact</td><td>工具数量阈值</td><td>否（服务端编辑）</td><td>低</td><td>高（只删过期工具结果）</td></tr><tr><td>1b</td><td>基于时间的 Microcompact</td><td>时间间隔</td><td>否</td><td>低</td><td>高</td></tr><tr><td>2</td><td>Snip Compact</td><td>阈值</td><td>可能</td><td>中</td><td>中（裁剪整段对话）</td></tr><tr><td>3</td><td>聚合工具结果预算</td><td>每次调用前</td><td>否</td><td>中</td><td>中（大结果→文件+预览）</td></tr><tr><td>4</td><td>Auto Compact</td><td>Token 阈值</td><td>是（1次 API）</td><td>高</td><td>低（AI 摘要化）</td></tr><tr><td>5</td><td>Context Collapse</td><td>百分比阈值</td><td>可能</td><td>可调</td><td>高</td></tr></tbody></table><hr><h2 id="第一层：Microcompact（微压缩）"><a href="#第一层：Microcompact（微压缩）" class="headerlink" title="第一层：Microcompact（微压缩）"></a>第一层：Microcompact（微压缩）</h2><p>最轻量操作，不请求额外 API 调用，纯本地或服务端编辑完成。</p><h3 id="1a-缓存编辑-Microcompact（Cached-Microcompact）"><a href="#1a-缓存编辑-Microcompact（Cached-Microcompact）" class="headerlink" title="1a. 缓存编辑 Microcompact（Cached Microcompact）"></a>1a. 缓存编辑 Microcompact（Cached Microcompact）</h3><p>利用 Anthropic API 的 <code>cache_edits</code> 功能，在服务端标记某些 token 为”已删除”，<strong>不破坏 prompt cache 前缀</strong>。这是最高效的一层。</p><p><strong>只对特定工具做清理：</strong></p><pre><code class="language-typescript">const COMPACTABLE_TOOLS = new Set([  &#39;Read&#39;, &#39;Bash&#39;, &#39;Grep&#39;, &#39;Glob&#39;, &#39;WebSearch&#39;, &#39;WebFetch&#39;, &#39;Edit&#39;, &#39;Write&#39;])</code></pre><p><strong>触发逻辑：</strong> 按计数器触发——保留最近 N 个工具结果，超出阈值的旧结果通过 <code>cache_edits</code> API 删除。</p><p><strong>关键特征：</strong></p><ul><li>不修改本地消息内容</li><li>使用来自 GrowthBook 的远程配置（trigger threshold, keep recent）</li><li>只在主线程运行，防止 forked agent 污染全局状态</li><li>返回的消息内容不变，<code>cache_reference</code> 和 <code>cache_edits</code> 在 API 层添加</li></ul><p><strong>源码路径：</strong> <code>services/compact/microCompact.ts</code></p><h3 id="1b-基于时间的-Microcompact（Time-based-Microcompact）"><a href="#1b-基于时间的-Microcompact（Time-based-Microcompact）" class="headerlink" title="1b. 基于时间的 Microcompact（Time-based Microcompact）"></a>1b. 基于时间的 Microcompact（Time-based Microcompact）</h3><p>当用户长时间无交互（超过配置的 <code>gapThresholdMinutes</code>），说明之前的工具结果已经过时，系统清空除最后 N 个之外的所有工具结果内容，替换为 <code>[Old tool result content cleared]</code>。</p><p><strong>触发条件：</strong></p><pre><code class="language-typescript">function evaluateTimeBasedTrigger(messages, querySource) &#123;  // 需要：enabled + 主线程来源 + 最后一个 assistant 消息的时间间隔 &gt; 阈值  const gapMinutes = (Date.now() - lastAssistant.timestamp) / 60_000  return gapMinutes &gt;= config.gapThresholdMinutes&#125;</code></pre><p><strong>清除逻辑：</strong></p><pre><code class="language-typescript">// 清除旧工具结果，只保留最近的 keepRecent 个const keepRecent = Math.max(1, config.keepRecent)const keepSet = new Set(compactableIds.slice(-keepRecent))const clearSet = new Set(compactableIds.filter(id =&gt; !keepSet.has(id)))// 将清除的内容替换为固定文本return &#123; ...block, content: &#39;[Old tool result content cleared]&#39; &#125;</code></pre><p><strong>关键设计：</strong></p><ul><li>至少保留 1 个结果（<code>Math.max(1, keepRecent)</code>），防止清除全部导致零上下文</li><li>清除后重置 cached-MC 状态（因为服务端 cache 已失效）</li><li>通知 prompt cache break detection 预期 token 下降，避免误报</li></ul><p><strong>源码路径：</strong> <code>services/compact/microCompact.ts</code></p><hr><h2 id="第二层：工具结果持久化与聚合预算"><a href="#第二层：工具结果持久化与聚合预算" class="headerlink" title="第二层：工具结果持久化与聚合预算"></a>第二层：工具结果持久化与聚合预算</h2><p>大工具结果不直接放入消息上下文，而是持久化到磁盘。</p><h3 id="单工具结果持久化"><a href="#单工具结果持久化" class="headerlink" title="单工具结果持久化"></a>单工具结果持久化</h3><p>每个工具声明自己的 <code>maxResultSizeChars</code>，超过阈值就<strong>写到磁盘文件</strong>而非注入上下文：</p><pre><code class="language-typescript">// 解析每个工具的持久化阈值function getPersistenceThreshold(toolName, declaredMax) &#123;  // Read 工具 = Infinity（不自持久化，避免 Read→file→Read 循环）  if (!Number.isFinite(declaredMax)) return Infinity  // GrowthBook 远程配置可按工具名覆盖阈值  const overrides = growthbook.getFeature(&#39;tengu_satin_quoll&#39;, &#123;&#125;)  if (overrides?.[toolName]) return overrides[toolName]  // 默认：min(工具声明值, 50_000 chars)  return Math.min(declaredMax, DEFAULT_MAX_RESULT_SIZE_CHARS)&#125;</code></pre><p><strong>持久化结果格式：</strong></p><pre><code class="language-xml">&lt;persisted-output&gt;Output saved to: /path/to/.claude/sessions/&#123;sessionId&#125;/tool-results/&#123;toolUseId&#125;.txtPreview (first 2000 chars): ...&lt;/persisted-output&gt;</code></pre><h3 id="聚合工具结果预算（Tool-Result-Budget）"><a href="#聚合工具结果预算（Tool-Result-Budget）" class="headerlink" title="聚合工具结果预算（Tool Result Budget）"></a>聚合工具结果预算（Tool Result Budget）</h3><p>除了单个工具上限，还有<strong>跨工具、跨 session 的总预算控制</strong>：</p><pre><code class="language-typescript">// 状态必须稳定以保证 prompt cache 前缀不变type ContentReplacementState = &#123;  seenIds: Set&lt;string&gt;        // 已经见过的 tool_use_id，命运已锁定  replacements: Map&lt;string, string&gt;  // 被替换成预览的映射&#125;</code></pre><p>每次 query 循环开始前调用 <code>applyToolResultBudget()</code>：</p><pre><code class="language-typescript">// 计算所有 tool_result 的总 token 数const totalTokens = calculateTotalToolResultTokens(messages)// 超出预算时，按先入先出策略替换最旧的结果为预览if (totalTokens &gt; effectiveMaxTokens) &#123;  // 找到可替换的最旧工具结果  // 将其内容替换为 &lt;persisted-output&gt; 标签和预览  // 记录到 replacements map 中（保证下次调用时一致）&#125;</code></pre><p><strong>关键设计：</strong></p><ul><li><code>seenIds</code> 确保已经做过替换决策的结果不会被二次处理</li><li>通过 <code>ContentReplacementState</code> 跨子 agent 共享缓存决策</li><li>支持 subagent 从 sidechain records 重建父 agent 的替换状态</li></ul><p><strong>源码路径：</strong> <code>utils/toolResultStorage.ts</code></p><hr><h2 id="第三层：Snip-Compact（历史裁剪）"><a href="#第三层：Snip-Compact（历史裁剪）" class="headerlink" title="第三层：Snip Compact（历史裁剪）"></a>第三层：Snip Compact（历史裁剪）</h2><p>通过 <code>feature(&#39;HISTORY_SNIP&#39;)</code> 控制的裁剪机制。Snip <strong>不是摘要</strong>，而是直接移除旧的 API-round groups（assistant message + 对应 tool_result 对），减少 token 占用。</p><pre><code class="language-typescript">// snipTokensFreed 传递给 autocompact，使阈值检查反映 Snip 移除的 token// tokenCountWithEstimation 本身看不到节省（因为它读的是 API usage）</code></pre><p>Snip 在 autocompact 之前运行——如果 Snip 已经把 token 数降到了阈值以下，autocompact 就不会触发，避免不必要的 API 调用。</p><p><strong>源码路径：</strong> <code>services/compact/snipCompact.ts</code></p><hr><h2 id="第四层：Auto-Compact（自动摘要压缩）"><a href="#第四层：Auto-Compact（自动摘要压缩）" class="headerlink" title="第四层：Auto Compact（自动摘要压缩）"></a>第四层：Auto Compact（自动摘要压缩）</h2><p>这是<strong>核心的上下文压缩机制</strong>，也是最重量级的一层。</p><h3 id="触发阈值"><a href="#触发阈值" class="headerlink" title="触发阈值"></a>触发阈值</h3><pre><code class="language-typescript">// 各层级缓冲值const AUTOCOMPACT_BUFFER_TOKENS      = 13_000  // 保留 13K 余量 → 触发自动压缩const WARNING_THRESHOLD_BUFFER_TOKENS  = 20_000  // 警告线（UI 提示）const ERROR_THRESHOLD_BUFFER_TOKENS    = 20_000  // 错误线（阻断新请求）const MANUAL_COMPACT_BUFFER_TOKENS     = 3_000   // 手动压缩极限// 有效上下文窗口 = 总窗口 - 摘要预留function getEffectiveContextWindowSize(model) &#123;  const reservedTokensForSummary = min(getMaxOutputTokens(model), 20_000)  return contextWindow - reservedTokensForSummary&#125;// 触发阈值 = 有效窗口 - 13K 缓冲function getAutoCompactThreshold(model) &#123;  return getEffectiveContextWindowSize(model) - AUTOCOMPACT_BUFFER_TOKENS&#125;</code></pre><p>以 200K 模型为例：</p><ul><li>有效窗口 ≈ 200K - 20K（摘要预留）&#x3D; 180K</li><li>自动压缩阈值 &#x3D; 180K - 13K &#x3D; <strong>167K token</strong></li></ul><h3 id="压缩流程"><a href="#压缩流程" class="headerlink" title="压缩流程"></a>压缩流程</h3><pre><code>compactConversation():  1. 执行 pre_compact hooks（用户可注入清理逻辑）  2. 先尝试 Session Memory Compact     └── 用 AI 生成记忆摘要代替完整压缩（更经济）  3. 调用 compactConversation 核心逻辑：     a. 从消息中剥离图片/文档块（它们不是摘要所需）     b. 启动 forked agent，发送压缩 prompt     c. AI 生成对话摘要     d. 如果摘要请求本身 prompt_too_long → 截断最旧的 round 重试（最多 2 次）  4. 压缩成功后：     a. 清除 fileStateCache     b. 并行生成 post-compact attachments:        - 最近修改的文件（最多 5 个，每个 5K token）        - 异步 Agent 状态        - Plan 文件        - 已调用的技能内容（25K token 预算，每个技能 5K）        - MCP 工具增量     c. 写入 compact boundary marker     d. 写入摘要消息  5. 执行 post_compact hooks 恢复关键上下文  6. 重置 cache read baseline</code></pre><p><strong>压缩后的结果大小：</strong> 约 20-40K token（摘要 + 系统 prompt + 工具 schema + re-injected 关键上下文），远低于原始的 128-256K。</p><h3 id="熔断机制"><a href="#熔断机制" class="headerlink" title="熔断机制"></a>熔断机制</h3><pre><code class="language-typescript">const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3// 连续 3 次压缩失败后放弃，避免浪费 API 调用// 注释记录：BQ 数据显示有 1,279 个 session 连续失败 50-3272 次// 每天浪费约 25 万次 API 调用</code></pre><h3 id="Session-Memory-Compact（优先于完整压缩）"><a href="#Session-Memory-Compact（优先于完整压缩）" class="headerlink" title="Session Memory Compact（优先于完整压缩）"></a>Session Memory Compact（优先于完整压缩）</h3><p>在触发完整压缩前，先尝试生成 Session Memory 摘要。如果 session memory 系统能生成足够的摘要来降低 token 压力，就不需要完整的 AI 摘要化。</p><pre><code class="language-typescript">// 先试 session memory compact，成功了直接返回const sessionMemoryResult = await trySessionMemoryCompaction(  messages, agentId, threshold)if (sessionMemoryResult) return &#123; wasCompacted: true, ... &#125;// 不行再走完整压缩</code></pre><h3 id="Partial-Compact（局部压缩）"><a href="#Partial-Compact（局部压缩）" class="headerlink" title="Partial Compact（局部压缩）"></a>Partial Compact（局部压缩）</h3><p>除了完整压缩整个对话，还支持局部压缩：</p><pre><code class="language-typescript">enum PartialCompactDirection &#123;  &#39;from&#39;,   // 保留 pivot 之前的，摘要之后 → 保留 prompt cache 前缀  &#39;up_to&#39;,  // 保留 pivot 之后的，摘要之前 → 需清理旧 cache&#125;</code></pre><p>用户可以选择压缩对话的某个部分而不影响其他部分。</p><h3 id="压缩后重新注入关键上下文"><a href="#压缩后重新注入关键上下文" class="headerlink" title="压缩后重新注入关键上下文"></a>压缩后重新注入关键上下文</h3><p>Compact 不是一刀切清掉。压缩成功后，通过 attachment 重新注入关键信息：</p><table><thead><tr><th>注入内容</th><th>预算</th><th>说明</th></tr></thead><tbody><tr><td>最近修改的文件</td><td>最多 5 个 × 5K &#x3D; 25K</td><td>让 AI 知道当前代码状态</td></tr><tr><td>异步 Agent 状态</td><td>≤ 50K</td><td>仍在运行的 worker 状态</td></tr><tr><td>Plan 文件</td><td>按需</td><td>当前执行的计划</td></tr><tr><td>已调用技能</td><td>25K 总预算，每个 5K</td><td>让 AI 知道已有哪些技能指令</td></tr><tr><td>MCP 工具增量</td><td>按需</td><td>连接的 MCP 服务器信息</td></tr><tr><td>已发现的工具</td><td>按需</td><td>ToolSearch 发现的工具列表</td></tr></tbody></table><p><strong>源码路径：</strong> <code>services/compact/compact.ts</code>, <code>services/compact/autoCompact.ts</code></p><hr><h2 id="第五层：API-原生上下文管理"><a href="#第五层：API-原生上下文管理" class="headerlink" title="第五层：API 原生上下文管理"></a>第五层：API 原生上下文管理</h2><p>Anthropic API 提供 <code>context_management</code> 功能，客户端通过 <code>getAPIContextManagement()</code> 配置策略：</p><pre><code class="language-typescript">// 工具结果清除策略&#123;  type: &#39;clear_tool_uses_20250919&#39;,  trigger: &#123; type: &#39;input_tokens&#39;, value: 180_000 &#125;,      // 超过 180K 触发  clear_at_least: &#123; type: &#39;input_tokens&#39;, value: 140_000 &#125;,  // 至少清到剩 40K  exclude_tools: [&#39;Edit&#39;, &#39;Write&#39;, &#39;NotebookEdit&#39;],        // 编辑器结果保留&#125;// Thinking 块清除策略&#123;  type: &#39;clear_thinking_20251015&#39;,  keep: &#39;all&#39;  // 正常保留所有 thinking  // 或：&#123; type: &#39;thinking_turns&#39;, value: 1 &#125;  // 长时间闲置后只保留最后一个&#125;</code></pre><p><strong>关键设计：</strong></p><ul><li>这是服务端策略，与客户端配合工作</li><li><code>clear_tool_uses</code> 清除工具调用和结果，但保留 <code>exclude_tools</code> 中的编辑器操作</li><li><code>clear_thinking</code> 保留 thinking 上下文（思考链对推理很重要）</li><li>默认阈值：触发 180K，目标 40K（保留最后 40K token）</li></ul><p><strong>源码路径：</strong> <code>services/compact/apiMicrocompact.ts</code></p><hr><h2 id="第六层：Context-Collapse（上下文坍缩）"><a href="#第六层：Context-Collapse（上下文坍缩）" class="headerlink" title="第六层：Context Collapse（上下文坍缩）"></a>第六层：Context Collapse（上下文坍缩）</h2><p><code>feature(&#39;CONTEXT_COLLAPSE&#39;)</code> 控制的内部实验性功能。这是一个更细粒度的上下文管理系统：</p><ul><li><strong>90% 上下文使用率</strong> 时开始 commit 保存 granular 上下文</li><li><strong>95%</strong> 时阻塞式 spawn 保存</li><li>当启用时，<strong>autocompact 被抑制</strong>（避免 race condition — autocompact 在 ~93% 触发，刚好在 collapse 的 90-95% 之间）</li><li>Collapse IS the context management system when enabled（它是主系统，不是一个补充层）</li></ul><p><strong>源码路径：</strong> <code>services/contextCollapse/</code></p><hr><h2 id="关键设计原则"><a href="#关键设计原则" class="headerlink" title="关键设计原则"></a>关键设计原则</h2><h3 id="1-Prompt-Cache-命中率是核心指标"><a href="#1-Prompt-Cache-命中率是核心指标" class="headerlink" title="1. Prompt Cache 命中率是核心指标"></a>1. Prompt Cache 命中率是核心指标</h3><p>所有压缩策略都考虑 prompt cache：</p><ul><li>Cached Microcompact 之所以最优，是因为它通过 <code>cache_edits</code> 删除内容<strong>不破坏 cache 前缀</strong></li><li><code>partialCompact(&#39;from&#39;)</code> 保留 prompt cache 前缀</li><li>压缩后重置 cache read baseline，避免将合法的 cache drop 误报为 break</li><li>压缩自身使用 forked agent <strong>共享父级 prompt cache</strong>（<code>promptCacheSharingEnabled = true</code>）</li></ul><pre><code class="language-typescript">// 实验确认：不共享 cache 的路径是 98% cache miss// 浪费约 0.76% 的 fleet cache_creation (~38B tokens/day)const promptCacheSharingEnabled = growthbook.getFeature(  &#39;tengu_compact_cache_prefix&#39;, true)</code></pre><h3 id="2-工具结果是上下文膨胀的主要元凶"><a href="#2-工具结果是上下文膨胀的主要元凶" class="headerlink" title="2. 工具结果是上下文膨胀的主要元凶"></a>2. 工具结果是上下文膨胀的主要元凶</h3><p>一个 <code>grep -r</code> 或 <code>cat large_file</code> 就能吃掉 5-10K token。Claude Code 的策略：</p><ul><li>单工具结果有上限（<code>maxResultSizeChars</code>），默认 50K 字符</li><li>Read 工具 <code>maxResultSizeChars = Infinity</code>（通过 <code>maxTokens</code> 自身限流，避免 Read→persist→Read 循环）</li><li>跨工具结果有聚合预算（<code>applyToolResultBudget</code>）</li><li>超大的写到文件，只给预览</li><li>过期的通过 microcompact 批量清空</li></ul><h3 id="3-自动压缩可能失败，需要熔断"><a href="#3-自动压缩可能失败，需要熔断" class="headerlink" title="3. 自动压缩可能失败，需要熔断"></a>3. 自动压缩可能失败，需要熔断</h3><p>从实际数据看，有 session 连续压缩失败 3000+ 次，浪费 25 万次 API 调用&#x2F;天。熔断器设计：</p><pre><code class="language-typescript">const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3// 每次压缩失败计数+1，成功后重置为 0// 达到 3 次后直接返回 false，不再尝试if (tracking.consecutiveFailures &gt;= 3) &#123;  logWarn(&#39;autocompact: circuit breaker tripped — skipping future attempts&#39;)  return &#123; wasCompacted: false &#125;&#125;</code></pre><h3 id="4-压缩不是丢失信息，而是重组信息"><a href="#4-压缩不是丢失信息，而是重组信息" class="headerlink" title="4. 压缩不是丢失信息，而是重组信息"></a>4. 压缩不是丢失信息，而是重组信息</h3><p>Compact 成功后通过多层 re-injection 恢复关键上下文：</p><pre><code>压缩前 (128K+)           压缩后 (~30K)─────────────────       ─────────────────系统 prompt (~15K)       系统 prompt (~15K)工具 schema (~10K)       工具 schema (~10K)对话历史 (~80K)    →     对话摘要 (~3K)工具结果 (~20K)          关键文件快照 (~10K)附件 (~3K)               MCP 指令 (~2K)                         技能内容 (~5K)                         Boundary marker (~1K)                         Session Start hooks (~1K)</code></pre><h3 id="5-多级禁用控制"><a href="#5-多级禁用控制" class="headerlink" title="5. 多级禁用控制"></a>5. 多级禁用控制</h3><p>用户可按需关闭不同层次：</p><pre><code class="language-typescript">DISABLE_COMPACT       // 关闭所有压缩DISABLE_AUTO_COMPACT  // 只关自动压缩，保留手动 /compactUSE_API_CLEAR_TOOL_RESULTS  // 启用 API 侧工具结果清除USE_API_CLEAR_TOOL_USES     // 启用 API 侧工具调用清除</code></pre><hr><h2 id="对低代码开发智能体团队的启示"><a href="#对低代码开发智能体团队的启示" class="headerlink" title="对低代码开发智能体团队的启示"></a>对低代码开发智能体团队的启示</h2><h3 id="启示-1：不要赌单一策略，设计多层防线"><a href="#启示-1：不要赌单一策略，设计多层防线" class="headerlink" title="启示 1：不要赌单一策略，设计多层防线"></a>启示 1：不要赌单一策略，设计多层防线</h3><p>Claude Code 不是”满了就压缩”，而是 6 层由轻到重的策略。最轻的（microcompact）是纯本地的零成本操作，最重的（auto compact）才请求 AI 做全对话摘要。</p><p><strong>应用：</strong> 低代码平台中的长对话&#x2F;长工作流也应该有轻重量级的清理（删除过期中间结果）+ 中等重量（时间触发清空）+ 重量级（AI 摘要压缩）的分级策略。</p><h3 id="启示-2：工具结果是上下文膨胀的主要元凶"><a href="#启示-2：工具结果是上下文膨胀的主要元凶" class="headerlink" title="启示 2：工具结果是上下文膨胀的主要元凶"></a>启示 2：工具结果是上下文膨胀的主要元凶</h3><p>5 个 shell 命令的长输出就能吃掉 5-10K token。Claude Code 通过三层控制：</p><ol><li><strong>单工具上限</strong>：每个工具声明自己的 <code>maxResultSizeChars</code></li><li><strong>聚合预算</strong>：所有工具结果总量不能超过阈值</li><li><strong>过期清理</strong>：microcompact 批量清除旧结果</li></ol><p><strong>应用：</strong> 低代码平台中每个节点的输出应该有上限机制，并且跨节点的总输出量也要有预算控制。不同节点类型（读&#x2F;写&#x2F;查询）应有不同上限。</p><h3 id="启示-3：Prompt-Cache-是不可忽略的成本变量"><a href="#启示-3：Prompt-Cache-是不可忽略的成本变量" class="headerlink" title="启示 3：Prompt Cache 是不可忽略的成本变量"></a>启示 3：Prompt Cache 是不可忽略的成本变量</h3><p>所有压缩策略都考虑 prompt cache 命中率。Cached Microcompact 之所以成为最优路径，就是因为它在删除内容的同时不破坏 cache 前缀。</p><p><strong>应用：</strong> 如果系统有 cache 机制，压缩策略的设计必须把 “cache 命中率” 作为核心指标，不只是 “token 数量”。破坏一次 cache 的成本可能比保留一些冗余 token 更贵。</p><h3 id="启示-4：任何自动化-AI-操作都需要熔断器"><a href="#启示-4：任何自动化-AI-操作都需要熔断器" class="headerlink" title="启示 4：任何自动化 AI 操作都需要熔断器"></a>启示 4：任何自动化 AI 操作都需要熔断器</h3><p>从生产数据看，自动化压缩可能在不可恢复的状态下浪费大量 API 调用。3 次失败熔断是合理的起点。</p><p><strong>应用：</strong> 低代码平台中任何自动化的 AI 操作（压缩、摘要、重试、重新路由）都需要 circuit breaker，设定最大连续失败次数后停止尝试。</p><h3 id="启示-5：压缩后必须-re-inject-关键上下文"><a href="#启示-5：压缩后必须-re-inject-关键上下文" class="headerlink" title="启示 5：压缩后必须 re-inject 关键上下文"></a>启示 5：压缩后必须 re-inject 关键上下文</h3><p>Claude Code 压缩后不会让 AI 完全重新开始。它精心设计了 post-compact re-injection 策略：</p><ul><li>最近修改的文件状态（让 AI 知道当前代码）</li><li>Plan 文件（让 AI 知道要做什么）</li><li>已调用技能（让 AI 知道已有的指令）</li><li>MCP 工具增量（让 AI 知道可用的工具）</li></ul><p><strong>应用：</strong> AI 摘要化对话或压缩工作流后，不能让它”失忆”。需要设计 post-compact re-injection 策略，把关键上下文以结构化附件的形式重新注入。</p><h3 id="启示-6：时间作为压缩触发器"><a href="#启示-6：时间作为压缩触发器" class="headerlink" title="启示 6：时间作为压缩触发器"></a>启示 6：时间作为压缩触发器</h3><p><code>time-based microcompact</code> 是一个简单而优雅的设计：用户长时间没交互 &#x3D; 之前的中间结果不再需要。这比基于 token 数量的触发更自然。</p><p><strong>应用：</strong> 低代码工作流中，如果一个任务暂停时间过长，其中间结果（缓存、临时数据）很可能不再需要，可以安全清理。</p><h3 id="启示-7：压缩自身的容错"><a href="#启示-7：压缩自身的容错" class="headerlink" title="启示 7：压缩自身的容错"></a>启示 7：压缩自身的容错</h3><p><code>compactConversation</code> 本身也可能遇到 <code>prompt_too_long</code>（即需要压缩的对话已经长到连压缩请求都发不出去）。它通过截断最旧的 API round 并重试来解决：</p><pre><code class="language-typescript">// 压缩请求本身也 prompt_too_long？截断最旧的内容重试for (ptlAttempts = 0; ; ptlAttempts++) &#123;  summary = await callCompactAPI(messages)  if (!summary.startsWith(&#39;Prompt is too long&#39;)) break  if (ptlAttempts &gt;= MAX_PTL_RETRIES) throw new Error(&#39;不可恢复&#39;)  messages = truncateOldestRounds(messages)&#125;</code></pre><p><strong>应用：</strong> 压缩&#x2F;摘要操作本身也需要有 fallback 路径，不能假设它总能成功。</p>]]></content>
    
    
    <summary type="html">Claude Code 不是简单依赖 LLM 的 256K/512K/1M 上下文窗口硬抗，而是设计了一套**多层、递进式**的上下文管理系统。共 6 层防线，由轻到重依次触发，确保在任何交互长度下都能保持 AI 响应的质量和速度。</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="ClaudeCode" scheme="https://flashj.cn/tags/ClaudeCode/"/>
    
    <category term="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
  </entry>
  
  <entry>
    <title>AI一分钟给你5年功力，却练不出扫地僧的“无招胜有招”</title>
    <link href="https://flashj.cn/AI-1min-5yrs-prowess-vs-Sweeping-Monk-Formless-Skill.html"/>
    <id>https://flashj.cn/AI-1min-5yrs-prowess-vs-Sweeping-Monk-Formless-Skill.html</id>
    <published>2026-03-16T00:21:00.000Z</published>
    <updated>2026-03-16T00:46:42.998Z</updated>
    
    <content type="html"><![CDATA[<h1 id="AI一分钟给你5年功力，却练不出扫地僧的“无招胜有招”"><a href="#AI一分钟给你5年功力，却练不出扫地僧的“无招胜有招”" class="headerlink" title="AI一分钟给你5年功力，却练不出扫地僧的“无招胜有招”"></a>AI一分钟给你5年功力，却练不出扫地僧的“无招胜有招”</h1><p>最近一个月，OpenClaw这只“AI龙虾”席卷了整个投资圈。闲鱼上有人把GitHub免费的投资技能包打包标价5万，还真有人买单；到处都在传“50美元启动金，48小时翻到2980美元”的神话，仿佛不用这个AI，你就错过了一夜暴富的船，被这个时代甩在了身后。</p><p>很多人说，就算不让AI直接替我炒股，让它帮我做投研总没错吧？几分钟就能吐出一份结构完整、数据翔实的行业分析，条理比刚入行的研究员写得还规整；一句话就能筛出符合条件的标的，连投资逻辑都给你理得明明白白。以前要花三五天啃的资料，AI三分钟就给你安排得妥妥当当。</p><p>这像极了武侠江湖里，突然出现了一本速成秘籍。你不用再从扎马步、练长拳开始熬，不用蹲在山洞里十年磨一剑，AI一分钟就能把名门正派练了三五年的基础招式、通用心法、江湖规矩，全灌进你的脑子里。出门跟人过两招，招式有模有样，甚至比很多练了一两年的门派弟子都打得标准。</p><p>可问题也恰恰出在这里。<br>AI能给你速成的招式，能让你快速从门外汉变成能比划两下的入门者，却给不了真正的高手在江湖里滚了几十年，挨过刀、踩过坑、看透了规矩背后的门道，磨出来的那一身“功夫之外的功夫”。那些真正的扫地僧，心中装的从来不是一招一式的标准动作，而是整个江湖的风云变幻、人心向背，这份修为，从来不是速成秘籍能给的。</p><h2 id="一、AI能把标准招式练到极致，却创不出颠覆江湖的新武功"><a href="#一、AI能把标准招式练到极致，却创不出颠覆江湖的新武功" class="headerlink" title="一、AI能把标准招式练到极致，却创不出颠覆江湖的新武功"></a>一、AI能把标准招式练到极致，却创不出颠覆江湖的新武功</h2><p>放在程序员和研发的世界里，写代码就如同练武功。<br>AI最擅长的，就是把各大门派的基础招式玩得炉火纯青。你要写CRUD接口、标准算法实现、主流框架的规范代码，甚至是常见bug的修复、通用测试用例，它都能信手拈来，比很多练了三五年的普通开发者打得还标准、还高效。它帮你省掉了抠语法、查文档、套模板的枯燥功夫，让你一分钟就能拿到别人熬了几百个日夜才摸透的常规写法。</p><p>可真正能在技术江湖里开宗立派、留下名字的高手，厉害的从来不是把标准招式打得多完美，而是能跳出拳谱的束缚，甚至创出一套前所未有的新武功。<br>当年前端江湖，所有人都认MVVM双向绑定是正统，就像江湖上都觉得剑法必须攻守兼备、有来有回，这是颠扑不破的正道。所有主流框架都沿着这条路走，拳谱上写得明明白白，所有人都照着练。可React偏偏反其道而行之，拿出了虚拟DOM、单向数据流这套“歪门邪道”——我不要攻守兼备的套路，我就把一件事做到极致，所有变化都藏在这一套逻辑里。<br>当时全江湖的人都骂它反直觉、多此一举，可就是这套不按拳谱出牌的剑法，直接重构了整个前端江湖。AI能把当时最正统的双向绑定玩出花来，却绝对创不出React这样的新武功。因为这套东西，根本不在任何现成的训练数据里，它来自对前端开发本质的通透理解，是跳出了所有固有共识的颠覆，而这，恰恰是AI的盲区。</p><p>再比如当年Jeff Dean团队拿出MapReduce、BigTable的时候，整个行业的共识是，海量数据处理必须靠高端大型机，就像要打赢硬仗，必须用祖传的玄铁重剑，没有足够的内力根本玩不转。可他们偏偏创出了一套全新的分布式心法，用一堆廉价的普通PC集群，就像一群资质平平的江湖弟子，靠一套精妙的配合逻辑，打出了比玄铁重剑还强的威力。<br>这份创新，从来不是来自对现有招式的组合，而是对技术底层逻辑的彻底重构。AI连这套武功的门在哪都找不到，更别说把它创出来了。</p><p>更不用说那些藏在代码之外的决策。行业里都觉得，微服务拆分得越细，解耦越彻底，架构越先进，就像拳谱里说的，招式拆得越散，越不容易露出破绽。可真正的老江湖，会根据自己门派的体量、业务的阶段，反其道而行之——早期快速迭代的时候，偏偏用单体架构，不拆那么多花里胡哨的招式，反而跑得更快、更稳，少了很多分布式带来的不必要的麻烦。<br>这个决策，从来不是拳谱里写的“最佳实践”，而是架构师带了十几年团队、踩过无数坑、挨过无数次线上故障的打，才悟出来的道理。AI只会给你行业里最标准的拆分方案，永远不会告诉你，有时候不按拳谱打，才是赢的关键。</p><h2 id="二、AI能给你全江湖的通用规矩，却看不透规矩之外的真实江湖"><a href="#二、AI能给你全江湖的通用规矩，却看不透规矩之外的真实江湖" class="headerlink" title="二、AI能给你全江湖的通用规矩，却看不透规矩之外的真实江湖"></a>二、AI能给你全江湖的通用规矩，却看不透规矩之外的真实江湖</h2><p>做互联网产品，就像在江湖里开镖局、闯地盘。<br>AI能一分钟给你一本《江湖镖局运营全手册》，里面写满了全行业都在用的标准玩法：电商APP该有的首页推荐、分类、购物车、个人中心四件套，用户增长该做的签到、满减、拼团、裂变拉新，社交产品该有的关注、互动、推荐流逻辑。这些都是被全江湖验证过的常规套路，是一个镖局开起来必备的基本功，练个三五年就能摸透，AI一分钟就能全给你。</p><p>可真正能让你从一个名不见经传的小镖局，做成能和武林盟主分庭抗礼的大门派的，从来不是把这些标准规矩玩得多溜，而是看透了规矩之外的、那个真实的江湖。<br>当年电商江湖，淘宝和京东两大巨头已经把地盘划得明明白白，全江湖都认，消费升级是正道，要做高端品牌、抓一二线城市的大户人家，要讲格调、讲品质，这是开镖局的铁律。所有人都照着这个规矩来，觉得只有这条路才有油水。<br>可拼多多偏偏不走这条阳关道，它盯上了江湖里没人在意的县城、乡镇，盯上了那些被主流镖局忽略的普通人。它不做高端格调，就做极致性价比；不走传统的流量路子，就靠微信这个江湖小道做社交裂变。当时全江湖的人都笑它，说下沉市场没前途，社交裂变是旁门左道，可就是这条没人走的路，让它硬生生杀出了一个江湖第三的位置，成了谁都不敢小瞧的大门派。<br>AI能给你当时全江湖最标准的“高端镖局运营心法”，却给不了这份看透江湖底层的眼光。因为这些东西，根本不在公开的运营手册里，是跑遍了大江南北、跟无数普通人打交道，才摸透的真实需求，是对江湖生态的重新理解，这份体感，AI拿不到。</p><p>再看当年的抖音，入局的时候，快手已经是短视频江湖的老大。全行业都认，做短视频就得做社交关系，让用户关注创作者，用双列feed给用户选择权，就像开个集市，让用户自己挑想看的摊位，这是留住人的正道。可抖音偏偏反着来，搞单列全屏的极致推荐流——我不让你挑，我直接把最合你心意的内容递到你眼前，算法替你做决定。<br>当时所有人都质疑，不给用户选择权，根本留不住人，这是歪路。可就是这套反套路的打法，让抖音后发先至，成了短视频江湖的新霸主。AI能给你当时最主流的“集市运营玩法”，却给不了这份对用户注意力、对人性的深度洞察。因为这不是来自现成的套路，是对“人到底想看什么”的本质理解，是老江湖摸透了看客心思，才敢下的决断。</p><p>更不用说微信的诞生。当年移动IM江湖，米聊、飞信都在疯狂堆功能，附近的人、群组、游戏、新闻、表情包，恨不得把所有东西都塞进去，就像门派都在疯狂给自家武功加招式，觉得招式越多，武功越厉害，用户越喜欢。可张小龙偏偏反其道而行之，他说，武功的最高境界，是少，是稳，是让用户不用费脑子。<br>早期的微信，连已读功能都没有，没有花里胡哨的玩法，就是极致简单的聊天功能，就像一套只有三招的剑法，却招招都戳中了用户最核心的需求。当时很多人觉得，功能这么少，肯定打不过别人，可就是这套极简的剑法，成了十几亿人都离不开的国民应用。AI能给你当时全江湖最全的“IM功能清单”，却给不了这份“少即是多”的武学修为。因为这不是来自招式的堆砌，是对人性的通透理解，是几十年磨出来的境界，根本不是速成秘籍能复制的。</p><h2 id="三、AI能给你现成的开馆心法，却破不了传承百年的行业规矩"><a href="#三、AI能给你现成的开馆心法，却破不了传承百年的行业规矩" class="headerlink" title="三、AI能给你现成的开馆心法，却破不了传承百年的行业规矩"></a>三、AI能给你现成的开馆心法，却破不了传承百年的行业规矩</h2><p>做品牌、定商业战略，就像在武馆遍地的江湖里立门户。<br>AI能一分钟给你一套《武馆开馆全流程》，从怎么打广告、招弟子，到怎么搞促销、抢地盘，全是全行业公认的成熟打法。比如做饮料就该铺渠道、做大众口味，做白酒就该讲历史、做高端商务场景，做咖啡就该搞空间、讲格调。这些都是行业里传了十几年的规矩，是练个三五年就能摸透的常规操作，AI能给你安排得明明白白。</p><p>可真正能在红海一样的江湖里杀出来的，从来不是把这些现成的心法玩得多好，而是敢跳出传承了百年的规矩，创出一条没人走过的新路。<br>当年的咖啡江湖，星巴克是绝对的武林盟主，全行业都认，开咖啡馆就得做“第三空间”，要在核心商圈开大店，要讲格调、讲体验，卖的不只是咖啡，是环境、是身份。这是咖啡行业的铁律，所有人都照着做，觉得没有第三空间，根本干不过星巴克。<br>可瑞幸偏偏不信这个邪，它说，咖啡就是个快消品，不是什么高端体验。我不要大店，不要格调，就开小店、做外卖，要便宜、要方便，让你随时随地都能喝到一杯咖啡。当时全行业的人都觉得它疯了，这是自寻死路，可就是这套反套路的打法，让瑞幸硬生生超越了星巴克，成了中国咖啡市场的新老大。<br>AI能给你星巴克那套公认的“高端咖啡馆运营手册”，却给不了这份颠覆行业的战略眼光。因为这不是来自现成的规矩，是对中国人喝咖啡的真实需求的重新定义，是看透了行业本质之后，敢打破所有规矩的魄力，这份东西，AI学不来。</p><p>再看江小白的崛起。白酒江湖，全是百年老字号，传了几十年的规矩是：白酒就得讲历史、讲窖池、讲酿造工艺，核心客户是中年男性，主打高端商务场景。所有品牌都在这条路上卷，比谁的历史久，谁的窖池老，谁的故事更有底蕴。可江小白偏偏不走这条路，它说，我要做年轻人的白酒。<br>它不讲百年历史，只讲年轻人的情绪；不做高端大瓶，只做便携小瓶装；不碰商务宴席，只做朋友聚会的休闲场景。当时白酒行业的老前辈都笑它，说年轻人根本不喝白酒，这条路走不通。可就是这个没人看好的方向，让江小白在红海一样的白酒市场里，杀出了一条全新的赛道，成了年轻人都知道的白酒品牌。<br>AI能给你白酒行业最标准的“老字号品牌打造心法”，却给不了这份跳出固有赛道的定位。因为这不是来自行业的常规认知，是看到了被所有人忽略的群体，打破了行业几十年的固有偏见，这份决断，从来不是AI能做出来的。</p><p>还有元气森林，当年的饮料市场，可口可乐和百事可乐两大巨头垄断了这么多年，全行业都认，饮料就得做甜口，就得靠传统经销商体系铺渠道，无糖饮料是没人买的小众市场。可元气森林偏偏主打“0糖0脂0卡”，抓住了年轻人的健康焦虑，用互联网的玩法做饮料，先打线上和一二线城市，再往下沉市场渗透。就是这套反常规的打法，让它在巨头的眼皮子底下，成长为了饮料行业的新巨头。<br>AI能给你饮料行业最成熟的“大众产品运营套路”，却给不了这份对用户需求变化的敏锐洞察。因为这份洞察，不是来自过去的销售数据，是对当下年轻人生活方式的理解，是对未来消费趋势的预判，这份眼光，是在行业里摸爬滚打几十年才磨出来的，AI给不了。</p><h2 id="四、AI能给你最流行的招式套路，却创不出无招胜有招的境界"><a href="#四、AI能给你最流行的招式套路，却创不出无招胜有招的境界" class="headerlink" title="四、AI能给你最流行的招式套路，却创不出无招胜有招的境界"></a>四、AI能给你最流行的招式套路，却创不出无招胜有招的境界</h2><p>做设计、搞创意、写内容，就像武学里的创招立派。<br>AI能一分钟给你当下江湖最流行的所有风格，极简风、国潮风、酸性设计、侘寂风，还有全网最火的爆款文案模板、短视频脚本套路，3秒钩子、中间反转、结尾互动，这些都是被反复验证过的成熟招式，AI能组合得炉火纯青，比很多练了三五年的设计师、创作者玩得还溜。</p><p>可真正能改写设计史、能破圈流传的内容、能立住的IP，从来不是把流行招式玩得多好，而是能跳出所有套路，创出一套前所未有的东西，甚至重新定义整个行业的审美和规则。<br>当年的手机江湖，诺基亚是绝对的霸主，全行业都认，手机必须有物理键盘，按键越多，操作越方便，这是天经地义的事情，就像武功必须有招式，一招一式都有对应的按键，这是所有门派都认的常识。可乔布斯偏偏不信这个邪，他拿出了iPhone，只留了一个Home键，用一块触控屏解决所有操作。<br>当时全行业的人都觉得他疯了，没有键盘，根本没法打字，这是异想天开。可就是这个反常识的设计，直接淘汰了功能机，开启了智能手机的全新时代。AI能给你当时最标准的“带键盘手机设计方案”，却绝对创不出这种颠覆整个行业的设计。因为这不是来自现有的设计规范，是对用户需求本质的极致洞察，是跳出了所有固有框架的创新，这份东西，根本不在AI的认知里。</p><p>再看戴森的无叶风扇，几百年来，所有人都认，风扇必须有叶片，才能吹出风来，这就像刀必须有刀刃才能砍东西，是刻在所有人认知里的常识。可戴森偏偏打破了这个常识，他用气流倍增技术，做出了没有叶片的风扇，更安全、更美观、更好清洁。<br>这份创新，不是来自对现有风扇设计的优化，是对空气动力学十几年的深耕研究，是跳出了“风扇必须有叶片”这个固有认知的颠覆。在AI的认知里，风扇就该有叶片，就像剑法就该有刀刃，它连想都想不到这种东西，更别说把它创造出来了。</p><p>更不用说内容创作里的破圈奇迹。AI能给你全网最火的爆款模板，能写出符合所有爆款逻辑的文案和脚本，可真正能火遍全网、开创全新内容形式的作品，从来都不按套路出牌。当年《万万没想到》爆火之前，网剧行业的共识是，要大制作、大明星、完整的剧情线，要像电影一样讲究，这是正道。可万合天宜偏偏搞出了一套反套路的玩法，低成本、无厘头、快节奏，单集几分钟，全是不按常理出牌的笑点，没有一招是按拳谱来的。<br>就是这套疯疯癫癫的“野路子”，火遍了全网，开创了网络短剧的全新时代。AI能给你当时最标准的“网剧制作规范”，却绝对写不出这种反套路的内容。因为它的所有认知，都来自已经存在的“拳谱”，而这种真正的创意，恰恰是打破所有拳谱的，是无招胜有招的境界。</p><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>现在的我们，好像都陷入了一种“AI焦虑”里。怕自己不用AI，就比别人慢了；怕自己不会用那些技能包，就被时代淘汰了。就像江湖里人人都抢速成秘籍，生怕晚一步，就打不过别人了。</p><p>可我们要明白，AI真正的价值，是帮我们省掉了扎马步、背拳谱、练基础招式的苦功夫。它能让你一分钟拿到别人练三五年才能摸透的常规套路，让你不用再在入门的事情上浪费大量的时间和精力，能更快地摸到门槛，把精力放在更重要的事情上。</p><p>但它永远替代不了，那些真正的高手在江湖里滚了几十年，磨出来的东西。<br>它能给你标准的招式，却给不了你挨了无数次打，才悟出来的临阵应变；它能给你现成的江湖规矩，却给不了你跑遍大江南北，才摸透的真实江湖体感；它能给你完整的拳谱心法，却给不了你看透武学本质，创出全新武功的悟性和魄力。</p><p>江湖上真正能站稳脚跟、甚至名留青史的，从来不是那些把标准招式背得滚瓜烂熟的人。而是那些看透了招式背后的本质，摸透了江湖的人情世故，哪怕所有人都走同一条路，也敢走出自己的道的人。</p><p>AI能帮你快速成为一个合格的江湖人，却成不了一代宗师，更成不了那个看透了所有江湖规矩，依然能心有丘壑、举重若轻的扫地僧。毕竟，真正的功夫，从来都不在招式里。</p>]]></content>
    
    
    <summary type="html">AI能给你速成的招式，能让你快速从门外汉变成能比划两下的入门者，却给不了真正的高手在江湖里滚了几十年，挨过刀、踩过坑、看透了规矩背后的门道，磨出来的那一身“功夫之外的功夫”。那些真正的扫地僧，心中装的从来不是一招一式的标准动作，而是整个江湖的风云变幻、人心向背，这份修为，从来不是速成秘籍能给的。</summary>
    
    
    
    <category term="生命感悟" scheme="https://flashj.cn/categories/%E7%94%9F%E5%91%BD%E6%84%9F%E6%82%9F/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="openclaw" scheme="https://flashj.cn/tags/openclaw/"/>
    
    <category term="Trae" scheme="https://flashj.cn/tags/Trae/"/>
    
    <category term="vibecoding" scheme="https://flashj.cn/tags/vibecoding/"/>
    
    <category term="ClaudeCode" scheme="https://flashj.cn/tags/ClaudeCode/"/>
    
  </entry>
  
</feed>
