第 01 模块 · 2 节

SYSTEM.md 替换与 APPEND_SYSTEM.md 追加

《Pi 进阶实战》01 上下文与系统提示词 · 本节时长 32 分钟

贯穿项目如果说 AGENTS.md 是「给项目贴的说明」,那系统提示词就是「给模型立的人设」。这一节我们用 SYSTEM.md / APPEND_SYSTEM.md 给 Pi 定制一套专属行为——比如让它在处理 md-tools 时永远先输出「将做什么」。注意区别:一个是整体替换,一个是追加。

默认系统提示词与两条定制通道

Pi 自带一个很精简的默认系统提示词(入门课讲过,不到 1000 tokens)。想定制它,官方给了两个文件、两种思路:

文件 行为 位置
.pi/SYSTEM.md 替换默认系统提示词 项目级
~/.pi/agent/SYSTEM.md 替换默认系统提示词 全局级
APPEND_SYSTEM.md 追加到默认提示词,不替换 项目或全局对应位置

一句话记忆:SYSTEM.md 是「换掉」,APPEND_SYSTEM.md 是「加上」。

贯穿项目md-tools 我们更推荐用 APPEND_SYSTEM.md——它不动 Pi 原本的核心行为,只在后面追加「处理 markdown 时默认用 md-tools、先预览再执行」这类偏好。整体替换 SYSTEM.md 风险大,容易把 Pi 该有的能力弄丢,慎用。

追加:写一份 APPEND_SYSTEM.md

在项目里新建 md-tools/APPEND_SYSTEM.md,追加你自己的行为偏好。比如:

你在本项目中的偏好:
- 处理 markdown 文件时,优先使用本项目的 md-tools 工具箱命令
- 任何会改动文件的操作,执行前先打印「将做什么」并等待确认
- 输出保持简洁,能用纯文本就不用多余格式

保存后重启 Pi,它的系统提示词末尾就会带上这几条。注意:全局放在 ~/.pi/agent/,项目放在项目根目录。


替换:什么时候才用 SYSTEM.md

SYSTEM.md 是整体替换,等于你亲手接管模型的行为设定。适合从头打造一套完全不同人格的场景——比如让 Pi 只做一个 markdown 格式化助手,把整套提示词都写死。

你是一个 markdown 处理助手。你的唯一职责是:
根据用户描述,调用 md-tools 的 stats / convert / rename 命令完成任务。
不要做任何任务之外的事情。

强烈提醒: 替换后,Pi 原本的内置工具说明、加载上下文、技能发现这些行为,默认的系统提示词就不在了。除非你确定要完全接管,否则先考虑追加。命令行也有等价开关:

pi --system-prompt "你的提示词"      # 替换
pi --append-system-prompt "追加内容"  # 追加

官方明确说:--system-prompt 替换默认提示词时,上下文文件和技能仍然会追加进去。所以即便你替换了,项目的约定和技能也还在——这一点可以放心。


命令行的追加/替换与文件的关系

两套方式可以混用:

  • 文件 SYSTEM.md / APPEND_SYSTEM.md:持久化,每次启动都生效
  • 命令行 --system-prompt / --append-system-prompt:一次性,本次运行生效

对反复使用的项目,写进文件更省心;临时调试,用命令行更轻。理解「替换 vs 追加」这套心智模型,比记住具体命令更重要。


落地练习:让 Pi 带着 md-tools 偏好跑

  1. md-tools/ 建一份 APPEND_SYSTEM.md,写入「优先用 md-tools」「先预览再执行」两条偏好
  2. 重启 pi,问它「你现在有哪些本项目的偏好」,确认它能复述出这两条
  3. 试着用 --system-prompt 替换跑一次,对比「替换」和「追加」在行为上的差异

怎么判断做对了?——追加后 Pi 能说出你的偏好并在处理时遵守;替换后能明显感觉行为被你的提示词「接管」了。

卡住了怎么办? 追加没生效 → 确认文件名、路径是否正确,重启 Pi。复述不出 → 说明追加内容可能太隐晦,写得更直接。替换后「变笨」了 → 记住这是整体替换的代价,改回用追加。


常见坑:分不清「替换」和「追加」把核心功能弄丢

最常见的翻车现场:想加几条偏好,结果用 SYSTEM.md 把默认系统提示词整个换掉,Pi 突然不会加载技能、不认上下文文件了。

记住口诀:默认的改动用「追加」,彻底重塑才用「替换」。 而且官方保证替换后上下文文件和技能仍在——但别的默认行为,你得自己补回来。没有十足把握,就用 APPEND_SYSTEM.md


小结

  1. SYSTEM.md 整体替换默认系统提示词,APPEND_SYSTEM.md 仅追加
  2. 全局放 ~/.pi/agent/,项目放项目根目录
  3. 命令行 --system-prompt / --append-system-prompt 可一次性覆盖
  4. 替换后上下文文件和技能仍会追加,但其他默认行为要自己补
  5. 绝大多数场景,优先用「追加」而不是「替换」

下一节,聊聊「项目信任 Project Trust」——为什么 Pi 加载项目资源前会先问你一句。