AI 使用 ¶
约 3315 个字 157 行代码 预计阅读时间 19 分钟 共被读过 次
1 如何写一个 Prompt¶
1.1 Prompt 的基本原则¶
1.1.1 明确需求¶
1.1.1.1 什么是清晰的指令?¶
清晰的指令是指能够准确传达任务意图的描述,避免歧义,让模型理解并生成期望的结果。
它的核心在于具体化需求,通过明确的语言和结构化的描述,让任务目标易于被模型解析。
1.1.1.2 如何表达需求无歧义?¶
- 使用具体的语言
例如,不要简单说“生成摘要”,而是明确内容形式和要求:
- ❌ 不清晰:总结一下这篇文章。
- ✅ 清晰:用通俗易懂的语言将以下文章总结为 3 点,并以 Markdown 列表的形式输出。
- 设定清晰的边界和限制
给出明确的范围,避免模型输出无关信息。
- ❌ 不清晰:解释 AI。
- ✅ 清晰:请用 2-3 句话向高中生解释什么是 AI,避免使用过于专业的术语。
- 使用任务指向性强的词语
强调任务的核心,例如“详细说明”“以简洁语言总结”“列出具体步骤”等。
1.1.1.3 示例:清晰与模糊指令的对比¶
模糊指令 | 清晰指令 |
---|---|
总结会议记录。 | 用一个段落总结会议记录,并列出发言人及其建议的行动项目,以 Markdown 列表格式输出。 |
解释大数据。 | 用三句话向中学生解释大数据的定义及作用,并提供一个与日常生活相关的例子。 |
生成一份旅行计划。 | 请为北京三日游生成一份详细的旅行计划,包含每天的行程、景点介绍、预算范围和推荐美食。 |
1.1.2 简洁与精炼¶
1.1.2.1 避免冗长与无效信息的方法¶
在 Prompt 中,冗长的描述会增加模型的理解难度,同时可能引入无关内容。以下技巧可以帮助优化表达:
- 删减无用信息:去掉不必要的修饰词或重复内容。
-
- ❌ 冗长:在用来写这篇文章的摘要时,你可以参考以下这些文章的内容……
- ✅ 精炼:为以下文章写摘要。
- 直接切入重点:优先描述任务的核心需求,避免背景信息过多干扰任务。
- 层级分明:使用结构化格式,避免将多条指令混为一谈。
1.1.2.2 “奥卡姆剃刀”原则的实际应用¶
奥卡姆剃刀原则强调“如无必要,勿增实体”,在 Prompt 中,表现为尽量减少不必要的约束和附加要求。
- 示例:
- 不必要的约束:
请用 500 字左右总结以下文本,不要提到与文本无关的内容,也不要加入个人观点,只需简洁概括主要观点…… - 优化后:
请用 500 字总结以下文本的主要观点,语言简洁明了。
- 不必要的约束:
1.1.3 语气与风格¶
1.1.3.1 使用正式、礼貌的语言提高生成准确性¶
在 Prompt 中,语气和语言风格会影响模型的生成质量。
- 正式语言通常更符合大模型的训练数据分布,有助于生成更严谨的内容。
- 示例:
- 正式:请用通俗易懂的语言解释以下技术概念。
- 非正式:帮我把这段话简单说一下。
1.1.3.2 针对不同任务调整语气的案例¶
- 创意任务:
指令应更具感染力,以激发模型生成更具想象力的内容。
- 示例:
- 你是一位小红书爆款文案专家,请为年轻人设计一个具有吸引力的青岛旅游攻略。
- 教育任务:
语气需要循循善诱,内容结构清晰明了。
- 示例:
- 你是一名高中数学老师,请用通俗易懂的方式讲解二次函数的概念。
- 专业任务:
语气应严谨,信息需精确,避免主观性表达。
- 示例:
- 请从定义、特性和应用三个方面详细说明区块链技术,并提供相关的行业实例。
1.2 高级技巧¶
1.2.1 提供上下文与示例¶
1.2.1.1 使用 Few-shot Prompt 提供有效示例¶
Few-shot Prompt 是指在提示语中提供示例以引导模型生成类似的内容。这种方法特别适合复杂任务或需求不明确的场景。
- 为何使用 Few-shot Prompt?
- 降低模型的自由发挥度:通过提供示例,限制模型的输出风格和结构。
- 提升任务准确性:通过示例传递明确的标准,减少偏差。
- 扩展模型的适应能力:帮助模型适应一些训练数据中可能未见过的场景。
- 设计 Few-shot Prompt 的关键点
- 示例数量:通常 2-5 个示例即可,过多可能导致提示过长,增加噪声。
- 覆盖不同难度的案例:包括简单场景(easy case
) 、复杂场景(hard case)以及边缘情况(corner case) 。 - 示例质量:确保提供的示例与预期任务高度相关。
- 示例:
任务:判断输入是否属于知识问答类问题。
Few-shot Prompt:
请判断以下问题是否属于知识问答类问题。
问题:世界上最高的山是什么? # easy case,属于客观知识问答
答案:是
问题:为什么水能传导电? # hard case,属于科学原理问答
答案:是
问题:帮我写一篇旅行日记。 # easy case,属于创作类任务
答案:否
问题:什么是嵌套字典? # hard case,属于技术知识问答
答案:是
问题:{输入}
答案:
1.2.1.2 参考文本的使用与引用技巧¶
参考文本能为模型提供明确的知识基础,尤其在需要可靠性和准确性的任务中效果显著。
- 让模型使用参考文本作答
- 给模型明确指令,只允许依据参考文本生成答案。
-
示例:
- 引用参考文本中的段落
- 要求模型在回答中标注引用来源,增加答案的可验证性。
-
示例:
1.2.2 任务分解¶
1.2.2.1 将复杂任务拆解为子任务的最佳实践¶
复杂任务可能涉及多个子目标,将其分解为清晰的步骤可以提高模型的表现。
- 为何分解任务?
- 降低模型理解难度。
- 更容易对生成结果进行验证。
- 增强 Prompt 的复用性。
- 任务分解方法
- 明确每一步的目标:逐层剖析问题,将复杂任务分解为简单子任务。
- 任务依赖管理:确保每一步为下一步提供必要的输入。
- 示例:
任务:生成会议纪要。
任务分解 Prompt:
1.2.2.2 连续生成任务的链式思考(Chain of Thought, CoT)¶
CoT 是一种逐步思考的提示策略,适用于需要逻辑推理的任务。
- 为何使用 CoT?
- 帮助模型将复杂任务分解为一系列易于解决的小任务。
- 提升逻辑推理能力,尤其适用于数学、推理或复杂问题。
- 设计 CoT Prompt 的关键
- 指导模型逐步完成任务。
- 强调“思考过程”并输出步骤。
- 示例:
任务:计算 \((1362+5145)*145-(1517*42+24)\) 的结果。
CoT Prompt:
模型生成示例:
第一步:计算 (1362+5145),结果为 6507。
第二步:计算 6507*145,结果为 943515。
第三步:计算 1517*42,结果为 63654。
第四步:计算 63654+24,结果为 63678。
第五步:计算 943515-63678,结果为 879837。
答案:879837。
1.2.2.3 示例:多步骤任务的分解与优化¶
任务:撰写一份产品设计文档,包括需求、功能列表、设计方案。
多步骤 Prompt:
模型输出示例:
核心需求:用户希望通过应用快速获取附近的餐饮推荐。
功能列表:
- 餐饮推荐系统
- 用户偏好设置
- 地图导航
设计方案:
- 餐饮推荐系统:根据用户位置和偏好实时推荐附近的餐馆。
- 用户偏好设置:允许用户自定义口味、预算和菜系。
- 地图导航:提供餐馆的实时位置和最佳路线。
1.2.3 角色扮演¶
1.2.3.1 指定模型身份的优势¶
通过为模型设置角色,可以帮助其以更适合任务的方式生成内容。模型角色的指定类似于设定语境,能够更精准地控制生成内容的语言风格、细节和专业性。
- 为什么需要角色扮演?
- 提高生成准确性:指定角色后,模型的回答会更聚焦于该角色的知识领域。
- 增强输出风格的一致性:根据角色的设定,输出会符合预期的专业性或创意性。
- 示例
-
任务:撰写旅游攻略。
Prompt:
-
任务:解释编程概念。
Prompt:
代码示例:
- 多角色结合
- 在复杂任务中,多个角色可以分担不同部分的生成任务。
-
示例:
1.2.4 格式化与结构化输出¶
1.2.4.1 JSON、表格、清单等输出格式的应用场景¶
为保证输出的易读性和便于后续处理,可以明确要求模型返回结果的格式化输出。例如,JSON 格式适合数据处理,表格适合总结分析,清单适合任务分解。
- 为什么需要结构化输出?
- 提高可读性:输出易于直接查看和理解。
- 便于后续处理:尤其在数据处理或编程任务中,结构化数据可直接用于其他工具或代码。
- 示例
-
任务:提取文本中的关键信息并返回 JSON 格式。
Prompt:
-
任务:总结会议记录并生成表格。
Prompt:
模型生成示例:
1.2.4.2 使用分隔符(如三引号)明确任务结构¶
分隔符可以帮助区分任务描述和输入内容,减轻模型的理解负担。
- 典型用法
-
明确输入与输出部分:
- 减少噪声干扰
-
将多段输入分块:
1.2.4.3 示例:从无格式到标准化输出的转变¶
任务:为一段产品评论生成结构化摘要。
无格式的指令:
标准化的指令:
输出示例:
| 优点 | 缺点 | 建议 |
|-----------------|---------------|--------------------|
| 价格便宜 | 做工一般 | 改善产品外观设计 |
| 功能齐全 | 操作复杂 | 简化用户操作流程 |
1.3 优化与迭代¶
1.3.1 如何通过 AI 帮助改写或优化 Prompt?¶
1.3.1.1 为什么让 AI 优化 Prompt?¶
AI 擅长从少量输入中提取规律,可以快速调整语言风格和细节,帮助用户优化 Prompt,尤其在任务需求模糊或缺乏清晰指令的情况下。
1.3.1.2 具体方法¶
- 直接请求 AI 改进
- 提供初始 Prompt,让 AI 提出优化建议。
-
示例:
原始 Prompt:请求优化:
优化结果:
- 通过几轮交互微调 Prompt
-
示例:
第 1 轮优化: -
第 2 轮优化:
- 自动化优化工具
- 使用如 OpenAI 提供的 API,通过动态调整测试多个版本的 Prompt,找到最佳解决方案。
1.3.2 结合外部工具提升效率¶
1.3.2.1 调用 API 或代码执行实现复杂功能¶
大模型对计算和实时数据的支持有限,因此结合外部工具,如 API 调用或代码执行,可以提升任务的准确性。
- 请求生成代码来执行计算
-
示例:
任务:求解多项式的所有实根。
Prompt:输出结果:
Pythonimport numpy as np coefficients = [3, -5, 2, -7] roots = np.roots(coefficients) print("实根为:", [r for r in roots if np.isreal(r)])
解释:此代码使用 NumPy 的
roots
函数计算多项式的所有根,并过滤出实根。
- 结合外部数据或工具
- 示例:使用向量数据库查询知识库中的信息,作为生成答案的补充。
1.3.2.2 输出成 Markdown 或 LaTeX 文档的场景与技巧¶
- Markdown 格式化
-
示例:
任务:生成会议纪要。
Prompt:输出:
- LaTeX 格式化
-
示例:
任务:生成数学公式。
Prompt:输出:
1.3.3 增强 Prompt 的灵活性¶
1.3.3.1 为开放式任务设置兜底策略¶
开放式任务(如写故事或推荐方案)容易导致模型“跑题”,通过兜底策略可提高稳定性。
- 明确不符合条件时的回复
-
示例:
Prompt:输入:
输出:
- 定义容错机制
-
示例:当生成结果不符合格式时,要求重新生成。
1.3.3.2 添加强调词与符号提升指令权重¶
使用特殊符号(如加粗)或强调词(如“务必”
- 示例:
任务:总结文章并强调关键概念。
Prompt:
```text
请总结以下文章,并**加粗**每个要点中的关键概念,以 Markdown 列表形式输出。
```
**输出**:
```markdown
- **要点一**:机器学习是通过数据训练模型的**方法**。
- **要点二**:深度学习是机器学习的**分支**,以多层神经网络为核心。
```
1.4 实用案例¶
1.4.1 常见场景与解决方案¶
1.4.1.1 生成长篇的文章¶
- 逐步生成长文内容
- 方法:先生成目录,再逐部分扩展内容。
-
示例:
Prompt:输出目录示例:
Markdown- 第一部分:时间管理的重要性 - 第二部分:常见时间管理误区 - 第三部分:高效时间管理的方法 - 1. 设定目标与优先级 - 2. 使用工具与技术 - 3. 培养时间管理习惯 - 第四部分:案例分析与应用
扩展内容 Prompt:
- 在生成时添加引用文献
-
示例:
Prompt:输出:
1.4.1.2 解释代码并生成辅助图表¶
- 生成代码解释
-
示例:
Prompt:
- 生成辅助图表
-
示例:
Prompt:输出:
1.4.2 Prompt 的限制与应对策略¶
1.4.2.1 设计拒答策略提升可靠性¶
- 避免幻觉现象
-
提示模型不要回答其无法确定的内容。
示例:输出:
- 多次生成以确认答案一致性
-
Prompt:
1.4.2.2 多个 AI 协作¶
- 框架与内容协作
-
通过不同模型协作优化内容生成。
示例流程:- Prompt 1:让 ChatGPT 提供文章框架。
- Prompt 2:将框架内容交给另一个模型优化表达。
- Prompt 3:使用另一个工具(如 Grammarly 或其他 AI)校对和优化语言风格。
- 代码优化协作
- Prompt:
请优化以下代码,使其运行效率更高,并提供注释说明:
```python
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
```
1.5 我曾经用法¶
- 输出文档:通过 Markdown 或 LaTeX 生成格式化文档。
- 生成 README:让 AI 阅读代码并撰写说明。
- 引用文献写论文:利用 AI 上网查询资料,提高学术内容质量。