news 2026/9/9 13:23:19

goose 如何使用 Code Mode 降低启用大量扩展时的上下文开销?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
goose 如何使用 Code Mode 降低启用大量扩展时的上下文开销?

goose 如何使用 Code Mode 降低启用大量扩展时的上下文开销?

【免费下载链接】goosean open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM项目地址: https://gitcode.com/GitHub_Trending/goose3/goose

在 goose 中启用多个扩展(MCP 扩展)时,传统工具调用方式会把所有已启用扩展的工具定义都放进每一次 LLM 调用里:每个工具都带有描述用途、参数和返回值的定义,扩展一多,这些定义就会持续占据上下文窗口,挤压对话本身的内容。Code Mode 是 goose 提供的一种替代方式:它用 3 个元工具(meta-tools)代替成排的工具定义,让 LLM 按需发现工具、用 JavaScript 代码批量调用工具,从而降低上下文开销。这篇文章基于 goose 文档,给出开启 Code Mode 的完整操作路径和验证方法。

前提条件:

  • goose v1.17.0 或更高版本(Code Mode 在该版本引入,见官方博客 Code Mode MCP in goose);
  • 当前构建包含 Code Mode 扩展——它是内置平台扩展,默认未启用,需要手动打开(使用扩展指南中将其列为 "when included in the current build" 的平台扩展)。

Code Mode 与传统工具调用的差异

官方 Code Mode 文档将两种方式做了直接对比:

方面传统 MCP 工具调用Code Mode
工具发现所有已启用扩展的工具全部暴露给 LLM(developer.shellgithub.list_issuesslack.send_message等,可能非常多)只暴露 Code Mode 扩展的 3 个元工具:list_functionsget_function_detailsexecute_typescript;LLM 用它们按需发现其他扩展的工具
工具调用顺序调用,每个结果都要回到 LLM 后才能进行下一次调用多个工具调用在一次执行中批量完成,中间结果在本地链式传递
上下文窗口每次 LLM 调用都包含所有已启用扩展的工具定义每次 LLM 调用只包含 3 个元工具定义,加上本会话中已发现过的工具定义
适合场景1–3 个扩展、只用 1–2 个工具的简单任务5 个以上扩展、步骤明确的多步骤工作流

也就是说,开启 Code Mode 后,工具定义从"全部常驻"变成"用到才加载",这是它降低上下文开销的直接原因。注意两处文档表述差异:上述元工具名称取自当前官方文档;2026 年 2 月的博客 8 Things You Didn't Know About Code Mode 中将这三个元工具写为search_modulesread_moduleexecute_code,应以当前文档的命名为准。

启用 Code Mode 扩展

方式一:goose Desktop

  1. 点击左上角侧边栏按钮打开侧边栏;
  2. 点击Extensions
  3. Code Mode的开关打开。

方式二:goose CLI

  1. 运行配置命令:
goose configure
  1. 选择Toggle Extensions,用空格键切换code_execution(实心表示启用),回车提交。官方 Code Mode 扩展文档给出的示例输出:
┌ goose-configure │ ◇ What would you like to configure? │ Toggle Extensions │ ◆ Enable extensions: (use "space" to toggle and "enter" to submit) │ ● code_execution └ Extension settings updated successfully

上面两种方式修改的是新会话的默认扩展。如果只想在某个会话中临时启用,可以在启动会话时用--with-builtin参数(用法见 使用扩展指南):

goose session --with-builtin code_execution

该扩展只对当前会话生效,不会改变默认设置。

验证 Code Mode 已生效

Code Mode 扩展文档给出的验证方式是让 goose 执行一个需要多次工具调用的任务,例如文档中的原始提示词:

Create a LOG.md file with the current git branch, last 3 commits, and the version from package.json

判断 Code Mode 是否生效,看工具调用的呈现形式:

  • 未启用时:会看到多次顺序的工具调用(developer__shell一次执行git branch,再一次执行git log……),每次结果回到对话后再进行下一步;
  • 启用后:文档示例中 goose 只发起了Execute Code类型的工具调用,代码形如import { shell, text_editor } from "developer" ...,多个命令在同一次执行中批量完成,中间结果不经过 LLM。上面 LOG.md 示例的输出属于文档示例,你的环境中工具名和文件路径会随任务不同而变化,判断标准是"看到一次 Execute Code 调用代替了多次单独工具调用"。

博客中的批量示例同样说明了这一点:git branchgit statusgit diffcargo test四条命令被合并进一次执行:

import { shell } from "developer"; const branch = shell({ command: "git branch --show-current" }); const status = shell({ command: "git status" }); const diff = shell({ command: "git diff" }); const tests = shell({ command: "cargo test" });

上下文开销的实际收益参考

博客《8 Things You Didn't Know About Code Mode》作者在同一个任务(修复 goose 自身的一个 bug 并提交 PR)上分别用启用/未启用 Code Mode 各跑了一次,报告的结果为:

指标启用 Code Mode未启用
Total tokens23,33933,648
Input tokens23,12833,560

即该次实验中启用 Code Mode 少了约 30% 的 token。这是单一作者、单一任务的一次实验数据(使用 Claude Opus 4.5 模型),只能作为量级参考,不应视为固定预期。文档解释的开销节省来自两部分:工具定义不再全部常驻上下文,以及批量执行减少了往返轮次。

适用边界与限制

以下内容直接来自文档,决定 Code Mode 是否适合你的扩展组合:

  • 扩展数量与任务形态:官方对比表明确传统方式适合 1–3 个扩展的简单任务,Code Mode 适合 5 个以上扩展和多步骤工作流。只有 1–2 个扩展、任务是单次工具调用时,博客给出的建议是直接用普通工具调用,Code Mode 的发现步骤(先发现模块、再读接口、再写代码、再执行)反而增加开销。
  • 仅支持文本结果:Code Mode 只支持工具结果中的文本内容,图片、二进制数据和其他内容类型会被忽略。如果你的核心扩展依赖返回图片,Code Mode 不适用。
  • 模型行为有差异:Code Mode 要求模型能写出语法正确的 JavaScript、按import { shell } from "developer"这类模式导入工具、在写代码前先调用发现类元工具、并在执行失败后读错误重试。博客指出不同模型在这些能力上表现不一,效果不佳时可换用代码生成能力更强的模型。
  • Code Mode 没有移除 MCP:它底层仍然通过 MCP 协议连接你的扩展,只是把"如何调用工具"从逐个工具定义改为程序化接口,扩展的安装、配置方式不变。

下一步

  • 如果你的 goose 是通过 ACP 接入编辑器(如 Neovim),可以在启动参数中同样带上内置扩展,博客给出的配置行是args = { "acp", "--with-builtin", "code_execution,developer" },用法与goose session --with-builtin一致;
  • 扩展的增删、会话中途切换等通用操作见 使用扩展指南;
  • 更深入的理解可阅读 Code Mode 机制文档与 Code Mode 扩展文档。

【免费下载链接】goosean open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM项目地址: https://gitcode.com/GitHub_Trending/goose3/goose

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:20:36

从1234567到写出旋律:简谱入门与数字音频合成实践

这串数字在我电脑的文件夹里躺了十几年。有人看到"1234567"只当它是普通计数,可在音乐人眼里,它就是旋律最原始的编码:Do、Re、Mi、Fa、Sol、La、Si。这篇文章我想把这串数字拆开,讲讲它背后的简谱体系、音高物理、节奏…

作者头像 李华
网站建设 2026/9/9 13:19:20

Gradle增量构建从原理到实战:告别全量构建,提升多模块编译效率

先问一句:你所在的项目是不是也这样——改了一行日志代码,等整个项目编译、打包跑完,水都接回来喝完了,结果还没跑完。如果你在一个多模块的 Gradle 项目里待过,这种场景应该不陌生。Gradle 的增量构建,就是…

作者头像 李华
网站建设 2026/9/9 13:18:31

数据结构C语言版速成复习指南:补考期末考研通用框架

数据结构(C语言版)这门课,是计算机专业里挂科率最高、补考压力最大的几门课之一。很多学生不是不努力,而是教材讲得偏理论,代码示例又不够系统,等反应过来已经到了期中。这篇内容就是给零基础、要补考、要期…

作者头像 李华
网站建设 2026/9/9 13:18:15

科沃斯T90 Pro vs X12 Pro:避障、清洁与基站维护选购指南

扫地机器人这个品类,已经过了“能扫就行”的阶段。现在选机型,本质是在选一套导航算法、清洁执行结构和基站维护成本的组合。这次我们直接聚焦两款热度很高的机型:科沃斯 T90 Pro 和科沃斯 X12 Pro。从型号定位看,前者更接近全能型…

作者头像 李华
网站建设 2026/9/9 13:18:13

TPshop 3.5.0源码部署踩坑与二次开发实战全解析

简介:TPshop 3.5.0是一套面向中小企业的开源电商系统,基于PHP的ThinkPHP框架构建,特别适合有PHP基础的开发者学习架构、做二次开发,或直接用于搭建自主运营的在线商城。整个资源包共含2000个文件,压缩后大小约75.69MB。…

作者头像 李华