1. 从 Claude Code 到 Pi:一场关于 AI Coding 控制权的迁移
最近半年,我身边不少做 AI Coding 的朋友都在悄悄换工具。不是换模型,模型还是那几个——Claude、DeepSeek、GPT 系列轮着用;换的是外面那层"壳",也就是大家常说的 harness。以前默认打开 Claude Code,现在越来越多人的终端里跑的是 Pi。这个变化不是一夜之间发生的,但趋势确实明显:从去年下半年开始,Pi 的讨论度在开发者社区里肉眼可见地往上走,而 Claude Code 的抱怨声也越来越多。
先说清楚这篇文章要聊什么。Pi 是一个 AI Coding 的 harness,也就是"智能体外壳"——它本身不生产模型能力,而是负责把模型、工具、文件系统、终端、多智能体协作这些东西串起来,让 AI 真正能干活。Claude Code 是 Anthropic 官方出的同类工具,早期凭借和 Claude 模型的深度绑定,体验确实领先。但工具这东西,领先不等于一直领先,尤其当你的需求从"尝鲜"变成"每天八小时靠它写代码"的时候,很多隐藏问题就会暴露出来。
这篇文章适合三类人看:第一类是用 Claude Code 用了一段时间、开始觉得别扭但说不清哪里别扭的;第二类是听说过 Pi、Pi Agent、DeepSeek Harness 这些词但还没搞明白它们到底解决什么问题的;第三类是做 Agent 开发、想找一个可扩展 harness 框架来搭自己工作流的。我会从实际使用角度出发,把"为什么换"这件事拆开讲,不讲虚的,只讲我踩过的坑和验证过的结论。
需要提前说明的是,下面提到的所有工具选型、配置方式、参数调整,都是基于我个人和身边团队的实际使用经验总结的,不是官方文档的复述。有些做法可能不是唯一解,但都是我验证过能跑通的方案。
2. Claude Code 让人又爱又恨的那几个点
2.1 模型绑定的甜蜜与代价
Claude Code 最早打动人的地方,就是它和 Claude 模型的配合确实顺。上下文管理、工具调用格式、错误重试逻辑,都是围绕自家模型调的,所以早期用起来"开箱即用"的感觉很强。你装完、配个 key,基本就能开始干活,不需要折腾太多配置。这一点在刚接触 AI Coding 的时候特别重要,因为那时候你还在建立对"AI 能不能帮我写代码"这件事的信任。
但问题也出在这里。当你用久了,会发现 Claude Code 对非 Claude 模型的支持始终是"能用但不够好"的状态。比如你想接 DeepSeek 来做一些成本敏感的任务,或者想用某个开源模型跑本地推理,Claude Code 的工具调用格式、prompt 结构、重试策略都是为 Claude 优化的,换模型之后经常出现工具调用失败、格式解析错误、上下文截断异常这些问题。我印象很深的一次是接一个国产模型做批量代码重构,Claude Code 反复在工具调用环节报格式错误,换到 Pi 上同样的模型同样的任务,一次就跑通了。原因不复杂:Pi 的 harness 层对工具调用做了更通用的抽象,不假设模型一定按某种特定格式输出。
这就是"模型绑定"的代价。绑定深的时候体验好,但一旦你想换模型、想混用模型、想针对不同任务用不同模型,绑定就成了枷锁。而现在的 AI Coding 实践里,混用模型几乎是必然的——贵的模型做架构设计和复杂推理,便宜的模型做批量修改和格式化,本地模型做隐私敏感的处理。Claude Code 在这个场景下就显得力不从心。
2.2 扩展性:想加点自己的东西怎么这么难
第二个让人想换工具的点是扩展性。Claude Code 早期基本是封闭的,你想加个自定义工具、改个执行流程、接个自己的服务,几乎没有官方支持的入口。后来虽然开放了一些配置项和 hook 机制,但整体还是"你能在我划定的范围内调整",而不是"你可以按自己的想法改造"。
我举个具体例子。我们团队有个内部代码规范检查服务,希望在 AI 生成代码之后自动跑一遍,不通过就让它重写。在 Claude Code 里,这个需求实现起来很别扭——你得绕好几层,用 hook 去拦截,还得处理各种边界情况。而在 Pi 里,这本身就是 harness 该干的事:你定义一个 post-generation 的检查步骤,把内部服务接进去,不通过就触发重试,整个流程是 harness 原生支持的。这不是说 Pi 功能多,而是它的设计定位就是"可编排的 harness",而 Claude Code 的定位更偏向"开箱即用的产品"。
这个区别在简单场景下不明显,但一旦你的工作流复杂起来——比如多智能体协作、多步骤任务编排、自定义工具链——产品型工具和框架型工具的差距就拉开了。Claude Code 想让你用它预设的方式工作,Pi 想让你用它提供的积木搭自己的工作方式。对于每天都要和 AI 协作写代码的人来说,后者的吸引力是实实在在的。
2.3 那些让人抓狂的报错和不确定性
还有一个很实际的问题:报错信息不透明,出了问题不好排查。用 Claude Code 的时候,你经常遇到一些语焉不详的错误,比如流式响应中断、工具调用超时、上下文莫名丢失。这些错误本身不致命,但排查起来很痛苦,因为你不知道是模型的问题、网络的问题、还是 harness 的问题。
我遇到过好几次 "response stream was malformed" 这类错误,在 Claude Code 里基本只能重试,重试不行就重启,重启不行就等。而在 Pi 里,因为 harness 层是开放的,你能看到更细的日志,能定位到是哪一步出的问题,甚至能针对性地调整重试策略和超时参数。这个差别在稳定网络环境下可能无所谓,但在实际工作里,网络波动、服务限流、模型负载高这些都是常态,能不能快速定位和恢复,直接决定了你一天能干活还是能折腾。
另外就是成本透明度。Claude Code 早期对 token 消耗的展示比较粗,你不太清楚每个操作花了多少钱。Pi 在这方面给了更多控制权,你可以按任务、按模型、按步骤去统计和限制消耗。对于团队使用来说,这个能力很重要,不然月底账单出来容易吓一跳。
3. Pi 到底是个什么东西:harness 层的价值拆解
3.1 harness 和 agent 的区别,一次讲清楚
很多人搞不清 harness 和 agent 的区别,这里我用一个类比说明。假设你要雇一个装修队给你装修房子。Agent 是那个工头,他负责理解你的需求、决定先刷墙还是先铺地、协调各个工种。Harness 是工头手里的那套管理工具——对讲机、进度表、材料清单、验收标准。工头能力再强,没有好的管理工具,也容易乱套;反过来,管理工具再好,工头不行也白搭。
在 AI Coding 场景里,模型是工头(agent 的智能来源),harness 是那套管理工具。Pi 就是一套 harness,它不生产智能,但它决定了智能怎么被组织、怎么被调用、怎么和外部世界交互。Claude Code 也是一个 harness,只不过它更偏向"打包好的成品",而 Pi 更偏向"可组装的框架"。
这个区别决定了它们的适用场景。如果你只是想让 AI 帮你写写函数、改改 bug,成品 harness 够用。但如果你想做多智能体协作、想让 AI 按你的规范工作、想接入自己的工具链,框架型 harness 的优势就出来了。Pi 的定位就是后者,它假设你有一定的定制需求,并为此提供了足够的扩展点。
3.2 Pi 的核心能力:编排、扩展、可观测
Pi 的核心能力可以概括为三块:编排、扩展、可观测。
编排指的是它能把多个步骤、多个工具、多个 agent 串成一个工作流。比如一个典型的代码生成流程可能是:读需求 → 检索相关代码 → 生成初稿 → 跑规范检查 → 跑测试 → 根据结果修正 → 输出。在 Pi 里,这个流程是可以显式定义的,每一步用什么模型、什么工具、什么重试策略,都能配。Claude Code 也能做类似的事,但更多是靠模型自己"想"出来,而不是你显式编排的。显式编排的好处是可控、可复现、可优化,坏处是前期要花时间设计。
扩展指的是它能接入自定义工具和服务。Pi 的工具接口是开放的,你可以把内部 API、脚本、检查服务包装成工具接进去。这一点对于有内部基础设施的团队特别重要,因为 AI 能不能用上你现有的工具链,直接决定了它能不能真正融入你的工作流。
可观测指的是它能让你看到每一步发生了什么。日志、耗时、token 消耗、工具调用结果,这些在 Pi 里都是可查的。前面说过,这个能力在排查问题和控制成本的时候非常关键。很多团队从 Claude Code 换到 Pi,最初就是因为"想知道钱花哪了"和"想知道为什么又失败了"。
3.3 为什么是现在:AI Coding 需求的变化
Pi 这类工具火起来,背后是 AI Coding 需求本身在变化。早期大家用 AI 写代码,需求是"帮我写个函数""帮我改个 bug",任务简单、上下文短、一次交互就完事。现在需求变成了"帮我重构这个模块""帮我把这个需求实现到代码库里""帮我维护这个项目的代码规范",任务复杂、上下文长、需要多轮交互和多工具配合。
需求变了,工具就得跟着变。简单任务用成品 harness 没问题,复杂任务就需要可编排、可扩展、可观测的框架型 harness。Pi 正好踩在这个点上。再加上现在模型选择多了,大家不再只依赖一家模型,混用模型成了常态,这也让"模型中立"的 harness 更有吸引力。Claude Code 绑定 Claude 模型,Pi 不绑定任何模型,这个差别在模型多元化的趋势下会被放大。
还有一个因素是成本。AI Coding 用起来之后,token 消耗是实打实的钱。团队用的时候,怎么分配模型、怎么控制消耗、怎么统计成本,都是要解决的问题。Pi 在这方面给了更多控制权,这也是它被团队采用的原因之一。
4. 从 Claude Code 迁到 Pi 的实操路径
4.1 环境准备:别一上来就全量迁移
迁移这件事,我的建议是别一上来就全量切。先并行跑一段时间,用 Pi 处理一部分任务,Claude Code 处理另一部分,对比一下效果和体验,再决定要不要全切。这样风险可控,也能让你更清楚 Pi 到底适合你的哪些场景。
环境准备上,Pi 的安装方式比较灵活,可以全局装也可以项目内装。我建议项目内装,因为不同项目可能用不同版本的 harness,全局装容易冲突。装完之后第一件事是配模型,Pi 支持多种模型接入方式,你可以按任务类型配不同的模型。我的习惯是配三档:一档是强模型做复杂推理,一档是中等模型做日常生成,一档是便宜模型做批量处理。这样在编排的时候可以按需选择,成本可控。
配置的时候有个细节要注意:工具调用的超时和重试策略要按模型调。不同模型的响应速度和稳定性不一样,用同一套超时参数容易出问题。强模型可以给长一点超时,便宜模型可以给短一点超时加多次重试。这个参数没有标准答案,得根据你实际用的模型和服务质量来调。
4.2 把 Claude Code 的工作流翻译成 Pi 的编排
迁移的核心工作是把原来在 Claude Code 里"靠模型自己想"的工作流,翻译成 Pi 里"显式编排"的工作流。这个过程一开始会有点不适应,因为你要把很多原来隐式的步骤显式化。但显式化之后,你会发现可控性提升很多。
举个例子。原来在 Claude Code 里让 AI 改一个 bug,流程大概是:你描述问题 → AI 读代码 → AI 改代码 → 你验证。在 Pi 里,你可以把这个流程拆成:读问题描述 → 检索相关代码 → 生成修改方案 → 应用修改 → 跑测试 → 如果测试失败则根据失败信息重新生成 → 输出结果。每一步都可以指定用哪个模型、哪个工具、什么重试策略。拆开之后,你可以在"跑测试"这一步接自己的测试服务,在"生成修改方案"这一步接自己的规范检查,整个流程就和你现有的工程实践对齐了。
这个翻译过程一开始会花时间,但花得值。因为一旦编排好了,这个工作流就是可复用的、可优化的、可分享给团队的。Claude Code 里那种"每次都要重新描述一遍"的体验,在 Pi 里变成了"定义一次,反复使用"。
4.3 多智能体协作在 Pi 里怎么落地
多智能体协作是 Pi 比较有特色的能力。简单说就是你可以定义多个 agent,每个 agent 负责不同的角色,然后让它们协作完成任务。比如一个典型的代码开发场景可以定义:需求分析 agent、代码生成 agent、代码审查 agent、测试 agent。需求分析 agent 负责把模糊需求拆成明确任务,代码生成 agent 负责写代码,代码审查 agent 负责检查规范和潜在问题,测试 agent 负责跑测试和报告结果。
这个模式的好处是每个 agent 可以针对自己的角色做优化。需求分析 agent 可以用强模型,代码生成 agent 可以用中等模型,代码审查 agent 可以用专门微调过的模型。成本和质量都能兼顾。Claude Code 虽然也能通过 prompt 模拟多角色,但那是"一个 agent 扮演多个角色",和"多个 agent 真正协作"是两回事。前者容易角色混淆,后者职责清晰。
落地的时候有个坑要注意:agent 之间的通信格式要定义清楚。如果需求分析 agent 输出的格式代码生成 agent 解析不了,整个流程就断了。我的做法是给每个 agent 定义明确的输入输出 schema,用结构化格式传递信息,而不是自然语言。这样虽然前期要多写点定义,但后期稳定性好很多。
5. 迁移过程中容易踩的坑和我的应对
5.1 模型切换后的工具调用格式问题
从 Claude Code 迁到 Pi,第一个容易踩的坑是工具调用格式。Claude Code 里工具调用格式是围绕 Claude 模型优化的,换到 Pi 之后如果你还用同样的 prompt 和工具定义,可能会遇到模型输出格式不匹配的问题。表现就是工具调用失败、参数解析错误、或者模型干脆不调用工具。
我的应对方式是:在 Pi 里重新定义工具的时候,把参数描述写得更明确,给每个参数加类型和示例。同时在系统 prompt 里明确说明工具调用的格式要求。如果用的模型对工具调用支持不够好,可以在 harness 层加一层格式修正,把模型输出规整成标准格式再传给工具。这个修正层在 Pi 里是很容易加的,因为 harness 层开放。
还有一个经验是:不同模型对工具调用的"积极性"不一样。有的模型倾向于多调用工具,有的倾向于少调用。这个特性会影响你的编排设计。对于倾向于少调用工具的模型,你可能需要在 prompt 里更明确地要求它使用工具;对于倾向于多调用的模型,你可能要加一些限制避免它过度调用。这些调整都是在实际使用中慢慢摸索出来的。
5.2 上下文管理的重新设计
Claude Code 的上下文管理是它做得比较好的地方,迁移到 Pi 之后你会发现这部分要自己设计。Pi 给了你更多控制权,但也意味着更多责任。你得决定什么信息进上下文、什么信息出上下文、上下文多长、怎么压缩。
我的做法是按任务类型设计上下文策略。对于短任务,直接把相关代码和需求放进去就行。对于长任务,我会用分层上下文:一层是任务相关的核心信息,一层是项目背景信息,一层是历史交互信息。核心信息始终保留,背景信息和历史信息按需加载。这样既能保证模型有足够信息,又不会让上下文爆炸。
还有一个技巧是上下文压缩。当上下文快满的时候,不要让 harness 直接截断,而是让它先做一次摘要压缩,把不重要的细节去掉,保留关键信息。这个压缩步骤可以用便宜模型来做,成本低效果好。Claude Code 里这个能力是内置的,Pi 里需要你自己配,但配好之后可控性更强。
5.3 成本失控的预防
成本失控是团队用 AI Coding 常见的问题。Claude Code 早期在这方面给的控制比较少,迁到 Pi 之后如果你不主动控制,一样会失控。我的做法是三层控制:第一层是模型分层,不同任务用不同档位的模型;第二层是预算限制,给每个任务或每个时间段设 token 上限;第三层是监控告警,消耗异常的时候能及时发现。
模型分层前面说过了,核心思路是"好钢用在刀刃上"。预算限制是在 harness 层做的,Pi 支持给每个编排步骤设消耗上限,超了就停或者降级。监控告警需要接一些外部服务,把消耗数据导出去做统计和告警。这三层做下来,成本基本可控。
有个细节要注意:重试策略会显著影响成本。如果一个任务失败后无限重试,成本会飙升。我的做法是给重试设上限,超过上限就报错让人介入,而不是让 harness 一直重试。这个上限设多少要看任务的重要性和失败的成本,重要任务可以多试几次,不重要任务试一两次就放弃。
6. 这套工具组合适合谁,不适合谁
6.1 适合迁移的场景
不是所有人都需要从 Claude Code 迁到 Pi。根据我的观察,以下几类场景迁移收益比较明显。
第一类是需要混用多个模型的团队。如果你只用 Claude 模型,Claude Code 的体验其实不错,迁移动力不大。但如果你需要根据任务类型切换模型,或者需要用本地模型处理敏感数据,Pi 的模型中立性就是实打实的优势。
第二类是有复杂工作流需求的团队。如果你的 AI Coding 只是"问一句答一句",成品 harness 够用。但如果你需要多步骤编排、多工具配合、多 agent 协作,Pi 的框架能力就体现出来了。
第三类是对成本和可观测性有要求的团队。如果你需要知道钱花哪了、需要控制消耗、需要排查问题,Pi 的透明度和控制力会帮到你。
第四类是有内部工具链需要接入的团队。如果你希望 AI 能用上你现有的代码检查、测试、部署工具,Pi 的扩展性会让这件事容易很多。
6.2 暂时不用折腾的情况
反过来,以下几类情况我建议先别折腾,继续用 Claude Code 或者别的成品工具。
如果你刚开始用 AI Coding,还在建立信任和习惯的阶段,成品工具的"开箱即用"更重要。这时候折腾 harness 配置会分散你的注意力,不如先用起来,等需求复杂了再考虑迁移。
如果你只用一家模型,而且没有换模型的打算,模型绑定的问题对你来说不存在,迁移收益有限。
如果你的工作流很简单,就是写写函数改改 bug,没有多步骤编排的需求,框架型 harness 的复杂度反而是负担。
如果你没有精力维护配置,成品工具的省心是实实在在的价值。Pi 给了你更多控制权,但也要求你花更多时间设计和维护。这个投入产出比要自己算。
6.3 我的实际选择:混合使用
说说我自己的选择。我没有完全放弃 Claude Code,也没有完全转向 Pi,而是混合使用。简单任务、快速验证、临时写点东西,我还是用 Claude Code,因为快、省心。复杂任务、需要编排的工作流、需要接入内部工具的场景,我用 Pi,因为可控、可扩展。
这个混合策略的好处是各取所长,坏处是要维护两套配置。但对于我这种既要做快速验证又要做复杂项目的人来说,这个维护成本是值得的。如果你只做一类任务,那选一个顺手的就行,不用学我。
工具这东西,没有绝对的好坏,只有适不适合。Claude Code 和 Pi 都是好工具,只是设计定位不同。理解了这个定位差异,你就能根据自己的需求做出选择,而不是跟风换工具。跟风换工具最大的问题是,你不知道自己为什么要换,换完之后遇到问题也不知道是工具的问题还是自己没用对。想清楚需求再动手,比什么都重要。
7. 关于 AI Coding 工具选型的一点个人体会
用了这么久 AI Coding 工具,我最大的体会是:工具本身不决定你的产出,工具和你的工作流的匹配度才决定产出。Claude Code 和 Pi 的争论,本质上不是哪个工具更好的争论,而是"你的需求是什么"的追问。需求清楚了,选型自然就清楚了。
另一个体会是,harness 层的重要性被低估了。很多人只关注模型能力,觉得模型强就万事大吉。但实际用下来,harness 决定了模型能力能不能被有效组织起来。同样的模型,在不同的 harness 里表现可能差很多。这也是为什么 Pi 这类工具能火起来——它解决的不是模型能力问题,而是模型能力的组织和控制问题。
最后一个体会是关于迁移成本。迁移工具是有成本的,配置、调试、适应新工作流,都要花时间。所以迁移之前要想清楚收益是什么,值不值得。我的经验是,如果迁移能解决你当前最痛的问题,那就值得;如果只是"听说另一个工具更好",那先别急,等痛了再迁。工具是为你服务的,不是反过来。