最近在社区里看到越来越多人在聊同一个话题:为什么有人放着 Claude Code 不用,跑去用 Pi。说实话我一开始是不太信的,毕竟 Claude Code 是这几年第一个让我在终端里产生"对面坐着一个靠谱结对工程师"这种感觉的工具。但架不住身边同事一个个都在迁,自己也跟着把几个主力项目切过去了。半个月用下来,我大概明白这个迁移潮背后的逻辑了。这篇文章就把我踩过的坑、对比过的细节、以及最终怎么做的决策都摊开讲,给还在观望的人一个参考。
这篇内容适合谁?如果你正在用 Claude Code,又对三件事不满——token 费用飘忽、模型被绑定在一家生态里、想深度定制自动化流程却总是被工具本身限制——那这篇内容大概率对你有用。当然,如果你刚接触这个领域,也没关系,我会把两边的核心概念拆开讲清楚。
1. Claude Code 和 Pi 到底在争什么
1.1 Claude Code 当初为什么会火
Claude Code 火起来,不是因为"能写代码"——能写代码的 AI 工具早就有了。它真正厉害的地方是把"编程代理"这个体验做出来了:直接跑在终端里,能读整个仓库,能规划任务,能自己改文件、跑测试、看报错然后继续修。它不是那种你问一句它答一句的聊天机器人,而是一个有"目标感"的执行体。
我记忆最深的还是第一次在项目里跑/init的场景。它扫描了代码结构、构建命令、测试方式,自动生成 CLAUDE.md,把项目背景、路径约定、坑位全写进去。之后每次对话,Claude 都能基于这份文档给出上下文。这种"把仓库说明文档变成模型长期记忆"的设计,后来成了很多 Coding Agent 抄作业的模板。
再加上 Skills 机制:你可以写一个带name、description的SKILL.md,把某类重复任务封装成可复用的技能。配合 MCP(Model Context Protocol)接外部数据源,Claude Code 已经不单单是一个编码助手,更像一个长在终端里的私人工程师。这也是为什么很多团队一开始对它特别上头。
1.2 Pi 不是又一个 Claude Code 皮肤
Pi 和 Claude Code 表面看都是终端里的编程代理,但定位差异非常大。如果打个比方,Claude Code 像是买了一台整车,发动机、变速箱、底盘都是原厂调好的,你只管坐上去开;而 Pi 更像是一个底盘平台,发动机可以自己换,悬挂可以自己调,甚至油门踏板的曲线都能改成自己喜欢的样子。
Pi 的核心设计是模型无关。Claude Code 默认绑定 Anthropic 家的 Claude 模型,虽然有一些第三方接入的路子,但始终像是在"借别人家的壳跑自己的模型",约束和限制都很多。Pi 从第一天起就把后端模型当作一个可插拔组件:你可以接 Claude,也可以接 DeepSeek,可以接 OpenAI 兼容端点,甚至可以接本地跑的量化模型。
这个差异看起来只是"多接几个模型",实际影响深远。因为当模型变成可选项之后,你的工作流、成本结构、团队协作方式全都跟着变了。Claude Code 的优势是"全家桶调校好",Pi 的优势是"自由度极高"。两者争的不是同一个用户群,而是同一批用户在成长过程中不断变化的需求。
2. 为什么越来越多人在迁移:四个让我动摇的理由
2.1 模型绑定与成本结构
Claude Code 的体验确实好,但好体验是有代价的。日常使用中,单次对话动辄几千上万的 token,跨文件重构时一次任务消耗几百万 token 也时有发生。如果你用的是订阅制,会觉得"反正包月,随便刷";一旦用到按量付费的 API,月底账单就很酸爽了。而且模型能力、上下文窗口、计费方式这些全绑在 Anthropic 一家生态里,你没有任何议价空间。
Pi 的做法是 BYOK(Bring Your Own Key),你想用哪家模型的 key 就配哪家。我这边最常用的组合是:日常小型修复用高性价比的模型跑,大型重构切成 Claude 或者更强推理的模型,本地离线原型项目直接接 Ollama 里的 14B 量化模型。每个任务类型匹配不同的成本档位,这才是我理想中的成本结构。
顺带说一句,Pi 里可以给每次任务配置max_tokens预算和cost_limit。超过预算就直接中止任务,不会出现"一觉醒来账单爆炸"的情况。我试过给一个长期任务设了 5 美元上限,它跑到 4.7 美元就停下来等我确认,这种细节在 Claude Code 里很难控制得这么细。
2.2 上下文管理与"1M 窗口之后"
Claude Code 一个很大的卖点是支持高达 1M 的上下文窗口。首次听到这个数字时我也觉得无敌,大仓库可以整包塞进去。但用了一段时间后我发现,上下文大不等于上下文管理好。模型在 1M 窗口里做推理,速度和费用都呈非线性增长;而且窗口里塞的东西越多,噪音越大,模型反而容易忽略真正重要的文件。
Pi 对长任务的思路不是"努力把窗口撑大",而是"想办法让模型别一次性看那么多"。它内置了一个上下文压缩机制,会把仓库扫描结果按重要程度分层:核心入口文件、最近改动的文件、测试依赖关系、构建配置,各层按需加载。执行长任务时,Pi 支持把任务拆成多个 workflow 步骤,每一步独立分配上下文,上一步结论以结构化摘要传给下一步,而不是把所有原始内容一路带到最后。
这套机制在超大型仓库上的效果尤其明显。我有一次在 Claude Code 里做跨 2000+ 文件的模块抽取,到最后阶段经常出现它"记不清"早期决定的情况;同样的任务在 Pi 里拆成 8 步 workflow,每步拿着摘要继续,反而稳定很多。说白了,1M 窗口是硬撑,压缩上下文是巧劲。
2.3 可编程工作流与可观察性
Claude Code 也有 Skills 和 workflows,但坦白讲,这些能力更像是后期加上的"高玩玩法"。它的主交互模式还是自然语言对话:你说一句,它做一段。真正想把一个复杂流程固定下来,你需要非常熟悉它的 DSL 和内部约束,否则写出来的 workflow 脆弱且难调试。
Pi 把 Workflow 提到了和对话同级的地位。最简单的 workflow 长这样:
name: refactor-module description: 执行模块重构并保证测试通过 steps: - name: scan model: fast-model prompt: | 扫描 {module_path} 下所有文件,列出对外依赖和内部实现,输出依赖清单。 output: deps.json - name: plan model: strong-model context: deps.json prompt: | 基于依赖清单设计重构执行计划,输出步骤列表。 scope 限定在 {module_path},不要触碰公共接口。 - name: apply model: strong-model context: plan.md command: | 根据 plan.md 逐步执行重构,每完成一步运行 {test_command}。 失败时读取报错并修复,最多重试 3 次。每个步骤独立记录输入、输出、消耗 token、耗时,跑完可以直接审计。这是让我真正动摇的地方——Claude Code 像一个聪明的助手,但你很难控制它按你的思路分阶段执行;Pi 更像一条可编程流水线,每一步都可观察、可回放、可单独重跑。
2.4 团队协作与可审计性
Claude Code 的很多配置都在全局环境或账号体系里,跨设备同步和团队共享一直有点别扭。虽然 CLAUDE.md 可以放进仓库,但 Skills 的存放位置、MCP 配置、模型参数这些散布在不同地方,团队新人入职光配环境就能耗掉半天。
Pi 的设计明显考虑了协作场景:所有配置、workflow、skills 都存在项目目录下的.pi/里,本质都是文本文件,直接跟着 git 走。新人 clone 完仓库,执行一个pi setup就能把整个团队的工具链恢复出来。CI 里也可以跑pi run --headless,把 workflow 当作自动化流水线用。这一点对于任何超过两个人的团队都是加分项。
3. 迁移实操:从 Claude Code 到 Pi 的完整路径
3.1 先把自己手上的 Claude Code 配置盘点清楚
无论你最终要不要换,第一步都建议先盘点现有资产。Claude Code 这些年攒下的主要配置有几类:
- 项目级的 CLAUDE.md:记录仓库结构、构建命令、代码规范、常见坑。
- Skills 目录:通常在
.claude/skills/下,每个 Skill 是一个带SKILL.md的文件夹。 - MCP 服务器配置:在
.mcp.json或全局配置里,定义了外部工具和知识源。 - 全局命令和别名:比如你自定义过的斜杠命令。
我建议先把 CLAUDE.md 和所有 Skills 复制到仓库一个临时目录里,比如docs/agents/。迁移最怕的不是没有新工具,而是旧积累全部丢失。后来你觉得 Pi 不顺手想回滚,这些资产也还在。
3.2 安装 Pi 并接入同一个模型池
Pi 的安装路径有好几条,我实测比较顺的是这几种:
# 方式一:npm 全局安装(适合主要用 CLI 的场景) npm install -g pi-agent # 方式二:官方脚本安装(会同时装好 CLI 和 Desktop 入口) curl -fsSL https://install.pi.dev | sh # 方式三:如果你对 shell 别名和快捷键有执念,装社区维护的 oh-my-pi 插件 # 它会帮你配好常用命令别名和 Tab 补全装完后第一步不是急着跑任务,而是先接模型。我当时的配置大概是这样:
pi init pi config set model deepseek-chat pi config set max_tokens 8192 pi config set stream true如果你也想保留 Claude 作为能力最强的后端,可以注册多个模型组,按任务切换:
pi config add-model claude --provider anthropic --model claude-sonnet-4-5 pi config add-model deepseek --provider deepseek --model deepseek-chat pi config add-model local --provider ollama --model qwen3:14b这样你在一台机器上同时拥有高中低三档模型,按需切换,成本曲线完全可控。之前困扰我的"续费订阅才能用最强模型"的问题,在这里变成一个简单的配置项。
3.3 用 Pi 重建 Claude Code 的每日流
迁移过程中最有意思的部分,就是把平时高频操作翻译成 Pi 的语法。我整理了一张对比表,方便你对照着评估迁移成本:
| 操作场景 | Claude Code 习惯用法 | Pi 对应方式 |
|---|---|---|
| 初始化项目上下文 | /init生成 CLAUDE.md | pi init生成 PI.md 和.pi/目录 |
| 添加目录到关注列表 | /add-dir src/ | pi attach src/ |
| 切换模型 | /model claude-sonnet | pi config set model claude |
| 查看当前会话上下文 | context命令 | pi ctx展示当前上下文摘要和来源文件 |
| 加载可复用技能 | /skills | pi run use <skill-name> |
| 设置高推理强度 | /think xhigh | workflow 的model: strong-model字段 |
| 执行多文件重构 | 自然语言长对话 | pi run workflow refactor.yaml |
我特别想说说/think xhigh和 workflow 的区别。Claude Code 里把思考等级拉到 xhigh,单轮任务的质量确实上去了,但延迟和 token 消耗也直线上升。Pi 的处理哲学不太一样:它默认你不应该让单个步骤做太多事,而是把一个复杂目标拆细,每一小步用适中的推理强度执行,最后你用pi review统一审阅改动。效果上我个人觉得后者更可控。
3.4 VS Code 里的双持配置
很多人纠结要不要卸载 Claude Code,我的建议是先别。VS Code 里两个扩展可以共存,你完全可以按项目分流:核心的、依赖 Claude 理解能力的任务留在 Claude Code,批量、重复、追求低成本的活交给 Pi。
我的实际配置是:
- Claude Code 扩展:用在架构设计、复杂算法实现、疑难 Bug 排查这类"质"优先的任务。
- Pi 扩展:用在测试生成、文档补全、依赖升级、跨文件重命名这类"量"优先的任务。
如果你也用 VS Code,建议把两边的 agent 配置成读同一个.cursorrules或者仓库级规范文件。这样不管你在哪个工具里发起任务,模型看到的基础约束是一致的,两个 agent 改出来的代码风格不会打架。
4. 关键场景实测:重构、跨仓排查、批量改稿
4.1 大型重构:xhigh 单线程硬刚 vs workflow 分阶段
我自己最有说服力的一次对比,是一个支付模块的重构。老代码 180 多个文件,耦合严重,我要在不改变对外接口的前提下把内部实现改成策略模式。
用 Claude Code 跑这次重构时,我开了/think xhigh,它在规划阶段给出了非常漂亮的方案,依赖分析和接口设计都挑不出毛病。但执行到中段开始出现前后不一致:改了 A 文件的调用方式,后面 B 文件引用 A 的地方没跟上,需要我不断提醒。因为对话上下文越长,模型对早期决策的记忆越模糊。
同一份重构我用 Pi 做了一次完整回放。我写了个四步的 workflow:
scan:扫描模块依赖,输出文件清单和耦合点。plan:让强推理模型基于依赖清单产出逐文件修改计划。apply:分 5 个批次执行修改,每一批跑完整测试。verify:最后做全量静态检查和测试覆盖对比。
结果很有意思:总消耗 token 比 Claude Code 单轮少了约三成,中途不需要任何人工干预,失败重试也只触发了一次。有一个细节让我印象很深:workflow 第 3 步里的context: fresh指令让每一步开始时只携带必要的前置摘要,其他无关上下文全部清掉。这种"刻意遗忘"反而让模型每一次决策都保持清晰。
4.2 第三方模型接入:Claude Code 接 DeepSeek 的流式报错
很多人在网上搜过 Claude Code 接 DeepSeek 的教程,原因很简单:想要省成本。实际接的时候最常见的问题就是各种流式响应异常。
我自己尝试过一个配置,把 Claude Code 指向 DeepSeek 的 Anthropic 兼容端点:
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic" export ANTHROPIC_AUTH_TOKEN="你的key"命令是能跑起来的,但对话稍微长一点,或者需要连续工具调用时,经常弹出类似response stream was malformed and no response was produced的报错。这个问题的本质是:Claude Code 的客户端按 Anthropic 官方规范解析流式分片,但第三方模型在流式输出时有些分片的finish_reason、content_block内容和官方不完全一致,客户端解析器一旦碰到未知格式,就判断整个响应无效。
在 Pi 里遇到同类问题时,解决思路要清晰很多。我最终在 Pi 里这样配置:
pi config set stream false pi config set model deepseek-chat pi config set timeout 120 pi config set retry 3关闭流式后,请求变成一次性返回完整响应,虽然首字延迟变高,但彻底规避了分片解析兼容问题。另外,把 retry 设成 3 也不怕偶发的网络抖动。这里也提醒一句:任何非官方端点的接入,优先关注它的流式协议兼容性,而不是单纯的"能不能跑通"。
4.3 成本测算:一个月 token 账单对比
光说省钱没数据没意思。我拿自己一个中等活跃的月做样本:平均每天 3 小时编码任务,主要包含日常开发、代码评审辅助、测试生成和偶尔的重构。假设每月有效 token 消耗大约在 4000 万 input + 120 万 output。
用 Claude 按量付费大概费用是:
- input:4000 万 token x 3 美元 / 百万 = 120 美元
- output:120 万 token x 15 美元 / 百万 = 18 美元
- 合计约 138 美元
我把模型切到高性价比模型跑日常任务,同时用 workflow 让重活才走强模型。同样的任务量,大约六成流量给了廉价模型、四成给了强模型,综合成本大概在三四十美元。如果任务类型再偏批量一些,把本地 Ollama 模型也接入,成本还能进一步压低。
这个差距需要具体算,每个人的任务分布不同,结论也会不同。但有一点是普适的:当模型不再是唯一的选项,你能做的就不只是"接受定价",而是"优化流量调度"。
5. 常见问题与排查技巧实录
5.1 pi error: the response stream was malformed,怎么定位
这个报错我一度在跑批处理时频繁遇到。第一次出现时我以为是模型供应商抽风,换了好几个端点还是一样。后面仔细看了 Pi 的日志才发现,问题出在工作流里一步"plan"的输出过大,生成到一半时被下游超时截断,再恢复时流式解析器就挂了。
我的排查路径可以参考:
- 打开
pi logs -f,看报错前最后一条完整日志。 - 确认是哪一个 workflow 步骤触发的,而不是笼统地重试整个任务。
- 检查该步骤的输出长度限制。如果 prompt 要求"输出完整接口设计文档",很容易超长。
- 对可能超长的步骤,在 workflow 里加
split: 按章节拆分指令,让模型分块输出。
后来我又遇到一次,纯粹是某个模型的兼容端点把换行符做了特殊转义,导致分片 JSON 解析失败。那次直接把stream关掉就解决了。所以遇到这类问题不要慌,先判断是协议兼容、长度超限还是超时,三个方向逐一排除。
5.2 Skills 迁移踩坑:别只复制 SKILL.md
Claude Code 的 Skills 迁移到 Pi 时,很多人以为把.claude/skills/文件夹复制成.pi/skills/就好了。实际操作中你会发现没那么简单。
Claude 的SKILL.md头部用 YAML frontmatter 写name和description,说明调用方式和参数。Pi 沿用了类似格式,但它更强调 skill 内部步骤的确定性。比如你在 Claude 的 skill 里可能只写"根据模板生成测试文件,保持风格一致",到 Pi 里就必须补全:
- 使用哪个 model 执行。
- 输入文件从哪里读取。
- 输出位置路径规则。
- 遇到失败时的重试策略。
我建议迁移时把每个 Skills 手动过一遍,而不是批量拷贝。特别是那些依赖 Claude 特有能力的 skill,比如需要内部检索超大代码库的,很可能要重写实现逻辑。开始迁移前先明确一个原则:skill 的价值在"解决问题的步骤设计",而不在"那几行魔法提示词"。
5.3 并行 workflow 的上下文污染
Pi 的 workflow 支持步骤并行,这对跑批量测试生成之类任务非常爽。但有个隐蔽的坑:如果你不加context: fresh,后续步骤默认会继承之前步骤的上下文,并行分支之间也可能互相污染。最典型的表现是:分支 A 引入了一个别名,分支 B 生成的代码里也跟着用了,但 B 的文件里根本没导入这个别名。
解决办法分两种。一种是在 workflow 顶部设置隔离策略:
defaults: context: fresh cwd: {workspace}另一种是给每个并行分支声明独立的workspace,显式告诉 Pi"这一步只许看这些文件"。我在跑"多批次重构"时踩过一次坑之后,就养成了习惯:凡是涉及多文件修改的任务,一律给每个修改批次单独建 workspace,批与批之间不许互通上下文。虽然多占一点磁盘,但正确率明显提升。
5.4 从"全能单体"到"组合工具"的心理落差
这是我不太想写、但必须写的一条:Claude Code 那种"一个人全干"的使用体验,Pi 是给不了你的。Claude Code 更像一个全知全能的助理,你说一句,它理解你的意图,自己判断该看什么不该看什么;Pi 更像一个半自动工作台,你需要花时间把流程搭好,它才能按流程高效运转。
我切到 Pi 的第一周确实有落差,总觉得它"不够聪明",什么都要配置。但两周后我意识到,这个落差其实是工具观的差异。Claude Code 把复杂性包在自己内部,给你的是简单;Pi 把复杂性摆到桌面上,给你的是掌控。如果你追求的是"开箱即用的聪明",继续用 Claude Code 完全没问题;如果你追求的是"可预测、可复现、可优化的流水线",那 Pi 前期多花的时间是值得的。
6. 我的建议:什么人该留在 Claude Code,什么人该换 Pi
6.1 继续留在 Claude Code 的三种人
不是所有人都适合换。我身边就有几个同事用回 Claude Code,不是 Pi 不好,而是需求不匹配:
- 强烈依赖 Claude 模型本身的理解能力,做高度抽象的设计工作,比如从零设计一套系统架构。这时候模型质量就是一切,工具是否开放反而不重要。
- 不想花时间在 workflow 和配置上,就想要一个"开箱即用的聪明助手"。如果你平时打开终端就只是想快速得到答案,Pi 的 YAML 配置会让你烦死。
- 已经在企业采购体系里完成了合规评估和账号分发。这种情况下工具锁定带来的协作效率,比技术选型上的自由度更重要。
这三种情况,换 Pi 反而是一种折腾。
6.2 换到 Pi 的四种信号
反过来,如果你发现自己符合下面任意两条,Pi 大概率值得一试:
- 每个月的 API 账单让你肉疼,而且你希望按任务类型分配模型,而不是全家桶一直开着。
- 你会想"如果这个流程能固化下来,以后每次跑不用我再重复交代就好了",那 workflow 正是 Pi 的核心能力。
- 团队多人协作时,经常出现新同学配环境配到崩溃,你想要一份跟着仓库走的配置体系。
- 你对工具的掌控感有要求。不希望"它不该这么改的时候自作主张",而是希望每个步骤明明明白白写在文件里、可 review、可回滚。
我自己的情况是四条占了三,所以切换也就顺理成章了。
6.3 给准备迁移的人两个小技巧
最后分享两个我自己实操中觉得很值的小技巧。
第一,把 CLAUDE.md 转成 AGENTS.md 或 PI.md 时,不要只改文件名。Claude Code 生成的 CLAUDE.md 往往带有针对 Claude 模型的表达习惯,比如"when asked, use the multi-edit tool"。Pi 不关心这个,它更关注仓库路径、构建命令、约束条件这些纯信息。迁移时把内容精简成信息条目,去掉模型相关的指令,会让 Pi 的上下文压缩算法工作得更顺畅。
第二,先并行跑两周,不要急着删任何旧工具。我自己切过去之后依然保留 Claude Code 的安装,遇到 Pi 表现明显不佳的任务类型(目前主要是高度开放式的设计讨论),我还是会切过去让 Claude 给我方向感。工具从来不是信仰,它是为了把活干完、把代码写好而存在的。我现在的工作流是"用 Pi 管流程,用 Claude 管质量",成本下来了,效果也没打折。这个组合能用多久不好说,但至少现在的项目节奏,我自己很满意。