每个优秀的提示词都有共同的结构元素。理解这些组成部分可以让你系统地构建提示词，而不是通过反复试错。

<Callout type="tip" title="构建模块">
把这些组成部分想象成乐高积木。你不需要在每个提示词中都使用所有组件，但了解有哪些可用的组件可以帮助你构建出你真正需要的内容。
</Callout>

## 核心组成部分

一个有效的提示词通常包含以下部分或全部元素：

<PromptBreakdown parts={[
  { label: "角色", text: "你是一位资深软件工程师" },
  { label: "背景", text: "正在开发一个 React 应用程序。" },
  { label: "任务", text: "审查这段代码中的 bug" },
  { label: "约束", text: "只关注安全问题。" },
  { label: "格式", text: "以编号列表的形式返回发现。" },
  { label: "示例", text: "例如：1. 第 42 行存在 SQL 注入风险" }
]} />

让我们详细检查每个组成部分。

## 1. 角色/人设

设定角色可以使模型的回复聚焦于特定的专业知识或视角。

<Compare 
  before={{ label: "没有角色", content: "解释量子计算。" }}
  after={{ label: "有角色", content: "你是一位物理学教授，擅长将复杂话题讲解得通俗易懂。解释量子计算。" }}
/>

角色可以引导模型：
- 使用适当的词汇
- 运用相关专业知识
- 保持一致的视角
- 恰当地考虑受众

### 有效的角色模式

```
"你是一位有 [X 年] [专业领域] 经验的 [职业]"
"扮演一位 [特点] 的 [角色]"
"你是一位 [领域] 专家，正在帮助 [受众类型]"
```

## 2. 背景/上下文

背景提供模型理解你情况所需的信息。记住：除非你告诉模型，否则它对你、你的项目或你的目标一无所知。

<Compare 
  before={{ label: "弱背景", content: "修复我代码中的这个 bug。" }}
  after={{ label: "强背景", content: "我正在使用 Express.js 构建一个 Node.js REST API。这个 API 使用 JWT token 处理用户认证。当用户尝试访问受保护的路由时，即使有有效的 token 也会收到 403 错误。以下是相关代码：[代码]" }}
/>

### 背景中应包含什么

- **项目细节** — 技术栈、架构、约束条件
- **当前状态** — 你尝试过什么、什么有效、什么无效
- **目标** — 你最终想要实现什么
- **限制** — 时间限制、技术要求、风格指南

## 3. 任务/指令

任务是提示词的核心——你希望模型做什么。要具体且明确。

### 具体性光谱

<SpecificitySpectrum levels={[
  { level: "模糊", text: "帮我写这篇文章" },
  { level: "较好", text: "编辑这篇文章" },
  { level: "好", text: "检查这篇文章的语法和清晰度" },
  { level: "最好", text: "编辑这篇文章的语法和清晰度，保持原有语调但减少 20% 的冗余内容" }
]} />

### 效果良好的动作动词

<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>

## 4. 约束/规则

约束限定模型的输出范围。它们可以防止常见问题并确保相关性。

### 约束类型

**长度约束：**
```
"回复控制在 200 字以内"
"提供恰好 5 条建议"
"写 3-4 段"
```

**内容约束：**
```
"不要包含任何代码示例"
"只关注技术方面"
"避免营销用语"
```

**风格约束：**
```
"使用正式的学术语调"
"写得像在和 10 岁的孩子说话"
"直接表达，避免模棱两可的语言"
```

**范围约束：**
```
"只考虑 Python 3.10+ 中可用的选项"
"建议限于免费工具"
"专注于不需要额外依赖的解决方案"
```

## 5. 输出格式

指定输出格式可确保你获得可用结构的回复。

### 常见格式

**列表：**
```
"以项目符号列表返回"
"提供步骤的编号列表"
```

**结构化数据：**
```
"返回 JSON，包含键：title、description、priority"
"格式化为 markdown 表格，列为：功能、优点、缺点"
```

**特定结构：**
```
"按以下结构组织你的回复：
 ## 摘要
 ## 要点
 ## 建议"
```

### JSON 输出示例

```
分析这条客户评论并返回 JSON：
{
  "sentiment": "positive" | "negative" | "neutral",
  "topics": ["主题数组"],
  "rating_prediction": 1-5,
  "key_phrases": ["值得注意的短语"]
}

评论："产品很快就到了，效果很好，但说明书让人困惑。"
```

## 6. 示例（少样本学习）

示例是向模型展示你确切想要什么的最强大方式。

### 单样本示例

```
将这些句子转换为过去时。

示例：
输入："她走向商店"
输出："她走向了商店"

现在转换：
输入："他们每天早上跑步"
```

### 少样本示例

```
按紧急程度对这些支持工单进行分类。

示例：
"我的账户被黑了" → 紧急
"如何更改密码？" → 低
"付款失败但我被扣款了" → 高

分类："打开设置时应用崩溃"
```

## 整合在一起

这是一个使用所有组件的完整提示词：

<TryIt 
  title="完整提示词示例"
  description="这个提示词展示了所有六个组件如何协同工作。试试看结构化提示词如何产生专业的结果。"
  prompt={`# 角色
你是一位拥有 10 年经验的高级技术文档工程师，专门创建开发者文档。

# 背景
我正在为一个支付处理服务编写 REST API 文档。受众是将我们的 API 集成到其应用程序中的开发者。他们具有中级编程知识，但可能不熟悉支付处理的概念。

# 任务
为以下创建新支付意向的 API 端点编写文档。

# 约束
- 使用清晰、简洁的语言
- 包含常见错误场景
- 不要包含关于我们后端的实现细节
- 假设读者理解 HTTP 和 JSON 基础知识

# 输出格式
文档结构如下：
1. 端点概述（2-3 句话）
2. 请求（方法、URL、headers、带示例的 body）
3. 响应（成功和错误示例）
4. 代码示例（使用 JavaScript/Node.js）

# 端点详情
POST /v1/payments/intents
Body: { "amount": 1000, "currency": "usd", "description": "Order #1234" }`}
/>

## 最小有效提示词

并非每个提示词都需要所有组件。对于简单任务，一个清晰的指令可能就足够了：

```
将"Hello, how are you?"翻译成西班牙语。
```

在以下情况下使用额外组件：
- 任务复杂或有歧义
- 你需要特定格式
- 结果不符合预期
- 多次查询需要保持一致性

## 常见提示词模式

这些框架为你编写提示词提供了简单的检查清单。点击每个步骤查看示例。

<CRISPEFramework />

<RTFFramework />

## 总结

有效的提示词是构建出来的，而不是碰巧发现的。通过理解和应用这些结构组件，你可以：

- 第一次就获得更好的结果
- 调试不起作用的提示词
- 创建可重用的提示词模板
- 清晰地传达你的意图

<Quiz 
  question="哪个组件对回复质量的影响最大？"
  options={[
    "总是角色/人设",
    "总是输出格式",
    "取决于任务",
    "提示词的长度"
  ]}
  correctIndex={2}
  explanation="不同的任务受益于不同的组件。简单的翻译只需要最少的结构，而复杂的分析则受益于详细的角色、背景和格式规范。"
/>

<TryIt 
  prompt={`你是一位拥有 10 年 SaaS 产品经验的高级产品经理。

背景：我正在为远程团队构建一个任务管理应用。我们是一个小型创业公司，工程资源有限。

任务：建议我们应该为 MVP 优先考虑的 3 个功能。

约束：
- 功能必须能由 2 名开发人员在 4 周内实现
- 专注于与 Trello 和 Asana 的差异化

格式：对于每个功能，提供：
1. 功能名称
2. 一句话描述
3. 为什么对远程团队重要`}
  description="这个提示词使用了所有六个组件。试试看结构化的方法如何产生聚焦、可行的结果。"
/>

## 构建你自己的提示词

现在轮到你了！使用这个互动提示词构建器，运用你学到的组件来构建你自己的提示词：

<PromptBuilder 
  title="互动提示词构建器"
  description="填写每个部分来构建一个完整、结构良好的提示词"
/>

<PromptChallenge
  title="章节挑战：构建代码审查提示词"
  task="编写一个提示词，要求 AI 审查代码中的安全漏洞。你的提示词应该足够具体，以获得可操作的反馈。"
  criteria={[
    "包含明确的角色或专业水平",
    "指定代码审查的类型（安全重点）",
    "定义预期的输出格式",
    "设置适当的约束或范围"
  ]}
  hints={[
    "想想代码审查员应该具备什么专业知识",
    "具体说明要寻找什么安全问题",
    "考虑要求结构化的响应格式"
  ]}
  exampleSolution={`你是一位资深安全工程师，专精于 Web 应用安全和 OWASP Top 10 漏洞。

任务：审查以下代码的安全漏洞。

重点关注：
- SQL 注入风险
- XSS 漏洞
- 认证/授权问题
- 输入验证缺口

输出格式：
对于发现的每个问题：
1. 行号
2. 漏洞类型
3. 风险等级（高/中/低）
4. 建议修复方案

[待审查代码]`}
  difficulty="intermediate"
/>

在下一章中，我们将探索指导提示词构建决策的核心原则。
