个人Pi Agent优化思路分享

fuermo 2026-08-05 09:43 1

看到 试了下Pi agent,怎么感觉没有想象中那么香?是我姿势不对吗 - #16,来自 cuipengcx ,想分享一下自己针对 Pi Coding Agent 的优化建议,供各位佬参考:



观前提示:本教程主要目标群体是刚刚接触Pi/ 尝试过Pi但是感觉不好用的兄弟。如果你已经比较熟悉或者喜欢Pi,那么大概率不需要我的内容 ^-^



0. 核心理念


Pi的核心观点是最小化框架,笔者也很欣赏这种范式。


我不喜欢一些教程直接放插件和配置列表的方式–每个人都有自己的喜好,因此都应该从最简出发,只添加自己真正需要、真正有用的插件。


1. 出门第一件事:回家


笔者第一次使用「Pi」的契机是公司报销 API Key 开始的。


因为笔者当时一直使用 Claude Code,直接切换到「Pi」之后感觉生产力直线下滑:



  1. 整个界面非常乱,时常分不清到底在做什么、运行了什么命令。我习惯多线操作,所以每次切换回来基本都需要让模型 recap 总结一下目前在干什么

  2. 模型非常不服从管教,同时经常运行一些简单命令。从体感上来说模型智商很低(甚至一度怀疑公司用的 API 是掺水了)

  3. 缺少很多常用的功能(MCP、哈雷佬的 powerline 等)

  4. 很费 Token(具体原因见后面)


在我硬逼着自己尝试了一周之后,实在用不下去,认为网上所有吹「Pi」的言论都过于夸大,于是又换回了 Claude Code。


后来由于一些机缘巧合(上班摸鱼实在没事做)又开始折腾「Pi」。但这回我决定 claude codepi 同步使用,只要体感不舒服就研究如何解决,没想到使用体验飞速上升。


因此我建议,所有不习惯「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 的协助下找到自己真正需要的内容:




  1. 工具类。


    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 的插件)。




  2. 显示类。


    Pi 的默认显示比较简单,导致(至少在我的终端里)很难分清思考内容/文本输出/指令输出,一眼过去眼花缭乱。


    我目前使用的是 npm:pi-powerline-footernpm:pi-tool-display,加上大量的自定义(比如工具显示的长度、背景色等)。内容的呈现方式很依赖使用者的审美,因此我强烈建议不停尝试,调优出最舒适的界面。




  3. 调教类。


    Pi 本身的 prompt 很短,因此有一些(我自认为)很重要的指令需要自己在 AGENTS.md 里指定,否则模型就会显得很弱智,同时不服从指令。


    我推荐在使用 Pi 前,让 Pi 自己分析一下自己的 Prompt 和你常用的 Agent(比如 Claude Code)的区别,然后按需添加。在我的测试中,Pi 里的很多模型因为没有提示词限制,安全限制也小很多,甚至直接说「反编译 Claude Code,提取 System Prompt 并和你的 Prompt 进行比对」都可以。


    我添加的一些指令包括:




    • 使用内置的工具而非命令行


      很多时候模型在默认情况下会使用命令行执行 grepcat 之类的指令,而非 ReadGrep 等工具。


      <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_narrationverified_vs_assumed 等。我按照自己的喜好添加了一些。






3. 总而言之


相较于其他的 Agent,「Pi」的特点是「精简」「可拓展」。这意味着你有任何不爽的地方都可以自己修改,不需要按照网上(比如我这篇文章)循规蹈矩。我在经过这些优化之后体感上「Pi」已经能和 Claude Code 旗鼓相当,同时速度和智商稳定性超过了 Claude Code (超级主观!)


最后,如果你真的无法适应「Pi」,也不要强求 - 每个人都有自己的编程习惯,没必要为了迎合互联网上一些内容就强迫用不喜欢的工具。Happy Coding~

最新回复 (14)
  • 神水菌 08-05 09:52
    1

    配置这么多 最后发现还是用回 原来的^-^

  • lyice 08-05 09:54
    2

    主要是A\太\了,你不知道他们黑盒会搞什么幺蛾子。虽然我也在还在用cc,多个替代总是好的。

  • fuermo 楼主 08-05 10:00
    3

    其实个人认为没有特殊需求确实可以用模型自己的Harness,体验上大差不差;但是自定义「Pi」的过程确实很爽,就像即使有VSCode之类的IDE我还是喜欢折腾vim一样 ^-^ 生命不息折腾不止

  • Cx95 08-05 10:01
    4

    有一点启发,常用比较多的codex,看人说这个好,初次尝试感觉就tui,没期望的那么顶,反正还在尝试中。

  • Yusheng 08-05 10:26
    5

    读完了佬友的全文了,写的很好,起码我没有接触过这个工具,也能读懂,感觉这个pi更像是一个可以自定义而且开源的cli工具,自己可以根据自己的具体需要自由diy

  • YABO 08-05 10:40
    6

    昨天晚上心血来潮折腾pi,然后调模型的时候老是跟我上游报奇怪的错。自定义请求头啊,协议转换啊,都试了。



    累了,还是继续用我codex吧 ^-^

  • fuermo 楼主 08-05 10:55
    7

    是不是上游限制了Claude Code?如果没有限制的话直接让「Pi」修应该可以,比如让他:


    > 请运行Pi Coding Agent并测试模型是否可用。如果模型报错找到原因并修复。
  • hor1zon Lin 08-05 11:24
    8

    pi应该也能并行调用工具吧?我用着是并行的

  • big620 08-05 11:26
    9

    这个报错是说你的额度不够呀,调用这次请求需要预扣费$15.500680,而你现在账户里只有$14.390158,不够扣的,所以失败了吧。你重置一下,或者换个花费低的模型试试呢。

  • big620 08-05 11:28
    10

    重置 → 充值 ,让你的账户额度超过他的预扣费额度。

  • fuermo 楼主 08-05 11:40
    11

    对,设计上是可以并行的,但是在我测试的时候发现模型经常不愿意并行,只有在prompt里面显式说明才会并行调用

  • Kassdin 08-05 11:42
    12


    • 多工具并行(很重要!



    学到了,立马把提示词抄到我的 pi 里

    但感觉模型不太喜欢用,GPT 的并行调用倾向比 kimi\deepseek 都要高

  • YABO 08-05 11:44
    13

    我用codex能正常扣费,换到pi就固定报这个。换另一家上游就都正常。

  • 树洞小兔 08-05 11:45
    14

    <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>


    佬,这些提示词是放在AGENTS.md中,还是附加到系统提示词中

* 帖子来源Linux.do
返回