AI应用开发 3 - prompt 提示词工程

发布于:2025-03-04 ⋅ 阅读:(17) ⋅ 点赞:(0)

GitHub - mattnigh/ChatGPT3-Free-Prompt-List: A free guide for learning to create ChatGPT3 Prompts

1.CRISPE框架

CRISPE Prompt Framework,CRISPE 是首字母的缩写,分别代表以下含义:

CR:Capacity and Role(能力与角色),你希望 ChatGPT 扮演怎样的角色。

I:Insight(洞察),背景信息和上下文。

S:Statement(陈述),你希望 ChatGPT 做什么。

P:Personality(个性),你希望 ChatGPT 以什么风格或方式回答你。

E:Experiment(实验),要求 ChatGPT 为你提供多个答案。

github 上的那 prompt 角色大全基本都是 CRISPE 框架。

2.Prompt Engineering定义

定义:Prompt Engineering 是设计和优化输入提示(prompt)以获得预期输出的过程。在与大型语言模型(如 GPT-4)交互时,如何构造提示会显著影响模型的回答质量。

例子

  • 简单提示"告诉我关于猫的事情。"
  • 优化提示"请详细描述猫的生物学特征、行为习惯以及它们在不同文化中的象征意义。"

通过优化提示,用户可以引导模型生成更详细和有用的回答。

Prompt Engineering 是设计和优化输入提示以获得预期输出的过程。为了在使用大型语言模型(如 GPT-4)时获得最佳结果,以下是一些最佳实践:

1. 明确目标

2. 提供上下文

3. 使用具体的指示

4. 提供示例

5. 使用分步指示

        分解为多个步骤,逐步引导模型完成。

6. 控制输出长度

        通过提示控制输出的长度,确保内容简洁或详细。

7. 使用占位符和模板

        使用占位符和模板来指示需要填充的内容或格式。

8. 反复试验和调整

        明确指定输出格式,确保生成内容符合预期。

9. 指定输出格式

  • 无格式指定"生成一个关于公司财务状况的报告。"

  • 有格式指定"生成一个关于公司财务状况的报告,格式如下:\n\n1. 收入:\n2. 支出:\n3. 净利润:\n4. 财务分析:"

10. 使用多轮对话

        在需要时,通过多轮对话逐步引导模型生成所需内容。

11. 使用反思和迭代

        在生成初步答案后,反思并可能修改其回答,以提高准确性和质量。

3.提示技术

1. Zero-shot

Zero-shot 是指模型在没有任何示例的情况下完成任务。

2. Few-shot

Few-shot 是指模型在完成任务之前。

3. Chain-of-Thought (CoT)

Chain-of-Thought 是一种提示技术,通过展示模型思考过程的步骤来解决复杂问题。

例子

  • 提示"如果一个苹果和一个香蕉的总价是3美元,一个苹果的价格是2美元,那么一个香蕉的价格是多少?请展示你的思考过程。"
  • 回答"首先,苹果的价格是2美元。总价是3美元,所以香蕉的价格是3美元减去2美元,等于1美元。"

通过展示思考过程,模型可以更清晰地推理出正确答案。

4. ReAct

ReAct 是一种结合反应(Reaction)和行动(Action)的提示技术。

例子

  • 提示"你是一个虚拟助手。用户问:'我今天应该穿什么衣服?' 你需要根据天气情况给出建议。步骤1:查询天气。步骤2:根据天气给出建议。"
  • 回答
    • 步骤1"查询天气:今天的天气是晴天,温度在25-30度之间。"
    • 步骤2"建议:今天适合穿轻便的夏装,比如T恤和短裤。"

通过分步骤反应和行动,模型可以更有效地完成复杂任务。

5. Reflexion

Reflexion 是一种提示技术,模型在生成初步答案后,反思并可能修改其回答。

定义:Reflexion 是一种提示技术,模型在生成初步答案后,反思并可能修改其回答。这个过程可以提高答案的准确性和质量。

例子

  • 提示"解释为什么天空是蓝色的。"
  • 初步回答"因为大气中的氧气和氮气散射阳光中的蓝色光。"
  • 反思"这解释不够准确。实际上,蓝色光被散射得更多是因为瑞利散射效应。"
  • 修改回答"天空是蓝色的,因为阳光穿过大气层时,短波长的蓝色光比其他颜色的光被空气分子散射得更多,这种现象被称为瑞利散射。"

6. Prompt Chaining

Prompt Chaining 是将多个提示串联起来,以分步解决复杂问题或完成多步骤任务。

定义:Prompt Chaining 是将多个提示串联起来,以分步解决复杂问题或完成多步骤任务。

例子

  • 任务:写一篇关于气候变化的文章。
  • 提示链
    1. “首先,简要介绍什么是气候变化。”
    2. “接下来,描述气候变化的主要原因。”
    3. “然后,讨论气候变化的影响。”
    4. “最后,提出应对气候变化的建议。”

通过将任务分解为多个步骤,模型可以更系统和有条理地完成复杂任务。

这些技术和方法帮助用户更有效地与大型语言模型互动,获得更高质量的输出。 

4.结构化输出

结构化输出在 Prompt Engineering 中是指通过设计特定的提示,引导语言模型生成具有明确格式或结构的输出。这在需要处理数据表格、生成代码、创建报告等任务中尤为重要。通过结构化输出,可以确保生成的内容符合预期的格式,便于后续处理和使用。

4.1 结构化输出的常见形式

JSON 格式:适用于需要生成或处理数据对象的任务。

Markdown 格式:用于生成文档或报告,便于阅读和展示。

表格格式:适用于数据展示和分析。

代码格式:用于生成特定编程语言的代码片段。

4.2 设计结构化输出提示的技巧

明确格式要求:在提示中清晰地说明输出的格式。

提供示例:通过示例展示期望的输出格式。

使用占位符:在提示中使用占位符来指示需要填充的内容。

4.2.1 示例 1:生成 JSON 格式的数据

请生成一个包含以下信息的 JSON 对象:
- 名字
- 年龄
- 职业
- 兴趣爱好

示例格式:
{
  "name": "张三",
  "age": 30,
  "occupation": "软件工程师",
  "hobbies": ["阅读", "旅行", "编程"]
}

{
  "name": "李四",
  "age": 25,
  "occupation": "数据分析师",
  "hobbies": ["绘画", "跑步", "音乐"]

4.2.2 示例 2:生成 Markdown 格式的报告

请根据以下信息生成一份 Markdown 格式的报告:
- 标题:气候变化对农业的影响
- 引言:简要介绍气候变化的背景。
- 影响:详细描述气候变化对农业的具体影响。
- 结论:总结并提出应对措施。

示例格式:
# 标题

## 引言

内容

## 影响

内容

## 结论

内容

# 气候变化对农业的影响

## 引言

气候变化是指长期气候模式的变化,主要由人类活动引起的温室气体排放导致。这些变化对全球的生态系统和人类社会产生了深远的影响。

## 影响

气候变化对农业的影响主要体现在以下几个方面:
1. **作物生长周期**:温度升高和降水模式的变化影响作物的生长周期,可能导致减产。
2. **病虫害**:气候变化可能增加病虫害的发生频率和严重程度,对农业生产构成威胁。
3. **水资源**:气候变化导致的极端天气事件,如干旱和洪水,影响农业用水的可用性和质量。

## 结论

为了应对气候变化对农业的影响,需要采取以下措施:
1. 推广耐高温和抗旱作物品种。
2. 改进农业灌溉技术,提高用水效率。
3. 加强农业病虫害监测和防治工作。

4.2.3 示例 3:生成表格格式的数据

请生成一张包含以下信息的表格:
- 产品名称
- 价格
- 库存数量
- 供应商

示例格式:
| 产品名称 | 价格 | 库存数量 | 供应商 |
|----------|------|----------|--------|
| 产品A    | 100  | 50       | 供应商1|
| 产品B    | 200  | 30       | 供应商2|

 | 产品名称 | 价格 | 库存数量 | 供应商 |
|----------|------|----------|--------|
| 产品C    | 150  | 20       | 供应商3|
| 产品D    | 250  | 10       | 供应商4|

 5.Prompt 应用

1. 数据处理

  • 数据清理
    • 提示"请将以下数据转换为标准日期格式:'12/31/2023', '01-01-2024', '2024.02.28'。"
    • 输出"2023-12-31, 2024-01-01, 2024-02-28"
  • 数据转换
    • 提示"请将以下CSV数据转换为JSON格式:\nName, Age, City\nAlice, 30, New York\nBob, 25, Los Angeles"
    • 输出
    • [
        {"Name": "Alice", "Age": 30, "City": "New York"},
        {"Name": "Bob", "Age": 25, "City": "Los Angeles"}
      ]

2. 代码生成