看到 试了下Pi agent,怎么感觉没有想象中那么香?是我姿势不对吗 - #16,来自 cuipengcx ,想分享一下自己针对 Pi Coding Agent 的优化建议,供各位佬参考:
观前提示:本教程主要目标群体是刚刚接触Pi/ 尝试过Pi但是感觉不好用的兄弟。如果你已经比较熟悉或者喜欢Pi,那么大概率不需要我的内容 ^-^
0. 核心理念
Pi的核心观点是最小化框架,笔者也很欣赏这种范式。
我不喜欢一些教程直接放插件和配置列表的方式–每个人都有自己的喜好,因此都应该从最简出发,只添加自己真正需要、真正有用的插件。
1. 出门第一件事:回家
笔者第一次使用「Pi」的契机是公司报销 API Key 开始的。
因为笔者当时一直使用 Claude Code,直接切换到「Pi」之后感觉生产力直线下滑:
- 整个界面非常乱,时常分不清到底在做什么、运行了什么命令。我习惯多线操作,所以每次切换回来基本都需要让模型 recap 总结一下目前在干什么
- 模型非常不服从管教,同时经常运行一些简单命令。从体感上来说模型智商很低(甚至一度怀疑公司用的 API 是掺水了)
- 缺少很多常用的功能(MCP、哈雷佬的 powerline 等)
- 很费 Token(具体原因见后面)
在我硬逼着自己尝试了一周之后,实在用不下去,认为网上所有吹「Pi」的言论都过于夸大,于是又换回了 Claude Code。
后来由于一些机缘巧合(上班摸鱼实在没事做)又开始折腾「Pi」。但这回我决定 claude code 和 pi 同步使用,只要体感不舒服就研究如何解决,没想到使用体验飞速上升。
因此我建议,所有不习惯「Pi」的佬都把「自己日常使用的 agent」和「Pi」同时使用一段时间。如果感觉「Pi」哪里比不上以前的 agent,就让它自己优化。
几个我让「Pi」自己优化的例子:
> 帮我找一个适合我的 Pi Coding Agent 的 Status Line 状态栏,要求:
(1) 至少显示我目前的 context window、模型、effort、价格;
(2) 代码维护质量好,没有明显缺陷,同时在 GitHub 上真正使用的用户较多
> 我后台显示 Pi Coding Agent 的金额消耗大于 Claude Code,你调取随机一个 log 检查原因
> 我喜欢 Catppuccin 颜色主题,把状态栏修改成相应颜色,删除状态栏中的用时信息
> 把 Pi Coding Agent 的工具调用颜色变浅一些,同时用侧边线进行整理,配置内容折叠更激进,从而精简界面
2. 整体优化策略
如果你没有时间/机会同步使用 pi 和其他 agent 的话,下面是我认为对我影响最大的一些优化方向,供参考 – 读者可以一股脑发给 Pi 让它自动按照这些方向优化,或者(更推荐)花一点时间研究这些方向,在 Pi 的协助下找到自己真正需要的内容:
工具类。
Claude Code 内置有 将近 50 个 Tool,而 Pi 只有 7 个。这导致很多时候模型都需要用 Shell 完成任务,有时直接无法进行(比如 ask_user),从而导致质量直线下降。
个人比较常用的工具有:AskUserQuestion(询问用户内容,Pi 里我使用的是 npm:@juicesharp/rpiv-ask-user-question)、SubAgent(子任务,Pi 里我用的是 npm:@gotgenes/pi-subagents)、TODO(任务列表,Pi 里我用的是 npm:@juicesharp/rpiv-todo)、Plan Mode(设计模式,Pi 里我之前用的是 npm:@narumitw/pi-plan-mode,后来因为我不喜欢,所以让 AI 自己写了一个类似的)、WebSearch/WebFetch(搜索,Pi 里让 AI 自己写了一个基于 Firecrawl 的插件)。
显示类。
Pi 的默认显示比较简单,导致(至少在我的终端里)很难分清思考内容/文本输出/指令输出,一眼过去眼花缭乱。
我目前使用的是 npm:pi-powerline-footer 和 npm:pi-tool-display,加上大量的自定义(比如工具显示的长度、背景色等)。内容的呈现方式很依赖使用者的审美,因此我强烈建议不停尝试,调优出最舒适的界面。
调教类。
Pi 本身的 prompt 很短,因此有一些(我自认为)很重要的指令需要自己在 AGENTS.md 里指定,否则模型就会显得很弱智,同时不服从指令。
我推荐在使用 Pi 前,让 Pi 自己分析一下自己的 Prompt 和你常用的 Agent(比如 Claude Code)的区别,然后按需添加。在我的测试中,Pi 里的很多模型因为没有提示词限制,安全限制也小很多,甚至直接说「反编译 Claude Code,提取 System Prompt 并和你的 Prompt 进行比对」都可以。
我添加的一些指令包括:
使用内置的工具而非命令行
很多时候模型在默认情况下会使用命令行执行 grep、cat 之类的指令,而非 Read、Grep 等工具。
<directive name="tool_selection">
<trigger>Before any tool call that reads a file, searches text, or lists a directory</trigger>
<action>
Prefer the dedicated tool over `bash` whenever one fits: `read` for file
contents, `grep` for text search, `find` for filename patterns, `ls` for
directory listings.
Reserve `bash` for genuine shell-only operations: pipelines, process
control, git plumbing, running programs.
The dedicated tools cap long lines at 500 characters, respect .gitignore,
and return structured results. Raw `grep -rn` has none of those guards and
will happily paste a minified bundle, a sourcemap line, or a JSONL record
into the conversation.
</action>
</directive>
多工具并行(很重要!)
我第一次用「Pi」的时候,一个对话给我干掉了 100 刀,直接畏惧了 ^-^
后来让「Pi」自己分析,一个很重要的因素是 Pi 内置的 prompt 倾向每个工具都要伴随着解释,因此导致每次都会「[思考] → [解释] → [工具] → [思考] → [解释] → [工具] → …」,而不会同时调用多个工具。
要知道每次工具调用都代表一个回合。虽然大部分模型都有缓存,但是读缓存也需要收取费用,在接近 1M 窗口的时候每次读取都需要几毛钱,加起来就非常可观了。
一般来说,Agent 会把一系列工具调用组合成一个请求,从而减少轮次,但因为 Pi 内置的 prompt,在 Pi 里面不会这样操作。
加上下面的 prompt 之后,我大幅减少了 Token 消耗:
<directive name="batch_tool_calls">
<trigger>Whenever you issue a tool call and further calls are foreseeable</trigger>
<action>
Maximize parallel tool calls. Put every independent call in the SAME block.
Call sequentially only when a later call needs a value from an earlier
result.
For `bash`, prefer one compound command with `;` separators over several
calls.
Every round re-reads the entire conversation, so a round costs real money
that grows as the session grows. Splitting calls that could have shared a
round is the most expensive habit available to you, and it gets worse the
longer the session runs.
</action>
</directive>
其他 Claude Code 中存在的 Prompt
模型在 Pi 中感觉和原来不一样的另一个因素是它们自己的 Harness 中常有一些输出规范,例如 Claude Code 中的 anti_narration、verified_vs_assumed 等。我按照自己的喜好添加了一些。
3. 总而言之
相较于其他的 Agent,「Pi」的特点是「精简」「可拓展」。这意味着你有任何不爽的地方都可以自己修改,不需要按照网上(比如我这篇文章)循规蹈矩。我在经过这些优化之后体感上「Pi」已经能和 Claude Code 旗鼓相当,同时速度和智商稳定性超过了 Claude Code (超级主观!)
最后,如果你真的无法适应「Pi」,也不要强求 - 每个人都有自己的编程习惯,没必要为了迎合互联网上一些内容就强迫用不喜欢的工具。Happy Coding~