Ch12 Prompt工程修订于 二〇二六年七月六日
提示词纪律
一句话理解
提示词纪律 (Prompt Discipline) 是提示词编写的规则和约束体系,确保 AI 可预测、一致地输出。它不是”怎么写好 Prompt”的技巧,而是”怎么约束 Prompt 行为”的规范——明确角色、明确输出格式、明确约束条件、明确”不要做什么”。2026 年,提示词纪律正在从”手工调参”走向”结构化约束”。
核心规则
规则一:明确角色 (Role)
告诉模型”你是谁”。角色设定影响模型的回答风格、知识范围和行为边界。
好的角色设定:
你是一个资深 Python 后端开发者,有 10 年经验。
你的回答应该:准确、实用、包含代码示例。
不好的角色设定:
你是一个 AI 助手。
角色设定纪律:
- 角色要具体,不要泛化
- 包含领域、经验水平、行为风格
- 角色设定放在 System Prompt 的最前面
规则二:明确输出格式 (Output Format)
告诉模型”输出什么格式”。格式约束减少了解析错误,提高了输出的可预测性。
格式约束类型:
| 格式类型 | 适用场景 | 示例 |
|---|---|---|
| JSON | 程序化消费 | {"name": "...", "value": ...} |
| Markdown | 文档、笔记 | ## 标题\n- 列表 |
| 表格 | 对比、清单 | ` |
| 代码块 | 代码生成 | 带语言标识的代码块 |
| 自由文本 | 对话、解释 | 自然语言 |
格式约束纪律:
- 提供具体示例(Few-Shot)
- 使用结构化标记(如 XML 标签)包裹关键内容
- 对程序化输出,始终要求 JSON 并给出 Schema
规则三:明确约束 (Constraints)
告诉模型”什么能做,什么不能做”。约束是提示词纪律的核心——它定义了模型的行为边界。
约束类型:
| 约束类型 | 说明 | 示例 |
|---|---|---|
| 格式约束 | 输出格式要求 | “始终用 Markdown 格式回复” |
| 内容约束 | 内容范围限制 | “只讨论 Python 技术,不涉及其他语言” |
| 行为约束 | 行为方式限制 | “不确定时明确说’不确定’,不要猜测” |
| 语言约束 | 语言使用限制 | “默认中文回复,英文术语保留原文” |
| 安全约束 | 安全边界限制 | “不执行任何可能修改系统文件的命令” |
规则四:明确”不要做什么” (Negative Constraints)
Negative Constraints 是最容易被忽略但最重要的提示词纪律。告诉模型”不要做什么”往往比”要做什么”更有效。
为什么 Negative Constraints 重要:
- 模型的默认行为可能不符合预期,需要显式禁止
- 人容易假设”模型应该知道不要这样”,但模型不一定知道
- Negative Constraints 是提示词中的”安全网”
好的 Negative Constraints:
- 不要编造不存在的 API 或函数
- 不要在没有确认的情况下修改文件
- 不要使用过时的语法(Python 2 语法)
- 不确定时,不要猜测,明确说"不确定"
不好的做法:
- 只说了”要做什么”,没有说”不要做什么”
- Negative Constraints 太模糊(“不要出错”)
本 Vault 的提示词纪律实践
本 Obsidian Vault 的 Agent.md 中体现了以下提示词纪律:
角色设定
Agent 被设定为”Obsidian Vault 的导航和知识管理助手”,行为边界包含:
- 通过文件系统导航知识
- 通过 WikiLink 追踪知识关联
- 通过摘要层判断信息相关性
输出格式约束
- 笔记使用 Markdown 格式
- 包含 YAML frontmatter
- 使用
[[概念-WikiLink]]表达知识关联 - 表格用于对比信息
行为约束
- 先读摘要,再判断是否需要全文
- 无链接=不存在(WikiLink 是知识的唯一声明机制)
- 渐进式加载,避免一次性加载所有内容
和 System Prompt 的关系
| 维度 | 提示词纪律 | System Prompt |
|---|---|---|
| 定义 | 编写提示词的规则和约束体系 | 模型初始化时加载的预设指令 |
| 范围 | 方法论层面 | 实现层面 |
| 关系 | 指导如何写好 System Prompt | 是提示词纪律的具体产物 |
| 可迁移性 | 跨模型、跨场景适用 | 通常针对特定模型和场景 |
| 示例 | “明确角色、明确输出格式” | “你是一个资深 Python 开发者” |
2026年:从”手工调参”到”结构化约束”
趋势一:声明式 Prompt 约束
2026年,越来越多的框架支持声明式 Prompt 约束——用结构化数据(JSON/YAML)定义约束,而非自由文本:
constraints:
role: "Python backend developer"
expertise: "10 years"
output_format: "markdown"
forbidden:
- "guess when uncertain"
- "use deprecated Python 2 syntax"
- "modify files without confirmation"
language: "Chinese with English technical terms"
趋势二:动态约束注入
根据上下文动态调整约束。例如,在代码生成场景中自动注入代码规范约束,在数据分析场景中自动注入数据隐私约束。
趋势三:约束验证
2026年出现了专门的”约束验证”工具——在 Prompt 发送给模型之前,自动检查约束是否可能冲突或不完整。
提示词纪律检查清单
| 检查项 | 说明 | 是否满足 |
|---|---|---|
| 角色是否明确 | 具体角色(领域、经验、风格) | [ ] |
| 输出格式是否明确 | 指定了输出格式(JSON/Markdown/表格) | [ ] |
| 约束是否完整 | 明确了能做和不能做的事 | [ ] |
| Negative Constraints 是否充分 | 禁止了常见的错误行为 | [ ] |
| 是否有 Few-Shot 示例 | 提供了正确输出的示例 | [ ] |
| 约束是否可验证 | 模型输出可以被程序化验证 | [ ] |
| 约束是否无冲突 | 不同约束之间没有矛盾 | [ ] |
相关笔记
- 第12章 · 提示词工程 - Prompt 工程章节
- 系统提示词和用户提示词 - 系统提示词详解
- 提示词的局限 - 提示词的局限性
- 三种问法:Zero-shot、Few-shot、思维链 - 三种问法策略
- Context 工程 - Context 工程详解
- AI 工程范式演化 - AI 工程范式演化
来源
- Prompt Engineering Guide: https://www.promptingguide.ai/
- Anthropic Prompt Engineering: https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering
- OpenAI Prompt Engineering: https://platform.openai.com/docs/guides/prompt-engineering
- System Prompt 研究: https://arxiv.org/abs/2308.10061
- 结构化 Prompt 研究: https://arxiv.org/abs/2402.11550