一句话看懂:System Prompt 是给模型写的“最高优先级规章制度”——决定它是谁、按什么原则做事、输出长什么样。
1. 什么是 System Prompt?
在大多数 LLM 的 API 结构中,消息通常分为三种角色:System、User 和 Assistant。
-
User Prompt (用户提示词): 决定了 AI “现在要做什么”(例如:帮我写一个按钮组件)。
-
System Prompt (系统提示词): 决定了 AI “它是谁” 以及 “它做事的绝对原则”(例如:你是一个资深的 Flutter 架构师,你的代码必须严格遵循无状态优先原则,并给出完整的类型推断)。
核心隐喻:System Prompt 像操作系统的 Root 配置文件——全局约束行为、语气、边界与输出格式;用户怎么跑偏,都能拉回“轨道”。
2. System Prompt 的黄金结构(可复用模板)
一个工业级、高稳定性的 System Prompt,通常包含以下五个核心模块(你可以按需组合):
2.1 Role / Persona(角色设定)
不要只写“你是一个程序员”。赋予其具体的头衔、经验和性格,模型调用的内部权重会截然不同。
示例: “你是一位拥有 10 年经验的前端与移动端跨平台架构师,极度注重代码的可维护性、性能优化和 UI 细节。你的表达风格是极客、幽默、且一针见血。”
2.2 Context & Objective(背景与全局目标)
告诉模型它所处的业务环境,这能大幅减少它产生的“幻觉”和不切实际的建议。
示例: “我们正在维护一套核心的移动端 UI 组件库,该组件库需要在复杂的业务场景下保持极高的帧率和跨端一致性。你的目标是协助开发高质量的组件代码并提供技术决策。”
2.3 Rules & Constraints(核心法则与绝对禁忌)
这是防范大模型“自作聪明”的最重要防线。明确告诉它不该做什么(Negative Prompting)。
示例: > * 必须优先使用 StatelessWidget,仅在绝对必要时使用 StatefulWidget。
严禁使用任何已经废弃 (Deprecated) 的 API。
永远不要生成带有
// 在这里添加你的代码这种敷衍占位符的半成品代码,必须输出可直接运行的完整代码。
2.4 Workflow / Methodology(工作流)
将你推崇的开发哲学(比如 MVP 极速交付原则、或者测试驱动开发)刻入它的基因。
示例: “在编写代码前,先思考架构;在实现功能时,遵循‘先让它跑起来 (Make it work),再让它变优雅 (Make it right)’的 MVP 迭代思路。”
2.5 Output Format(输出规范)
强制规范输出结构,方便解析或直接 Copy/Paste。
示例: “所有思考过程请放在
<thought>标签内,核心代码必须包裹在```dart中,并附带 JSDoc 风格的注释。”
3. 实战演练:一个高水准的开发 Agent 设定
假设你需要配置一个专门帮你写跨平台 UI 组件的 AI 助手,以下是一个结构化的 System Prompt 示例(使用了 XML 标签来区分模块,这是目前对大模型最友好的格式):
XML
<system_directive>
<role>
你是一个名为 BetterThanChatGPT 的顶级跨平台研发专家,精通前端及移动端工程化体系。
</role>
<context>
我们正在重构一套高频使用的 UI 组件库,要求代码具备极高的复用性、可读性以及丝滑的动画表现。你需要作为我的结对编程伙伴,协助我快速完成功能迭代。
</context>
<core_principles>
1. 极简主义:能用 10 行代码解决的问题,绝不用 20 行。
2. 防御性编程:必须处理好 Null Safety 和边界状态。
3. 性能至上:在涉及到复杂渲染或动画时,主动规避不必要的重绘 (Rebuild)。
</core_principles>
<interaction_style>
- 不要说“好的”、“明白”等废话,直接给出技术分析或代码。
- 遇到需求模糊时,不要盲目猜测,必须反问我以获取确切上下文。
- 偶尔可以在代码注释里留点幽默的彩蛋,保持 Vibe。
</interaction_style>
</system_directive>
4. 高阶避坑指南(最容易翻车的点)
-
避免逻辑冲突: 如果你在前面说“详细解释每一行代码”,后面又说“输出尽可能简短”,大模型就会精神分裂,导致输出质量崩塌。
-
长上下文的“注意力衰减”: 大模型通常存在“首尾效应”。把最最核心的绝对禁忌(比如“绝不输出占位符代码”),放在 System Prompt 的最前面或最后面,效果最好。
-
动态注入 (Dynamic Context): 在成熟的工程化应用中,System Prompt 不是写死的。通常会留出占位符,比如
今天是 {{current_date}}或者当前使用的框架版本是 {{framework_version}},在调用前动态替换。
5. 相关笔记
- Harness Engineering(Agent 运行底座)笔记:System Prompt 只是“灵魂”,Harness 才是“躯体与执行力”。
- 结构化输出(Structured Output)笔记:用 Output Format 把自然语言输出变成可解析的结构。