<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>代码模式 on Codexer</title><link>https://codexer.com/tags/%E4%BB%A3%E7%A0%81%E6%A8%A1%E5%BC%8F/</link><description>Recent content in 代码模式 on Codexer</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 23 Jul 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://codexer.com/tags/%E4%BB%A3%E7%A0%81%E6%A8%A1%E5%BC%8F/index.xml" rel="self" type="application/rss+xml"/><item><title>代码即工具：为什么让 AI Agent 写代码比给它一百个工具更聪明</title><link>https://codexer.com/posts/2026-07-23-code-mode-vs-tools/</link><pubDate>Thu, 23 Jul 2026 09:00:00 +0800</pubDate><guid>https://codexer.com/posts/2026-07-23-code-mode-vs-tools/</guid><description>&lt;p&gt;你用 Codex 写过一个稍复杂的任务吗？配置数据库、查 API、处理 CSV、发通知。如果你装了五个 MCP 服务器，每个暴露十几个工具，模型还没开始干活，光读懂这些工具的描述就烧掉了上万 Token。更要命的是，它还得在几十个相似的工具名之间反复推敲，&amp;ldquo;query_database&amp;rdquo; 和 &amp;ldquo;db_query&amp;rdquo; 到底是不是同一个东西？&lt;/p&gt;
&lt;p&gt;这是当前 Agent 架构里一个被严重低估的问题：&lt;strong&gt;工具箱越膨胀，模型越糊涂&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="工具箱悖论工具越多效率越低"&gt;工具箱悖论：工具越多，效率越低&lt;/h2&gt;
&lt;p&gt;Agent 的工具生态正在经历一场军备竞赛。一个 MCP 服务器提供 12 个工具，下一个提供 30 个。加上 CLI、沙箱、数据库、CRM、浏览器，模型要花大量上下文窗口来学习接口，而不是完成任务。&lt;/p&gt;
&lt;p&gt;有人做过估算：40 个常驻工具的 schema 描述，光 JSON 定义就能吃下约 12,000 Token。这还没算工具之间的语义重叠带来的认知负担。模型需要推断 &lt;code&gt;search_repo&lt;/code&gt; 和 &lt;code&gt;find_repository&lt;/code&gt; 是不是同一个东西，&lt;code&gt;create_issue&lt;/code&gt; 的参数格式跟 &lt;code&gt;open_ticket&lt;/code&gt; 有什么不同。&lt;/p&gt;
&lt;p&gt;第一代 Agent 确实需要显式的工具，那时候模型还不够可靠，上下文窗口也小，每个操作都需要紧耦合的护栏。但现在已经不一样了。前沿模型在&lt;strong&gt;一件事&lt;/strong&gt;上练得极其出色：写代码。&lt;/p&gt;
&lt;h2 id="代码模式给模型一个它本来就会的界面"&gt;代码模式：给模型一个它本来就会的界面&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;代码模式&amp;rdquo;（Code Mode）的核心思想很简单：&lt;strong&gt;不要给模型一堆它需要重新学习的工具接口，给它一个类型安全的执行环境，让它写代码。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;具体怎么做？你不再定义 &lt;code&gt;tool_create_database&lt;/code&gt;、&lt;code&gt;tool_query_database&lt;/code&gt;、&lt;code&gt;tool_insert_record&lt;/code&gt; 三个独立工具。你暴露一个 &lt;code&gt;Database&lt;/code&gt; 类型，它有 &lt;code&gt;create()&lt;/code&gt;、&lt;code&gt;query()&lt;/code&gt;、&lt;code&gt;insert()&lt;/code&gt; 方法。模型自己写代码调用它们。&lt;/p&gt;
&lt;p&gt;这看起来只是换了一种调用方式，但实际影响是质变的：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;并行不再是奢望。&lt;/strong&gt; 三个工具调用需要三次模型往返，但一段代码可以同时发起三个请求，在 JavaScript 里就是三行 &lt;code&gt;await Promise.all([...])&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;中间结果不用全塞进上下文。&lt;/strong&gt; 一个工具调用返回 20MB 的 API 响应，如果直接塞给模型，Token 账单立刻爆炸。但一段代码可以先过滤出关键的 10 行，把剩下的写到磁盘，只把精华返回给模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;控制流回到代码手里。&lt;/strong&gt; 分支、循环、异常处理、重试，这些是编程语言的基本功。但在工具调用模式里，每一个分支都需要模型重新决策一次。代码模式让所有这些逻辑在 TypeScript（或 Python）里确定性执行，模型只需要做一次决策：写什么程序。&lt;/p&gt;</description></item></channel></rss>