概述
本教程重点介绍指令工程,这是提示工程的一个重要方面,它涉及为语言模型制定清晰有效的指令。我们将探索创建结构良好的提示以及平衡特异性与通用性以获得最佳结果的技术。主题
随着语言模型变得越来越先进,我们提供的指令质量变得越来越重要。精心设计的指令可以显著改善模型的输出,从而产生更准确、更相关、更有用的响应。本教程旨在让学习者掌握创建有效指令的技能,最大限度地发挥 AI 语言模型的潜力。主要内容
- 制定清晰的指令:编写明确且易于理解的提示的技巧。
- 有效的教学结构:探索格式化和组织教学的不同方法。
- 平衡特殊性和普遍性:在说明中找到正确的细节程度。
- 迭代细化:根据模型输出改进指令的技术。
实施方案
我们将使用 OpenAI API 和 LangChain 库来演示指令工程技术。本教程将涵盖:- 设置环境和必要的库。
- 创建基本指令并分析其有效性。
- 完善指令,使其更加清晰和具体。
- 尝试不同的指令结构。
- 平衡具体指令和一般指令,以实现多种输出。
- 根据模型响应迭代改进指令。
在整个教程中,我们将使用实际示例来阐明这些概念并提供制定有效指令的实践经验。
结论
在本教程结束时,学习者将获得教学工程方面的实用技能,包括如何制定清晰有效的指令、平衡特异性和通用性以及如何反复优化提示以获得最佳结果。这些技能对于使用 AI 语言模型的任何人来说都是必不可少的,并且可以显著提高各种应用程序中 AI 生成内容的质量和实用性。设置
首先,让我们导入必要的库并设置我们的环境。import os
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from dotenv import load_dotenv
load_dotenv()
# Set up OpenAI API key
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY')
# Initialize the language model
llm = ChatOpenAI(model="gpt-4o-mini")
def get_completion(prompt):
"""Helper function to get model completion."""
return llm.invoke(prompt).content
制定清晰的指示
首先,让我们来研究一下指令清晰度的重要性。我们将比较模糊和清晰的指令,看看模型输出的差异。vague_instruction = "简明扼要地告诉我有关气候变化的信息。"
clear_instruction = "简要总结气候变化的主要原因和影响,重点关注过去五年的科学共识。"
print("模糊指令输出:")
print(get_completion(vague_instruction))
print("\n清除指令输出:")
print(get_completion(clear_instruction))
模糊的指令输出:
气候变化是指全球气温和天气模式随时间发生显著而持久的变化。虽然气候变化是一种自然现象,但自 19 世纪末以来,人类活动(尤其是化石燃料的燃烧、森林砍伐和工业生产)加速了这一过程。这导致温室气体排放量增加,主要是二氧化碳和甲烷,将热量滞留在大气中。
气候变化的后果包括全球气温升高、冰盖融化、海平面上升、天气事件(如飓风和干旱)更加频繁和严重,以及生态系统和生物多样性受到破坏。应对气候变化需要全球合作减少温室气体排放、向可再生能源转型并促进可持续做法。
清除指令输出:
**气候变化的主要原因:**
1. **温室气体排放**:能源和运输过程中化石燃料(煤炭、石油和天然气)的燃烧是最大的贡献者,释放出二氧化碳(CO2)和甲烷(CH4)。
2. **砍伐森林**:树木吸收二氧化碳,大规模的砍伐森林会降低这种能力,同时释放储存的碳。
3. **农业实践**:畜牧业生产和某些农业方法会产生大量温室气体,特别是甲烷和一氧化二氮。
4. **工业过程**:制造和化学过程会释放各种温室气体和污染物。
**气候变化的影响:**
1. **气温上升**:全球气温上升,导致热浪更加频繁和严重。
2. **极端天气事件**:飓风、洪水、干旱和野火的强度和频率有所增加。
3. **海平面上升**:冰盖和冰川融化,加上水的热膨胀,导致海平面上升,威胁沿海社区。
4. **生态系统破坏**:栖息地的改变导致生物多样性的变化,威胁物种灭绝并破坏食物网。
5. **公共健康风险**:气温升高和污染加剧会加剧健康问题,而气候变化也会影响疾病的传播。
科学共识强调,需要采取紧急行动减轻这些原因并适应气候变化的影响,以确保可持续的未来。
有效的教学结构
现在,让我们探索指令的不同结构,看看它们如何影响模型的输出。bullet_structure = """
简明解释光合作用的过程:
- 定义光合作用
- 列出所涉及的主要成分
- 按顺序描述步骤
- 提及其对地球生命的重要性
"""
narrative_structure = """
想象一下,你是一位植物学家,正在向一位好奇的学生解释光合作用。
从一个简单的定义开始,然后逐步介绍该过程,
重点介绍所涉及的关键组成部分。最后强调为什么
光合作用对地球生命至关重要。简明扼要地写出来。
"""
print("项目符合结构输出:")
print(get_completion(bullet_structure))
print("\n叙述结构输出:")
print(get_completion(narrative_structure))
项目符号结构输出:
### 光合作用
**定义:**
光合作用是一种生化过程,绿色植物、藻类和一些细菌利用二氧化碳和水将光能(通常来自太阳)转化为葡萄糖形式的化学能。
**涉及的主要组件:**
1. **光能**(通常是阳光)
2. **叶绿素**(叶绿体中的色素)
3. **水(H₂O)**
4. **二氧化碳(CO₂)**
5.**葡萄糖(C₆H₁₂O₆)**
6.**氧气(O₂)**
**光合作用的步骤:**
1. **光吸收**:叶绿素吸收阳光,主要吸收蓝色和红色波长的光。
2. **水分解(光解):**吸收的光能将水分子分解为氧气、质子和电子。
3. **氧气释放**:氧气作为副产品释放到大气中。
4. **能量转换**:电子通过电子传输链移动,由 ADP 和 NADP⁺ 生成 ATP(三磷酸腺苷)和 NADPH(烟酰胺腺嘌呤二核苷酸磷酸)。
5. **卡尔文循环**:在基质中,ATP 和 NADPH 通过一系列反应将二氧化碳转化为葡萄糖。
**对地球生命的重要性:**
光合作用对地球上的生命至关重要,因为它能产生氧气,而氧气对于大多数生物的呼吸必不可少。此外,光合作用是食物链的基础,为植物、动物和人类提供能量和有机化合物。
叙述结构输出:
光合作用是绿色植物、藻类和某些细菌利用二氧化碳和水将光能转化为葡萄糖形式的化学能的过程。
以下是其具体操作步骤:
1. **光吸收**:植物有一种绿色色素,称为叶绿素,主要存在于叶绿体中,可以吸收阳光。这种光能对于驱动光合作用过程至关重要。
2. **吸收水分**:根从土壤中吸收水分(H₂O),并通过称为木质部的特殊容器将其运输到叶子。
3. **二氧化碳吸收**:植物通过叶子上称为气孔的小孔从大气中吸收二氧化碳 (CO₂)。
4. **光反应**:在叶绿体中,吸收的光能将水分子分解成氧气 (O₂)、质子和电子。该反应会释放氧气作为副产品,并被排放到大气中。
5. **卡尔文循环**:光反应中产生的电子和能量在卡尔文循环中被利用将二氧化碳和质子转化为葡萄糖(C₆H₁₂O₆),葡萄糖是一种简单的糖,可作为植物的能量来源。
总而言之,光合作用对地球上的生命至关重要,因为它能产生氧气,而氧气对大多数生物的生存至关重要,它通过将太阳能转化为其他生物可利用的能量形式,构成食物链的基础。没有光合作用,我们所知道的生命就不会存在。
平衡特异性和通用性
让我们尝试不同特异性程度的指令,以了解这会如何影响模型的响应。specific_instruction = """
描述 1985 年电影《回到未来》的情节,重点关注:
1. 主角的名字和他与布朗博士的友谊
2. 时间机器及其工作原理
3. 主角旅行到的具体年份及其重要性
4. 涉及他父母的过去的主要冲突
5. 主角如何解决问题并回到他的时代
请将您的回答限制在 150 个字内。
"""
general_instruction = """
描述一部 20 世纪 80 年代流行的时间旅行电影的情节。包括:
1. 主要角色及其关系
2. 时间旅行的方法
3. 访问的时间段及其意义
4. 面临的主要冲突或挑战
5. 故事如何解决
将您的回答保持在 150 字左右。
"""
print("具体指令输出:")
print(get_completion(specific_instruction))
print("\n通用指令输出:")
print(get_completion(general_instruction))
具体指令输出:
在 1985 年的电影《回到未来》中,主角马蒂·麦克弗莱是一名青少年,他与古怪的科学家埃米特·布朗博士建立了亲密的友谊。布朗博士发明了一台使用 DeLorean 汽车的时光机,该汽车在时速达到 88 英里时启动,由通量电容器和钚提供动力。马蒂意外回到了 1955 年,这是他父母初次见面的重要一年。主要冲突发生在马蒂打断他们初次见面,威胁到他自己的存在时。为了解决这个问题,马蒂必须确保父母坠入爱河,同时避免与年轻时的自己互动。在布朗博士的指导下,他在海底魔法舞会上策划了一系列活动,最终恢复了父母的爱情。成功后,马蒂回到了 1985 年,他发现他的生活因过去所做的改变而得到了改善。
一般指令输出:
20 世纪 80 年代最受欢迎的时间旅行电影之一是《回到未来》。主角马蒂·麦克弗莱是一名青少年,他和古怪的科学家布朗博士是朋友。他们的关系建立在相互尊重和友谊的基础上。时间旅行的方法是一辆由布朗博士改装的 DeLorean 汽车,当时速达到 88 英里时,它就可以穿越时空。马蒂回到 1955 年,这一时期对文化产生了重大影响,也是他父母成长的时期。
主要冲突发生在马蒂意外干扰父母的第一次见面,危及他自己的存在时。他必须应对过去的挑战,确保父母相爱。当马蒂成功安排他们在学校舞会上的会面,恢复时间线时,故事就结束了。他回到 1985 年,发现自己的生活有所改善,而博士从未来而来,为进一步的冒险奠定了基础。
迭代细化
现在,让我们演示如何根据模型的输出迭代地细化指令。initial_instruction = "解释如何制作花生酱和果冻三明治。"
print("初始指令输出:")
initial_output = get_completion(initial_instruction)
print(initial_output)
refined_instruction = """
解释如何制作花生酱和果冻三明治,并进行以下改进:
1. 指定要使用的面包、花生酱和果冻的类型
2. 包括开始前洗手的步骤
3. 提及如何处理潜在的过敏
4. 添加如果不立即食用三明治的储存提示
以编号列表格式呈现说明。
"""
print("\n精准指令输出:")
refined_output = get_completion(refined_instruction)
print(refined_output)
初始指令输出:
制作花生酱和果冻三明治既快捷又简单!以下是分步指南:
### 原料:
- 2 片面包(白面包、全麦面包或您选择)
- 花生酱(奶油味或松脆味)
- 果冻或果酱(您选择的口味,例如葡萄、草莓或覆盆子)
### 工具:
- 黄油刀或涂抹刀
- 勺子(可选,用于果冻)
- 盘子
### 指示:
1. **收集原料和工具**:确保所需的一切都触手可及。
2. **涂抹花生酱**:
- 将一片面包放在盘子上。
- 用黄油刀舀出大量的花生酱。
- 将花生酱均匀地涂在面包的一侧,从一边到另一边覆盖。
3. **涂抹果冻**:
- 拿起第二片面包并将其放在第一片旁边。
- 如果使用勺子,舀出一些果冻并将其放在第二片上。如果使用刀,您可以使用干净的一面或另一把刀。
- 将果冻均匀地涂抹在第二片面包的一侧,确保其完全覆盖面包。
4. **合并切片**:
- 小心地将涂有果冻的切片放在涂有花生酱的切片上面,果冻面朝下,做成三明治。
5. **切三明治(可选)**:
- 如果需要,您可以将三明治切成两半或四分之一,以便于食用。使用黄油刀切开三明治。
6. **上菜享用**:您的花生酱果酱三明治已经可以享用了!您可以搭配一杯牛奶、一些水果或您最喜欢的零食一起食用。
### 尖端:
- 为了增加风味,可以添加香蕉片或蜂蜜。
- 如果您是为孩子制作,您可能需要使用饼干切割器来制作有趣的形状。
享用美味的花生酱和果酱三明治!
精确指令输出:
以下是制作美味花生酱和果酱三明治的分步指南,其中包含您要求的改进:
### 如何制作花生酱果冻三明治
1. **洗手**:开始之前,请用肥皂和水彻底洗手至少 20 秒,以确保清洁。
2. **准备食材**:
- **面包**:根据您的喜好选择全麦面包或白面包。
- **花生酱**:使用奶油味或松脆的天然花生酱,带来健康的口感。
- **果冻**:选择葡萄或草莓果冻来体验经典口味。
3. **准备您的工作空间**:清理厨房台面的干净表面并收集以下工具:
- 黄油刀或涂抹工具
- 一个干净的盘子
- 一把勺子(如果需要吃果冻的话)
4. **涂花生酱**:取一片面包,用黄油刀在面包的一面均匀地涂上一层花生酱。涂的时候要多涂,但不要太多——大约 2 汤匙就足够了。
5. **涂抹果冻**:在第二片面包上,用黄油刀或勺子的干净一面将果冻均匀地涂抹在面包表面。同样,大约 2 汤匙就足够了。
6. **组合切片**:小心地将花生酱切片放在果冻切片上,花生酱面朝向果冻面,制作三明治。
7. **切三明治(可选)**:如果您愿意,可以将三明治沿对角线或垂直方向切成两半,以便于操作。
8. **解决过敏问题**:注意潜在的过敏。如果您或您服务的对象对花生过敏,请考虑使用葵花籽酱或杏仁酱等替代品,并确保果冻不含任何过敏原。
9. **储存提示**:如果您不立即食用三明治,请用保鲜膜包裹或将其放入密封容器中以保持新鲜。如果您想延长其保质期,请将其存放在冰箱中,尤其是使用易腐烂的食材时。
10. **享用**:您的花生酱和果冻三明治已经准备好享用了!搭配一杯牛奶或一片水果,就是一顿完整的大餐了。
按照以下步骤,您可以制作出美味又安全的花生酱果酱三明治!
实际应用
让我们运用所学知识来为更复杂的任务创建结构良好、均衡的指令。final_instruction = """
任务:创建一个简短的课程计划,向高中生教授基本的个人理财知识。
说明:
1. 首先简明扼要地介绍个人理财的重要性。
2 . 列出 3-5 个要涵盖的关键主题(例如预算、储蓄、了解信贷)。
3 . 对于每个主题:
a) 提供适合青少年的简短说明。
b ) 建议一项实践活动或练习来强化概念。
4. 最后总结并建议进一步的学习资源。
将您的回答格式化为结构化大纲。力求清晰和引人入胜,
平衡具体示例和可适用于各种
财务状况的一般原则。将整个课程计划保持在大约 300 个字以内。
"""
print("最终指令输出:")
print(get_completion(final_instruction))
最终指令输出:
### 课程计划:高中生个人理财入门
#### 一、简介
个人理财对于做出明智的财务决策至关重要。了解如何预算、储蓄和管理信贷可以帮助学生实现他们的财务目标、避免债务并建立一个安全的未来。本课程将介绍每个青少年都应该知道的关键概念,以建立坚实的财务基础。
#### II. 要涵盖的关键主题
1. **预算**
- **解释**:预算包括跟踪收入和支出,以确保你量入为出。它帮助你分配必要的开支和储蓄资金。
- **活动**:使用模板创建简单的每月预算。学生将列出假设收入(例如零用钱、兼职工作)和支出(例如娱乐、食物),以了解如何规划支出。
2. **保存**
- **解释**:储蓄是将收入的一部分留作将来的需要或紧急情况。它可以教会你纪律,并让你为意外开支做好准备。
- **活动**:设定储蓄目标。学生将选择一个短期目标(例如,一部新手机),并计算他们每周需要存多少钱才能在三个月内实现该目标。
3. **了解信用**
- **解释**:信用是指借钱并承诺以后偿还的能力。了解信用评分至关重要,因为它们会影响贷款审批和利率。
- **活动**:讨论常见的信用场景(例如使用信用卡),并让学生角色扮演负责任与不负责任的信用管理。
4. **投资基础**
- **解释**:投资是指将资金投入资产(如股票),期望随着时间的推移产生利润。这对于积累财富很重要。
- **活动**:模拟股票市场游戏,学生选择股票进行“投资”并跟踪其一周内的表现。
#### 三、结论
了解个人理财是做出明智财务决策的关键。通过预算、储蓄和学习信用知识,学生可以建立一个安全的财务未来。如需进一步学习,请考虑托马斯·J·斯坦利 (Thomas J. Stanley) 的《隔壁的百万富翁》等资源或可汗学院个人理财部分等在线平台。