这些天我的技术群和几个独立开发者社群里,高频出现同一个问题:“为什么越来越多人放弃 Claude Code 转而用 Pi?”说实话,我第一次看到这个讨论的时候也有点懵,因为 Claude Code 在我看来已经算得上是一个标杆级的 AI 编程助手了。直到我自己把一套已有项目从 Claude Code 整体迁移到 Pi,才真正体会到“放弃”这个词背后的复杂原因:不是 Claude Code 不好,而是在不少日常场景里,Pi 这种更开放、更轻、更省钱的方案太能打了。
先说清楚,这里的 Pi 不是树莓派(Raspberry Pi),而是一个开源编程代理工具,社区里一般叫 Pi Agent,也可以直接叫 Pi。它和 Claude Code 做的事情很像:在终端里读你的项目代码、自动改文件、执行命令、跑测试,甚至可以负责任务拆解和编排。但它和我习惯的 Claude Code 在模型接入、费用结构、工作流灵活度上有明显差异。这篇内容我就把我自己从 Claude Code 切到 Pi 的经历、原因、具体操作以及中间踩过的坑,完整记录下来,希望对那些同样在犹豫要不要切换的人有些参考价值。
1. 先搞清楚:Claude Code 和 Pi 分别解决什么问题
1.1 我对 Claude Code 的理解和使用感受
Claude Code 是 Anthropic 推出的命令行 AI 编程工具,直接跑在终端里,核心能力是读取仓库上下文、生成和修改代码、调用命令行工具,还能通过 Skills 机制给模型挂上自定义技能。我大概用了小半年,最初体验确实惊艳:它不像普通聊天式 AI 那样只能给你一段代码,而是真的在项目目录里“干活”。你让它修一个 bug,它会先看相关文件,改完代码再跑测试,然后把 diff 展示给你。
但用着用着就发现问题开始积累。首先是费用。Claude Code 按背后调用的模型 token 计费,我用的是比较高阶的模型,写一个中等规模功能动辄几美元。可能有人不在乎这点钱,但对我这种每天要开十几个会话的独立开发者来说,一个月下来账单确实肉疼。其次是模型绑定,Claude Code 默认只能用 Anthropic 的模型,虽然社区有各种接入方案,但总归不原生、不稳定。第三是权限和封闭性,它的某些行为和 API 使用策略经常更新,今天能跑的配置,明天可能就提示不兼容,很多时候被迫去追新版本。
当然,我依然认为 Claude Code 是优秀工具,它的 Agent 执行质量,尤其是长链路任务拆解能力,至今仍算第一梯队。但“优秀”和“适合我”不是一回事。当一个开源工具的灵活度可以覆盖掉那部分差距的时候,切换就是顺理成章的事了。
1.2 Pi 是什么,为什么它能进入视野
Pi 最早是在几个 GitHub 开源项目上被刷到的,后来看到有人拿它和 Claude Code、其他编码代理做横向对比,才慢慢注意到。简单说,Pi 是一个开源的编程代理工作台,它的定位不是某个公司的封闭产品,而是一个让你自己配模型、自己定工作流、自己加技能的工具框架。它支持多个模型提供方,你可以用 DeepSeek,可以用本地模型,也可以继续用 Claude 的 API,只要自己能拿到 key。
Pi 的形态和 Claude Code 很接近,但有几个额外加分项:有 Web 界面(pi web),不用只怼着终端;有 Harness 概念,相当于一套流程编排层,可以控制 Agent 在哪个环节调用什么工具;有 CLI,方便脚本化集成。换句话说,它既保留了 Claude Code 那种“干活型 Agent”的效率,又加入了开源社区常见的“什么东西都敢让你改”的 DIY 气质。对我这种喜欢折腾配置的人来说,这个吸引力是致命的。
2. 为什么会越来越多的人放弃 Claude Code 转用 Pi
2.1 账本上的差异:token 费用不是一个数量级
先算一笔很现实的账。Claude Code 的计费基础是消费模型 token,模型越强,输入输出 token 越贵。一个复杂的编码任务常常要来回几十轮工具调用,每轮都要带上代码片段、文件内容和指令,token 消耗非常快。我做过一个统计,当时让 Claude Code 重构一个模块,前后花了差不多 3 万 token 的输入和 7000 token 的输出,换算成费用大概是小几美元。一天下来如果频繁使用,费用很容易到几十美元。
Pi 本身是开源工具,不收软件授权费,你只需要支付所用模型提供方的 token 费用。如果你接的是价钱更低的 DeepSeek 或者本地模型,成本一下就降到原来的十分之一甚至更低。我自己把主力环境切到 Pi + 一个高性价比模型后,一个月的 API 总支出比原来用 Claude Code 时的零头还少。纯粹从成本角度,“越来越多的人放弃 Claude Code”一点都不奇怪,因为大多数个人开发者对价格敏感度很高。
当然,我这里说的“放弃”不是指的完全卸载,而是主力工具不再选它。我身边很多朋友的做法是:重要复杂架构仍用 Claude Code,日常功能迭代、批量修改、重构搬去 Pi,毕竟省钱这件事,放着眼前的不选也是不划算的。
2.2 模型自由:我想用哪个模型自己做主
Claude Code 最强的能力来自 Claude 系列模型,这是它的招牌,也同时是它的限制。如果你所在团队刚刚采购了其他模型 API,或者公司合规部门要求数据不能出内网,那 Claude Code 基本没法适配。Pi 则把这一步彻底解耦了。
在 Pi 里,模型是可插拔的,配置里写清楚 provider 和 model 就行。你可以给不同任务指定不同模型:简单的代码解释用便宜的模型,复杂重构用更强的大模型。甚至可以配置多个模型做路由,某些文件类型走 A 模型,某些任务走 B 模型。我在实际项目中就把代码补全类任务指向低延迟模型,把架构分析和长链路 bug 排查指向高能力模型,运行成本和体验都兼顾了。
这种“模型自由”带来的不只是省钱,还是一种安全感。依赖单一模型厂商意味着把它中断、乱改接口、调整价格都只能被动接受,而用 Pi 这类多 provider 方案,随时可以把底座换掉,项目语义和 Agent 逻辑都不受影响。对长期维护的项目来说,这种可替代性是特别重要的。
2.3 工作流可编排:从“智能助手”到“你的助手”
Claude Code 的 Skills 机制已经很强了,但本质上还是一个预定义好的工具链,你可以在里面塞技能,却很难重新定义 Agent 的核心行为流程。Pi 给我最大的冲击是它的 Harness 概念。你可以把它理解成一条流水线,Agent 每一步做什么、在什么条件下调用什么工具、如何传递上下文,都由你的配置来控制。
比如我的一个仓库里,代码规范检查和单测是分开跑的,我原来在 Claude Code 里只能让它“先检查再测试”,但 Pi 里我可以把这两个动作显式做成两个 stage,前一个 stage 没通过,后一个 stage 根本不会启动。这种能力在处理多模块、多步骤交付时特别有用,因为 Agent 不会自行跳步,执行过程也肉眼可见。
再加上 Pi 支持 Web 界面和命令行两种入口,我在 SSH 到服务器的时候用 CLI,在本地开发的时候开 Web,两者共享同一套配置和会话历史,体验比单独一个终端工具完整很多。这种工作流自由度,是社区驱动的开源项目才会认真做的东西,商业产品往往更倾向把行为固定下来方便维护。
3. 迁移实操:把 Claude Code 的老工作流搬到 Pi
3.1 安装 Pi 的最小步骤
Pi 的安装方式比较常规,前提是机器上已经有 Node.js(我用的是 18+ 版本)和 Git。直接在终端里跑:
npm install -g pi-agent装完之后先初始化目录:
pi init这条命令会在当前目录生成一个配置文件,通常是pi.config.*或放在.pi目录里。初始化完成以后,再用 CLI 配置模型提供方:
pi config set provider deepseek pi config set model deepseek-chat pi config set api_key your-key-here如果你不想每台机器都手工填 key,也可以用环境变量的方式传,比如PI_API_KEY、PI_MODEL。这样做的好处是配置不进仓库,避免把密钥提交上去。我建议从第一天就用环境变量,而不是把 key 写在配置文件里。
作为对比,Claude Code 的安装需要 npm 包名不同,同时要确保有对应 CLI 权限,第一次启动还有登录授权流程。Pi 明显更轻,没有绑定厂商账号,init 完直接配置 provider 就能干活。
3.2 把 Claude Code 里的 Skills 迁移成 Pi 技能
我在 Claude Code 里配置过几个 Skills,包括自动生成 commit message、按指定框架生成模块、日志分析等。迁移到 Pi 时其实思路完全一致:Pi 也支持类似技能机制,只是目录结构和触发词定义不同。
以自动生成 commit message 为例。Claude Code 的 Skills 一般放在项目.claude/skills或用户目录下,每个技能一个文件夹,里面有SKILL.md描述用途和指令。Pi 里我一般是放到.pi/skills/commit-msg,然后写一个skill.md:
--- name: commit-msg description: 根据 git diff 自动生成规范化的 commit message --- 分析当前 git 仓库的暂存区 diff,提取变更类型,生成符合 conventional commits 规范的 message。 只输出最终 commit message,不需要解释过程。迁移之后要重新载入技能,然后直接对 Pi 说“用 commit-msg 技能生成提交说明”,它就会读取git diff并输出结果。这个过程中我踩过一个小坑:Claude Code 对技能描述里的黑话理解得更顺,而 Pi 对 description 的清晰度要求更高,如果 description 写得泛,它经常不主动触发技能。解决办法就是把 “description” 写得像触发词组合,比如明确写“commit, message, 提交说明, git diff”。
3.3 配置多模型和 Harness 工作流
Pi 让我最满意的还是多模型配置。我在pi.config里可以定义多个 model profile :
profiles: fast: provider: deepseek model: deepseek-chat heavy: provider: anthropic model: claude-sonnet-4-0 api_base: https://api.anthropic.com然后在会话里可以随时切换:
pi --profile fast pi --profile heavy对于 Harness,我的工作流配置大概是这样的:一个 stage 负责“代码格式化”,一个 stage 负责“静态检查”,最后一个 stage 负责“单测”。Pi 会按顺序执行,每个 stage 的输出会作为下一个 stage 的上下文。这样做的好处是 Agent 不会被一句“帮我改好”带偏,而是严格经过质量流水线。
具体实现上,我参考社区里一个模板,在pi.harness.yml里写了类似结构:
harness: stages: - name: format command: ["prettier", "--write", "."] - name: lint command: ["eslint", "."] - name: test command: ["pytest", "-q"]配置好了以后,只要让 Pi 修改代码,它跑完后会自动触发流水线。如果中间某个 stage 失败,Pi 会停下来分析日志并尝试修复,这个修复动作又会带来新一轮 token 消耗,但整体上比我手动指挥它一步步跑要节约得多。
4. 常见问题与排查技巧实录
4.1 “malformed response” 是最大的新手拦路虎
很多初次接触 Pi 的人都遇到过这样一串报错:
pi error: the response stream was malformed and no response was produced. try again.我第一次遇到时直接懵了,以为是装坏了。后来排查下来发现,这个错误背后的主要原因通常是流式响应数据不完整或被截断。换句话说,模型服务端没有干净地结束输出,客户端只收到了一半内容,却没法解析出一个完整响应。常见场景有三种:一是请求内容太长,模型在生成过程中超时;二是模型提供方在长输出时连接中断;三是某些接入模型并不完全兼容 Pi 的请求格式,响应被框架判定为 malformed。
处理办法比较实用:先检查请求长度,把超大上下文拆小;再去模型提供方那边看入口配置的 token 上限和流式开关是否开启;最后确认当前用的模型是否在 Pi 的 provider 支持列表里。实测下来,我用本地模型最容易出这个问题,换成 API 服务后基本不出现。如果偶尔出现,重启一次会话,或者切换模型 profile,也能恢复。
4.2 用 Pi 时的几个避坑点
第一,不要把 API key 直接写进 YAML 配置。因为 Pi 项目文件通常是跟着仓库走的,一旦提交到 Git 远程仓库,密钥等于裸奔。我就是因为在测试时贪方便,后来差点泄露,幸好及时发现并 revoke 了旧 key。
第二,Web UI 和 CLI 的会话状态不是天然互通的。我一开始以为在两个入口之间来回切换会自动同步历史记录,结果发现配置共享,但历史话题上下文并不一定延续。所以如果有一个任务需要长对话连续性,尽量固定在同一个入口完成。
第三,token 消耗仍然存在,只是费用变低了。不要因为 Pi 便宜就无限堆长对话,尤其是接本地模型时,无限上下文会让内存和显存直接拉满。我自己会定期执行/compact类的会话压缩操作,或者手动开启新会话,让上下文始终保持在可控范围。
第四,Harness 里尽量别写带交互的命令,比如需要输入确认的npm install或等待用户输入的脚本。一旦 Agent 卡在那个环节,整个流水线会死等。最好把交互式命令改成非交互参数,比如npm install --no-audit --no-fund,或者用yes提前应答。
4.3 说实话,Claude Code 也不是不能留
写到这里可能会给人一种“Claude Code 已经被彻底淘汰”的错觉,其实不是。我现在的日常已经切换到 Pi 为主,但在两类情况下我还是会打开 Claude Code。一类是特别复杂的整体重构任务,它的长上下文理解能力确实更稳;另一类是 Anthropic 模型最新能力还没被其他工具完全适配的时候,比如某些新出的函数调用行为,Claude Code 原生支持总是最快。
所以我更愿意把这次迁移理解成一个“差异化共存”的选择,而不是“取代”。开源工具胜在灵活、便宜、可定制;商业工具胜在稳定、即时、能力上限高。两者并行使用反而可以互补。如果你预算充足并且只用一个模型生态,那继续用 Claude Code 也没问题;如果你像我一样追求性价比和自由度,那 Pi 值得你投入一个周末去体验。
5. 个人体会:切换之后,我到底得到了什么
5.1 心态上的变化:我可以自己掌控整套开发流程
之前用 Claude Code,我的心态是“在使用一个工具”,它强我就享受,它出问题我就等更新。切到 Pi 之后,我的心态变成了“我在组装自己的工具链”,模型可以换,流程可以改,界面不满意可以自己写插件。这种感觉很难量化,但对长期从事技术工作的人来说,掌控感本身就是一种效率。
5.2 给新人的一条建议:先别急着大动干戈
如果你刚听说 Pi,也想跟风切,我建议不要直接删除 Claude Code,也不要一次性迁移所有项目。先在某个小项目里装上 Pi,配一个便宜的模型,把类似 commit message、单元测试、日志分析这类小任务跑两三天。等熟悉了配置项和工作流逻辑,再逐渐把高频任务搬过来。等你真的体验到“省钱、灵活、还不耽误事”之后,大概率就会理解为什么越来也多的人选择站到 Pi 这边了。