<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>技术 on Trevor's Blog</title><link>http://mings.in/tags/%E6%8A%80%E6%9C%AF/</link><description>Recent content in 技术 on Trevor's Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 16 Oct 2026 08:29:21 +0800</lastBuildDate><atom:link href="http://mings.in/tags/%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>IDEA 的智能进了 VS Code：1.0 实测</title><link>http://mings.in/posts/lsp-idea/</link><pubDate>Fri, 16 Oct 2026 08:29:21 +0800</pubDate><guid>http://mings.in/posts/lsp-idea/</guid><description>补全靠猜，跳转看运气，重命名不敢按。10 月 15 日，JetBrains 把 IntelliJ IDEA 里那套 Java 和 Kotlin 引擎做成了语言服务器扩展，推 1.0 正式版，装进 VS Code、Cursor、Google Antigravity 都能用。</description><content:encoded><![CDATA[<h2 id="在-vs-code-里写-kotlin过去一直是将就">在 VS Code 里写 Kotlin，过去一直是将就</h2>
<p>补全靠猜，跳转看运气，重命名不敢按。10 月 15 日，JetBrains 把 IntelliJ IDEA 里那套 Java 和 Kotlin 引擎做成了语言服务器扩展，推 1.0 正式版，装进 VS Code、Cursor、Google Antigravity 都能用。</p>
<p>下文 VS Code 指 Visual Studio Code，IDEA 指 IntelliJ IDEA。</p>
<p>我拿本机一个 Android 工程跟它跑了一整轮。引擎确实是 IDEA 那套，但有个附带条件得先知道：智能不在编辑器里，而在它启动后自己去下载的一台服务器里，那台服务器要一张通行证。</p>
<h2 id="它交付了什么">它交付了什么</h2>
<p>官方 1.0 发布说明里的能力清单，加上插件自带的信息，实际到手这些东西：</p>
<ul>
<li>混编工程一套索引。Java、Kotlin 和两者混写的工程都认，跳到对方定义不会断链，等于不用再同时装三四个语言插件，也不用管它们互相打架。</li>
<li>补全、跳转、检查、快速修复、重命名、格式化。这几项日常频率最高，也是这套扩展的卖点所在。</li>
<li>Maven、Gradle、Bazel 都认，JUnit 能跑，大仓库也不卡。</li>
<li>调试器带模拟断点和异步调用栈，对协程重的代码实用。</li>
<li>Cursor 的 Agents Window 有专门支持：它可以给自己的语言服务器实例，让 agent 拿到基于 IDEA 检查的分析结果，包括 JSpecify 的空安全和 Spring 框架的特殊处理。</li>
<li>语言服务器里还带了一个 MCP 服务端，用 ktor 的 SSE 加 MCP 的 Kotlin SDK 搭的。官方没怎么宣传这条，但对想让 agent 直接吃代码智能的人是条新路。</li>
</ul>
<p>有一条建议要照做：它和红帽、甲骨文那两家 Java 扩展在检查和快速修复上重叠，官方明确建议同时使用时把那两个关掉。Spring Tools 不冲突，可以留着。</p>
<h2 id="装起来只有一条命令">装起来只有一条命令</h2>
<p>装之前有个心理准备：插件市场下到的安装包只有 1.4 MB，真正的智能是运行时下载的。</p>
<p><img alt="扩展壳与语言服务器：1.4 MB 对 361 MB" loading="lazy" src="/images/lsp-idea/fig1-shell-vs-server.png"></p>
<p>也就是说「装个插件」被拆成了两段，一段是编辑器里的壳，一段是 JetBrains 服务器上的 361 MB。壳里只有命令、设置项和语法文件，没有一行语言分析代码；服务器下完解包要占 1.2 GB，自带一份 JetBrains Runtime 25。</p>
<p>命令行装法，VS Code 是这样的：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">code --install-extension JetBrains.intellij-server --force
</span></span><span class="line"><span class="cl">code --list-extensions --show-versions
</span></span><span class="line"><span class="cl"><span class="c1"># jetbrains.intellij-server@1.0.27</span>
</span></span></code></pre></div><p>1.0.27 一共发了六个平台的包，Apple 芯片、Intel、Linux 两个、Windows 两个，全部在 10 月 15 日同一天发布。Cursor 这类编辑器从 Open VSX 拿，VS Code 从微软插件市场拿。</p>
<h2 id="那-43-个设置项里值得动的就几个">那 43 个设置项里，值得动的就几个</h2>
<p>插件往编辑器里塞了 43 个设置项，绝大多数保持默认就行。我会动的这么几个：</p>
<table>
	<thead>
			<tr>
					<th>设置项</th>
					<th>默认值</th>
					<th>什么时候改</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>intellij.jdkForSymbolResolution</td>
					<td>空</td>
					<td>符号解析用的 JDK 和工程跑起来的不是同一个，在这里指路径</td>
			</tr>
			<tr>
					<td>intellij.additionalJvmArgs</td>
					<td>空</td>
					<td>大工程分析吃紧，加 -Xmx 之类的 JVM 参数</td>
			</tr>
			<tr>
					<td>intellij.buildTool</td>
					<td>自动识别</td>
					<td>多模块仓库里想钉死用 Gradle 或者 Bazel</td>
			</tr>
			<tr>
					<td>intellij.workspace.reloadOnBuildFileSave</td>
					<td>always</td>
					<td>每次保存构建文件就重导入，嫌吵可以改成手动</td>
			</tr>
			<tr>
					<td>intellij.projects</td>
					<td>空</td>
					<td>一个工作区里挂多个工程，不想让它们互相看见</td>
			</tr>
			<tr>
					<td>intellij.dev.serverPort</td>
					<td>-1</td>
					<td>已经有一台服务器在跑，让编辑器连它，别自己再起一个</td>
			</tr>
			<tr>
					<td>intellij.trace.server</td>
					<td>off</td>
					<td>想看编辑器和服务器之间到底来回传了什么</td>
			</tr>
	</tbody>
</table>
<p>最后那条值得单说。默认 -1 是「我自己起一台」，改成端口号就变成「你去连那台」。这个开关存在本身说明，官方就是把语言服务器当独立进程设计的，编辑器只是它的第一个客户端。</p>
<h2 id="我干脆绕开编辑器直接跟服务器说协议">我干脆绕开编辑器，直接跟服务器说协议</h2>
<p>既然它是独立进程，就别绕弯子。装完的包里有个叫 intellij-server 的可执行文件，拉起来看参数，能力面比编辑器露出来的大：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./bin/intellij-server --help
</span></span><span class="line"><span class="cl"><span class="c1"># --stdio                     stdio 模式，接编辑器</span>
</span></span><span class="line"><span class="cl"><span class="c1"># --socket=127.0.0.1:9999     服务模式，默认端口 9999</span>
</span></span><span class="line"><span class="cl"><span class="c1"># --port-file=&lt;path&gt;          把绑定的端口写进文件，方便客户端找</span>
</span></span><span class="line"><span class="cl"><span class="c1"># --idle-timeout=10m          没有客户端连就自己退</span>
</span></span><span class="line"><span class="cl"><span class="c1"># --multi-client              允许多个客户端同时连</span>
</span></span><span class="line"><span class="cl"><span class="c1"># --data-sharing=none         遥测关掉</span>
</span></span><span class="line"><span class="cl"><span class="c1"># --system-path=&lt;path&gt;        缓存和索引放哪</span>
</span></span></code></pre></div><p>还有个细节挺有意思：首次启动要你给一个 EULA 的哈希，那个哈希就是包里 EULA.txt 的 SHA-256 前 16 位。它要你确认的是「同意这一版条款」，条款一换，哈希就变。</p>
<p>我写了个一百来行的 Python 客户端，直接跟它说 LSP 协议：</p>
<p><img alt="直接跟语言服务器对话的实测输出" loading="lazy" src="/images/lsp-idea/fig2-lsp-refused.png"></p>
<p>握手 1.4 秒完成。它自报的名字是 IntelliJ Language Server by JetBrains，版本 ILS-263.7084.0，对应用 2026.3 平台。能力报回来 25 个键，其中 22 个是 Provider，补全、跳转、重命名、inlay hints、语义高亮、类型层级、调用层级这些都在。</p>
<p>接着让它导入本机那个 Android 工程，它真干了，日志里逐条列了 Gradle 模型，从 ModuleSourceSets 到 AndroidProject，最后一行是 Successfully imported。</p>
<p><img alt="冷启动时间线与内存占用" loading="lazy" src="/images/lsp-idea/fig3-cold-start.png"></p>
<p>数字记一下：第一次导入（Gradle 守护进程要起、依赖要解析）21 秒；守护和缓存就位以后，导入 978 毫秒，从进程启动算起 10.5 秒进就绪。内存这块，语言服务器本体 626 MB，它自己拉起的 Gradle 守护进程另有 914 MB，而且关掉服务器之后守护还在，得等空闲三小时自己退。</p>
<h2 id="门槛在这里不授权它什么都不给你">门槛在这里：不授权，它什么都不给你</h2>
<p>前面都是好话，现在说那件装之前没人告诉你的事。</p>
<p>服务器起来了，工程导入了，就绪通知也发了。然后我请求补全，回的是这个：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;code&#34;</span><span class="p">:</span> <span class="mi">-32802</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Request refused: no active JetBrains license.&#34;</span><span class="p">}</span>
</span></span></code></pre></div><p>悬停、文档符号、跳转一个个试过去，全是同一个码、同一句话。它能连、能算、能导入，就是不肯把结果给你。跑一句 license status 看它的说法：not licensed, feature requests are parked，未授权，功能请求挂起。</p>
<p>官方在发布说明里把话说得很直：</p>
<blockquote>
<p>With version 1.0, the extension moves out of its free preview phase. Using it now requires an IntelliJ IDEA Ultimate subscription after a 30-day trial period during which you can try out its full feature set for free.</p>
</blockquote>
<p>同一条还有一句更值得注意：</p>
<blockquote>
<p>The license is explicitly designed for human use; we&rsquo;ll release an update regarding licensing models for purely agentic use soon.</p>
</blockquote>
<p>翻译过来是，这个许可只发给人类用，agent 专用那套的规则稍后公布。等于承认这块还没定。</p>
<p>解锁的路它都给了命令：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./bin/intellij-server license login      <span class="c1"># JetBrains 账号；--code 模式适合没浏览器的环境</span>
</span></span><span class="line"><span class="cl">./bin/intellij-server license activate &lt;激活码 / 授权文件 / 浮动许可服务器&gt;
</span></span><span class="line"><span class="cl">./bin/intellij-server license trial      <span class="c1"># 匿名试用 30 天</span>
</span></span></code></pre></div><p>也能用环境变量 INTELLIJ_SERVER_LICENSE 直接喂一把 key，但只在内存里生效，重启就没了。换句话说，这一层不是编辑器里的一个开关，而是一台有自己授权状态的服务器。</p>
<h2 id="几个你会真实撞上的坑">几个你会真实撞上的坑</h2>
<ul>
<li>361 MB 是它自己下的，不是你下的。下载失败时编辑器只给一句很含糊的通知，真正的错误要去服务器自己的日志里翻，日志路径在首次启动时会打出来。</li>
<li>它会给你的工程起一个 Gradle 守护进程，用的还是你工程里那份 Gradle wrapper。第一次打开大工程，内存账要按「服务器加守护进程」一起算，不是只加 626 MB。</li>
<li>扩展要求 VS Code 1.105.1 以上、Node 22.20 以上，老版本装不上。</li>
<li>授权过期那天不会有巨响。语法高亮还在，因为那是编辑器自己的语法文件在管，但补全、跳转、重构会一起安静下去。</li>
</ul>
<h2 id="结语">结语</h2>
<p>这套扩展让我改了一个看法。以前我把 IDE 的语言智能当成编辑器的一部分，现在看它更像一项订阅服务，客户端只是外壳。JetBrains 这步棋走得聪明，一套引擎在 IDE 里卖一次，在别人编辑器里再卖一次；对开发者来说，代价是多了一台要在意的服务器。</p>
<p>你的编辑器里现在装着哪些 Kotlin 插件，会因为这一套换掉吗？评论区聊聊。</p>
]]></content:encoded></item><item><title>省 15 MiB 的补丁被拒了：理由不在代码里</title><link>http://mings.in/posts/kn-outliner/</link><pubDate>Fri, 09 Oct 2026 08:10:57 +0800</pubDate><guid>http://mings.in/posts/kn-outliner/</guid><description>一个工程师给自己的 iOS 包做体积优化，发现只要给编译器加一个 flag，包体就能小 15 MiB。他写了 issue，附上公开项目的复现和相关设备数据，当晚开了 pull request。</description><content:encoded><![CDATA[<p>一个工程师给自己的 iOS 包做体积优化，发现只要给编译器加一个 flag，包体就能小 15 MiB。他写了 issue，附上公开项目的复现和相关设备数据，当晚开了 pull request。</p>
<p>第二天早上，PR 被关掉，没有技术评审。</p>
<p>关 PR 的理由是：不接受低投入的 AI 生成贡献。这句话值多少，得先把技术部分看完才有感觉。</p>
<h2 id="他发现的东西小二进制模式没碰到-kotlin-代码">他发现的东西：小二进制模式没碰到 Kotlin 代码</h2>
<p>事情的主角是 Kotlin/Native 的 <code>smallBinary</code>，2.2.20 起提供的实验性选项，作用是把 IR 管线的优化级别切到 Oz，同时不再强制内联运行时热路径。听起来该省的都省了。</p>
<p>但最后一步代码生成，Kotlin/Native 走的还是 <code>clang -cc1 ... -O3</code>，这个值就写在工具链的 <code>konan.properties</code> 里，键是 <code>clangOptFlags.ios_arm64</code>。</p>
<p>而 LLVM 那个能去掉重复机器码的 MachineOutliner 在 AArch64 上的默认策略是，只对带 <code>minsize</code> 属性的函数生效。</p>
<p>两条一叠：IR 层是体积模式，机器码层还是性能模式，而 Kotlin 生成的函数不带 <code>minsize</code>。结果就是 MachineOutliner 扫过一遍，一个 Kotlin 函数都没碰。</p>
<p>他在 issue 里给了两组数字。最终 bitcode 的 33,881 个函数定义里，只有 55 个带 <code>minsize</code>，全是运行时冷路径。他们的 app 里，装着 33 MB Kotlin 代码的那个 object 只有 11 个 outline 助手，旁边预编译的 Skia 对象有 4,459 个。</p>
<h2 id="我自己跑了一遍">我自己跑了一遍</h2>
<p>这种事不该只看别人的数。本机有 Kotlin/Native 2.4.0，我写了一小段接口派发密集的代码，300 个函数，同一个源文件编译三次，都用 <code>-opt</code> 和 <code>-Xbinary=smallBinary=true</code>。</p>
<p><img loading="lazy" src="/images/kn-outliner/terminal.png"></p>
<p>机制这部分完整复现了。默认只有 9 个 outline 助手，说明这个 pass 确实在跳过 Kotlin 代码；一个 konan.properties 覆盖加上去，助手数量到上千，体积同步往下走。绝对体积只降了 5% 到 9%，因为我这个示例工程太小，而他那份 Kotlin object 有几十 MB。</p>
<p>本机 konan.properties 里也确实写着 <code>clangOptFlags.macos_arm64 = -O3</code> 和 <code>llvmInlineThreshold = 100</code>，他立论的两个前提都对得上。</p>
<h2 id="省下来的体积和账的另一面">省下来的体积，和账的另一面</h2>
<p>他的 app 是 Compose Multiplatform 的 iOS 构建，未签名归档 114.7 MiB（同一 commit，Kotlin 2.4.10，Xcode 26.5）。</p>
<pre tabindex="0"><code>smallBinary + latin1Strings         114.7 → 101.7 MiB
再强制开 outliner                     → 86.9 MiB
再加内联阈值 5                        → 81.4 MiB
</code></pre><p>第三步那 81.4 MiB 值得多看一句：他用改过编译器的版本（给每个 Kotlin 函数打上 minsize）做出 81.3 MiB，两者只差 0.1 MiB。也就是说这个收益里绝大部分来自少内联，不改编译器也能拿到。</p>
<p>代价他也写清楚了。iPhone 13 上做 23 秒程序化滚动，CPU 从 8.48 秒涨到 8.94 秒，涨 5.4%，单帧卡顿从 18 次变成 27 次；iPhone X 上 CPU 涨 6.5%。启动时间没变化。</p>
<p>更反直觉的一条是下载体积。整个可执行文件 gzip 后从 20.42 MB 变成 20.05 MB，只动了 0.37 MB。未签名包体掉了 14.8 MiB，压缩后几乎没动，因为被去掉的重复正是压缩算法最喜欢吃的东西。</p>
<p>另外，框架的代码生成时间从 2 分钟涨到 6 分钟；崩溃栈顶会多一层 <code>OUTLINED_FUNCTION_n</code>，不过 lldb 还能回溯到真正的调用者，他拿 Kotlin 异常和 SIGSEGV 在两种构建上试过，逻辑栈一致。</p>
<p>他自己的处境是金融类 app，结论是宁愿滚动顺滑，也不要省那 15 MiB。两个 binary option 在评审中，outliner 这条等自家最重的页面做完设备测试再说。</p>
<h2 id="然后-jetbrains-关了他的-pr">然后 JetBrains 关了他的 PR</h2>
<p>技术部分说完了，轮到那句拒绝。</p>
<blockquote>
<p>We don&rsquo;t accept low-effort AI-generated contributions that shift the burden of understanding, verifying, and fixing the proposed changes onto maintainers.</p>
</blockquote>
<p>翻译过来是，不接受低投入的 AI 生成贡献，这类提交把理解、验证、修复的负担转移给了维护者。后面还有一句：用 AI 工具没问题，但贡献者要投入自己的工程努力，对提交的质量和正确性负责。</p>
<p>作者在文里的复盘很坦率。他承认自己借了 AI 工具准备 PR，在团队还没看 issue 之前就把 PR 开了，一小时后又重写了一遍。从他的角度，这是一次着急；从维护者角度，这就是每天被淹没的那种顺手提交。</p>
<p>不过他也留了一句边界：PR 被关，不等于技术结论被推翻。那些数字用一个 flag 加现成编译器就能重现，公开的 KotlinConf app 也给了别人独立核对的路。顺手提一句，那个公开 app 的 Kotlin object 从 14.88 MB 降到 8.33 MB。</p>
<p>issue 那边的状态现在是 Declined，创建于 10 月 7 日，第二天更新。</p>
<h2 id="写-kotlinnative-的人现在能做什么">写 Kotlin/Native 的人现在能做什么</h2>
<p>如果你的项目里有 iOS framework，这三件事按顺序来。</p>
<p>先开 <code>smallBinary</code> 和 <code>latin1Strings</code> 这两个 binary option，stock 编译器就能用，都是实验性选项，每次升级 Kotlin 记得重测。他那边这一步拿了 13 MiB。</p>
<p>再想往下压，就是 konan.properties 覆盖这条路：强制 outliner、往下压内联阈值。它有收益，但属于未公开用法，官方公开的是 <code>-Xllvm-module-passes</code> 和 <code>-Xllvm-lto-passes</code>，而且还有 KT-69212 说明现在没法直接禁用某个 pass。</p>
<p>这类覆盖有个隐患，万一某个版本改了属性名，它会静默失效，所以要在 CI 里挂一个体积校验。</p>
<p>最后，发布前一定做设备性能测试。这条优化是用 CPU 换体积，他实测的滚动开销就是 5% 往上。</p>
<p>顺带几个他也测过、结果不一样的项：</p>
<ul>
<li>有个 vendor 的 Swift package 把一个用不上的 4.9 MiB OpenSSL 框架打了进来，可以用 <code>otool -L</code> 配合 <code>nm</code> 查</li>
<li>Skiko 带的 ICU 数据 6.3 MB，他裁过一版，长按输入框直接崩了，这条路他停在那里</li>
<li><code>material-icons-extended</code> 声明在多个模块里但一个字节都没进包，删掉只省构建时间</li>
<li><code>@Preview</code> 函数在 release 里本来就被剥掉了</li>
<li>LLVM 的全局函数合并那个著名的体积 pass，在他这套配置下反而让 Kotlin object 大了 0.44 MB</li>
</ul>
<h2 id="最后">最后</h2>
<p>这件事有意思的地方不在那 15 MiB。一个可复现的性能问题、一个公开的复现项目、一组设备上的实测数据，凑齐这些之后，卡住它的不是技术争议，是贡献流程里的信任成本。</p>
<p>对写代码的人是提醒：issue 先让维护者评估，别急着开 PR。对维护者是另一道题：AI 把 PR 的产出成本压到近乎为零，评审成本却一点没降，这条线会有更多项目划出来。</p>
<p>你会为了省 15 MiB 接受 5% 的滚动开销吗，评论区聊聊。</p>
<p>参考：</p>
<ul>
<li>Mo Yaver 的实测长文 <a href="https://medium.com/@mhammadjaber00/kotlin-natives-smallbinary-never-runs-llvm-s-outliner-on-kotlin-code-f457d0fbb6d2">https://medium.com/@mhammadjaber00/kotlin-natives-smallbinary-never-runs-llvm-s-outliner-on-kotlin-code-f457d0fbb6d2</a></li>
<li>他提的 issue KT-90068 <a href="https://youtrack.jetbrains.com/issue/KT-90068">https://youtrack.jetbrains.com/issue/KT-90068</a></li>
<li>被关闭的 PR #8802 <a href="https://github.com/JetBrains/kotlin/pull/8802">https://github.com/JetBrains/kotlin/pull/8802</a></li>
<li>Kotlin 2.2.20 发布说明（smallBinary 与 latin1Strings）https://kotlinlang.org/docs/whatsnew2220.html</li>
<li>Kotlin/Native binary options 文档 <a href="https://kotlinlang.org/docs/native-binary-options.html">https://kotlinlang.org/docs/native-binary-options.html</a></li>
<li>自定义 LLVM 优化 pass 的说明 <a href="https://kotlinlang.org/docs/native-llvm-passes.html">https://kotlinlang.org/docs/native-llvm-passes.html</a></li>
</ul>
]]></content:encoded></item><item><title>老牌御三家回来了？</title><link>http://mings.in/posts/ai-trio/</link><pubDate>Thu, 01 Oct 2026 07:46:19 +0800</pubDate><guid>http://mings.in/posts/ai-trio/</guid><description>第一反应是&amp;quot;哦，终于来了&amp;quot;。</description><content:encoded><![CDATA[<h2 id="早上刷到-gemini-4">早上刷到 Gemini 4</h2>
<p>第一反应是&quot;哦，终于来了&quot;。</p>
<p>第二反应是&quot;我用不上&quot;。</p>
<p>9 月 30 日，Google 官方博客发了 Gemini 4 Argon，署名是 Google DeepMind 的高级副总裁 Koray Kavukcuoglu，当天就顶上了 Hacker News 首页。开头一句挺克制：</p>
<blockquote>
<p>Today, we&rsquo;re announcing our new frontier model, Gemini 4 Argon, which is rolling out to a set of trusted cyber defenders through our Fairwind Program.</p>
</blockquote>
<p>翻译一下就是：先发给一批可信的网络防守方，不是发给你。</p>
<p>这条路我一点都不陌生，模型厂商发前沿能力这几年都是这个节奏：先美国政府的自愿预发布评估流程，再小范围可信测试者，最后才是开发者、企业和普通用户。官方原文也说了顺序，叫&quot;starting with paid API customers and Google AI Ultra subscribers&quot;。</p>
<p>所以这件事的准确说法不是&quot;Gemini 4 发布了&quot;，而是&quot;Gemini 4 官宣了，并且限量放出了一小批&quot;。</p>
<h2 id="现在你确实用不上">现在你确实用不上</h2>
<p>我不想让大家空欢喜，所以自己去核了两处。</p>
<p>第一处是 Google 自己的开发者文档。Gemini API 的模型列表页（页面标注更新于 9 月 24 日）里，最新的一批还是 Gemini 3.8 Flash、3.8 Live、3.8 Flash TTS 这些，没有 argon 的 endpoint。也就是说你拿着 API key 也调不到。</p>
<p>第二处是预测市场。Polymarket 上有个&quot;Gemini 4.0 何时发布&quot;的盘口，成交量 88 万美元，规则写得很死：</p>
<blockquote>
<p>For this market to resolve to &ldquo;Yes,&rdquo; Gemini 4.0 must be launched and publicly accessible&hellip; A closed beta or any form of private access will not suffice.</p>
</blockquote>
<p>封闭测试不算数，要有公开可访问的入口才算。所以在这个盘口上，9 月 30 日那一格只有 1%，10 月 15 日是 68%，10 月 31 日 88%，11 月 30 日 94%。押注的人用真金白银表态：他们不觉得那天算发布。</p>
<p>这两处一对照，这件事的分量就清楚了。牌翻开了，但牌还在 Google 手里。</p>
<h2 id="argon-到底放了什么出来">Argon 到底放了什么出来</h2>
<p>虽然用不上，但官方这篇东西信息量不小，我把关键的挑出来。</p>
<p>输出上限抬到 100 万 token。 官方原话是从 64K 提到 1M，用词是&quot;industry-leading&quot;。这件事的意义比听起来大：模型能一口气写几十万 token，意味着&quot;长轨迹任务一次做完&quot;从演示变成了可配置的东西。</p>
<p>跑分给了一整排。 DeepSWE v1.1 拿了 77.9%，官方说这是真实世界、长跨度软件工程任务上的新 SOTA；AutomationBench 51.3%，Zapier 那套端到端业务流程评测里排第一；LVBench 长视频理解 91.7%；CWE-bench v1 漏洞修复 68%，并列第一。</p>
<p>另外还提了 Vals Index、Vals Finance Agent v2、Harvey 的法律 agent 基准，口径都是领先。</p>
<p>价格贴着竞品定。 介绍期每百万输入 token 2 美元、输出 10 美元，缓存输入打 95% 的折，介绍期结束后回落到 4 美元和 20 美元。</p>
<p>最实在的是 Google 自己怎么用它。 官方列了三个内部案例，我觉得比跑分有意义：量子计算团队用它优化子程序，胜过已发表的基线 40%；一组 agent 分析全机队性能数据做内存优化，先省出 300 TiB，预计最终 500 TiB 到 1 PiB。</p>
<p>还有 C/C++ 到 Rust 的大规模迁移，从 re2、libgav1 一直干到 Fuchsia 的 Zircon 内核，八十多万行。libgav1 那个例子特别具体：agent 把 3.2 万行 SIMD 代码换成安全的 Rust，跑得比原来的 Rust 移植版快 2.7 倍。</p>
<p>安全这块它摊得比较开。 给可信防守方的那一版不带 cyber guardrails，让他们用满攻击面；对外版本强调对间接提示注入的防护（在 Gray Swan 的 IPI 基准上称领先），还有对思维链和动作的失配监控。Wiz 已经拿它在一个全球医院在用的医疗软件里翻出一个前代前沿模型漏掉的高危漏洞。</p>
<h2 id="同一天别人在干什么">同一天别人在干什么</h2>
<p>这才是&quot;御三家&quot;这句话的由来。这半个月不是 Google 一个人的表演。</p>
<p>先说时间线。Anthropic 9 月 1 日发了 Fable 5.1 和 Mythos 5.1，9 月 22 日发 Opus 5.5，一句话概括是&quot;达到 Fable 5.1 的水平，比 Opus 5 便宜 40%&quot;；9 月 28 日又发 Sonnet 5.5，&ldquo;快 30%，多数活儿便宜最多 30%&quot;。</p>
<p>OpenAI 这边，9 月 30 日（同一天）放 GPT-6.1 Sol，副标题写得比 Google 还直白：</p>
<blockquote>
<p>Near-Astra intelligence for a fifth of the price</p>
</blockquote>
<p>接近 Astra 的智能，五分之一的价格。每百万输入 2 美元、输出 10 美元，缓存输入 0.10 美元。几个具体数字：DeepSWE v1.1 上追平 Astra 但成本只有五分之一；GDP.pdf 超过 Opus 5.5，每任务成本不到一半。</p>
<p>科学工作流那个 Terminal-Bench Science 上，它每任务 5.47 美元，Opus 5.5 是 23.21 美元，Astra 是 23.80 美元。</p>
<p>你可能已经发现一件事了：Google 和 OpenAI 不约而同都在报 DeepSWE v1.1 和 AutomationBench，缓存输入的价格也都落在 0.10 美元这个数上。跑分口径和定价口径同时靠拢，说明这两家盯的是同一批客户。</p>
<p>再看这三家最近在补什么。Google 从去年底的 Gemini 3 之后，中间一路发 3.5、3.6、3.7、3.8 的 Flash 变体，原计划的 3.5 Pro 没了踪影（这条是媒体口径，官方没给说法），拖到现在才把 Argon 拿出来。Anthropic 的更新全落在&quot;更便宜、更快&quot;上。OpenAI 的 Sol 干脆就是把 Astra 的能力打折卖。</p>
<h2 id="那老牌回来了这句成立吗">那&quot;老牌回来了&quot;这句成立吗</h2>
<p>我的判断是：与其说回来了，不如说打法换了。有三点挺明显。</p>
<p>一，不比聊天了，比给谁干活。这一个月三家新模型的关键词全是长跨度软件工程、金融研究、法律起草、漏洞修补、业务流程。全是贵、专业、有预算的地方。</p>
<p>二，前沿模型开始限量放出。Google 这次甚至明确说，安全护栏要边扩边加固，公开发布是&quot;逐步扩大&rdquo;。这跟&quot;发个博客大家都能调&quot;的时代不一样了，前沿能力越来越像受管控的资源。</p>
<p>三，价格战换了计分单位。以前比每百万 token 多少钱，现在两边都在报&quot;每任务成本&quot;。Sol 那句&quot;每任务 5.47 美元对 23.21 美元&quot;，才是现在最有效的广告词。</p>
<p>所以我不太愿意用&quot;回来了&quot;这个词。这个行业不是谁被打跑了又回来，而是这批老牌在开源阵营把&quot;便宜&quot;和&quot;可自托管&quot;占住之后，掉头去占&quot;贵活儿&quot;和&quot;有渠道&quot;。</p>
<p>对写 AI 客户端的人来说，真正值得记的是两个参数：一个是缓存输入的价格被打到 0.10 美元每百万 token，这对长会话、反复带上下文的客户端是直接的成本变量；另一个是评测的名字换了，DeepSWE v1.1、AutomationBench、CWE-bench 这些，比 MMLU 那代更接近&quot;你到底能不能干活&quot;。下次给模型选型，看这几个比看总榜有用。</p>
<h2 id="一句诚实的边界">一句诚实的边界</h2>
<p>这台机器上没有任何一家的 API key（我查过了，全是空的），所以这篇里的数字，包括 77.9%、51.3% 这些跑分和全部价格，都来自官方发布页和公开评测榜单，我没有真跑过 Argon，也跑不了，它现在只对 Fairwind 计划里的可信防守方开放。</p>
<p>哪些是官方口径、哪些是媒体说法、哪些是第三方预测，我在文中都标了。比如&quot;3.5 Pro 被放弃&quot;是媒体口径；Polymarket 的赔率是市场预测，不是事实。</p>
<p>至于我自己的下一步：等它开放给付费 API 用户那天，我会拿手上那个 AI Chat 客户端实跑一遍，重点看两件事，一百万的输出上限在真实会话里到底能不能用，以及缓存输入那 0.10 美元在长会话里省下多少。到那天再写一篇带数据的。</p>
<p>你觉得这一轮是&quot;老牌回来了&quot;，还是&quot;老牌换了个卖法&quot;？你上一次真心实意为哪家的 API 掏钱？</p>
<p>参考资料：</p>
<ul>
<li>Introducing Gemini 4 Argon（Google 官方）：https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-4-argon/</li>
<li>Introducing GPT-6.1 Sol（OpenAI 官方）：https://openai.com/index/introducing-gpt-6-1-sol/</li>
<li>Anthropic Newsroom（Opus 5.5 / Sonnet 5.5 / Fable 5.1）：https://www.anthropic.com/news</li>
<li>Gemini API 模型列表：https://ai.google.dev/gemini-api/docs/models</li>
<li>Polymarket「Gemini 4.0 发布」盘口：https://polymarket.com/zh/event/gemini-4pt0-released-by-june-30-2026</li>
</ul>
]]></content:encoded></item></channel></rss>