内容提要
作者回顾一年前主张用脚本替代MCP工具,如今Pi 1.0通过Codemode支持MCP。Codemode在harness端沙箱运行JavaScript,可编排工具调用、并发操作、保存状态,并调用图像生成、分类器等内部API,还能渐进发现MCP工具。但MCP服务器尚未适配Codemode,存在双重转义问题。作者认为Codemode优于MCP,但持久性、二进制数据和小模型支持仍需完善。
延伸解读
Codemode 与 MCP 的定位差异
Codemode 在 harness 端沙箱运行 JavaScript,用于编排工具调用,而 MCP 是工具协议。文章指出,Codemode 不向 LLM 暴露 MCP 工具,而是通过工具搜索渐进发现。这种设计让 MCP 工具调用更灵活,但 MCP 服务器尚未适配 Codemode,导致双重转义问题,影响小模型使用。
实际应用示例与优势
文章展示了 Codemode 调用图像生成、分类器模型和 MCP 服务器的例子。例如,用 Jev 分类器批量分析 GitHub issue 情感,或驱动游戏引擎调试。Codemode 允许并发操作、保存状态到 transcript,并直接调用内部 API,避免上下文浪费。这些能力在传统工具调用中难以实现。
当前局限与未来方向
Codemode 仍面临持久性、二进制数据和小模型支持等挑战。作者提到可能需要借鉴持久工作流引擎的快照机制,或考虑使用 Starlark 等确定性语言替代 JavaScript。此外,MCP 服务器适配 Codemode 需要时间,双重转义问题也需解决。
Q&A
Codemode 是什么?它和 MCP 有什么关系?
Codemode 是一种让 LLM 在 harness 端用 JavaScript 等语言发起工具调用的机制,可以编排复杂操作、并发执行和保存状态。Pi 1.0 通过 Codemode 来支持 MCP,即用 Codemode 调用 MCP 服务器,而不是把 MCP 工具直接暴露给 LLM。
Codemode 在 Pi 中运行在什么环境?有什么限制?
Codemode 运行在 harness 端,具体是在 QuickJS 的 WASM 运行时中,并有意设置了限制:没有网络、没有文件系统、没有定时器、内存有限。它只能通过调用更多工具来与外界交互。
Codemode 相比直接使用 MCP 工具有哪些优势?
Codemode 允许在语言内部组合工具调用,而不必经过 LLM 上下文;可以表达并发操作和基本工作流;能将状态存入会话记录供后续调用读取;还能调用图像生成、分类器等内部 API,这些 API 通过常规工具会浪费上下文。
目前 Codemode 与 MCP 配合存在什么问题?
MCP 服务器尚未适配 Codemode,导致出现“Codemode 套 Codemode”的双重转义问题,容易让较小模型困惑,且内层代码无法调用外层工具。例如使用 Cloudflare MCP 服务器时,需要把 JavaScript 嵌套在 JavaScript 中执行。
Codemode 目前还有哪些不足或待完善的地方?
持久性较难处理,可能需要借鉴持久工作流引擎来快照调用;图像和二进制数据的处理尚不完善;该模式对较小模型的支持也不够好。
如何在 Pi 中启用 Codemode?
Codemode 默认只在 Pi 启用 MCP 时开启,但可以通过在设置中添加 "defaultTools": ["+codemode"] 来手动开启,也可以直接让 Pi 帮你启用。