除了结构之外，有效的提示工程还遵循一些基本原则——这些是适用于所有模型、任务和场景的基础真理。掌握这些原则，你就能应对任何提示挑战。

<Callout type="info" title="8 大核心原则">
这些原则适用于每个 AI 模型和每项任务。学习一次，随处使用。
</Callout>

## 原则 1：清晰胜于花哨

最好的提示是清晰的，而不是花哨的。AI 模型是字面解释器——它们完全按照你给出的内容工作。

### 明确表达

<Compare 
  before={{ label: "隐式（有问题）", content: "把这个弄好一点。" }}
  after={{ label: "显式（有效）", content: "通过以下方式改进这封邮件：\n1. 让主题行更引人注目\n2. 将段落缩短到最多 2-3 句\n3. 在结尾添加明确的行动号召" }}
/>

### 避免歧义

词语可能有多重含义。选择精确的语言。

<Compare 
  before={{ label: "模糊", content: "给我一个简短的摘要。\n（多短？1 句话？1 段？1 页？）" }}
  after={{ label: "精确", content: "用 3 个要点总结，每个要点不超过 20 个字。" }}
/>

### 说明显而易见的事情

对你来说显而易见的事情对模型来说并不明显。把假设说清楚。

```
你正在帮我写一封求职信。

重要背景：
- 我正在申请 Google 的软件工程师职位
- 我有 5 年 Python 和分布式系统经验
- 该职位需要领导经验（我曾带领过 4 人团队）
- 我想强调我的开源贡献
```

## 原则 2：具体性带来质量

模糊的输入产生模糊的输出。具体的输入产生具体、有用的输出。

### 具体性阶梯

<SpecificitySpectrum levels={[
  { level: "第 1 级", text: "写一篇关于气候变化的文章" },
  { level: "第 2 级", text: "写一篇关于气候变化影响的文章" },
  { level: "第 3 级", text: "写一篇 500 字的文章，关于气候变化如何影响珊瑚礁" },
  { level: "第 4 级", text: "写一篇 500 字的文章，解释海洋温度上升如何导致珊瑚白化，面向高中生，包含 2 个来自大堡礁的具体例子，语气要引人入胜但科学准确" }
]} />

每个级别都增加了具体性，并显著提高输出质量。

### 明确这些要素

<div className="my-4 grid gap-2">
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">受众</span>
    <span className="text-muted-foreground">谁会阅读/使用这个？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">长度</span>
    <span className="text-muted-foreground">应该多长/多短？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">语气</span>
    <span className="text-muted-foreground">正式？随意？技术性？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">格式</span>
    <span className="text-muted-foreground">散文？列表？表格？代码？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">范围</span>
    <span className="text-muted-foreground">包含/排除什么？</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-24">目的</span>
    <span className="text-muted-foreground">这应该达成什么目标？</span>
  </div>
</div>

## 原则 3：上下文为王

模型没有记忆，无法访问你的文件，也不了解你的情况。所有相关内容都必须在提示中。

### 提供充分的上下文

<Compare 
  before={{ label: "上下文不足", content: "为什么我的函数不工作？" }}
  after={{ label: "上下文充分", content: "我有一个 Python 函数，应该按特定键值过滤字典列表。它返回空列表，但应该返回 3 个项目。\n\n函数：\ndef filter_items(items, key, value):\n    return [item for item in items if item[key] = value]\n\n调用：filter_items(items, 'status', 'active')\n预期：2 个项目，实际：空列表" }}
/>

### 上下文检查清单

<Callout type="tip" title="提交前">
问问自己：一个聪明的陌生人能理解这个请求吗？如果不能，添加更多上下文。
</Callout>

<Checklist 
  title="上下文检查清单"
  items={[
    { text: "模型知道我在做什么吗？" },
    { text: "它知道我的目标吗？" },
    { text: "它有所有必要的信息吗？" },
    { text: "它理解约束条件吗？" },
    { text: "一个聪明的陌生人能理解这个请求吗？" }
  ]}
/>

## 原则 4：引导，而不仅仅是询问

不要只是询问答案——引导模型走向你想要的答案。

### 使用指导性框架

<Compare 
  before={{ label: "仅仅询问", content: "微服务的优缺点是什么？" }}
  after={{ label: "引导", content: "列出微服务架构的 5 个优点和 5 个缺点。\n\n对于每一点：\n- 用一句话清楚陈述观点\n- 提供简短解释（2-3 句话）\n- 给出一个具体例子\n\n考虑以下视角：小型创业公司、大型企业、以及从单体架构转型的团队。" }}
/>

### 提供推理脚手架

对于复杂任务，引导推理过程：

<TryIt 
  title="推理脚手架示例"
  description="这个提示引导 AI 进行系统的决策过程。"
  prompt={`我需要在 PostgreSQL 和 MongoDB 之间为我的电商项目做出选择。

请系统地思考这个问题：
1. 首先，列出电商数据库的典型需求
2. 然后，根据每个需求评估每个数据库
3. 考虑针对我用例的具体权衡
4. 给出带有明确理由的建议`}
/>

## 原则 5：迭代和优化

提示工程是一个迭代过程。你的第一个提示很少是最好的。

### 迭代周期

```
1. 编写初始提示
2. 查看输出
3. 识别差距或问题
4. 优化提示
5. 重复直到满意
```

### 常见优化

<div className="my-4 grid gap-2">
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">太冗长</span>
    <span className="text-muted-foreground">添加"简洁一些"或长度限制</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">太模糊</span>
    <span className="text-muted-foreground">添加具体示例或约束</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">格式错误</span>
    <span className="text-muted-foreground">指定确切的输出结构</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">缺少方面</span>
    <span className="text-muted-foreground">添加"确保包含..."</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">语气不对</span>
    <span className="text-muted-foreground">指定受众和风格</span>
  </div>
  <div className="flex gap-2 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-32">不准确</span>
    <span className="text-muted-foreground">要求引用来源或逐步推理</span>
  </div>
</div>

### 保持提示日志

记录有效的内容：
```
任务：代码审查
版本 1："审查这段代码" → 太笼统
版本 2：添加了具体审查标准 → 更好
版本 3：添加了好的审查示例 → 很好
最终版本：[保存成功的提示作为模板]
```

## 原则 6：利用模型的优势

顺应模型的训练方式工作，而不是逆其道而行。

### 模型想要提供帮助

将请求框定为有帮助的助手自然会做的事情：

<Compare 
  before={{ label: "逆向而行", content: "我知道你不能做这个，但试着..." }}
  after={{ label: "顺势而为", content: "帮我理解...\n我正在做 X，需要帮助...\n你能带我了解一下..." }}
/>

### 模型擅长模式

如果你需要一致的输出，展示模式：

<TryIt 
  title="模式示例"
  description="这个提示向 AI 展示你想要的书籍推荐格式。"
  prompt={`推荐 3 本科幻小说。按以下格式给出每个推荐：

📚 **[书名]** 作者：[作者]
*[类型] | [出版年份]*
[2 句描述]
你会喜欢它的原因：[1 句吸引人的话]

---`}
/>

### 模型可以角色扮演

使用角色来访问不同的响应"模式"：

```
作为魔鬼代言人，反驳我的提案...
作为支持性的导师，帮我改进...
作为持怀疑态度的投资者，质疑这个商业计划...
```

## 原则 7：控制输出结构

结构化输出比自由形式的文本更有用。

### 请求特定格式

```
按以下格式返回你的分析：

摘要：[1 句话]

主要发现：
• [发现 1]
• [发现 2]
• [发现 3]

建议：[1-2 句话]

置信度：[低/中/高] 因为 [原因]
```

### 使用分隔符

清楚地分隔提示的各个部分：

```
### 背景 ###
[你的背景信息]

### 任务 ###
[你的任务]

### 格式 ###
[期望的格式]
```

### 请求机器可读输出

用于程序化使用：

```
只返回有效的 JSON，不要解释：
{
  "decision": "approve" | "reject" | "review",
  "confidence": 0.0-1.0,
  "reasons": ["字符串数组"]
}
```

## 原则 8：验证和确认

永远不要盲目信任模型输出，尤其是对于重要任务。

### 要求推理过程

```
解决这个问题并逐步展示你的工作过程。
解决后，通过[检查方法]验证你的答案。
```

### 请求多种视角

```
给我三种不同的方法来解决这个问题。
对于每种方法，解释其权衡。
```

### 内置自检

```
生成代码后，检查以下内容：
- 语法错误
- 边界情况
- 安全漏洞
列出发现的任何问题。
```

## 总结：原则一览

<PrinciplesSummary />

<Quiz 
  question="哪个原则建议你应该在提示中包含所有相关背景信息？"
  options={[
    "清晰胜于花哨",
    "具体性带来质量",
    "上下文为王",
    "迭代和优化"
  ]}
  correctIndex={2}
  explanation="上下文为王 强调 AI 模型在会话之间没有记忆，也无法读取你的想法。包含相关背景、约束和目标有助于模型理解你的需求。"
/>

## 练习：填空

通过完成这个提示模板来测试你对核心原则的理解：

<FillInTheBlank
  title="应用原则"
  description="填写空白以创建一个结构良好的提示——写任何你想要的内容！"
  useAI={true}
  openEnded={true}
  template={`你是一位在{{expertise}}方面有专业知识的{{role}}。

背景：我正在做{{context}}。

任务：{{task}}

约束：
- 将你的回复控制在{{length}}字以内
- 只关注{{focus}}

格式：以{{format}}的形式返回你的答案。`}
  blanks={[
    { id: "role", correctAnswers: [], hint: "AI 应该扮演什么职业角色？", context: "一个职位或专业角色" },
    { id: "expertise", correctAnswers: [], hint: "需要什么具体领域知识？", context: "与角色匹配的技能或领域" },
    { id: "context", correctAnswers: [], hint: "项目或情况是什么？", context: "具有这种专业知识的人会做的项目" },
    { id: "task", correctAnswers: [], hint: "AI 应该采取什么具体行动？", context: "适合角色和背景的行动" },
    { id: "length", correctAnswers: [], hint: "回复应该多长？", context: "一个数字（字数）" },
    { id: "focus", correctAnswers: [], hint: "应该优先考虑什么方面？", context: "与任务相关的质量或方面" },
    { id: "format", correctAnswers: [], hint: "输出应该如何结构化？", context: "一种输出格式类型" }
  ]}
  explanation="结构良好的提示包括：明确的角色（原则 1）、充分的上下文（原则 3）、具体的任务（原则 2）、约束条件（原则 4）和输出格式（原则 5）。AI 会检查你的选择是否内在一致。"
/>

<InteractiveChecklist
  title="原则检查清单"
  items={[
    { id: "clarity", label: "清晰胜于花哨", description: "你的提示是否明确且无歧义？" },
    { id: "specificity", label: "具体性带来质量", description: "你是否包含了受众、长度、语气和格式？" },
    { id: "context", label: "上下文为王", description: "提示是否包含所有必要的背景信息？" },
    { id: "examples", label: "示例胜过解释", description: "你是否展示了你想要什么，而不仅仅是描述它？" },
    { id: "constraints", label: "约束聚焦输出", description: "范围和格式是否有明确的边界？" },
    { id: "iteration", label: "迭代和优化", description: "你是否准备好根据结果进行改进？" },
    { id: "persona", label: "角色塑造视角", description: "AI 是否知道要扮演什么角色？" },
    { id: "verify", label: "验证和确认", description: "你是否内置了准确性检查？" }
  ]}
/>

这些原则构成了后续所有内容的基础。在第二部分，我们将把它们应用到显著提升提示效果的具体技术中。
