• fuermo

    看到 试了下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~

    主楼
  • 神水菌

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

    #1
  • lyice

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

    #2
  • fuermo

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

    #3
  • Cx95

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

    #4
  • Yusheng

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

    #5
  • YABO

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

    图片

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

    #6
  • fuermo

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

    请运行Pi Coding Agent并测试模型是否可用。如果模型报错找到原因并修复。

    #7
  • hor1zon_Lin

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

    #8
  • big620

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

    #9
  • big620

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

    #10
  • fuermo

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

    #11
  • Kassdin

    - 多工具并行(很重要!)

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

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

    #12
  • YABO

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

    #13
  • 树洞小兔
    <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中,还是附加到系统提示词中
    #14

发表回复

登录后回复