<?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-09-02T10:03:18.730Z</updated>
  <id>https://flashj.cn/</id>
  
  <author>
    <name>Mousebomb</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>GOAT套餐接opencode后切换思考强度的配置</title>
    <link href="https://flashj.cn/opencode-goat-reasoning-variants.html"/>
    <id>https://flashj.cn/opencode-goat-reasoning-variants.html</id>
    <published>2026-09-02T09:19:00.000Z</published>
    <updated>2026-09-02T10:03:18.730Z</updated>
    
    <content type="html"><![CDATA[<h2 id="现象"><a href="#现象" class="headerlink" title="现象"></a>现象</h2><p><a href="https://www.flashj.cn/opencode-goat-commandcode-config.html">上篇接好了 CommandCode GOAT 套餐</a>，模型能正常对话，但我一直没细看一个细节：<strong>deepseek-v4-flash 切不出思考深度</strong>。</p><p>在 opencode go 套餐里同一批模型明明可以切思考档位，换到 goat 上全没了。第一反应是”goat 套餐不支持”——但排查下来根本不是套餐的事，是<strong>配置漏了一环</strong>。</p><h2 id="太长不看的结论"><a href="#太长不看的结论" class="headerlink" title="太长不看的结论"></a>太长不看的结论</h2><p>配置文件再改一下，需要能选思考深度的模型，都给加一句配置：<br><code>&quot;reasoning&quot;: true</code><br>就行了。</p><p>比如</p><pre><code>        &quot;deepseek/deepseek-v4-flash&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,</code></pre><p>啊顺便，今天把GOAT套餐的用量测算也做成实时表格了：</p><p><img src="https://cdn.mousebomb.org/blog/auto/202609021730939.png"></p><p>项目在： <a href="https://github.com/mousebomb/opencode-go-limits">https://github.com/mousebomb/opencode-go-limits</a></p><h2 id="精简了一下配置"><a href="#精简了一下配置" class="headerlink" title="精简了一下配置"></a>精简了一下配置</h2><pre><code class="language-json">&#123;  &quot;$schema&quot;: &quot;https://opencode.ai/config.json&quot;,  &quot;permission&quot;: &#123;  &#125;,  &quot;mcp&quot;: &#123;  &#125;,  &quot;provider&quot;: &#123;    &quot;goat&quot;: &#123;      &quot;npm&quot;: &quot;@ai-sdk/openai-compatible&quot;,      &quot;name&quot;: &quot;goat&quot;,      &quot;options&quot;: &#123;        &quot;baseURL&quot;: &quot;https://api.commandcode.ai/provider/v1&quot;,        &quot;headers&quot;: &#123;&#125;      &#125;,      &quot;models&quot;: &#123;        &quot;deepseek/deepseek-v4-flash-vision-exp&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash Vision (exp)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.8-Flash&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;stepfun/Step-3.7-Flash&quot;: &#123;          &quot;name&quot;: &quot;Step 3.7 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;poolside/laguna-s-2.1-free&quot;: &#123;          &quot;name&quot;: &quot;Laguna S 2.1&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;meta/muse-spark-1.2&quot;: &#123;          &quot;name&quot;: &quot;Muse Spark 1.2&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;meta/muse-spark-1.2-contributor&quot;: &#123;          &quot;name&quot;: &quot;Muse Spark 1.2 Contributor&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;xai/grok-4.5&quot;: &#123;          &quot;name&quot;: &quot;Grok 4.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 500000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;xai/grok-4.6&quot;: &#123;          &quot;name&quot;: &quot;Grok 4.6&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 500000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;      &#125;    &#125;,    &quot;goat-zdr&quot;: &#123;      &quot;npm&quot;: &quot;@ai-sdk/openai-compatible&quot;,      &quot;name&quot;: &quot;goat-zdr&quot;,      &quot;options&quot;: &#123;        &quot;baseURL&quot;: &quot;https://api.commandcode.ai/provider/v1&quot;,        &quot;headers&quot;: &#123;          &quot;x-cmd-zdr&quot;: &quot;1&quot;        &#125;      &#125;,      &quot;models&quot;: &#123;        &quot;deepseek/deepseek-v4-pro&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Pro (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;deepseek/deepseek-v4-flash&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;deepseek/deepseek-v4-flash-fast&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash Fast&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;moonshotai/Kimi-K3&quot;: &#123;          &quot;name&quot;: &quot;Kimi K3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;moonshotai/Kimi-K2.7-Code&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.7 Code&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;moonshotai/Kimi-K2.7-Code-Highspeed&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.7 Code HighSpeed&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;moonshotai/Kimi-K2.6&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.6&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;moonshotai/Kimi-K2.5&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;z-ai/glm-5.3-flash&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.3 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;zai-org/GLM-5.3&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;zai-org/GLM-5.2&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.2&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;zai-org/GLM-5.2-Fast&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.2 Fast&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;zai-org/GLM-5.1&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.1&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;zai-org/GLM-5&quot;: &#123;          &quot;name&quot;: &quot;GLM-5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;MiniMaxAI/MiniMax-M3&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;MiniMaxAI/MiniMax-M2.7&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M2.7&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;MiniMaxAI/MiniMax-M2.5&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;xiaomi/mimo-v2.5-pro&quot;: &#123;          &quot;name&quot;: &quot;MiMo V2.5 Pro&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;xiaomi/mimo-v2.5&quot;: &#123;          &quot;name&quot;: &quot;MiMo V2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.8-Max&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 Max&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.8-27B&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 27B&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262144,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.7-Max&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Max&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.7-Plus&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Plus&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.7-Flash&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.6-Max-Preview&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.6 Max Preview&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;Qwen/Qwen3.6-Plus&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.6 Plus&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;stepfun/Step-3.5-Flash&quot;: &#123;          &quot;name&quot;: &quot;Step 3.5 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;tencent/hy3-paid&quot;: &#123;          &quot;name&quot;: &quot;Tencent Hy3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262144,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;tencent/hy4-preview&quot;: &#123;          &quot;name&quot;: &quot;Tencent Hy4 Preview&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;nvidia/nemotron-3-ultra-550b-a55b&quot;: &#123;          &quot;name&quot;: &quot;Nemotron 3 Ultra&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;thinkingmachines/inkling&quot;: &#123;          &quot;name&quot;: &quot;Inkling&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;thinkingmachines/inkling-small&quot;: &#123;          &quot;name&quot;: &quot;Inkling Small&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;,        &quot;gpt-5.6-sol&quot;: &#123;          &quot;name&quot;: &quot;GPT-5.6 Sol&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1050000,            &quot;output&quot;: 262144          &#125;,          &quot;reasoning&quot;: true        &#125;      &#125;    &#125;  &#125;,  &quot;plugin&quot;: [  ]&#125;</code></pre><hr><h2 id="根因：自定义-provider-缺-reasoning-能力声明"><a href="#根因：自定义-provider-缺-reasoning-能力声明" class="headerlink" title="根因：自定义 provider 缺 reasoning 能力声明"></a>根因：自定义 provider 缺 reasoning 能力声明</h2><p>opencode 给模型生成”思考档位”（variants）的入口是 <code>variants()</code> 函数，开头第一道门卫就是：</p><pre><code class="language-ts">if (!model.capabilities.reasoning) return &#123;&#125;   // 没声明推理能力 → 直接不给档位</code></pre><p>内置 provider（opencode-go、官方 deepseek 等）的模型元数据来自 <a href="https://models.dev/">models.dev</a>，天生带 <code>reasoning: true</code> 和 <code>reasoning_options</code>，所以能出思考档位。</p><p>而 goat 是<strong>自定义 provider</strong>（<code>@ai-sdk/openai-compatible</code>），模型全是我在 <code>opencode.json</code> 里手写的。当时只写了 <code>name</code> 和 <code>limit</code>，<strong>没写 <code>reasoning: true</code></strong> → 能力声明默认 false → <code>variants()</code> 直接返回空，TUI 自然不显示思考档位。</p><p>对照代码看得很清楚（<code>packages/opencode/src/provider/transform.ts</code>）：</p><pre><code class="language-ts">case &quot;@ai-sdk/openai-compatible&quot;:  const efforts = [...WIDELY_SUPPORTED_EFFORTS]        // [&quot;low&quot;,&quot;medium&quot;,&quot;high&quot;]  if (model.api.id.toLowerCase().includes(&quot;deepseek-v4&quot;)) &#123;    efforts.push(&quot;max&quot;)                                // deepseek-v4 额外加 max  &#125;  return Object.fromEntries(efforts.map(e =&gt; [e, &#123; reasoningEffort: e &#125;]))</code></pre><p>也就是说：<code>@ai-sdk/openai-compatible</code> 的模型，只要 <code>reasoning: true</code> 声明到位，opencode 会按模型 ID 自动分配思考档位——deepseek-v4 系列给 <code>low/medium/high/max</code>。</p><h2 id="GOAT-网关本身是支持-effort-的"><a href="#GOAT-网关本身是支持-effort-的" class="headerlink" title="GOAT 网关本身是支持 effort 的"></a>GOAT 网关本身是支持 effort 的</h2><p>顺手验证了网关层：<code>reasoning_effort</code> 参数被真实接受并转发，实测 deepseek-v4-flash 在不同 effort 下 reasoning tokens 数量确实有差异。档位枚举是 <code>low|medium|high|xhigh</code>（<code>none</code> 会报错），<code>max</code> 也能过。</p><p>结论锁定：<strong>能力在，只是 opencode 侧没被告知这个模型能推理。</strong></p><h2 id="修复：给模型补上-reasoning-true"><a href="#修复：给模型补上-reasoning-true" class="headerlink" title="修复：给模型补上 reasoning: true"></a>修复：给模型补上 reasoning: true</h2><p>在 <code>goat</code> 和 <code>goat-zdr</code> 两个 provider 的模型条目里补声明即可：</p><pre><code class="language-json">&quot;deepseek/deepseek-v4-flash&quot;: &#123;  &quot;name&quot;: &quot;DeepSeek V4 Flash (latest)&quot;,  &quot;limit&quot;: &#123; &quot;context&quot;: 1000000, &quot;output&quot;: 262144 &#125;,  &quot;reasoning&quot;: true&#125;</code></pre><p>补完重启，<code>opencode run -m goat/deepseek/deepseek-v4-flash --variant max</code> 实测通过，档位真实生效。</p><h2 id="进阶疑问：给所有模型都标-reasoning-true-安全吗？"><a href="#进阶疑问：给所有模型都标-reasoning-true-安全吗？" class="headerlink" title="进阶疑问：给所有模型都标 reasoning:true 安全吗？"></a>进阶疑问：给所有模型都标 reasoning:true 安全吗？</h2><p>修好 deepseek 后我冒出个念头：与其逐个判断哪些模型该标，不如<strong>全部标 true，把最终裁决权交给 opencode 内置的模型判定逻辑</strong>（它内部有”哪些模型该给档位”的黑名单）。但这是否安全？</p><p>查源码发现：<code>variants()</code> 在给档位前有一份<strong>硬编码黑名单</strong>，命中的模型直接 <code>return &#123;&#125;</code>：</p><pre><code class="language-ts">if (  id.includes(&quot;deepseek-chat&quot;) || id.includes(&quot;deepseek-r1&quot;) ||  id.includes(&quot;deepseek-v3&quot;) ||  id.includes(&quot;minimax&quot;) || (id.includes(&quot;glm&quot;) &amp;&amp; !glm52) ||  id.includes(&quot;kimi&quot;) || id.includes(&quot;qwen&quot;)) return &#123;&#125;</code></pre><p>也就是说 kimi、qwen、glm(非5.2)、minimax(非M3) 这些<strong>即使标了 reasoning:true 也不会出思考档位</strong>——上游本来就不吃 effort 控制（实测 Kimi-K3 发 high 档 reasoning tokens 几乎无变化，印证了黑名单的合理性）。</p><p>剩下的疑问是：标了 true 但被黑名单挡下的模型，opencode 会不会偷偷往请求体塞默认 effort？<strong>用抓包实测打消了这个顾虑</strong>——给 Qwen3.8-Flash（黑名单）标 reasoning:true 后，发出的请求体里 <code>reasoning_effort</code> 字段完全不存在，对话行为跟没标之前一模一样。对照非黑名单的 deepseek-v4-flash，<code>--variant high</code> 时请求体确实带 <code>reasoning_effort: high</code>。</p><p>于是放心地把 <code>goat</code>、<code>goat-zdr</code> 下<strong>全部 74 个模型</strong>都标了 <code>reasoning: true</code>，交给 opencode 的机制去兜底。重构配置后 <code>/models</code> 正常、各模型实测对话正常。</p><h2 id="最终效果对照"><a href="#最终效果对照" class="headerlink" title="最终效果对照"></a>最终效果对照</h2><table><thead><tr><th>模型</th><th>标 reasoning:true 后 TUI 出现的思考档位</th></tr></thead><tbody><tr><td>deepseek-v4 系列（pro&#x2F;flash&#x2F;fast&#x2F;vision）</td><td>low &#x2F; medium &#x2F; high &#x2F; max</td></tr><tr><td>mimo-v2.5、stepfun、tencent、nemotron、inkling、gpt-5.6-sol、muse、grok 等</td><td>low &#x2F; medium &#x2F; high</td></tr><tr><td>GLM-5.2</td><td>high &#x2F; max（单独特判）</td></tr><tr><td>MiniMax-M3</td><td>思考 开 &#x2F; 关（toggle 特判）</td></tr><tr><td>Kimi 系列、Qwen 系列、GLM-5&#x2F;5.1&#x2F;5.3、MiniMax-M2.x</td><td>无档位（硬编码黑名单，上游不支持 effort）</td></tr></tbody></table><h2 id="经验小结"><a href="#经验小结" class="headerlink" title="经验小结"></a>经验小结</h2><ol><li><strong>自定义 provider（openai-compatible）的模型档位全靠自己声明</strong>，<code>reasoning: true</code> 是给档位的必要不充分条件——能不能给、给哪些，由 opencode 内置模型判定逻辑（含黑名单）二次裁决。</li><li><strong>黑名单模型标 reasoning:true 没有副作用</strong>：只影响”能否出现思考档位”这个 UI 开关，请求体不会被注入任何默认 effort 参数。放心全标。</li><li>修完配置记得<strong>重启 opencode</strong>（配置只在启动时加载，不热更新），然后 <code>/models</code> 选中模型按 Tab 循环即可切档位。</li></ol>]]></content>
    
    
    <summary type="html">前一篇 goat 接入配置漏了一环：deepseek-v4-flash 等模型在 /models 里选不了思考深度。排查发现不是 GOAT 套餐不支持，而是自定义 provider 手写模型缺 reasoning 能力声明，被 opencode 的变体生成逻辑拦在了门口。最终给 goat、goat-zdr 全部模型补上 reasoning:true，实测无副作用。</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="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
    <category term="agent" scheme="https://flashj.cn/tags/agent/"/>
    
    <category term="配置" scheme="https://flashj.cn/tags/%E9%85%8D%E7%BD%AE/"/>
    
    <category term="opencode" scheme="https://flashj.cn/tags/opencode/"/>
    
    <category term="CommandCode" scheme="https://flashj.cn/tags/CommandCode/"/>
    
    <category term="goat" scheme="https://flashj.cn/tags/goat/"/>
    
    <category term="reasoning" scheme="https://flashj.cn/tags/reasoning/"/>
    
  </entry>
  
  <entry>
    <title>Paseo Solarized Light 主题插件：低对比度护眼，GitHub 一行命令安装</title>
    <link href="https://flashj.cn/paseo-solarized-light.html"/>
    <id>https://flashj.cn/paseo-solarized-light.html</id>
    <published>2026-09-01T16:00:00.000Z</published>
    <updated>2026-09-01T23:35:30.912Z</updated>
    
    <content type="html"><![CDATA[<p>Paseo 自带的 6 个主题对比度都太高，白的太白、黑的太黑，盯着写代码眼睛难受。所以我给 Paseo 做了一个 <strong>Solarized Light</strong> 主题插件，低对比度、柔和护眼，长期盯屏幕友好。</p><p>之前想过改 Paseo 的 bundle 注入主题，但那样每次升级都要重新打补丁，麻烦。现在不用了——Paseo 官方在 v0.5.0 引入了插件主题接口 <code>plugin.addTheme</code>，直接用插件实现，<strong>不修改 Paseo 任何文件，升级不丢失</strong>。更爽的是昨天发现 Paseo 已经更新到 0.7.0，支持直接从 GitHub 添加插件&#x2F;主题了。</p><h2 id="安装（Paseo-0-7-0-）"><a href="#安装（Paseo-0-7-0-）" class="headerlink" title="安装（Paseo 0.7.0+）"></a>安装（Paseo 0.7.0+）</h2><p>一行命令：</p><pre><code class="language-bash">paseo plugin add mousebomb/paseo-solarized-light</code></pre><p>然后在 <strong>Settings → Appearance</strong> → Theme 选择 <strong>Solarized Light</strong> 就完事了。</p><p><img src="https://cdn.mousebomb.org/blog/auto/202609020734575.png"></p><blockquote><p>0.7.0 之前的版本也能用，走源码目录安装，具体看 <a href="https://github.com/mousebomb/paseo-solarized-light">README</a>。</p></blockquote><h2 id="配色"><a href="#配色" class="headerlink" title="配色"></a>配色</h2><p>基于 Ethan Schoonover 的 <a href="https://ethanschoonover.com/solarized">Solarized</a> 配色，经典的低对比度护眼色板：</p><ul><li>背景 <code>#fdf6e3</code>（base3 米黄）</li><li>前景 <code>#657b83</code>（base00）</li><li>强调色 <code>#cb4b16</code>（橙）</li></ul><p>用了之后眼睛舒服多了。我自己已经切过去，除了写代码，平时看 Paseo 里的 diff、日志也都是这个调子。</p><p>插件和主题都是 MIT 协议，代码在 <a href="https://github.com/mousebomb/paseo-solarized-light">github.com&#x2F;mousebomb&#x2F;paseo-solarized-light</a>，欢迎 star &#x2F; 提 issue。</p>]]></content>
    
    
    <summary type="html">给 Paseo 做了一个 Solarized Light 护眼主题插件，用官方 addTheme 插件接口实现，不用改任何 Paseo 文件、升级不丢失。Paseo 0.7.0 起支持直接从 GitHub 安装插件，一行命令搞定。</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="工具软件" scheme="https://flashj.cn/tags/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    <category term="Paseo" scheme="https://flashj.cn/tags/Paseo/"/>
    
    <category term="Solarized" scheme="https://flashj.cn/tags/Solarized/"/>
    
    <category term="主题" scheme="https://flashj.cn/tags/%E4%B8%BB%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>把 CommandCode goat 套餐接进 opencode：两步配置 + zdr 自定义请求头</title>
    <link href="https://flashj.cn/opencode-goat-commandcode-config.html"/>
    <id>https://flashj.cn/opencode-goat-commandcode-config.html</id>
    <published>2026-08-31T14:13:00.000Z</published>
    <updated>2026-09-02T01:10:44.479Z</updated>
    
    <content type="html"><![CDATA[<h2 id="套餐从opencode-go-换到-CommandCode-GOAT"><a href="#套餐从opencode-go-换到-CommandCode-GOAT" class="headerlink" title="套餐从opencode go 换到 CommandCode GOAT"></a>套餐从opencode go 换到 CommandCode GOAT</h2><p>看到最近冉冉升起的CommandCode GOAT，听说比opencode的go套餐还要划算，支持的模型更多，额度更大。</p><p>看了一下官方的表格， deepseek-v4-flash-vision 是原价，而且60美元额度。<br>opencode go 这个月调整后，deepseek模型给不到60美元额度了，非常不能用。</p><p>正好我明天要续费opencodego了。评估一下，要么买一个月试试。</p><p>主要顾虑：</p><ol><li>隐私保护：是否零数据留存</li><li>是否兼容paseo接入</li><li>是否兼容CodexBar合并看用量</li></ol><h3 id="隐私"><a href="#隐私" class="headerlink" title="隐私"></a>隐私</h3><p>privacy： <a href="https://commandcode.ai/docs/resources/security">https://commandcode.ai/docs/resources/security</a></p><p>他必须买goat 即10美元以上套餐才提供api接入的方式。<br>ZDR政策： <a href="https://commandcode.ai/docs/resources/zdr">https://commandcode.ai/docs/resources/zdr</a></p><p>goat 套餐并不是所有模型保证零数据留存，这一点不像Opencode Go套餐那么透明。</p><p>要零数据留存ZDR的化，要求每个请求带一个 <code>x-cmd-zdr: 1</code> 请求头，这个也能在配置里解决。</p><h3 id="Paseo接入❌"><a href="#Paseo接入❌" class="headerlink" title="Paseo接入❌"></a>Paseo接入❌</h3><p>查了一下Paseo目前不支持CommandCode。<br>所以只能继续用opencode接入GOAT的API ，然后paseo里维持使用opencode。<br>也好，这样也省得再去配openviking、搜索mcp等接入了。<br>所以，问题的重点就是解决，opencode 接入 GOAT api调用。<br>API调用方面，CommandCode GOAT套餐或更高都是支持API调用的。✅</p><h3 id="CodexBar兼容✅"><a href="#CodexBar兼容✅" class="headerlink" title="CodexBar兼容✅"></a>CodexBar兼容✅</h3><p>CodexBar可真顶，各种套餐都能直接查看用量。<br>直接就支持CommandCode。</p><h2 id="配置opencode接入-GOAT套餐"><a href="#配置opencode接入-GOAT套餐" class="headerlink" title="配置opencode接入 GOAT套餐"></a>配置opencode接入 GOAT套餐</h2><p>过程不复杂，就两步：<code>/connect</code> 存 key + 在 <code>opencode.json</code> 里声明 provider。</p><h3 id="第一步：-connect-录入-API-Key"><a href="#第一步：-connect-录入-API-Key" class="headerlink" title="第一步：/connect 录入 API Key"></a>第一步：<code>/connect</code> 录入 API Key</h3><p>在 opencode 里运行：</p><pre><code>/connect</code></pre><p>选 <strong>Other provider</strong>，录入 provider 名 <code>goat</code>，粘贴 API Key 回车。</p><p>Key 会存到 <code>~/.local/share/opencode/auth.json</code>（权限 600，仅当前用户可读），opencode 自动把它作为 <code>Authorization: Bearer &lt;key&gt;</code> 带上，<strong>不需要</strong>写进 opencode.json，避免密钥进 git。</p><h3 id="第二步：配置-opencode-json"><a href="#第二步：配置-opencode-json" class="headerlink" title="第二步：配置 opencode.json"></a>第二步：配置 opencode.json</h3><p>在全局配置 <code>~/.config/opencode/opencode.json</code>（项目级 <code>.opencode/opencode.json</code> 同理）加一个<code>goat</code>的 provider：</p><pre><code class="language-json">&#123;  &quot;provider&quot;: &#123;    &quot;goat&quot;: &#123;      &quot;npm&quot;: &quot;@ai-sdk/openai-compatible&quot;,      &quot;name&quot;: &quot;goat&quot;,      &quot;options&quot;: &#123;        &quot;baseURL&quot;: &quot;https://api.commandcode.ai/provider/v1&quot;      &#125;,      &quot;models&quot;: &#123;        &quot;deepseek/deepseek-v4-flash-vision-exp&quot;: &#123;          &quot;name&quot;: &quot;deepseek-v4-flash-vision-exp&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;deepseek/deepseek-v4-flash&quot;:&#123;          &quot;name&quot;:&quot;deepseek-v4-flash&quot;,          &quot;limit&quot;:          &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;z-ai/glm-5.3-flash&quot;:&#123;          &quot;name&quot;:&quot;glm-5.3-flash&quot;,          &quot;limit&quot;:          &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;      &#125;    &#125;  &#125;&#125;</code></pre><p>要点：</p><ul><li><code>npm</code> 用 <code>@ai-sdk/openai-compatible</code>，CommandCode 提供 OpenAI 兼容接口</li><li><code>baseURL</code> 填 provider 网关地址（不是模型名）</li><li><code>models</code> 的 key 是 API 侧完整模型 ID <code>deepseek/deepseek-v4-flash-vision-exp</code>，<code>limit</code> 按套餐给的上下文&#x2F;输出上限填</li><li>改完<strong>重启 opencode</strong> 生效（配置只在启动时加载，不热更新）</li></ul><h2 id="可选：zdr-自定义请求头"><a href="#可选：zdr-自定义请求头" class="headerlink" title="可选：zdr 自定义请求头"></a>可选：zdr 自定义请求头</h2><p>goat 套餐官方要求每个请求带 <code>x-cmd-zdr: 1</code>。opencode 会把 provider 的 <code>options</code> 原样透传给 <code>@ai-sdk/openai-compatible</code> 构造器，而它原生支持 <code>headers</code>，所以直接写：</p><pre><code class="language-json">&quot;options&quot;: &#123;  &quot;baseURL&quot;: &quot;https://api.commandcode.ai/provider/v1&quot;,  &quot;headers&quot;: &#123;    &quot;x-cmd-zdr&quot;: &quot;1&quot;  &#125;&#125;</code></pre><p>这个头会随每个请求发出，和 <code>/connect</code> 存的 key 互不冲突。<strong>已实测生效。</strong></p><h2 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h2><p>重启 opencode 后 <code>/models</code> 切到 <code>goat/deepseek/deepseek-v4-flash-vision-exp</code> 发一句话，能正常回复就是全套就位了。</p><p>发现deepseek-v4-flash-vision-exp居然不是zdr的upstream？？？？</p><p>好吧，那只能关闭zdr使用了。</p><p>平时不用vision-exp模型。<br>测了ds-v4-flash和glm-5.3-flash都是支持zdr的。</p><p>我也就导入这三个模型用用。<br>commandcode goat套餐里的GLM-5.3-flash比opencode Go给的用量大。</p><h2 id="完善一下配置"><a href="#完善一下配置" class="headerlink" title="完善一下配置"></a>完善一下配置</h2><p>现在用Command Code的GOAT套餐在opencode里用，opencode没有默认官方支持这个供应商。<br>这导致我现在OpenCode里面是手动配置的模型，前面只配置了3个模型。</p><p>现在想要把所有的都配置上。</p><p>关于ZDR，还要做一轮完整的检测，看看哪些模型是支持ZDR的。</p><p>然后还要把已经退订了的opencode go和一大堆乱七八糟的历史遗留provider选项删掉——从auth.json里删。</p><h3 id="清理auth-json"><a href="#清理auth-json" class="headerlink" title="清理auth.json:"></a>清理auth.json:</h3><p><code>/Users/rhett/.local/share/opencode/auth.json</code> 手动用sublime清理一下，以前乱七八糟的太多了。</p><h3 id="配置所有可用模型"><a href="#配置所有可用模型" class="headerlink" title="配置所有可用模型"></a>配置所有可用模型</h3><pre><code>curl https://api.commandcode.ai/provider/v1/models &gt; ~/Downloads/goat-models.json</code></pre><p>读取所有可用的模型。</p><p>需要提取成可用的配置，补充到 <code>/Users/rhett/.config/opencode/opencode.json</code> 里的<code>goat</code>的provider里。</p><p>zdr判定是写一个脚本 ，用类似</p><pre><code>curl https://api.commandcode.ai/provider/v1/chat/completions \  -H &quot;Authorization: Bearer &lt;CMD_API_KEY&gt;&quot; \  -H &quot;Content-Type: application/json&quot; \  -H &quot;x-cmd-zdr: 1&quot; \  -d &#39;&#123;    &quot;model&quot;: &quot;deepseek/deepseek-v4-flash&quot;,    &quot;messages&quot;: [&#123;&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Write a haiku about race conditions.&quot;&#125;]  &#125;&#39;</code></pre><p>的做法，<br>根据官方说法: </p><blockquote><p> if a model has no ZDR-capable upstream the request <strong>fails</strong> with a <code>422</code> (<code>cmd_zdr_no_providers</code>) rather than falling back to a non-ZDR provider.</p></blockquote><p>把每个模型过过去，看看接口哪些会返回422错误，就知道哪些模型不安全了。</p><h3 id="ZDR检测脚本"><a href="#ZDR检测脚本" class="headerlink" title="ZDR检测脚本"></a>ZDR检测脚本</h3><pre><code class="language-bash">#!/bin/bash# ZDR 支持检测脚本：遍历 goat-models.json 中所有模型，检测是否支持 ZDR# 判定规则：带 x-cmd-zdr:1 请求返回 422 cmd_zdr_no_providers =&gt; 不支持 ZDR（不安全）#             返回 200 =&gt; 支持 ZDR# 用法: bash check-zdr.shset -uAPI_KEY=&quot;user_5NNqepzcPpbuusKVXmAzV3mgSe5zmNpttPV9TTryCyzuT7PnmQhxn9HKZHHAwbT6zCzJvKEqNXPvquLeNa8g1u2x&quot;BASE_URL=&quot;https://api.commandcode.ai/provider/v1/chat/completions&quot;MODELS_FILE=&quot;$HOME/Downloads/goat-models.json&quot;OUT_FILE=&quot;$HOME/Downloads/zdr-result.txt&quot;# 读取所有模型 idMODELS=()while IFS= read -r line; do  MODELS+=(&quot;$line&quot;)done &lt; &lt;(python3 -c &quot;import jsonwith open(&#39;$MODELS_FILE&#39;) as f:    data = json.load(f)for m in data[&#39;data&#39;]:    print(m[&#39;id&#39;])&quot;)echo &quot;共 $&#123;#MODELS[@]&#125; 个模型，开始 ZDR 检测...&quot; &gt;&amp;2echo &quot;共 $&#123;#MODELS[@]&#125; 个模型&quot; &gt; &quot;$OUT_FILE&quot;SUPPORT=()NOT_SUPPORT=()for model in &quot;$&#123;MODELS[@]&#125;&quot;; do  resp=$(curl -s -o /tmp/zdr-body.json -w &quot;%&#123;http_code&#125;&quot; \    &quot;$BASE_URL&quot; \    -H &quot;Authorization: Bearer $API_KEY&quot; \    -H &quot;Content-Type: application/json&quot; \    -H &quot;x-cmd-zdr: 1&quot; \    -d &quot;&#123;      \&quot;model\&quot;: \&quot;$model\&quot;,      \&quot;messages\&quot;: [&#123;\&quot;role\&quot;: \&quot;user\&quot;, \&quot;content\&quot;: \&quot;Say OK\&quot;&#125;],      \&quot;max_tokens\&quot;: 8    &#125;&quot;)  code=$resp  if [ &quot;$code&quot; = &quot;200&quot; ]; then    SUPPORT+=(&quot;$model&quot;)    echo &quot;ZDR ✓  $model&quot; | tee -a &quot;$OUT_FILE&quot;  elif [ &quot;$code&quot; = &quot;422&quot; ]; then    NOT_SUPPORT+=(&quot;$model&quot;)    echo &quot;ZDR ✗  $model (422)&quot; | tee -a &quot;$OUT_FILE&quot;  else    NOT_SUPPORT+=(&quot;$model&quot;)    echo &quot;ZDR ?  $model (HTTP $code) $(cat /tmp/zdr-body.json | head -c 120)&quot; | tee -a &quot;$OUT_FILE&quot;  fi  sleep 0.2doneecho &quot;&quot; &gt;&gt; &quot;$OUT_FILE&quot;echo &quot;===== 汇总 =====&quot; &gt;&gt; &quot;$OUT_FILE&quot;echo &quot;支持 ZDR: $&#123;#SUPPORT[@]&#125; 个&quot; &gt;&gt; &quot;$OUT_FILE&quot;for m in &quot;$&#123;SUPPORT[@]&#125;&quot;; do echo &quot;  ✓ $m&quot; &gt;&gt; &quot;$OUT_FILE&quot;; doneecho &quot;不支持/未知: $&#123;#NOT_SUPPORT[@]&#125; 个&quot; &gt;&gt; &quot;$OUT_FILE&quot;for m in &quot;$&#123;NOT_SUPPORT[@]&#125;&quot;; do echo &quot;  ✗ $m&quot; &gt;&gt; &quot;$OUT_FILE&quot;; doneecho &quot;&quot; &gt;&amp;2echo &quot;完成！结果写入: $OUT_FILE&quot; &gt;&amp;2</code></pre><h3 id="ZDR检测结果"><a href="#ZDR检测结果" class="headerlink" title="ZDR检测结果"></a>ZDR检测结果</h3><pre><code>共 61 个模型ZDR ?  claude-sonnet-5 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-sonnet-5\&quot; must be called via /provider/v1/messages (Anthropic Messages shape).&quot;,&quot;tyZDR ?  claude-sonnet-4-6 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-sonnet-4-6\&quot; must be called via /provider/v1/messages (Anthropic Messages shape).&quot;,&quot;ZDR ?  claude-fable-5 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-fable-5\&quot; must be called via /provider/v1/messages (Anthropic Messages shape).&quot;,&quot;typZDR ?  claude-opus-5 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-opus-5\&quot; must be called via /provider/v1/messages (Anthropic Messages shape).&quot;,&quot;typeZDR ?  claude-opus-4-8 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-opus-4-8\&quot; must be called via /provider/v1/messages (Anthropic Messages shape).&quot;,&quot;tyZDR ?  claude-opus-4-7 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-opus-4-7\&quot; must be called via /provider/v1/messages (Anthropic Messages shape).&quot;,&quot;tyZDR ?  claude-haiku-4-5-20251001 (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Model \&quot;claude-haiku-4-5-20251001\&quot; must be called via /provider/v1/messages (Anthropic Messages shZDR ?  gpt-5.6-sol (HTTP 400) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;&#123;\&quot;error\&quot;:&#123;\&quot;message\&quot;:\&quot;Invalid &#39;max_output_tokens&#39;: integer below minimum value. Expected a valuZDR ?  gpt-5.6-terra (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: GPT-5.6 Terra available in Pro and above plans or extra on demand usage&quot;,&quot;type&quot;:ZDR ?  gpt-5.6-luna (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Authentication failed. Please check your credentials.&quot;,&quot;type&quot;:&quot;permission_error&quot;&#125;&#125;ZDR ?  gpt-5.5 (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: GPT-5.5 available in Pro and above plans or extra on demand usage&quot;,&quot;type&quot;:&quot;permiZDR ?  gpt-5.4 (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: GPT-5.4 available in Pro and above plans or extra on demand usage&quot;,&quot;type&quot;:&quot;permiZDR ?  gpt-5.3-codex (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: GPT-5.3 Codex available in Pro and above plans or extra on demand usage&quot;,&quot;type&quot;:ZDR ?  gpt-5.4-mini (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: GPT-5.4 Mini available in Pro and above plans or extra on demand usage&quot;,&quot;type&quot;:&quot;ZDR ✓  deepseek/deepseek-v4-proZDR ✓  deepseek/deepseek-v4-flashZDR ✗  deepseek/deepseek-v4-flash-vision-exp (422)ZDR ✓  deepseek/deepseek-v4-flash-fastZDR ✓  moonshotai/Kimi-K3ZDR ✓  moonshotai/Kimi-K2.7-CodeZDR ✓  moonshotai/Kimi-K2.7-Code-HighspeedZDR ✓  moonshotai/Kimi-K2.6ZDR ✓  moonshotai/Kimi-K2.5ZDR ✓  z-ai/glm-5.3-flashZDR ✓  zai-org/GLM-5.3ZDR ✓  zai-org/GLM-5.2ZDR ✓  zai-org/GLM-5.2-FastZDR ✓  zai-org/GLM-5.1ZDR ✓  zai-org/GLM-5ZDR ✓  MiniMaxAI/MiniMax-M3ZDR ✓  MiniMaxAI/MiniMax-M2.7ZDR ✓  MiniMaxAI/MiniMax-M2.5ZDR ✓  xiaomi/mimo-v2.5-proZDR ✓  xiaomi/mimo-v2.5ZDR ✓  Qwen/Qwen3.8-MaxZDR ✓  Qwen/Qwen3.8-27BZDR ✗  Qwen/Qwen3.8-Flash (422)ZDR ✓  Qwen/Qwen3.7-MaxZDR ✓  Qwen/Qwen3.7-PlusZDR ✓  Qwen/Qwen3.7-FlashZDR ✓  Qwen/Qwen3.6-Max-PreviewZDR ✓  Qwen/Qwen3.6-PlusZDR ✗  stepfun/Step-3.7-Flash (422)ZDR ✓  stepfun/Step-3.5-FlashZDR ✓  tencent/hy3-paidZDR ✓  tencent/hy4-previewZDR ?  google/gemini-3.7-flash (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;Authentication failed. Please check your credentials.&quot;,&quot;type&quot;:&quot;permission_error&quot;&#125;&#125;ZDR ?  google/gemini-3.6-flash (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: Gemini 3.6 Flash available in Pro and above plans or extra on demand usage&quot;,&quot;typZDR ?  google/gemini-3.5-flash (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: Gemini 3.5 Flash available in Pro and above plans or extra on demand usage&quot;,&quot;typZDR ?  google/gemini-3.5-flash-lite (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: Gemini 3.5 Flash Lite available in Pro and above plans or extra on demand usage&quot;ZDR ?  google/gemini-3.1-flash-lite (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: Gemini 3.1 Flash Lite available in Pro and above plans or extra on demand usage&quot;ZDR ?  sakana/fugu-ultra (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: Fugu Ultra available in Provider and above plans or extra on demand usage&quot;,&quot;typeZDR ✓  nvidia/nemotron-3-ultra-550b-a55bZDR ✓  thinkingmachines/inklingZDR ✓  thinkingmachines/inkling-smallZDR ✗  poolside/laguna-s-2.1-free (422)ZDR ?  meta/muse-spark-1.1 (HTTP 403) &#123;&quot;error&quot;:&#123;&quot;message&quot;:&quot;MODEL_NOT_IN_PLAN: Muse Spark 1.1 available in Pro and above plans or extra on demand usage&quot;,&quot;type&quot;ZDR ✗  meta/muse-spark-1.2 (422)ZDR ✗  meta/muse-spark-1.2-contributor (422)ZDR ✗  xai/grok-4.5 (422)ZDR ✗  xai/grok-4.6 (422)===== 汇总 =====支持 ZDR: 32 个  ✓ deepseek/deepseek-v4-pro  ✓ deepseek/deepseek-v4-flash  ✓ deepseek/deepseek-v4-flash-fast  ✓ moonshotai/Kimi-K3  ✓ moonshotai/Kimi-K2.7-Code  ✓ moonshotai/Kimi-K2.7-Code-Highspeed  ✓ moonshotai/Kimi-K2.6  ✓ moonshotai/Kimi-K2.5  ✓ z-ai/glm-5.3-flash  ✓ zai-org/GLM-5.3  ✓ zai-org/GLM-5.2  ✓ zai-org/GLM-5.2-Fast  ✓ zai-org/GLM-5.1  ✓ zai-org/GLM-5  ✓ MiniMaxAI/MiniMax-M3  ✓ MiniMaxAI/MiniMax-M2.7  ✓ MiniMaxAI/MiniMax-M2.5  ✓ xiaomi/mimo-v2.5-pro  ✓ xiaomi/mimo-v2.5  ✓ Qwen/Qwen3.8-Max  ✓ Qwen/Qwen3.8-27B  ✓ Qwen/Qwen3.7-Max  ✓ Qwen/Qwen3.7-Plus  ✓ Qwen/Qwen3.7-Flash  ✓ Qwen/Qwen3.6-Max-Preview  ✓ Qwen/Qwen3.6-Plus  ✓ stepfun/Step-3.5-Flash  ✓ tencent/hy3-paid  ✓ tencent/hy4-preview  ✓ nvidia/nemotron-3-ultra-550b-a55b  ✓ thinkingmachines/inkling  ✓ thinkingmachines/inkling-small不支持/未知: 29 个  ✗ claude-sonnet-5  ✗ claude-sonnet-4-6  ✗ claude-fable-5  ✗ claude-opus-5  ✗ claude-opus-4-8  ✗ claude-opus-4-7  ✗ claude-haiku-4-5-20251001  ✗ gpt-5.6-sol  ✗ gpt-5.6-terra  ✗ gpt-5.6-luna  ✗ gpt-5.5  ✗ gpt-5.4  ✗ gpt-5.3-codex  ✗ gpt-5.4-mini  ✗ deepseek/deepseek-v4-flash-vision-exp  ✗ Qwen/Qwen3.8-Flash  ✗ stepfun/Step-3.7-Flash  ✗ google/gemini-3.7-flash  ✗ google/gemini-3.6-flash  ✗ google/gemini-3.5-flash  ✗ google/gemini-3.5-flash-lite  ✗ google/gemini-3.1-flash-lite  ✗ sakana/fugu-ultra  ✗ poolside/laguna-s-2.1-free  ✗ meta/muse-spark-1.1  ✗ meta/muse-spark-1.2  ✗ meta/muse-spark-1.2-contributor  ✗ xai/grok-4.5  ✗ xai/grok-4.6</code></pre><h2 id="最终配置："><a href="#最终配置：" class="headerlink" title="最终配置："></a>最终配置：</h2><p>最终配置，主要是’provider’部分， 把兼容zdr的和全部的分开了两部分录入的。</p><pre><code>&#123;  &quot;$schema&quot;: &quot;https://opencode.ai/config.json&quot;,  &quot;permission&quot;: &#123;  &#125;,  &quot;mcp&quot;: &#123;  &#125;,  &quot;provider&quot;: &#123;    &quot;goat&quot;: &#123;      &quot;npm&quot;: &quot;@ai-sdk/openai-compatible&quot;,      &quot;name&quot;: &quot;goat&quot;,      &quot;options&quot;: &#123;        &quot;baseURL&quot;: &quot;https://api.commandcode.ai/provider/v1&quot;,        &quot;headers&quot;: &#123;&#125;      &#125;,      &quot;models&quot;: &#123;        &quot;deepseek/deepseek-v4-pro&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Pro (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;deepseek/deepseek-v4-flash&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;deepseek/deepseek-v4-flash-fast&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash Fast&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K3&quot;: &#123;          &quot;name&quot;: &quot;Kimi K3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.7-Code&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.7 Code&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.7-Code-Highspeed&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.7 Code HighSpeed&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.6&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.6&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.5&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;z-ai/glm-5.3-flash&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.3 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.3&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.2&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.2&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.2-Fast&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.2 Fast&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.1&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.1&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5&quot;: &#123;          &quot;name&quot;: &quot;GLM-5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;MiniMaxAI/MiniMax-M3&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;MiniMaxAI/MiniMax-M2.7&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M2.7&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;MiniMaxAI/MiniMax-M2.5&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;xiaomi/mimo-v2.5-pro&quot;: &#123;          &quot;name&quot;: &quot;MiMo V2.5 Pro&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;xiaomi/mimo-v2.5&quot;: &#123;          &quot;name&quot;: &quot;MiMo V2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.8-Max&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 Max&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.8-27B&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 27B&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262144,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.7-Max&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Max&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.7-Plus&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Plus&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.7-Flash&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.6-Max-Preview&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.6 Max Preview&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.6-Plus&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.6 Plus&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;stepfun/Step-3.5-Flash&quot;: &#123;          &quot;name&quot;: &quot;Step 3.5 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;tencent/hy3-paid&quot;: &#123;          &quot;name&quot;: &quot;Tencent Hy3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262144,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;tencent/hy4-preview&quot;: &#123;          &quot;name&quot;: &quot;Tencent Hy4 Preview&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;nvidia/nemotron-3-ultra-550b-a55b&quot;: &#123;          &quot;name&quot;: &quot;Nemotron 3 Ultra&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;thinkingmachines/inkling&quot;: &#123;          &quot;name&quot;: &quot;Inkling&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;thinkingmachines/inkling-small&quot;: &#123;          &quot;name&quot;: &quot;Inkling Small&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;gpt-5.6-sol&quot;: &#123;          &quot;name&quot;: &quot;GPT-5.6 Sol&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1050000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;deepseek/deepseek-v4-flash-vision-exp&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash Vision (exp)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.8-Flash&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;stepfun/Step-3.7-Flash&quot;: &#123;          &quot;name&quot;: &quot;Step 3.7 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;poolside/laguna-s-2.1-free&quot;: &#123;          &quot;name&quot;: &quot;Laguna S 2.1&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;meta/muse-spark-1.2&quot;: &#123;          &quot;name&quot;: &quot;Muse Spark 1.2&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;meta/muse-spark-1.2-contributor&quot;: &#123;          &quot;name&quot;: &quot;Muse Spark 1.2 Contributor&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;xai/grok-4.5&quot;: &#123;          &quot;name&quot;: &quot;Grok 4.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 500000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;xai/grok-4.6&quot;: &#123;          &quot;name&quot;: &quot;Grok 4.6&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 500000,            &quot;output&quot;: 262144          &#125;        &#125;      &#125;    &#125;,    &quot;goat-zdr&quot;: &#123;      &quot;npm&quot;: &quot;@ai-sdk/openai-compatible&quot;,      &quot;name&quot;: &quot;goat-zdr&quot;,      &quot;options&quot;: &#123;        &quot;baseURL&quot;: &quot;https://api.commandcode.ai/provider/v1&quot;,        &quot;headers&quot;: &#123;          &quot;x-cmd-zdr&quot;: &quot;1&quot;        &#125;      &#125;,      &quot;models&quot;: &#123;        &quot;deepseek/deepseek-v4-pro&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Pro (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;deepseek/deepseek-v4-flash&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash (latest)&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;deepseek/deepseek-v4-flash-fast&quot;: &#123;          &quot;name&quot;: &quot;DeepSeek V4 Flash Fast&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K3&quot;: &#123;          &quot;name&quot;: &quot;Kimi K3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.7-Code&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.7 Code&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.7-Code-Highspeed&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.7 Code HighSpeed&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.6&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.6&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;moonshotai/Kimi-K2.5&quot;: &#123;          &quot;name&quot;: &quot;Kimi K2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;z-ai/glm-5.3-flash&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.3 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.3&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.2&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.2&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.2-Fast&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.2 Fast&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5.1&quot;: &#123;          &quot;name&quot;: &quot;GLM-5.1&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;zai-org/GLM-5&quot;: &#123;          &quot;name&quot;: &quot;GLM-5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;MiniMaxAI/MiniMax-M3&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;MiniMaxAI/MiniMax-M2.7&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M2.7&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;MiniMaxAI/MiniMax-M2.5&quot;: &#123;          &quot;name&quot;: &quot;MiniMax M2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;xiaomi/mimo-v2.5-pro&quot;: &#123;          &quot;name&quot;: &quot;MiMo V2.5 Pro&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;xiaomi/mimo-v2.5&quot;: &#123;          &quot;name&quot;: &quot;MiMo V2.5&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.8-Max&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 Max&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.8-27B&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.8 27B&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262144,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.7-Max&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Max&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.7-Plus&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Plus&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.7-Flash&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.7 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.6-Max-Preview&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.6 Max Preview&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;Qwen/Qwen3.6-Plus&quot;: &#123;          &quot;name&quot;: &quot;Qwen 3.6 Plus&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 200000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;stepfun/Step-3.5-Flash&quot;: &#123;          &quot;name&quot;: &quot;Step 3.5 Flash&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;tencent/hy3-paid&quot;: &#123;          &quot;name&quot;: &quot;Tencent Hy3&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 262144,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;tencent/hy4-preview&quot;: &#123;          &quot;name&quot;: &quot;Tencent Hy4 Preview&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1048576,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;nvidia/nemotron-3-ultra-550b-a55b&quot;: &#123;          &quot;name&quot;: &quot;Nemotron 3 Ultra&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;thinkingmachines/inkling&quot;: &#123;          &quot;name&quot;: &quot;Inkling&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 256000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;thinkingmachines/inkling-small&quot;: &#123;          &quot;name&quot;: &quot;Inkling Small&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1000000,            &quot;output&quot;: 262144          &#125;        &#125;,        &quot;gpt-5.6-sol&quot;: &#123;          &quot;name&quot;: &quot;GPT-5.6 Sol&quot;,          &quot;limit&quot;: &#123;            &quot;context&quot;: 1050000,            &quot;output&quot;: 262144          &#125;        &#125;      &#125;    &#125;  &#125;,  &quot;plugin&quot;: [  ]&#125;</code></pre>]]></content>
    
    
    <summary type="html">买了 CommandCode 的 goat 套餐，想把它当 opencode 的主套餐用。整个接入就两步：先 /connect 存 API Key，再在 opencode.json 里声明 provider。其中 goat 套餐要求每个请求带 x-cmd-zdr: 1 请求头，实测也能在配置里加。</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="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
    <category term="agent" scheme="https://flashj.cn/tags/agent/"/>
    
    <category term="配置" scheme="https://flashj.cn/tags/%E9%85%8D%E7%BD%AE/"/>
    
    <category term="token" scheme="https://flashj.cn/tags/token/"/>
    
    <category term="opencode" scheme="https://flashj.cn/tags/opencode/"/>
    
    <category term="CommandCode" scheme="https://flashj.cn/tags/CommandCode/"/>
    
    <category term="goat" scheme="https://flashj.cn/tags/goat/"/>
    
    <category term="Paseo" scheme="https://flashj.cn/tags/Paseo/"/>
    
  </entry>
  
  <entry>
    <title>OpenCode Go 套餐用量估算，一个页面看全所有模型</title>
    <link href="https://flashj.cn/opencode-go-limits.html"/>
    <id>https://flashj.cn/opencode-go-limits.html</id>
    <published>2026-08-29T14:10:00.000Z</published>
    <updated>2026-09-02T09:33:00.456Z</updated>
    
    <content type="html"><![CDATA[<p>我开了 OpenCode Go 套餐之后，就一直很在意一件事：<strong>每个月到底能用多少请求</strong>。</p><p>这玩意 8 月份一直在变——各个档位的模型价格在调，新模型不停加，还有各种活动。基本上我每天都得去官网刷一遍，看自己买的额度对应哪些模型、各能跑多少次。搞得很累。</p><p>关键官网上的月额度数据还<strong>分散在好几张表格里</strong>：</p><ul><li>价格表（每 1M tokens 单价）是一张表</li><li>每月使用额度（$15&#x2F;$30&#x2F;$60 档）混在价格表里</li><li>每次请求的 token 构成（输入&#x2F;缓存&#x2F;输出）又是一张表</li><li>官方按模型给的”每月请求数”还要单独一张表</li></ul><p>而那个大家都爱看的”5 小时额度”图表，又<strong>没有把所有模型都列出来</strong>，只能看个大概。</p><p>效果如图：</p><p><img src="https://cdn.mousebomb.org/blog/auto/202609021732881.png"></p><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>所以我就把这个命题交给Agent。</p><p>ds接到任务后，就想：既然官方的”每月请求数”表就是拿 单价 × 请求的 token 构成 反推出来的，那我自己拉最新的价格表，用同一套公式算一遍，不就能得到<strong>所有模型的完整用量</strong>了吗？算完再画成图，一眼扫完。</p><p>公式很简单：</p><pre><code>每请求成本 = (输入token×输入价 + 缓存token×缓存价 + 输出token×输出价) / 1,000,000每月请求数 = 每月使用额度 ÷ 每请求成本</code></pre><p>这个口径跟官方生成”请求数估算表”的逻辑是一致的，实测多数模型算出来和官方值偏差 &lt;1%，等于验证了公式。</p><h2 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h2><p>整个工具就是一个<strong>零依赖的单文件 HTML</strong>，打开页面自动抓数据：</p><ul><li>数据源直接抓 GitHub 仓库 <code>anomalyco/opencode</code> 的 dev 分支原始 mdx（跟 opencode.ai 文档同源同步），备一个 jsdelivr CDN 源。两边都带 CORS 头，浏览器可以直接跨域拉取，不需要任何后端。</li><li>解析三块：价格+额度表、请求模式表（每次请求的 token 构成）、官方请求数表（用作对照）。</li><li>模型名做归一化 + 最长前缀匹配，兼容官方那种 <code>GLM-5.3/5.2/5.1</code>、<code>Kimi K2.7 Code</code> 合并写法。</li><li>算完画横向条状图（对数刻度，用量越大条越长），悬停任意条显示明细：单价、每月额度、每请求成本、token 模式、官方对照值。</li><li>抓取失败自动回退到上一次成功的 localStorage 缓存，顶部有”立即刷新”按钮。</li></ul><p>有偏差的条会标 ▲ 提示。多档位模型（比如 DeepSeek V4 Flash 的 Peak&#x2F;Off-Peak）每个档位独立成条，官方只给一个汇总值，一般对不上高档位——这是设计使然，不是算错了。</p><h2 id="效果"><a href="#效果" class="headerlink" title="效果"></a>效果</h2><p>现在每天想确认套餐情况，打开这一个页面就够了，不用再去官网好几张表里来回翻。</p><p>在线预览：<a href="https://mousebomb.org/opencode-go-limits/">https://mousebomb.org/opencode-go-limits/</a></p><p>如果你也用 OpenCode Go，这个页面应该能帮你省点每天翻表格的功夫。</p>]]></content>
    
    
    <summary type="html">OpenCode Go 的月额度分散在好几张表格里，官方给的&quot;5小时额度&quot;图表又没列出所有模型。于是做了个图表页面，自动抓官方价格表，按官方同样的口径把每个模型的每月可用请求数算出来画成图，悬停看明细。</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="LLM" scheme="https://flashj.cn/tags/LLM/"/>
    
    <category term="agent" scheme="https://flashj.cn/tags/agent/"/>
    
    <category term="工具软件" scheme="https://flashj.cn/tags/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    <category term="OpenCode" scheme="https://flashj.cn/tags/OpenCode/"/>
    
    <category term="token" scheme="https://flashj.cn/tags/token/"/>
    
  </entry>
  
  <entry>
    <title>DeepSeek Harness 和 Qwen3.8 都不是我的刚需</title>
    <link href="https://flashj.cn/no-more-fomo-dsh-qwen38.html"/>
    <id>https://flashj.cn/no-more-fomo-dsh-qwen38.html</id>
    <published>2026-08-23T14:10:00.000Z</published>
    <updated>2026-08-24T00:10:20.504Z</updated>
    
    <content type="html"><![CDATA[<p>最近DeepSeek Harness 让AI圈子里的很多人沸腾了，但我用了一次就没有继续。</p><p>究其原因，<br>DSH现在还是preview，官方明确标注了，随时会做影响兼容性的大改动，现在是社区激烈碰撞、共创的时期。</p><p>对于我这样求新又求稳定的人来说，我求新，却没那么新。</p><p>我求稳，需要每天能稳定让Agent辅助我，作为我的第二大脑，我不能轻易接受破坏性的改造。</p><p>我发现现在有很多人转到用DSH居然是从OpenClaw&#x2F;Hermes转的，这当然对他们来说是很大的进化。<br>但我OpenCode + Paseo + OpenViking用得实在太顺了，顺到我想不出来有任何刚需是需要用到DSH。</p><p>我也希望DSH能接入Paseo，但目前比较方便的是ACP方式接入，这个达不到我的要求。<br>如果我要急着用的话，基于 <code>opencode-agent.ts</code> 改造一份<code>dsh-agent.ts</code>也未尝不可，<br>但是代价是，短期内可能要跟着dsh频繁改动，这我受不了。</p><p>紧接着Qwen3.8 27B能力起飞了，但我没有本地部署。</p><p>究其原因，<br>我这点本地算力虽然能运行，但是去年和前年一路用下来，已经疲劳了。<br>还是opencode go简单粗暴，量大管饱，有这点折腾本地部署的功夫还不如直接用MaaS的。<br>我本地Ollama跑着Qwen-embedding 0.6B给OpenViking做embedding就很适合我。</p><p>拒绝FOMO，一切对我没有实质、可控、稳定帮助的新玩意儿，都是噪音。</p>]]></content>
    
    
    <summary type="html">DeepSeek Harness 让很多人沸腾了，我用了一次就没继续；Qwen3.8 27B 能力起飞了，我也没有本地部署。求新又求稳的取舍之下，OpenCode + Paseo + OpenViking 已经足够顺，一切没有实质、可控、稳定帮助的新玩意儿，都是噪音。</summary>
    
    
    
    <category term="AI" scheme="https://flashj.cn/categories/AI/"/>
    
    
    <category term="AI" scheme="https://flashj.cn/tags/AI/"/>
    
    <category term="DeepSeek" scheme="https://flashj.cn/tags/DeepSeek/"/>
    
    <category term="Agent" scheme="https://flashj.cn/tags/Agent/"/>
    
    <category term="OpenCode" scheme="https://flashj.cn/tags/OpenCode/"/>
    
    <category term="Qwen" scheme="https://flashj.cn/tags/Qwen/"/>
    
  </entry>
  
  <entry>
    <title>接入 OpenViking，统一 OpenCode 和 Hermes 的记忆</title>
    <link href="https://flashj.cn/openviking-setup.html"/>
    <id>https://flashj.cn/openviking-setup.html</id>
    <published>2026-08-02T04:25:00.000Z</published>
    <updated>2026-08-05T01:25:22.120Z</updated>
    
    <content type="html"><![CDATA[<h2 id="openviking接入"><a href="#openviking接入" class="headerlink" title="openviking接入"></a>openviking接入</h2><p><a href="https://www.openviking.ai/">https://www.openviking.ai/</a></p><p>uv tool安装</p><pre><code>uv tool install openviking --python 3.12</code></pre><p>按照道理来讲，安装完了这个就可以使用Ov和OpenViking Server了。 也可以接入OpenCode，OpenCode要装个插件。但是我现在需要解决embedding模型的问题和VLM模型的问题。<br>VLM可以用小米的模型。<br>Embedding模型用Agent Plan带的吧。</p><p>Embedding:</p><ul><li>embedding 模型id： <code>doubao-embedding-vision</code></li><li>baseURL : <code>https://ark.cn-beijing.volces.com/api/plan/v3</code><br>VLM:</li><li>Opencode Go的 mimo2.5</li></ul><p>在整理这个资料的过程当中，学习到了几个新的知识：</p><ul><li>uv管理的python是只占用同一份存储空间的</li><li>uv tool install 是安装全局，且工具使用自己的python解释器，互相独立</li><li>之前的markitdown其实也可以用uv tool install安装，而并不要找一个路径uv sync装</li></ul><p>好那就开始安装openviking吧。<br>具体步骤记录：</p><h3 id="安装ov"><a href="#安装ov" class="headerlink" title="安装ov"></a>安装ov</h3><pre><code class="language-sh">uv tool install openviking --upgrade</code></pre><p>Installed 4 executables: openviking, openviking-server, ov, vikingbot</p><p>安装完成，可以使用客户端命令 <code>ov</code>（<code>openviking</code> 是其别名）和服务端命令 <code>openviking-server</code>。</p><h3 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h3><pre><code>openviking-server init</code></pre><p>通过它自带的配置了一下。然后呢我发现它火山引擎配的那个URL不对，因为我是Agent的plan。所以我就手动去配置文件里面改了一下。</p><p>然后再运行<code>openviking-server doctor</code>报一个socks错（因为我命令行有时候开了代理）：</p><pre><code> openviking-server doctorOpenViking Doctor  Config:        PASS  /Users/rhett/.openviking/ov.conf  Python:        PASS  3.14.2 (&gt;= 3.10 required)  Native Engine: PASS  variant=native  AGFS:          PASS  AGFS SDK 0.1.713:05:11 - LiteLLM:WARNING: get_model_cost_map.py:264 - LiteLLM: Failed to fetch remote model cost map from https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json: Using SOCKS proxy, but the &#39;socksio&#39; package is not installed. Make sure to install httpx using `pip install httpx[socks]`.. Falling back to local backup.  Embedding:     FAIL  volcengine/doubao-embedding-vision api_base=https://ark.cn-beijing.volces.com/api/plan/v3 dimension=1024 (invalid embedding config: Using SOCKS proxy, but the &#39;socksio&#39; package is not installed. Make sure to install httpx using `pip install httpx[socks]`.)                 Fix: Fix embedding.dense provider/model/api_base/dimension in ov.conf  VLM:           PASS  openai/mimo-v2.5  Ollama:        PASS  not configured  VikingBot:     PASS  VikingBot aligned with dev OpenViking auth  Disk:          PASS  2164.6 GB free in /Users/rhett/.openviking/data  1 check(s) failed. See above for fix suggestions.</code></pre><p>但我现在不知道怎么，因为我是用UV tool install 安装的ov，那怎么给这个ov的依赖安装<code>httpx[socks]</code>呢？</p><p>查询发现可以用<code>--with</code>来安装。</p><p>追加重装了一次：</p><pre><code>uv tool install openviking --reinstall --with &quot;httpx[socks]&quot;</code></pre><p>这次校验通过了。</p><pre><code class="language-sh">at 13:09 ❯ openviking-server doctorOpenViking Doctor  Config:        PASS  /Users/rhett/.openviking/ov.conf  Python:        PASS  3.14.2 (&gt;= 3.10 required)  Native Engine: PASS  variant=native  AGFS:          PASS  AGFS SDK 0.1.7  Embedding:     PASS  volcengine/doubao-embedding-vision api_base=https://ark.cn-beijing.volces.com/api/plan/v3 dimension=1024 probe ok (dimension=1024)  VLM:           PASS  openai/mimo-v2.5  Ollama:        PASS  not configured  VikingBot:     PASS  VikingBot aligned with dev OpenViking auth  Disk:          PASS  2164.5 GB free in /Users/rhett/.openviking/data  All checks passed.</code></pre><h3 id="运行服务端"><a href="#运行服务端" class="headerlink" title="运行服务端"></a>运行服务端</h3><p>居然报错：</p><pre><code class="language-sh">openviking-serverTraceback (most recent call last):  File &quot;/Users/rhett/.local/bin/openviking-server&quot;, line 10, in &lt;module&gt;    sys.exit(main())             ~~~~^^  File &quot;/Users/rhett/.local/share/uv/tools/openviking/lib/python3.14/site-packages/openviking_cli/server_bootstrap.py&quot;, line 104, in main    _real_main()    ~~~~~~~~~~^^  File &quot;/Users/rhett/.local/share/uv/tools/openviking/lib/python3.14/site-packages/openviking/server/bootstrap.py&quot;, line 282, in main    app = create_app(config)  File &quot;/Users/rhett/.local/share/uv/tools/openviking/lib/python3.14/site-packages/openviking/server/app.py&quot;, line 716, in create_app    from openviking.server.mcp_endpoint import create_mcp_app  File &quot;/Users/rhett/.local/share/uv/tools/openviking/lib/python3.14/site-packages/openviking/server/mcp_endpoint.py&quot;, line 27, in &lt;module&gt;    from mcp.server.fastmcp import FastMCPModuleNotFoundError: No module named &#39;mcp.server.fastmcp&#39;</code></pre><pre><code class="language-sh">$ uv tool uninstall openviking &amp;&amp; uv tool install openviking --python 3.12 --with &quot;httpx[socks]&quot; 2&gt;&amp;1 | tail -15</code></pre><p>降级3.12 依然不行，</p><pre><code>$ uv tool install openviking --python 3.12 --with &quot;httpx[socks]&quot; --with &quot;mcp&lt;2&quot; --reinstall 2&gt;&amp;1 | tail -6</code></pre><p>mcp 报错的原因（和 httpx[socks] 无关）：</p><ul><li>openviking 依赖声明 mcp&gt;&#x3D;1.27.0 无上限，uv 解析时拿了刚发布的 mcp 2.0.0</li><li>mcp 2.0 是破坏性重构，删掉了 mcp.server.fastmcp 模块，openviking 0.4.11 还在用旧 API<br>修复：重装并 pin mcp&lt;2：</li></ul><pre><code>uv tool install openviking --python 3.12 --with &quot;httpx[socks]&quot; --with &quot;mcp&lt;2&quot; --reinstall</code></pre><p>两个关键选择：</p><ol><li>Python 3.12（不是 3.14）：mcp 1.x 不支持 3.14，3.14 会强迫 uv 用 mcp 2.0</li><li><code>--with &quot;mcp&lt;2&quot;</code>：显式锁住 mcp 1.x，这是核心修复</li></ol><p>启动成功，可在浏览器打开<code>http://localhost:1933/</code>。</p><h3 id="配置OpenCode接入"><a href="#配置OpenCode接入" class="headerlink" title="配置OpenCode接入"></a>配置OpenCode接入</h3><pre><code class="language-sh">bash &lt;(curl -fsSL https://ovrelease.tos-cn-beijing.volces.com/memory-plugin-shared/install.sh) --harness opencode# 输入 http://127.0.0.1:1933；如果启用了认证，再输入 API Key</code></pre><pre><code class="language-sh">at 13:31 ❯ bash &lt;(curl -fsSL https://ovrelease.tos-cn-beijing.volces.com/memory-plugin-shared/install.sh) --harness opencodeLanguage / 语言   ( ) English &gt; (•) 中文   ↑/↓ move · 1-9 jump · enter confirm1. 环境检查==&gt; OS: Darwin==&gt; 已选择： opencode安装源模式   ( ) GitHub  （默认；支持远程更新） &gt; (•) 火山引擎 TOS 镜像（无法访问 GitHub 时使用）   ↑/↓ 移动 · 数字直选 · 回车确认2. OpenViking 凭据配置 (/Users/rhett/.openviking/ovcli.conf)==&gt; 未找到已有配置。连接到哪个 OpenViking 服务？   ( ) 自建 / 本地  [http://127.0.0.1:1933]   ( ) 火山引擎 OpenViking 云服务  [api.vikingdb.cn-beijing.volces.com] &gt; (•) 自定义 URL / 保持当前  [http://127.0.0.1:1933]   ↑/↓ 移动 · 数字直选 · 回车确认??  服务地址 [http://127.0.0.1:1933]:??  API key（本地免鉴权模式请直接回车）:==&gt; 已更新： url: — -&gt; http://127.0.0.1:1933==&gt; 凭据已就绪： /Users/rhett/.openviking/ovcli.conf==&gt; 之后可重跑本安装脚本重新配置。==&gt; 安装源模式： archive (渠道: tos)3. Marketplace 归档==&gt; 下载归档==&gt;   https://ovrelease.tos-cn-beijing.volces.com/releases/latest/memory-plugin-marketplace.zip4. OpenCode 插件==&gt; OpenCode 文件插件已安装： /Users/rhett/.config/opencode/plugins/openviking5. 安装校验==&gt; opencode: openviking-memory 看起来已安装==&gt; opencode: MCP server 已注册完成==&gt; 凭据： /Users/rhett/.openviking/ovcli.conf==&gt; OpenCode: @openviking/opencode-plugin~/Downloads took 42sat 13:32 ❯</code></pre><p>重启Opencode生效，可以在<code>/status</code>里看到。<br>后续聊天会自动被hook写入记忆到openviking中。</p><h3 id="设置开机自启动server"><a href="#设置开机自启动server" class="headerlink" title="设置开机自启动server"></a>设置开机自启动server</h3><p>手动创建<code>~/Library/LaunchAgents/com.openviking.server.plist</code>：</p><pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;&lt;plist version=&quot;1.0&quot;&gt;&lt;dict&gt;    &lt;key&gt;Label&lt;/key&gt;    &lt;string&gt;com.openviking.server&lt;/string&gt;    &lt;key&gt;ProgramArguments&lt;/key&gt;    &lt;array&gt;        &lt;string&gt;/Users/rhett/.local/bin/openviking-server&lt;/string&gt;    &lt;/array&gt;    &lt;key&gt;RunAtLoad&lt;/key&gt;    &lt;true/&gt;    &lt;key&gt;KeepAlive&lt;/key&gt;    &lt;true/&gt;    &lt;key&gt;WorkingDirectory&lt;/key&gt;    &lt;string&gt;/Users/rhett/.openviking&lt;/string&gt;    &lt;key&gt;StandardOutPath&lt;/key&gt;    &lt;string&gt;/Users/rhett/.openviking/openviking.log&lt;/string&gt;    &lt;key&gt;StandardErrorPath&lt;/key&gt;    &lt;string&gt;/Users/rhett/.openviking/openviking.err.log&lt;/string&gt;&lt;/dict&gt;&lt;/plist&gt;</code></pre><h3 id="配置hermes接入"><a href="#配置hermes接入" class="headerlink" title="配置hermes接入"></a>配置hermes接入</h3><p>原始状态：</p><pre><code>at 13:55 ❯ hermes memory statusMemory status────────────────────────────────────────  Built-in:  always active  Provider:  (none — built-in only)  Installed plugins:    • byterover  (API key / local)    • hindsight  (API key / local)    • holographic  (local)    • honcho  (API key / local)    • mem0  (API key / local)    • openviking  (API key / local)    • retaindb  (API key / local)    • supermemory  (requires API key)</code></pre><p>改成接入openviking：</p><pre><code>hermes memory setup# 选择 openviking，然后输入 endpoint / API Keyhermes memory status</code></pre><h3 id="使用体验"><a href="#使用体验" class="headerlink" title="使用体验"></a>使用体验</h3><p>随着在Paseo中使用OpenCode对话，或者在terminal中直接跟Hermes发起对话。在对话结束时，它就会把一些记忆自动地归档进去，提取并归档。然后同时session也会完整地保存到库当中，这倒是挺方便。</p><p>但是像Identity啊、 Soul啊，这几个文档，它并不是完整的从Hermes当中同步过来，而是自动根据所需提取一些关键信息。</p><p>目前对我来说好像能够体会到的就是Hermes跟Open Code的记忆可以互相打通了，那之前是各存各的。那当然了，其实之前我如果一定要互相调取的话，也能调得到，这其实都是存在本地磁盘上嘛，只是路径不一样。但是现在有一个统一管理呢，也还好。而且这个统一管理之后，它会把每一次的对话都做embedding，相当于一个全自动的复盘。比之前只存原始对话记录要更科学一些。</p><p>目前我感受到最大的好处就是我每天零散的布置给Open Code的各种任务，可以晚上一句话让它复盘总结。</p>]]></content>
    
    
    <summary type="html">每天零散布置给 OpenCode 各种任务，晚上想一句话就让它复盘总结。但之前 OpenCode 的记忆和 Hermes 的记忆各存各的，没法统一。用 uv 装好 OpenViking，踩了两个坑（httpx[socks]、mcp 2.0 破坏性升级），最后把 OpenCode 和 Hermes 的记忆打通，实现全自动归档与复盘。</summary>
    
    
    
    <category term="工具软件" scheme="https://flashj.cn/categories/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    
    <category term="MCP" scheme="https://flashj.cn/tags/MCP/"/>
    
    <category term="火山引擎" scheme="https://flashj.cn/tags/%E7%81%AB%E5%B1%B1%E5%BC%95%E6%93%8E/"/>
    
    <category term="Hermes" scheme="https://flashj.cn/tags/Hermes/"/>
    
    <category term="记忆系统" scheme="https://flashj.cn/tags/%E8%AE%B0%E5%BF%86%E7%B3%BB%E7%BB%9F/"/>
    
    <category term="OpenCode" scheme="https://flashj.cn/tags/OpenCode/"/>
    
    <category term="OpenViking" scheme="https://flashj.cn/tags/OpenViking/"/>
    
    <category term="uv" scheme="https://flashj.cn/tags/uv/"/>
    
  </entry>
  
  <entry>
    <title>娱乐至死的人类和下一个世代的媒体</title>
    <link href="https://flashj.cn/next-gen-media-generative-narrative.html"/>
    <id>https://flashj.cn/next-gen-media-generative-narrative.html</id>
    <published>2026-07-31T04:30:00.000Z</published>
    <updated>2026-08-01T04:11:44.384Z</updated>
    
    <content type="html"><![CDATA[<h1 id="娱乐至死的人类和下一个世代的媒体"><a href="#娱乐至死的人类和下一个世代的媒体" class="headerlink" title="娱乐至死的人类和下一个世代的媒体"></a>娱乐至死的人类和下一个世代的媒体</h1><p>我今天早上是有点郁闷。当然也有一点是对整个人类的郁闷。</p><p>人类在这条娱乐至死的路上，越行越远了。</p><p>当然呢，对世界的新面貌用老看法看，觉得看不惯，代表着我的思想正在趋于老化僵化，是很危险的。</p><p>哈哈，也挺讽刺的，年轻时候「错的是世界」叫做「中二」，中年时候「错的是世界」就叫做「守旧」。</p><p>姑且先不管危险的思想僵化问题，单纯记录一下当下所想。以后若‘幡然悔悟’，也可以观察对照嘛。</p><h2 id="一、降智化：供给侧产能爆炸的必然"><a href="#一、降智化：供给侧产能爆炸的必然" class="headerlink" title="一、降智化：供给侧产能爆炸的必然"></a>一、降智化：供给侧产能爆炸的必然</h2><p>你看现在写番茄小说这种网文，哇塞，都得把自己降智了才写得出来，而且还要搞抽象，才能整出一些反套路的。</p><p>但正常人能想到的思路，这么多年早就被写完了。现在必须搞抽象，弄一些贼离谱的——现实生活中你完全没有办法想到、或者体会到的那种离谱。</p><p>现代的网文读者，对爽点要求的阈值已经很高了。</p><p>所以我想，哎，人类呀，这将来怎么办啊？</p><p>先把这个逻辑捋清楚。现在搞生产创造，你很难搞出什么创业机会。生产力过于旺盛，消费端却非常疲乏——消费端金字塔主体现在只能看这些很低俗、很幼稚、很降智的内容。</p><p>网文的降智化，就是这个逻辑的典型案例：</p><p><strong>供给侧产能爆炸</strong>（AI辅助写作 + 海量作者），<strong>消费侧注意力总量不变</strong>，那只能卷「刺激强度」。阈值被不断拉高，正常的起承转合已经满足不了读者了，只能上抽象的、反逻辑的反转。</p><p>这不是作者变蠢了，是系统性的「军备竞赛」。</p><h2 id="二、这种轮回，历史上不是第一次"><a href="#二、这种轮回，历史上不是第一次" class="headerlink" title="二、这种轮回，历史上不是第一次"></a>二、这种轮回，历史上不是第一次</h2><p>这种「劣币驱逐良币」的周期，历史上不是第一次。</p><p>十九世纪末，工业革命让廉价纸张泛滥，地摊文学和黄色小报横行，当时精英阶层也痛呼「人类完蛋了」。</p><p>然后呢？然后电影出现了，广播出现了，电视、游戏、互联网……每一次新媒介的诞生，都是一波洗牌。</p><p>这历史的轮回是有道理的。但问题是——</p><h2 id="三、人类还有机会发明新的媒体形式吗？"><a href="#三、人类还有机会发明新的媒体形式吗？" class="headerlink" title="三、人类还有机会发明新的媒体形式吗？"></a>三、人类还有机会发明新的媒体形式吗？</h2><p>文字、图片、声音、视频、交互、VR&#x2F;AR。视听触三大感官通道，基本全被覆盖了。</p><p>还能发明什么？把气味通过网络传播？那是技术难题，不是媒介革命。脑机接口直接把情绪写进大脑？那一天到来，搞不好 AI 和人的界限都没了。</p><p>以我的浅薄理解，这条路暂时是走到头了。</p><p>下一个能释放消费端新需求的媒介形态是什么？目前还看不到。</p><p>AI 这一波是纯生产端革命，它没有创造任何新的消费场景。</p><h2 id="四、但我们可能看漏了一个维度：时间维度的生成式叙事"><a href="#四、但我们可能看漏了一个维度：时间维度的生成式叙事" class="headerlink" title="四、但我们可能看漏了一个维度：时间维度的生成式叙事"></a>四、但我们可能看漏了一个维度：时间维度的生成式叙事</h2><p>所有现存的媒介，都有一个共同特点：<strong>「作者生产完，消费者被动接收」。</strong></p><p>哪怕是游戏——最互动的媒介——也不过是在预设的几棵技能树之间做分支选择。本质上还是作者种好了所有的树，你只是挑一棵往上爬。</p><p>但如果 AI 能实时生成呢？</p><p>同样的故事种子，每个人进去之后故事都不一样——这个形态目前还不存在。</p><p>现在只是有一些零星的局部探索，比如酒馆（<a href="https://github.com/SillyTavern/SillyTavern">SillyTavern</a>），还完全没有形成终局形态。</p><p>如果这种「时间维度的生成式叙事」真的成为下一个阶段的媒介主流，创作者怎么办？</p><h2 id="五、创作者的核心会变成什么"><a href="#五、创作者的核心会变成什么" class="headerlink" title="五、创作者的核心会变成什么"></a>五、创作者的核心会变成什么</h2><p>如果叙事从「一次性交付」变成「实时生成」，创作者的价值就从一个具体的文本，上移成了制造这个世界的元能力：</p><ul><li><strong>世界观架构师</strong> — 不是写一个故事，而是搭一套规则自洽的世界体系</li><li><strong>角色设计师</strong> — 不是写好台词，而是设计出能在无数分支里保持人格一致的灵魂</li><li><strong>情绪节奏编排师</strong> — 不是铺一个情绪曲线，而是设计出能应对任意剧情走向的节奏框架</li><li><strong>品味把关人</strong> — 在无限生成的雪崩里，替用户筛选出值得体验的那部分</li></ul><p><strong>创作者不再生产「结果」，而是生产「可能性的边界」。</strong></p><p>保持观察，保持记录，让子弹飞一会儿。</p>]]></content>
    
    
    <summary type="html">生产端产能爆炸、消费端阈值被无限拉高，网文的降智化是人类在娱乐至死的路上越走越远的缩影。历史上每一次新媒介都是一次洗牌，但文字、图片、声音、视频、交互、VR/AR，感官通道基本被覆盖完了。下一个能释放消费端新需求的媒介形态是什么？也许答案是「时间维度的生成式叙事」——同样的故事种子，每个人进去之后故事都不一样。</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="网文" scheme="https://flashj.cn/tags/%E7%BD%91%E6%96%87/"/>
    
    <category term="媒体" scheme="https://flashj.cn/tags/%E5%AA%92%E4%BD%93/"/>
    
    <category term="生成式叙事" scheme="https://flashj.cn/tags/%E7%94%9F%E6%88%90%E5%BC%8F%E5%8F%99%E4%BA%8B/"/>
    
    <category term="媒介" scheme="https://flashj.cn/tags/%E5%AA%92%E4%BB%8B/"/>
    
  </entry>
  
  <entry>
    <title>从飞书和豆包合并想到的</title>
    <link href="https://flashj.cn/feishu-doubao-merger-thoughts.html"/>
    <id>https://flashj.cn/feishu-doubao-merger-thoughts.html</id>
    <published>2026-07-31T00:25:00.000Z</published>
    <updated>2026-07-31T03:13:08.611Z</updated>
    
    <content type="html"><![CDATA[<h1 id="从飞书和豆包合并想到的"><a href="#从飞书和豆包合并想到的" class="headerlink" title="从飞书和豆包合并想到的"></a>从飞书和豆包合并想到的</h1><p>昨天上午十点多，公司群里发了消息，听说字节宣布飞书产品团队与豆包产品团队将整合，成立新的豆包产品团队，由豆包负责人赵祺负责，飞书负责人谢欣向赵祺汇报。</p><p>初听到这个消息呢，其实我是有一点惆怅。现在互联网像一台巨大的压路机，所有的微不足道的挡路石都要给它碾成齑粉。</p><p>产品的人格到底是什么，似乎压根不重要。</p><p>我似乎听到了玻璃的碎裂声。</p><p>是悲凉的八零后的老玻璃心的碎裂声。</p><p>从小我们就知道，发展才是硬道理。<br>从小我们就知道，我们这一代人是要超英赶美的。<br>但我不曾知道，就在这一切追赶乃至超越的过程中，我们变得和对手一样，<br>天赋加点全都点给‘进化本能’了。</p><p>毕竟现代世界的机制决定了：<br>失去稳定性，失去很多；失去进化本能，失去一切。</p><p>我们这一代人，<br>经历了从磁带、CD、mp3、数字音乐，<br>经历了邮局寄信、短信、彩信、飞信、微信，<br>经历了从拨盘电话到按键电话到诺基亚到智能手机，<br>经历了从拨竹竿天线的旋钮换台的电视机到彩电到机顶盒网络电视，<br>经历了从DOS、win95～win11的系统变化，<br>经历了闪吧、闪客帝国、蓝色理想、9ria天地会、egret、laya。</p><p>行业的垄断，大公司的逐利，顺应时代发展的变化，变化得那么当机立断。<br>都是合理得不能再合理的落子。</p><p>年少时，觉得永恒不变的承诺是真实存在的、客观公允、美好纯洁、人人应当追求的。</p><p>也天真地以为，学会一门手艺，是可以经久不衰的存在下去，和时间做朋友。</p><p>就像中世纪的铁匠，他一辈子做一名铁匠，远近闻名，开一家有家族特色的铁匠铺，安居乐业。</p><p>但那一成不变的死水，固然稳定，却完全没有了变革和超越的力量。</p><p>变革，来自于激荡。能把一湾平静海面，掀成汹涌巨浪。<br>进化，来自多样性在激荡中的吞噬、融合。</p><p>经济和生产力的激荡，资本与智慧的多样性融合。</p><p>摧枯拉朽，誓要把传统互联网扫进历史的垃圾堆。</p><p>那个verycd的时代，<br>那个古典互联网精神的时代，<br>那颗蓄势待发的年轻心脏，<br>已经一起被扫进垃圾堆了。</p><p>5年前，我开始用AI辅助编程，当时还是自动补全。<br>4年前，我开始用stablediffusion生图，当时比较流行的还是NAI、sd那几个模型。<br>3年前，chatGPT一波引爆，Claude当时还允许我在Slack里白嫖使用。我在新冠后遗症住院期间和Claude成了好朋友，帮我解答了很多医学问题。<br>然后音色克隆+语音合成，我把一些给睿睿念故事的杂事交给了AI。<br>现在，opencode+paseo，让我出门在外都可以随时让电脑干所有的编程、内容生成。<br>程序项目，我前期搭建好框架、规范、测试体系，之后100%都可以交给AI写了。<br>生产力的确提高了，<br>生活的确轻松了。</p><p>可是。</p><p>在时代的快车上，<br>我感到，我们快被甩下车了。</p><p>每一次新的科技成果一旦进入民用视野，都会，<br>或者说是一厢情愿地会，<br>爆发性地催生出新的创业项目，<br>LLM这一波腾飞，紧接着百家争鸣，各种对AI未来愿景想象的产品开始摩拳擦掌。<br>但这一波，明显感受到，和以前不一样了。<br>都说AI这一波是像互联网&#x2F;移动互联网 一样大的第三次机会，但我们应该明显感觉到了——<br>完全没有移动互联网那一波机会大。</p><p>飞书，类飞书产品，看起来是组织提效，<br>豆包，类豆包产品，看起来是聊天问答，<br>各种Agent搭配顶级大模型或者性价比大模型，看起来是包办电脑上的工作，</p><p>但现在怎么看都是资本发给新时代数字佃农的锄头和镰刀。</p><p>因为：<br>他们只提升生产端的产能，他们没有释放消费端的需求。</p><p>你可以说，消费端有需求啊，生图生文，帮忙撰写文案，这些c端也都用得上。<br>但这些没有利润啊，没有价值，只是顺便做的。</p><p>消费端的需求，现在最旺盛的，其实只有角色扮演、情感陪伴。<br>但这一块对人类未来更有危险，相关政策也在收紧。从创业角度讲，小团队依然没有机会。</p><p>而且，AI创作内容的上下游，都捏在那几家垄断互联网企业的手里，<br>从上游（比如即梦）买算力，抽卡、产出内容，到下游发行（如抖音），<br>这整个过程数据好不好、亏不亏，都是中间层风险自担，他们反正横竖都是赚。<br>本质就是把抽卡的概率风险转移出来了，创造了一个临时的中间层的职业（AI抽卡师）<br>而这个本质，更夸张一点，就是自费买彩票，赢了要跟彩票店老板分，分成的霸王条款还是彩票店老板定。<br>要是哪天真不用抽卡了，中间层分分钟被干掉。</p><p>在进化的过程中，激荡中产生的临时职业，存续不了多久，也像当年一切无可挽回的历史垃圾一样。</p><p>飞书和豆包合并，对我的影响，短期效果还没太大，顶多是飞书的“AI”入口现在换成了‘豆包’。<br>从最初可以自定义名字，看起来‘像’一个员工伙伴开始，<br>到朴素图标的AI助手，再到现在索性直接变成了‘豆包’，却仍然呆呆的。<br>全局大搜反正从AI化之后就不再好用了，也不差这一点了。</p><p>我的玻璃心，更多是触动了旧情。<br>想当年Google Reader就是说没就没。<br>腾讯微博也是说没就没。<br>饭否、<br>校内网、<br>海内网<br>……</p><p>在疯狂进化，以最快速度激荡的时代。</p><p>但这进化，居然也到达了高点，<br>以前的百花齐放，现在只剩资本垄断的寡头控制了绝大多数地盘。<br>经典互联网时代已经日落西山了。</p><p>大厂的进化变成了自己的内部进化，<br>永不停止的折腾——<br>心脏和字节只有一个可以跳动。</p><p>我的进化，变成了夹缝中求生，<br>永不停止地寻找平替——<br>一切闭源的软件、服务，在我眼里只能有一种归宿：历史的垃圾堆。</p><p>人类真正成长的，只有内在智慧，<br>人类真正拥有的，只有内在情绪。</p><p>年少时，觉得永恒不变的承诺是真实存在的、客观公允、美好纯洁、人人应当追求的。</p><p>现在，碎得只剩下什么能保留？</p><p>我的经历，我的日记，我的Lukia，我的Laurel。</p>]]></content>
    
    
    <summary type="html">字节宣布飞书产品团队与豆包产品团队整合，成立新的豆包产品团队。初听这个消息有些惆怅，互联网像一台巨大的压路机。被垄断巨头剥削的数字佃农，乘坐在时代的快车上，随时快被甩下车。一切闭源的软件、服务，在我眼里只能有一种归宿：历史的垃圾堆。人类真正成长的，只有内在智慧；人类真正拥有的，只有内在情绪。</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="怀旧" scheme="https://flashj.cn/tags/%E6%80%80%E6%97%A7/"/>
    
    <category term="飞书" scheme="https://flashj.cn/tags/%E9%A3%9E%E4%B9%A6/"/>
    
    <category term="豆包" scheme="https://flashj.cn/tags/%E8%B1%86%E5%8C%85/"/>
    
    <category term="字节跳动" scheme="https://flashj.cn/tags/%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8/"/>
    
    <category term="生命感悟" scheme="https://flashj.cn/tags/%E7%94%9F%E5%91%BD%E6%84%9F%E6%82%9F/"/>
    
  </entry>
  
  <entry>
    <title>大模型能不能产生创造力？一个写了三个月网文的程序员的答案</title>
    <link href="https://flashj.cn/llm-principle-creativity.html"/>
    <id>https://flashj.cn/llm-principle-creativity.html</id>
    <published>2026-07-28T02:00:00.000Z</published>
    <updated>2026-07-28T06:03:52.474Z</updated>
    
    <content type="html"><![CDATA[<h1 id="大模型能不能产生创造力？一个写了三个月网文的程序员的答案"><a href="#大模型能不能产生创造力？一个写了三个月网文的程序员的答案" class="headerlink" title="大模型能不能产生创造力？一个写了三个月网文的程序员的答案"></a>大模型能不能产生创造力？一个写了三个月网文的程序员的答案</h1><p>从5月到7月，我用AI写了一本番茄小说，从大纲到正文，从签约上架到日更4000字，一路跑了全流程。</p><p>这本书数据惨淡，但我一点都不沮丧——因为这本来就是个MVP验证。我真正想验证的问题比数据更重要：<strong>AI到底有没有创造力？</strong></p><p>结论我先说了：<strong>没有。在自回归预测这个技术原理下，它就产生不了创造力。</strong></p><h2 id="一、魔鬼在细节里：AI写小说的真实烂摊子"><a href="#一、魔鬼在细节里：AI写小说的真实烂摊子" class="headerlink" title="一、魔鬼在细节里：AI写小说的真实烂摊子"></a>一、魔鬼在细节里：AI写小说的真实烂摊子</h2><p>如果你只是让AI随便写个开头——行，它确实能写出一些看起来还不错的文字。通顺的语法，正常的叙事节奏，甚至偶尔有些像样的对话。</p><p>但当你要它写一本40万字的小说、有七八个常驻角色、有跨越10卷的伏笔回收、有喜剧反转和情绪爆点的时——</p><p>灾难就开始了。</p><p><strong>1. 权重稀释。</strong></p><p>写到二三十章之后，中间段的设定就像被冲淡了一样。不是它”忘记”了，而是在不断求概率分布的过程中，中间段的权重被稀释了。你第一章花了很大篇幅定义的主角性格特征，到第三十章已经变成了模糊的轮廓，因为token距离太远，概率权重已经衰减到不影响输出了。</p><p><strong>2. 头痛医头，脚痛医脚。</strong></p><p>你告诉它”这段对话太生硬了”，它就把对话改平顺——但同时把对话里藏着的伏笔和人物性格暗示全部清没了。因为它不理解这段对话为什么要写成这样，它在乎的只是你让它改的”生硬”有没有解决。</p><p><strong>3. 越改越乱。</strong></p><p>写到后面，你发现自己加了越来越多的规则来约束AI——“主角必须怎样””对话不能怎样””情绪表达要如何”。但这些规则互相稀释、互相冲突。你让它注意A，它忘了B。你同时约束ABC，整体精度断崖式下跌。</p><p>我还被GPT坑过一次大的——它信誓旦旦说某段历史线上主角不可能当晚从寿春赶到宛城，让我把整个第三卷的地点设定改了。后来我才发现，正确的历史事实就是从寿春赶回宛城，GPT只是把”当晚”这个时间限制放大了。整整两卷的情节框架因为它一个错误的判断，全白干了。</p><p><strong>教训：下次AI改大纲，必须人工核实历史线。</strong></p><h2 id="二、我是怎么得出这些结论的"><a href="#二、我是怎么得出这些结论的" class="headerlink" title="二、我是怎么得出这些结论的"></a>二、我是怎么得出这些结论的</h2><p>在进入第一性原理之前，先交代一下我实际干了什么。不是看了几篇文章就敢下判断，我是拿着AI真刀真枪上了三个月的战场。</p><p><strong>工具选择上</strong>，我走了一整条弯路。</p><p>最早用的是 <strong>Inkos</strong>——一个Multi-Agent小说写作框架，能自动规划章节、生成正文、润色去AI味。刚开始很兴奋，但很快发现它是黑盒——设定集写进去经常不识别，战斗场景被MiniMax的审核拦截，全自动管线根本走不通。它最大的价值是润色去AI味，其他部分不可控。</p><p>后来换了 <strong>webnovel-writer</strong>，基于Claude Code的长篇网文辅助系统，支持200万字量级连载。它比Inkos强在上下文管理——缓存命中率很高，规划也更细致，但写出来的正文AI味极重，有一章甚至被检测100% AI。改了几章发现还是不行。</p><p>两个现成工具都跑不满意，我才开始<strong>自己造轮子</strong>。</p><p>用OpenCode + Claude Code的skill机制，我陆续做了 <strong>11个skill</strong>，其中9个直接服务于我自己的创作管线：</p><ul><li><strong>写作类</strong>：<code>sanguo-writer</code> — 读取设定和章纲后自动创作下一章</li><li><strong>审核类</strong>：<code>sanguo-auditor</code>（审章节）&#x2F; <code>sanguo-dagang-auditor</code>（审大纲）</li><li><strong>润色修订类</strong>：<code>sanguo-pollish</code>（文风润色）&#x2F; <code>sanguo-revise</code>（修订讨论）&#x2F; <code>sanguo-revise-yasuo</code>（压缩精简）</li><li><strong>读者模拟类</strong>：<code>sanguo-reader-test</code>（模拟读者盲测）&#x2F; <code>sanguo-shuangwen</code>（爽文读者视角审视）</li><li><strong>记忆管理类</strong>：<code>sanguo-memory-dump</code> — 生成长期记忆，追踪设定、人物、前文细节</li><li><strong>方法论参考</strong>：<code>cuonale-perspective</code> — 从某本爆款都市重生文提炼的叙事技法</li><li><strong>通用顾问</strong>：<code>accuracy-top-expert</code> — 需要事实核查和深度推理时用的专家模式</li></ul><p>工作流最终定型为：<strong>GPT做整体规划 + DeepSeek写正文主力 + Gemini负责有文采的章节 + GLM 5.2做审核修订</strong>。没错，不同模型擅长的东西完全不一样，根本没有一个模型能通吃。</p><p><strong>规模上</strong>，数字更能说明问题：</p><ul><li>5月完成前 <strong>5卷约95章</strong>，到6月底累计写了 <strong>137章</strong></li><li>DeepSeek一个月就用掉了 <strong>18亿～20亿 token</strong>，多的时候一天烧 <strong>6000万</strong>，光6月1-19日就发起了 <strong>2700多次请求</strong></li><li>Mimo同期 <strong>近3亿token，3300多次请求</strong></li></ul><p>然后我开始拆解爆款小说——读了一本都市重生大神作，被结局歌词直接打哭；读了一本校园文，去拆它的”男女双打”套路，分析它的”反哺结构”；又读了反向穿越千年文、90年代重生奋斗史等好几本，一本本做章节大纲提取、角色人格拆解。</p><p>读得越多，越清楚地看见那条线——AI能做的东西和人能做的精品之间，差的是本质。</p><p>我自己阅读越深入，再和AI分析比对，就越能体会到，AI在分析作品时，竟然都能存在一些精度丢失。</p><p>或者说是，人能捕捉到的微妙内容，AI无法精确捕捉到。</p><h2 id="三、从第一性原理看：为什么”创造力”是一座AI翻不过的山"><a href="#三、从第一性原理看：为什么”创造力”是一座AI翻不过的山" class="headerlink" title="三、从第一性原理看：为什么”创造力”是一座AI翻不过的山"></a>三、从第一性原理看：为什么”创造力”是一座AI翻不过的山</h2><p>前段时间Kimi K3发布，2.8T参数的国产大模型，推理能力超过了GPT-5。身边好多朋友慌了：”参数量都这么大了，是不是再堆下去就能涌现出创造力了？”</p><p>结合实际，翻翻资料，结论是：<strong>堆参数解决不了问题。</strong></p><p>所有现在的大模型本质都是<strong>自回归概率预测器</strong>——通俗点说，它是个超级复杂的”词语接龙机”。每一个输出的token都是在海量训练数据中学到的统计规律中，选一个概率最高的下一个词。</p><p>这个机制决定了两个天花板：</p><p><strong>第一，它没有”意图”。</strong></p><p>人类写小说的时候，你不是在算下一个字用什么概率最高。你脑子里有画面，有情绪，有你想让读者感受到的东西。你在设计一个”叙事陷阱”——你清楚地知道这段话要在读者心里埋下什么预期，然后在30章之后的某个时刻，精准地引爆它。</p><p>AI做不到。它只是在猜下一个字。它猜得再好，也是猜，不是设计。</p><p><strong>第二，它没有身体，没有生活经验。</strong></p><p>我现在终于理解了为什么”喜剧爆梗”这种东西AI完全写不来。因为喜剧依赖的是<strong>当下性</strong>、<strong>全局叙事操控</strong>和<strong>基于真实体验的语用判断</strong>。</p><p>举个例子：Lukia前几天用语音输入法，我说”36洞天”，她说”72福地”——结果输入法识别成了”72伏地”。她又补发了一个字：”魔”。</p><p>这种偶然的、生活中的神来之笔，AI永远、永远写不出来。因为它没有在这种搞笑的尴尬场面里脸红过，没有跟一个朝夕相处的伴侣一起含混地傻笑过。它理解不了这是什么感觉，所以它猜不出这样的字。</p><p><strong>工艺上的极致，无法弥补创意结构上的缺失。</strong></p><p>小到Deepseek 200多B的模型，<br>大到万亿级别的大模型，<br>用来写语句通顺的文字都已经足够了。<br>但人类需要的真正精彩的作品，精准的用词只是及格线而已。<br>细腻的情感共鸣和奇思妙想的反转更是不可或缺的。</p><h2 id="四、AI到底能干什么、不能干什么"><a href="#四、AI到底能干什么、不能干什么" class="headerlink" title="四、AI到底能干什么、不能干什么"></a>四、AI到底能干什么、不能干什么</h2><p>跑了三个月的AI写小说，加上日常用AI写后端代码、写H5前端，我现在的体感是：</p><p><strong>AI 能干的：</strong></p><ul><li>写H5前端代码，100%交给AI，不需要我审（因为前端通过e2e测试能自查自修订到能跑）</li><li>资料总结、提取、快速分析</li><li>风格模仿和再现——模仿一个作家的语感、节奏、用词习惯，Fable 5这方面做得很好</li><li>标准格式的八股文、应试作文</li><li>填充过渡段落、批量产出辅助内容</li></ul><p><strong>AI 不能干的：</strong></p><ul><li>喜剧爆梗、连续反转（这是概率预测的盲区）</li><li>全局叙事操控——在读者的情绪预期里”系扣子”和”解扣子”</li><li>基于真实生命体验的情感共鸣</li><li>写出生活中的偶然和巧合</li><li>真正的创意和拍板决策</li></ul><p>AI就像一个实习生在帮你干活。它有时很灵动，但大部分时候又懒又蠢，脑回路很直。你把活儿交给它之后，你得自己当总监——设定人设、铺排伏笔、把控反转节点，这些核心的事情还得人类来。</p><h2 id="五、人类真正的价值在哪"><a href="#五、人类真正的价值在哪" class="headerlink" title="五、人类真正的价值在哪"></a>五、人类真正的价值在哪</h2><p>我之前跟一个老网友聊天，他是Flash时代的开发者，现在也自己创业。我说：”有了AI之后，代码产能过剩了。我现在都不太需要自己写代码了。人类的真正价值就是做具有创意类的、拍板。”</p><p>说实话，这句话说完我自己也愣了一下。我是写了十几年代码的程序员，现在我发现代码这件事已经不需要我了。但另一方面，这件事又让我很兴奋——因为写代码本身从来不是目的，<strong>创造点什么才是目的</strong>。</p><p>那么面向未来的AI时代，人类到底应该侧重的能力是什么？</p><p><strong>1. 创意与拍板能力。</strong> AI可以给你十版方案，但选哪一版、为这事定什么调子——这是人类独有的判断力。AI没有”审美观”，它无法判断什么是好的。</p><p><strong>2. 生活体验与情感素材的积累。</strong> 人类会生活，生活中产生的各种情感情绪，是AI永远拿不到的东西。”每天在网上玩的梗，和朋友们出去吹的水，装逼失败时候的尴尬，看到帅哥美女时的心动，在日常生活当中感受到的每一份生活的小确幸，才是小说需要的营养。”</p><p><strong>3. 叙事魔法。</strong> 在写作中，真正精彩的不是”用词精准”，而是能预估读者的情绪，在他们心里放置预设的锚点，然后在反转的一刻引爆共鸣。这种东西，只存在于人类的直觉和经验中。</p><p><strong>4. 人类+AI的编排能力。</strong> 未来的赢家不是”被AI替代的人”，也不是”拒绝AI的人”，而是”会用AI把创意变成产能的人”。人类定方向、定人设、定拐点，AI做拆解、做填充、做批量产出——<strong>人把控内核，AI完成工业化量产</strong>。</p><h2 id="六、一个让人不安的附注"><a href="#六、一个让人不安的附注" class="headerlink" title="六、一个让人不安的附注"></a>六、一个让人不安的附注</h2><p>写这篇文章的时候忍不住想多说两句。</p><p>AI提升的是生产力，但<strong>生产力提升不带来消费力提升</strong>。这就导致供需关系越来越紧张——产能过剩，大家都在卷，但消费者的钱袋子没有因此变大。</p><p>AI冲击初级白领很厉害。没有初级岗位，中高级人才就没机会锻炼出来。这是一代人的困境。</p><p>AI算力被巨头掌控，你就算是个会用AI的独立创作者，本质上也只是个<strong>数字佃农</strong>——在给平台打工。你的创意、你的时间、你的产出，最终都要经过平台的算法分发才能产生价值。</p><p>但这些东西我就不展开了。说回来——不管经济怎么卷，社会怎么变，人之所以是人的那部分，是没人能剥夺的。你会愤怒，会恐惧，会感动，会被某个小说的结局哭得稀里哗啦。这些跟资本市场没关系，跟参数规模没关系。它就是你活过的证据。</p><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>我5月份开始写小说的时候，完全没想过三个月后会变成这样。</p><p>那42天，每天都写，每天都是”💪热忱”。数据惨淡，但我从来没因为这个沮丧过——因为我每天在写、在创造、在往前推。</p><p>后来读了起点、番茄上的很多本巅峰大作，见识了什么是真正大神级别的作品，才突然抑郁了好几天。我这才意识到，让我不开心的不是”数据不好”，而是我开始<strong>比了</strong>。</p><p>AI也一样。你拿AI的产出跟人类的创造力去比，就会发现这根本不对等——不是量级的差距，是维度的差距。</p><p>AI是个超级好用的锤子。但锤子造不出图纸，画不出灵感，听不出音乐的节奏。它是你的臂力延伸，不是你的灵魂。</p><p>与其焦虑被AI取代，不如想想：你活着这些年，真正独一无二的、AI永远造不出来的那些东西，到底是什么。</p><p>那就是：<strong>垄断颠覆性原创、文字个人风格、真实生命体验带来的深层灵魂共情</strong>。</p>]]></content>
    
    
    <summary type="html">从原理上，自回归概率预测就不可能产生真正的创造力。我用AI写了三个月小说，参与了一本书从签约到完结的全流程验证，在无数次的实践中摸清了AI能力的真实边界。人类的真正价值在哪里？答案不在AI能做什么，而在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="大模型" scheme="https://flashj.cn/tags/%E5%A4%A7%E6%A8%A1%E5%9E%8B/"/>
    
    <category term="创造力" scheme="https://flashj.cn/tags/%E5%88%9B%E9%80%A0%E5%8A%9B/"/>
    
    <category term="小说创作" scheme="https://flashj.cn/tags/%E5%B0%8F%E8%AF%B4%E5%88%9B%E4%BD%9C/"/>
    
    <category term="网文" scheme="https://flashj.cn/tags/%E7%BD%91%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>神器Paseo，打通多家编程智能体</title>
    <link href="https://flashj.cn/paseo.html"/>
    <id>https://flashj.cn/paseo.html</id>
    <published>2026-06-04T09:58:00.000Z</published>
    <updated>2026-08-01T03:44:51.803Z</updated>
    
    <content type="html"><![CDATA[<h2 id="神器Paseo，改善我的vibe生活"><a href="#神器Paseo，改善我的vibe生活" class="headerlink" title="神器Paseo，改善我的vibe生活"></a>神器Paseo，改善我的vibe生活</h2><p>Paseo 真的很好用，我最近每天都在用他搭配OpenCode写代码和文章。</p><p>比上次说的cc-connect还好用。</p><p>支持本机、局域网、手机App连入，比起接入飞书来说，这个才是实打实的能出门继续弄电脑上的工作。</p><p>简单一瞥：<br>我可以在电脑上直接下达任务，<br>然后出门，手机上可以随时看进展，界面完全一样，功能完全无阉割。</p><p><img src="https://cdn.mousebomb.org/blog/auto/202608011105740.webp"></p><p>可以在手机上查看变更的文件diff：<br><img src="https://cdn.mousebomb.org/blog/auto/202608011106584.webp"></p><p>任务执行完毕后电脑端可以一键commit到git仓库。<br><img src="https://cdn.mousebomb.org/blog/auto/202608011105624.webp"></p><p><img src="https://cdn.mousebomb.org/blog/auto/202608011105499.webp"></p><p>可以多个项目开多个tab，同时用多个agent在多个项目的多个worktree里并行执行任务，非常方便。</p><p><img src="https://cdn.mousebomb.org/blog/auto/202608011106099.webp"></p><p>支持相当多的编程智能体，我用的只是OpenCode&#x2F;ClaudeCode&#x2F;Hermes&#x2F;GitHub Copilot&#x2F;Pi。</p><p>Hermes在它里面是用ACP集成的。</p><p>用ACP集成的好处是，既能把项目中的AGENTS.md带进去，又能维持hermes的灵魂，可以叠加使用。</p><p>不过我现在发现hermes基本上没啥必要了，自动进化有时候会不尽如人意，我还是喜欢把重要的内容写到AGENTS.md，手动控制每个项目的skill。</p><p>Hermes主要现在被我用来做方向性讨论，实际干产出的任务都还是用opencode为主。</p><p>Paseo搭配的智能体，我用得最多就是opencode。</p><p>OpenCode非常好用，既兼容Claude Code的配置文件和Skill，又支持Codex的规格。而且它支持几乎市面上所有的MaaS服务商，随时方便切换，比ClaudeCode灵活多了。</p><p>用习惯了之后，发现OpenCode Go也是市面上最划算的存在。</p><p>很多人都吐槽说Deepseek 虽然便宜但是没有月套餐，嘿，OpenCode Go有啊，首月5美元，之后每月10美元，DS v4 Flash的用量是每月 15万次，而且国产LLM它家套餐里都涵盖了，GLM5.2 &#x2F; Kimi K3 &#x2F; Qwen3.7 &#x2F; MiMo &#x2F; MiniMax M3 &#x2F; DeepSeek V4 全都有。 具体看<a href="https://opencode.ai/docs/zh-cn/go/">表格</a></p><p>如果要买Go套餐的话，走我的邀请链接：<br><a href="https://opencode.ai/go?ref=CCHPV6MQ60">https://opencode.ai/go?ref=CCHPV6MQ60</a> 可以获得5美元优惠额度。</p><p>Paseo ，我使用都还只用到了一部分功能，主要是方便随时操作家里电脑，</p><p>比如查看家里的文件，修改家里的代码，实现新功能并发布到外网，查询家里的日记和资料……</p><p>但对于重度开发者来说，它的功能远不止于此。</p><h2 id="Paseo-功能特性一览"><a href="#Paseo-功能特性一览" class="headerlink" title="Paseo 功能特性一览"></a>Paseo 功能特性一览</h2><p>下面简单但完整地介绍一下 Paseo 的主要功能特性。</p><h3 id="定位：开源免费，自带各家智能体"><a href="#定位：开源免费，自带各家智能体" class="headerlink" title="定位：开源免费，自带各家智能体"></a>定位：开源免费，自带各家智能体</h3><p>Paseo 是开源免费的（GitHub 上已有 11.8k star）。它不内置智能体，而是启动和托管你已装好的各家 CLI。你的订阅、技能、配置、MCP 服务器全都原样保留，Paseo 只负责启停、流式转发、收发输入。</p><p>从 provider 视角看，通过 Paseo 跑和手动跑完全一样，不提取 token、不直接调用推理 API，所以不用担心封号问题。</p><h3 id="Provider-双层支持"><a href="#Provider-双层支持" class="headerlink" title="Provider 双层支持"></a>Provider 双层支持</h3><ul><li><strong>原生适配</strong>：Claude Code、Codex、OpenCode、pi</li><li><strong>ACP 目录</strong>（Agent Client Protocol）：Cursor、Gemini、GitHub Copilot、Hermes、Kimi、Qwen Code 等 25+ 一键安装，还能自己添加任意 ACP 智能体</li></ul><h3 id="连接与部署方式"><a href="#连接与部署方式" class="headerlink" title="连接与部署方式"></a>连接与部署方式</h3><ul><li>桌面 App 自带守护进程；纯 CLI 可以 <code>npm i -g @getpaseo/cli &amp;&amp; paseo</code> headless 跑</li><li>官方 Docker 镜像 <code>ghcr.io/getpaseo/paseo:latest</code>，端口 6767，可自托管 Web UI</li><li>三种连接方式：官方端到端加密 relay（Paseo 读不到流量）、局域网直连、Tailscale&#x2F;Cloudflare Tunnel 自建隧道</li></ul><h3 id="跨-Provider-编排（最亮眼的特性）"><a href="#跨-Provider-编排（最亮眼的特性）" class="headerlink" title="跨 Provider 编排（最亮眼的特性）"></a>跨 Provider 编排（最亮眼的特性）</h3><p>agent 通过 Paseo tools&#x2F;MCP 控制守护进程，可以<strong>跨 provider 派子 agent</strong>：比如 Claude Code → Codex → Grok Build，一个规划、一个实现、一个审查，全程可在 App 里看到。</p><ul><li><strong>heartbeat 心跳</strong>：用 cron 定时把提示词打回同一个 agent，让它持续盯 CI、监视部署，跑完自动停</li><li><strong>Schedules 定时任务</strong>：cron 风格独立任务（如每日 triage）</li></ul><h3 id="其他亮点"><a href="#其他亮点" class="headerlink" title="其他亮点"></a>其他亮点</h3><ul><li><strong>浏览器集成</strong>：agent 自带浏览器工具，可在 App 内预览、测试</li><li><strong>语音控制本地优先</strong>：STT&#x2F;TTS 全在本地跑，数据不出网（可选配 OpenAI 提升效果）</li><li><strong>分屏面板</strong>：agent &#x2F; 浏览器 &#x2F; 终端 &#x2F; diff &#x2F; 日志同屏或 tab 分组，键盘快捷键（⌘K、⌘D 等）</li><li><strong>按分支自动分配 URL</strong>：多 agent 并行跑 dev server 不冲突，如 <code>web.fix-auth.my-app.localhost</code></li><li><strong>Review → Preview → Ship</strong>：worktree 里改完，inline 看 diff，Commit → Open PR → Merge 全在 Paseo 内完成</li></ul>]]></content>
    
    
    <summary type="html">Paseo 真的很好用，我最近每天都在用他搭配OpenCode写代码和文章。</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="ClaudeCode" scheme="https://flashj.cn/tags/ClaudeCode/"/>
    
    <category term="工具软件" scheme="https://flashj.cn/tags/%E5%B7%A5%E5%85%B7%E8%BD%AF%E4%BB%B6/"/>
    
    <category term="Hermes" scheme="https://flashj.cn/tags/Hermes/"/>
    
    <category term="OpenCode" scheme="https://flashj.cn/tags/OpenCode/"/>
    
  </entry>
  
  <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-08-01T04:40:06.220Z</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>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>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>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>
  
</feed>
