System Prompt 在 Agent 系统里承担六类职责:定义角色与边界、声明能力与工具、约束行为与输出格式、划定安全与拒答红线、注入少样本示例、约定上下文与记忆的使用方式。它膨胀后的代价是 token 成本线性上升、关键指令被长文淹没导致遵循度下降、规则互相冲突难以维护;应对思路是分层管理、按需加载、prompt caching 摊薄成本,外加定期裁剪与评测。
一、System Prompt 在 Agent 系统里的定位
对一次 API 调用,System Prompt 只是约束输出的规则文本;对 Agent,它是每次行动前注入模型的”工作手册”,决定这个智能体是谁、能做什么、怎么做、底线在哪。它是系统里优先级最高的指令层,在整轮对话中常驻上下文顶层,持续影响模型行为。
值得注意的是,2025 年起业界开始用”上下文工程”(context engineering)取代”提示词工程”的说法:单次调用只要写好 Prompt,Agent 多轮循环后要管理的是一整块持续变化的上下文状态——系统指令、工具定义、外部数据、消息历史都在其中。System Prompt 管理正是上下文工程的核心一环。
二、六类职责一张表
| 职责 | 回答的问题 | 典型内容 |
|---|---|---|
| 角色与边界 | 你是谁、服务范围多大 | 人设、能力范围、不该做什么 |
| 能力与工具说明 | 你有哪些武器、何时用 | 工具清单、参数语义、调用时机 |
| 行为与格式规范 | 该怎么说话、怎么输出 | 语气、步骤、输出 JSON 约定 |
| 安全与拒答策略 | 红线在哪、越权怎么办 | 合规红线、拒答话术 |
| 少样本示例 | 期望行为长什么样 | 1~3 个范例锚定行为 |
| 上下文与记忆约定 | 怎么用历史与长期记忆 | 对话历史、检索内容的处理方式 |
一个真实的 Agent 系统里,System Prompt 可以很长。有拆解报告指出,部分开源 Agent(如 OpenClaw、Cursor、Devin 的同类架构)的 System Prompt 能到 6 万字、约 110KB,几乎是一篇中篇小说。
三、为什么会越变越长,代价在哪
场景增加、工具变多、规则打补丁,三条路都会让 System Prompt 膨胀。代价有三层:
- token 成本随每次调用线性上升——Agent 每转一圈都要把整份 System Prompt 重发一次,6000 字规则配 10 轮循环就是 6 万字流量;
- 注意力稀释——指令越多,关键规则越容易被”淹没”在长文里,模型遵循度反而下降;有实验表明超出约 2000 词的提示词,模型倾向于遵守开头、忽略结尾;
- 维护困难——补丁式规则会互相冲突,改一处牵动全局,难以回归测试。
四、越变越长时的五步处理法
处理 System Prompt 膨胀,核心是”上下文工程”而不是继续堆字。
- 分层管理:把静态系统提示(身份、安全红线、输出格式)与运行时动态注入(用户画像、检索结果、当前子任务)拆开存放,代码里按需组装;
- 按需加载:工具和技能详情外置,平时只暴露一句摘要,模型命中时才把完整描述注入上下文,避免一次性塞满;
- 开启 prompt caching:把稳定前缀缓存起来,复用只计增量 token,长 System Prompt 的成本可以大幅摊薄;
- 关键指令后置:超长上下文中,把最关键的格式约束与安全边界放到 System Prompt 最末尾,能显著提升遵循概率;
- 裁剪与评测:建一套评测集回归遵循度,删冗余、合并重复规则,用数据决定去留。
4.1 一个分层结构的示例
[系统层 system]——每次运行都成立,常驻
身份与使命
安全红线与拒答策略
输出格式与 JSON 约定
[工作流层 workflow]——本次任务相关,运行时注入
任务目标与步骤
本次使用的工具摘要
[数据层 data]——按需注入
检索到的文档片段
用户画像
工具完整描述(命中时才加载)
判定一条内容该放哪层有一个简单测试:如果它在该 Agent 的每一次对话里都成立,放系统层;只要依赖本次任务,就放工作流层。Anthropic 同样强调 System Prompt 要写”恰到好处的高度”:规则太死板会脆弱难维护,太含糊模型又会漂移。
五、文件化与版本管理
2025 年以来,把 System Prompt 外置成文件成了主流做法:Claude Code 用 CLAUDE.md,Cursor 用 .cursorrules,Codex 用 AGENTS.md。这样做的收益是可版本化、可评审、可热更新,规则改动走 Git 记录,团队共享同一套行为基线。对多模型项目,还可以按模型维护多份配置文件。
六、裁剪要有评测纪律
删规则不能凭感觉。落地的做法是建一个行为评测集:每个条目对应一条 System Prompt 里的规则,跑若干典型任务,统计遵循率。改版后全量回归,遵循率下降就回滚。Anthropic 把这类工作归入”以失败模式驱动迭代”——先给最小可用的提示词,观察到具体失败再补一条规则,而不是一次性写全。这样 System Prompt 的每一次变长都有据可依,膨胀从”补丁堆叠”变成”数据驱动”。
一句话收束:System Prompt 是 Agent 的地基,地基稳不稳不看长度,看分层清不清晰、指令是不是高信号。堆字解决不了的问题,分层、按需加载与评测能解决。
常见问题(FAQ)
Q1:System Prompt 越长越好吗?
不是。超过约 2000 词后遵循度下降,关键是覆盖必要规则而非长度。
Q2:长 System Prompt 怎么省成本?
用 prompt caching 缓存稳定前缀,复用只计增量 token。
Q3:动态信息该放 System Prompt 吗?
不该。任务相关的临时内容放工作流层,按需注入,避免污染系统层。