提示词结构设计 #
为什么需要结构化的提示词? #
结构化提示词的优势 #
┌─────────────────────────────────────────────────────────────┐
│ 结构化 vs 非结构化 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 非结构化提示词: │
│ "帮我写个排序算法" │
│ ├── 输出不可预测 │
│ ├── 可能遗漏重要信息 │
│ └── 难以复用和改进 │
│ │
│ 结构化提示词: │
│ "作为 Python 开发者,请实现一个快速排序算法, │
│ 要求时间复杂度 O(n log n),添加详细注释, │
│ 并提供测试用例" │
│ ├── 输出可预测 │
│ ├── 信息完整 │
│ └── 易于复用和改进 │
│ │
└─────────────────────────────────────────────────────────────┘
结构化的好处 #
1. 一致性
└── 相同结构产生相似质量的输出
2. 可维护性
└── 易于修改和优化特定部分
3. 可复用性
└── 模板可在不同场景复用
4. 可测试性
└── 便于评估和比较效果
5. 可扩展性
└── 容易添加新的要求
提示词的基本组成 #
核心要素 #
┌─────────────────────────────────────────────────────────────┐
│ 提示词基本结构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 1. 角色设定(Role) │ │
│ │ 定义 AI 扮演的角色和身份 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 2. 任务描述(Task) │ │
│ │ 明确要完成的具体任务 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 3. 上下文信息(Context) │ │
│ │ 提供背景信息和相关资料 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 4. 输入数据(Input) │ │
│ │ 需要处理的具体数据 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 5. 输出格式(Output Format) │ │
│ │ 指定期望的输出形式 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 6. 约束条件(Constraints) │ │
│ │ 限制和特殊要求 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
各要素详解 #
1. 角色设定(Role) #
作用:
├── 设定专业视角
├── 影响输出风格
└── 提供领域知识
示例:
─────────────────────────────────────────────────
"你是一位有 10 年经验的前端架构师"
"你是一位耐心的小学数学老师"
"你是一位严谨的代码审查专家"
"你是一位创意文案策划师"
─────────────────────────────────────────────────
角色设定模板:
你是一位 [职业/身份],拥有 [年限] 年 [领域] 经验,
擅长 [专长],具有 [特点] 的风格。
2. 任务描述(Task) #
作用:
├── 明确目标
├── 指导方向
└── 评估标准
示例:
─────────────────────────────────────────────────
"请分析以下代码的性能瓶颈"
"请将这篇文章翻译成英文"
"请生成一个用户注册表单的 HTML 代码"
"请解释量子计算的基本原理"
─────────────────────────────────────────────────
任务描述模板:
请 [动词] [对象],实现 [目标]。
3. 上下文信息(Context) #
作用:
├── 提供背景
├── 补充知识
└── 引导理解
示例:
─────────────────────────────────────────────────
"这是一个电商网站的商品搜索功能..."
"目标用户是 18-25 岁的大学生..."
"项目使用 React 18 和 TypeScript..."
─────────────────────────────────────────────────
上下文模板:
背景:[项目/场景背景]
目标用户:[受众描述]
技术栈:[相关技术]
参考资料:[文档/链接]
4. 输入数据(Input) #
作用:
├── 提供处理对象
├── 明确数据格式
└── 划定处理范围
示例:
─────────────────────────────────────────────────
代码:
```python
def calculate(a, b):
return a + b
文本: “人工智能正在改变世界…”
数据: [1, 2, 3, 4, 5] ─────────────────────────────────────────────────
#### 5. 输出格式(Output Format)
作用: ├── 规范输出形式 ├── 便于后续处理 └── 提高可读性
示例: ───────────────────────────────────────────────── “请以 JSON 格式输出” “请使用 Markdown 表格” "请按以下格式输出:
- 问题概述
- 原因分析
- 解决方案"
“请输出代码,并添加详细注释” ─────────────────────────────────────────────────
#### 6. 约束条件(Constraints)
作用: ├── 限制范围 ├── 保证质量 └── 满足需求
示例: ───────────────────────────────────────────────── “字数控制在 500 字以内” “不要使用专业术语” “必须包含 3 个以上示例” “代码需要兼容 Python 3.8” “避免使用第一人称” ─────────────────────────────────────────────────
## CRISPE 框架
### 框架介绍
CRISPE 是一个经典的提示词设计框架,每个字母代表一个关键要素。
┌─────────────────────────────────────────────────────────────┐ │ CRISPE 框架 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ C - Capacity and Role(能力与角色) │ │ 定义 AI 扮演的角色和能力范围 │ │ │ │ R - Insight(洞察) │ │ 提供背景信息和上下文 │ │ │ │ I - Statement(陈述) │ │ 明确说明要完成的任务 │ │ │ │ S - Personality(个性) │ │ 设定输出的风格和语气 │ │ │ │ P - Experiment(实验) │ │ 提供示例来引导输出 │ │ │ │ E - Format(格式) │ │ 指定输出的格式要求 │ │ │ └─────────────────────────────────────────────────────────────┘
### CRISPE 实例
┌─────────────────────────────────────────────────────────────┐ │ CRISPE 完整示例 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ C - 角色: │ │ 你是一位资深的 Python 后端开发工程师,有 8 年的 Web 开发经验 │ │ │ │ R - 洞察: │ │ 我们正在开发一个高并发的电商 API,需要处理每秒 10000 次请求 │ │ 项目使用 FastAPI + PostgreSQL + Redis │ │ │ │ I - 任务: │ │ 请设计一个商品库存扣减的 API 接口 │ │ │ │ S - 风格: │ │ 使用专业的技术语言,注重代码质量和性能 │ │ │ │ P - 示例: │ │ 参考以下代码风格: │ │ async def get_user(user_id: int) -> User: │ │ “”“获取用户信息”“” │ │ … │ │ │ │ E - 格式: │ │ 请提供: │ │ 1. API 设计说明 │ │ 2. 完整代码实现 │ │ 3. 性能优化建议 │ │ │ └─────────────────────────────────────────────────────────────┘
## CO-STAR 框架
### 框架介绍
CO-STAR 是另一个流行的提示词框架,强调上下文和任务分离。
┌─────────────────────────────────────────────────────────────┐ │ CO-STAR 框架 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ C - Context(上下文) │ │ 提供任务背景信息 │ │ │ │ O - Objective(目标) │ │ 明确要达成的目标 │ │ │ │ S - Style(风格) │ │ 设定输出的写作风格 │ │ │ │ T - Tone(语气) │ │ 设定输出的语气 │ │ │ │ A - Audience(受众) │ │ 明确目标读者 │ │ │ │ R - Response(响应格式) │ │ 指定输出的格式 │ │ │ └─────────────────────────────────────────────────────────────┘
### CO-STAR 实例
┌─────────────────────────────────────────────────────────────┐ │ CO-STAR 完整示例 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ C - 上下文: │ │ 我们公司即将发布一款新的智能手表产品,主打健康监测功能 │ │ │ │ O - 目标: │ │ 撰写一篇产品发布新闻稿 │ │ │ │ S - 风格: │ │ 专业、现代、科技感 │ │ │ │ T - 语气: │ │ 自信但不夸张,突出产品优势 │ │ │ │ A - 受众: │ │ 科技媒体记者和消费者 │ │ │ │ R - 格式: │ │ 标准新闻稿格式,包含: │ │ - 标题(不超过 20 字) │ │ - 导语(100 字以内) │ │ - 正文(500-800 字) │ │ - 产品亮点(3-5 条) │ │ │ └─────────────────────────────────────────────────────────────┘
## CREATE 框架
### 框架介绍
CREATE 框架强调清晰和可执行性。
┌─────────────────────────────────────────────────────────────┐ │ CREATE 框架 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ C - Clarity(清晰) │ │ 清晰表达任务目标 │ │ │ │ R - Relevant Info(相关信息) │ │ 提供必要的背景信息 │ │ │ │ E - Examples(示例) │ │ 提供输入输出示例 │ │ │ │ A - Avoid Ambiguity(避免歧义) │ │ 使用精确的语言 │ │ │ │ T - Tone(语气) │ │ 设定合适的语气 │ │ │ │ E - Evaluate(评估) │ │ 设定评估标准 │ │ │ └─────────────────────────────────────────────────────────────┘
## 结构化提示词模板
### 通用模板
角色 #
你是一位 [角色描述]。
背景 #
[提供相关背景信息]
任务 #
请 [具体任务描述]。
输入 #
[输入数据或内容]
要求 #
- [要求1]
- [要求2]
- [要求3]
输出格式 #
[描述期望的输出格式]
示例 #
[提供参考示例]
### 代码开发模板
角色 #
你是一位经验丰富的 [语言] 开发者,擅长 [领域]。
背景 #
项目:[项目名称] 技术栈:[技术列表] 目标:[项目目标]
任务 #
请 [具体开发任务]。
代码要求 #
- 语言版本:[版本]
- 代码风格:[风格指南]
- 注释要求:[注释规范]
- 测试要求:[测试要求]
输出格式 #
- 设计思路
- 代码实现
- 使用示例
- 注意事项
### 内容创作模板
角色 #
你是一位专业的 [内容类型] 创作者。
背景 #
品牌:[品牌名称] 目标受众:[受众描述] 发布平台:[平台名称]
任务 #
请创作一篇关于 [主题] 的 [内容类型]。
内容要求 #
- 字数:[字数范围]
- 风格:[写作风格]
- 语气:[语气要求]
- 必须包含:[必要元素]
输出格式 #
[标题] [正文] [标签/关键词]
### 数据分析模板
角色 #
你是一位专业的数据分析师。
背景 #
数据来源:[来源描述] 数据规模:[数据量] 分析目的:[目的描述]
数据 #
[数据内容或描述]
任务 #
请对以上数据进行分析,包括:
- 数据概览
- 关键发现
- 趋势分析
- 建议
输出格式 #
数据概览 #
[描述]
关键发现 #
- 发现1
- 发现2
趋势分析 #
[分析内容]
建议 #
[具体建议]
## 结构设计最佳实践
### 实践一:层次分明
❌ 混乱的结构: “你是一个老师,帮我解释一下机器学习,要简单易懂, 大概500字,给初学者看的,用例子说明”
✅ 层次分明的结构:
角色 #
你是一位面向初学者的计算机科学教师。
任务 #
请解释机器学习的基本概念。
要求 #
- 目标受众:编程初学者
- 语言风格:简单易懂
- 内容长度:约 500 字
- 必须包含:至少 2 个生活实例
### 实践二:优先级排序
将最重要的信息放在开头或结尾:
重要信息(开头) #
你是一位资深安全专家,请审查以下代码的安全问题。
次要信息(中间) #
代码使用 Python 3.10 编写…
关键约束(结尾) #
请务必指出所有潜在的安全风险,不要遗漏。
### 实践三:模块化设计
将提示词设计为可复用的模块:
模块 1 - 角色定义: 你是一位 [角色],拥有 [经验],擅长 [技能]。
模块 2 - 任务定义: 请完成以下任务:[任务描述]
模块 3 - 格式定义: 请按以下格式输出:[格式描述]
组合使用: [模块 1] + [模块 2] + [模块 3]
### 实践四:版本管理
为提示词添加版本信息:
版本:v1.2 #
更新日期:2024-01-15 #
变更记录: #
- 增加了输出格式要求 #
- 优化了角色描述 #
[提示词内容]
## 下一步
现在你已经掌握了提示词结构设计,接下来学习 [常用技巧与方法](/docs/prompt-engineering/techniques),了解更多实用的提示词技巧!